Засыпкин С.В.

Лаборатория электроники и программирования

Электронный журнал с приложениями

№ 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 светодиодов):