На главную страницу

 

Содержание

 

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].

Фото макета: