Засыпкин С.В.
Лаборатория электроники и
программирования
Электронный журнал с приложениями
№ 22
© Засыпкин С.В., 2011-2015
Содержание
1. Автоматизация поиска информации в сети интернет. Занятие 2.
Поиск по тематическим форумам представляет собой более эффективный способ, чем через поисковые сайты. Рассмотрим следующую задачу - поиск адреса темы на форуме.
За основу возьмем приложение, созданное на прошлом занятии.
Внесем следующие изменения:
«textBox_ComponentName» - для наименования компонента - сделаем невидимым, т.к оно нам в данной задаче не нужно.
Заменим имя «textBox_Price» - для вывода найденной цены на поле «textBox_URL_Topic» для вывода найденного адреса.
И кнопку «Найти цену» заменим на «Найти адрес темы».
«
»
[1]
Поля на интернет странице, в которые должна вводиться и откуда должна браться информация, определялись по html тексту интернет-страницы экспериментально путем просмотра кода в обычном браузере. В тексте программы осуществляется поиск только нужных заранее определенных элементов.
В данном случае нужные нам адреса находятся в таблице. Алгоритм поиска следующий:
- выделяем нужную нам таблицу по ее номеру в коллекции таблиц
- выделяем нужную нам строку таблицы по ее номеру в коллекции строк таблицы
- выделяем нужный нам адрес по его номеру в коллекции адресов в строке таблицы
…
Результат работы программы:
«»
[1]
Отладочная информация, полученная с помощью оператора «TRACE»:
Ожидание 1
Ожидание 1
…
Ожидание 1
Ожидание 1
Таблица - 6
Число строк - 39
Строка - 6
URL - http://radiokot.ru/forum/viewtopic.php?f=53&t=109287
Продолжение следует.
2. Программирование на языке С на примере микроконтроллера ATmega168. Определение периода и длительности импульсов
с помощью схемы захвата таймера.
Схема захвата таймера 1 [3] позволяет запоминать значение счетчика таймера в специальном регистре при возникновении фронта или спада импульса на входе микроконтроллера «ICP1». Данная аппаратная возможность позволяет достаточно простым способом измерять временные параметры импульсов, такие как период и длительность.
Рассмотрим пример определения периода. На таймере 0 сделаем генератор ШИМ сигнала, параметры которого будем измерять с помощью схемы захвата таймера 1. Для макетирования используется плата«150» или аналогичная. Необходимо соединить внешним проводом выход генератора (порт PD6) с входом схемы захвата (порт PB0).
Для определения периода нам не важно, по какому фронту будет происходить захват, поэтому оставим значение бита «ICES1» = 0 (по спаду), установленное при сбросе микроконтроллера.
При первом срабатывании захвата будем обнулять счетчик таймера 1. Тогда при втором захвате в нем будет получаться значение, пропорциональное периоду импульсов. Его необходимо будет домножить на коэффициент, учитывающий период счетных импульсов, поступающих на вход таймера 1. Для организации такого алгоритма создадим переменную «Period_flag».
Переменная «Measure_Good» служит для сигнализации готовности нового результата измерения, который можно вывести на экран ПК.
Программа написана для среды разработки ATMEL Studio® [1].
…
Результат работы программы:
Измеряем период импульсов:
Период - 1024 мкс
…
3. Программирование на языке С на примере микроконтроллера ATmega168. Определение длительности импульсов с автоматическим выбором диапазона измерений.
Рассмотрим пример автоматического выбора диапазона измерения. Чем меньше делитель, тем точнее получается результат. Поэтому начнем измерения с установки минимального делителя = 1 для тактирования таймера 1.
Если длительность измеряемого импульса будет больше, чем может насчитать таймер за это время, то произойдет переполнение таймера. Это событие переполнения можно использовать для увеличения используемого делителя и повторения измерения.
Зададим возможные значения делителя в программе. Начинаем измерение с наименьшего и увеличиваем его постепенно, если происходит переполнение.
В примере длительность импульса ШИМ увеличена по сравнению с предыдущей программой до значения, когда счетчик таймера 1 без делителя уже не может насчитать такое время и переполняется. С делителем на 8 измерения уже возможны.
Поскольку точность измерений повышается, то для длительности выберем тип данных «float».
Прерывания переполнения разрешаются только после первого шага измерения – обнуления счетчика таймера. Это сделано для того, чтобы не было переполнений, когда импульса долго нет (например, большая скважность импульсов ШИМ).
Программа написана для среды разработки ATMEL Studio® [1].
…
Результат работы программы:
Измерение длительности импульса
с автоматическим выбором диапазона
Новый делитель - 8
Длительность - 7040.000000 mks
4. Макетная плата
периферии «145». Часть 2.
Первый вариант платы «145» рассматривался в журнале №8 статья 3 и обладал следующими
возможностями:
- LCD 16*2
- Кнопки (4 шт.)
- «Клеммник» для подключения
DS1990, DS1820
- ИК приемник и ИК передающий диод
- TRIAC, оптосимистор, «снаббер» цепь, датчик «нуля» сети, предохранитель, варистор
- Двухцветный светодиод (1 шт.)
- Подстроечные резисторы (2шт.)
- Джамперы для
подключения/отключения необходимых компонентов
- «Клеммники» для внешних
подключений
В данной статье рассматривается
новый вариант платы – «145B».
По сравнению с предыдущим
вариантом, на плату добавлены возможности подключения популярных модулей:
- LCD индикатора от телефона «Nokia5110»
- радио приемопередатчика «NRF24L01»
- радио приемопередатчика BlueTooth® «HC-06»
- модуля радио приемопередатчика WiFi® «ESP8266»
- модуля УЗ датчика «HC-SR04»
Также добавлено:
- сделаны выходы на 6 серво (вместо 2-х в
предыдущей)
- возможность установки пищалки
- SD карта
- сделана возможность отключения функциональных устройств на
плате с помощью джамперов
…
5. Макетная плата
периферии «164». Часть 2.
Первый вариант платы «164» рассматривался в журнале №11 статья 6 и обладал следующими
возможностями:
- два 4-х разрядных 7-сегментных индикатора
- возможность установки светодиодной матрицы 8*8
- 4 кнопки
- RGB светодиод
- УНЧ MC34119
- часы DS1307
с кварцем, возможность установки
панельки для резервной батареи
- входы для АЦП с клеммниками и подстроечными резисторами
В данной статье рассматривается
новый вариант платы – «164A».
По сравнению с предыдущим вариантом, на плату добавлены следующие возможности:
- Графический индикатор OLED с интерфейсом I2C® на
контроллере «SSD1306»
- Акселерометр MMA7660
…
6. Программирование на языке С на примере микроконтроллера ATmega168. Генерация случайных чисел.
В некоторых задачах необходимо сформировать случайные числа в заданном диапазоне. В языке С для этого есть специальные функции «srand» и «rand» [2].
Функция «srand» устанавливает исходное число для последовательности, генерируемой функцией «rand».
Функция «rand» возвращает псевдослучайные числа [2].
Рассмотрим пример программы, которая формирует случайные числа в диапазоне от 30 до 150. Для задания первого числа используем измерение АЦП для неподключенного к другим цепям вывода. Поскольку из-за различных наводок на «висящий вывод», погрешностей преобразования и т.п. результат аналого-цифрового преобразования будет различным, то его можно использовать в качестве случайного числа для функции «srand».
Программа написана для среды разработки ATMEL Studio® [1]. Текст программы приведен ниже.
…
Результаты работы нескольких запусков программы:
Генератор случайных чисел в
диапазоне (30,150)
rand() = 5654; Cлучайное
число - 94
rand() = 23332; Cлучайное
число - 32
rand() = 18650; Cлучайное
число - 126
rand() = 12318; Cлучайное
число - 35
rand() = 12737; Cлучайное
число - 44
rand() = 21435; Cлучайное
число – 145
…
Генератор случайных чисел в
диапазоне (30,150)
rand() = 3170; Cлучайное
число - 99
rand() = 3715; Cлучайное
число - 143
rand() = 25572; Cлучайное
число - 134
rand() = 16817; Cлучайное
число - 142
rand() = 1589; Cлучайное
число - 120
rand() = 11268; Cлучайное
число - 130
rand() = 18377; Cлучайное
число – 147
…
7. Автоматизация поиска информации в сети интернет. Занятие 3.
Получим текст сообщения форума, адрес которого был получен на предыдущем занятии.
Немного изменим надписи и поля на форме предыдущего занятия:
«textBox_URL_Topic» переименуем в «textBox_URL_Topic_Text», сделаем его многострочным (установим свойство «Multiline» = True) и увеличим размеры:
«»
[1]
Для методов поиска сделаем отдельный класс «I_Search». Код поиска URL, который использовался в предыдущем занятии оформим в виде метода «Search_URL_in_Table», а поиск текста в виде нового метода «Search_Text_in_Table». Код класса «I_Search»:
…
Результат работы программы (в вашем случае он наверняка будет другой, т.к. могут появиться новые темы форума):
«»
[1]
Отладочная информация, полученная с помощью оператора «TRACE»:
Ожидание 1
Ожидание 1
…
Ожидание 1
Ожидание 1
Таблица - 6
Число строк - 39
Строка - 6
URL - http://radiokot.ru/forum/viewtopic.php?f=53&t=109287
Таблица - 0
Число строк - c9
Строка - 10
TD - Требуется разработка схемы регулятора мощности с
отсечкой по заднему фронту(Trailing Edge)
Именно как последняя осциллограмма.
Мощность до 200 Вт,частота
50 Гц.
Оплата на webmoney либо ваш телефон.Готовность и цену
предлагайте здесь, либо в личку.
Спасибо.
8. Автоматизация поиска информации в сети интернет. Занятие 4.
Рассмотрим пример анализа полученного на прошлом занятии сообщения на наличие в нем ключевых слов и фраз. Создадим файл «keywords.txt», в котором построчно напишем ключевые слова и фразы. Например:
требуется
робот
STM32
Arduino
CAN
LIN
Пример программы анализа будет выглядеть следующим образом:
…
Результат работы программы:
Ключевое слово (фраза) 'требуется ' - найдена
Ключевое слово (фраза) 'lin'
- найдена
9. Программирование на языке С++ на примере микроконтроллера ATmega168. Работа с 7-сегментными светодиодными
индикаторами.
7-сегментные
индикаторы широко применяются в устройствах на микроконтроллерах. В данной
статье показаны примеры программ вывода информации на такие индикаторы с
использованием интерфейса SPI® и прерываний
аппаратного таймера микроконтроллера, что делает программы эффективно работающими.
Примеры
программ (скетчей) приведены для «Arduino IDE» [2].
Для компиляции скетчей необходимо подключить следующие
библиотеки:
«MsTimer2.h».
Макет собран на платах «150A» и «164A», описания
которых вы можете найти в этом и более ранних номерах журнала..
Программа статической индикации:
#include
<MsTimer2.h>
#include
<SPI.h> // подключаем библиотеку SPI
int LAT = 2; //
сигнал защелкивания в регистры
//
ЗНАКОГЕНЕРАТОР
unsigned char CODE_TABLE[10] = {
//hgfedcba
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, //
4
0b01101101, // 5
0b11111101, // 6
0b00000111, // 7
0b01111111, // 8
0b11101111 // 9
};
//
the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
SPI.begin(); // инициализируем SPI
pinMode(LAT, OUTPUT);
}
//
the loop routine runs over and over again forever:
void loop() {
char i;
digitalWrite(LAT, LOW); // лог. 0 - начало
выборки ведомого
//SPI.transfer(~CODE_TABLE[1]); // отображаем "1"
SPI.transfer(~CODE_TABLE[2]); // отображаем "2"
//SPI.transfer(0b11111110); // в первом разряде
SPI.transfer(0b11111101); // во втором разряде
digitalWrite(LAT, HIGH); // лог. 1 - конец
выборки ведомого
while(1) {}
}
Результат работы программы:
Программа динамической индикации:
…
Результат работы программы:
Программа счетчика:
…
Результат работы программы:
Программа сдвига дисплея:
…
10. Программирование на языке С на примере микроконтроллера ATmega168. Работа с указателями на примере линейки
светодиодов.
Указатели широко используются в языке С, но являются достаточно сложными для понимания.
Рассмотрим пример реализации линейки светодиодов, в которой количество одновременно горящих светодиодов пропорционально некоторой величине. Напишем программу, удобную для модификации (изменение числа светодиодов, портов для их подключения. Для этого создадим массивы указателей. Особенность работы в данном случае будет в том, что будут использоваться как просто указатели, так и указатели на указатели. Что соответственно потребует «*» и «* *» при объявлении и работе с данными по этим указателям.
В тестовом примере подключим светодиоды к портам PD2…PD7,PB0,PB1. В процессе работы программы длина линейки увеличивается и уменьшается циклически.
Программа написана для среды разработки ATMEL Studio® [1]. Текст программы приведен ниже.
…
Фото макета светодиодной линейки (горят 7 светодиодов):