Содержание
1. Программирование на языке С на примере микроконтроллера ATmega168. Работа с кнопками. Опрос состояния, обработка
дребезга.
Работа с
кнопками основана на считывании логического сигнала с вывода микроконтроллера.
Для работы с выводом микроконтроллера как входом, необходимо настроить
соответствующий порт на вход и подключить
внутренний подтягивающий резистор (который есть у каждого вывода
портов). Без подключения подтягивающего резистора вывод микроконтроллера будет
«ловить» электрические сигналы и его состояние будет неопределенным, что
затруднит обработку сигнала при срабатывании кнопки.
Напишем
простую программу, которая в основном цикле будет считывать значение сигнала на
входе и в соответствии с этим зажигать светодиод. Т.е. если кнопка нажата,
светодиод будет гореть, если не нажата – то нет. Опрос кнопки называется поллингом (polling). Для ввода используется соответствующий
регистр «PIN».
Будем
использовать платы «150» и «145» . На плате
«145» имеется 4 пользовательских кнопки. С помощью джампера
X4 можно подключить общий всех
кнопок к земле (положение джампера 2-3). Остальные
выводы кнопок подключены к портам PD4 … PD7. Уровень сигнала на входе микроконтроллера при не
нажатой кнопке – «1». При нажатии на кнопку на входе будет появляться
логический «0».
Программа написана для среды разработки ATMEL Studio® [1]. Текст программы приведен ниже.
…
2. Программирование на языке С на примере микроконтроллера ATmega168. Работа с пьезокерамическими излучателями.
Пьезокерамические излучатели широко используются в электронных устройствах. К
основным характеристикам таких устройств можно отнести следующие:
- небольшой потребляемый ток (порядка
нескольких мА)
- достаточно широкий диапазон рабочих
напряжений (от 1 до нескольких десятков В)
- довольно узкий частотный диапазон
(несколько кГц)
- излучатели могут изготавливаться со
встроенным генератором (тогда
генерируется только определенная частота) или без него
Исходя из основных характеристик,
основными применениями являются:
- звуковое подтверждение действия
(например, нажатия на кнопку)
- сигнал тревоги для сигнализаций (на
таких излучателях хорошо формируется «противный на слух» сигнал)
- воспроизведение звуков в недорогой
аппаратуре (параметры излучателей не дают возможность качественного
воспроизведения звука)
Небольшой
ток и широкий диапазон напряжений позволяет легко подключать данные излучатели
к микроконтроллеру. Часто не требуется никаких дополнительных согласующих
цепей. Если преобразователь со встроенным генератором, то достаточно просто
подать питание на такой генератор. Если встроенного генератора нет, то сигнал
нужно сформировать с помощью микроконтроллера.
Рассмотрим
пример программы для генерации сигнала фиксированной частоты и задаваемой
длительности звучания сигнала, который вполне подходит для решения задач
звукового подтверждения и сигнализации.
Будем
использовать платы «150A» и «145B» . На плате «145B» имеется пьезокерамическая «пищалка»,
которая подключена к выводу микроконтроллера PD3.
Для получения
частоты генерации будем использовать таймер 0, настроенный на частоту
срабатывания 1 кГц. Каждое прерывание будем переключать уровень логического
сигнала на «пищалке», таким образом, частота сформированного сигнала будет в 2
раза меньше – 500 Гц.
Для получения
нужной длительности звучания сигнала сделаем программный таймер. Для запуска
генерации сигнала необходимо записать нужное время (в мс)
в счетчик программного таймера. Начнется генерация сигнала. После обнуления
счетчика времени генерации она прекратится.
В качестве теста сформируем несколько сигналов с разной
длительностью.
Программа написана для среды разработки ATMEL Studio® [1]. Текст программы приведен ниже.
…
3.
Таймер для фрилансера «175».
«Таймер для фрилансера» поможет всем, кто работает «на себя» и заинтересован в эффективном использовании своего времени.
Одной из задач, стоящих перед фрилансером является оценка трудоемкости и соответственно стоимости предлагаемой работы.
Оценивать время предлагается по двум временным порогам.
…
Для макета будем использовать платы «150A» и «145B» .
Фото макета:
Программа написана для среды разработки ATMEL Studio® [1]. Текст программы приведен ниже.
…
4. Программирование на языке С на примере микроконтроллера ATmega168. Работа с
компаратором.
В микроконтроллере есть аналоговый компаратор. Это устройство, на входы «+» и «-» которого подаются аналоговые напряжения и в зависимости от их соотношения на выходе компаратора устанавливается логические «0» или «1».
Вход «+» компаратора можно подключить к ножке «AIN0» микроконтроллера или внутреннему источнику опорного напряжения. Вход «-» компаратора можно подключить к ножке «AIN1» микроконтроллера или к выходу мультиплексора АЦП. Выход компаратора доступен только внутри микроконтроллера через бит в регистре управления компаратором. Также выход компаратора может быть подключен ко входу схемы захвата таймера 1. Есть возможность разрешить прерывания при изменении сигнала на выходе компаратора и настроить событие, при котором будет происходить прерывание.
Для
демонстрации работы примеров программ будем
использовать плату «150A» и переменный резистор. Фото макета:
Программы написаны для среды разработки ATMEL Studio® [1].
Первый пример показывает, как получать и использовать значение сигнала на выходе компаратора. Подключим вход «+» компаратора к внутреннему источнику опорного напряжения, а переменный резистор подключим к входу «PD7/AIN1» (средний вывод). Два других вывода резистора подключим к общему и питанию. Т.о. при изменении угла поворота резистора напряжение на входе «AIN1» будет изменяться от 0 до напряжения питания. В зависимости от напряжения на выходе компаратора будем включать или выключать светодиод.
…
Во втором примере реализуем сигнализацию при превышении порога напряжения, заданного внутренним источником напряжения, на входе «AIN1». При это будем зажигать светодиод и посылать сообщение по UART на ПК. Изменения в настройках компаратора выделены серым цветом.
…
При повороте потенциометра можно заметить, что сообщение на ПК появляется не один раз:
Напряжение превышено!
Напряжение превышено!
Это связано в тем, что при вращении потенциометра вблизи «точки совпадения напряжений» на входах компаратора из-за шумов возникает явление «дребезга». Устранить его можно разными способами. Самый простой – введение дополнительной задержки после возникновения прерывания компаратора.
…
И еще один пример, который показывает переключение светодиода при
изменении сигнала компаратора.
…
5. Программирование на языке С на примере микроконтроллера STM32F103RET6. Работа с USB. Виртуальный COM порт.
Рассмотрим создание проекта с помощью программы «STM32CubeMX» [12] для платы «152» или любой другой с аналогичным микроконтроллером. Перед началом работы необходимо установить программу «STM32CubeMX» и в ней через меню «Help» -> «Install New libraries» установить библиотеки для используемого микроконтроллера.
Также необходимо установить драйвер виртуального COM порта.
…
Первый пример выводит заданное сообщение, которое можно посмотреть в терминальной программе.
«» [14].
…
Второй пример осуществляет передачу принятой информации (эхо). Если в терминальной программе передать какой-либо текст, то он будет передан обратно в терминальную программу:
«
» [14].
6. Программирование на языке С на примере микроконтроллера ATmega168. Работа со
светодиодными лентами на WS2811.
Светодиодные ленты с индивидуальным программированием цвета каждого светодиода находят широкое применение в рекламе, различных ШОУ, световом оформлении квартир и т.п.
В статье рассматривается пример работы с такой лентой.
Программа написана для среды разработки ATMEL Studio® [1] и тактовой частоты микроконтроллера 8 МГц. В макете используется плата «150» или аналогичная на микроконтроллере ATmega168.
…
Фото работы макета:
7. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Клавиатура,
подключаемая по АЦП.
Рассмотрим работу с клавиатурой, которая подключена к АЦП. Такая клавиатура позволяет использовать мало выводов микроконтроллера.
Клавиатура состоит из 8 кнопок (K1 – K8), резистивного делителя (R1 – R8) и подтягивающего резистора (R9).
Фото макета:
При работе программы переключается светодиод на плате и выводится номер нажатой кнопки по UART:
Key = 1
Key = 2
Key = 3
Key = 4
Key = 5
Key = 6
Key = 7
Key = 8
8. Программирование на языке С на примере микроконтроллера ATmega168. Измерение частоты импульсов.
Для примера измерения частоты импульсов возьмем классический алгоритм – подсчет количества импульсов за 1 секунду. Для измерения частоты будем использовать счетный вход таймера 1 (T1). В результате получим в счетчике таймера значение частоты (дополнительные преобразования не потребуются). Счет будем производить по нарастающему фронту входных импульсов (соответствующим образом настроив биты «CS1x»). В качестве источника тактовых импульсов будем использовать ШИМ генератор на таймере 0. Для демонстрации работы примеров программ можно использовать плату «150A» или аналогичную. Необходимо соединить выход генератора («PD6/OC0A») со входом измерителя («PD5/T1»).
Программы написаны для среды разработки ATMEL Studio® [1].
…
Результат работы программы 1:
Измерение частоты импульсов
Частота - 62500.000000 Гц
Частота - 62500.000000 Гц
…
Минус данной программы в том, что она не сможет мерять частоты выше 65535 Гц, т.к. будет происходить переполнение 16-битного счетчика таймера. Для того, чтобы учесть переполнения, можно использовать дополнительный счетчик переполнений и прерывания при переполнении. Второй пример показывает, как это сделать. Добавим дополнительные переменные для организации программного счетчика, перенастроим генератор на более высокую частоту, сделаем разрешение и обработку прерываний переполнения таймера.
…
Результат работы программы 2:
Измерение частоты импульсов
Частота - 800026.000000 Гц
Частота - 800026.000000 Гц
…
Погрешность в основном возникает за счет работы прерываний, которые влияют на выполнение функции задержки. При использовании задержки на основе таймера можно получить лучшие результаты.
…
Результат работы программы 3:
Измерение частоты импульсов
Частота - 800004.000000 Гц
Частота - 800001.000000 Гц
Частота - 800000.000000 Гц
9. Программирование на языке С на примере микроконтроллера ATmega168. Определение длительности импульсов с широким
диапазоном значений.
В выпуске журнала №22 (статья 3) был рассмотрен пример автоматического выбора диапазона измерения. Однако количество разных делителей в микроконтроллере невелико и за счет переключения делителей процесс определения длительности увеличивается. Другим вариантом определения длительности в широком диапазоне является создание дополнительного программного счетчика времени(«TCNT1_Hi») и использование прерываний переполнения таймера для его счета.
Программа написана для среды разработки ATMEL Studio® [1].
…
Результат работы программы:
Измерение длительности импульса
в широком диапазоне
Длительность - 8576.000000 мкс
Длительность - 8576.000000 мкс
…
10. Программирование на языке С на примере микроконтроллера ATmega16. Работа с датчиками газов.
В настоящее время выпускается много различных датчиков газов. Отметим основные особенности их использования.
1. Для аналоговых датчиков обычно требуется достаточно точное напряжение питания (обычно +- 2%).
2. В датчике находится нагреватель, который потребляет ток порядка 150 мА.
3. Для получения стабильных показаний датчики необходимо «прогреть» (оставить постоянно включенными) на 24 часа (значение может быть и другим, уточняйте в документации на датчик).
4. Основным измеряемым значением является сопротивление датчика, которое пересчитывается в концентрацию газа. Разные датчики могут иметь разный диапазон измерения концентрации.
5. Датчики в основном реагируют на несколько газов. Поэтому, если необходимо детектировать какой-то один газ, то следует поискать датчик с минимальным влиянием на показания другими возможными газами.
6. Датчик часто требует подстройки чувствительности для обеспечения оптимального согласования с АЦП.
Рассмотрим пример работы с датчиком «MQ-3» [9].
…
Фото макета: