Записи с меткой ‘МК’

Подключение LCD-дисплея к Arduino и вывод информации

При разработке устройств на микроконтроллерах часто приходиться сталкиваться с выводом информации. И не всегда получается ограничиться возможностями семи сегментных индикаторов или матриц. LCD-дисплеи на базе контроллера HD44780 — одни из самых простых и доступных на рынке. Их применяют как в простых, собранных самостоятельно, так и в промышленных устройствах (кофе машины, компостеры, и тд). В данной статье расскажу как подключить LCD-дисплей к Arduino и вывести на него информацию.

Распиновка выводов дисплея:

VSS — Питание контроллера (-)
VDD — Питание контроллера (+)
VO — Управления контрастом
RS — Выбор регистра
R/W — Чтение/запись
E — Еnable (строб)
DB0-DB3 — Младшая тетрада 8-битного интерфейса
DB4-DB7 — Старшая тетрада 8-битного интерфейса
A — Анод (+) подсветки дисплея
K — Катод (-) подсветки дисплея

4sNAzwsaLkg (1)

При стандартном подключении LCD-дисплея к Arduino приходиться использовать — 7 портов для 4-битного или же — 11 портов для 8-битного режима . Чтобы уменьшить количество использованных портов ввода/вывода Arduino при подключении к LCD, будем применять расширитель портов. При подключении LCD через I2C расширитель количество используемых портов сокращается до — 2 (линии — SCL, SDA) и две линии питания GND, VCC. Данные модули не дорогие, не требуют большого числа выводов и весьма доступны.

Gw8F3REHJEI.

Читать далее »

Реализация ШИМ на базе ARDUINO

В предыдущих статьях было рассмотрено устройство портов ввода/вывода Arduino и описаны основные функции для работы с цифровыми и аналоговыми входами/выходами. Сейчас поговорим о широтно импульсной модуляции (ШИМ) и ее реализации.

Широтно Импульсная Модуляция — это своего рода способ задания аналогового сигнала, только с помощью цифрового кода (чем-то похоже на ЦАП) при этом изменяется скважность импульсов, а частота остается постоянной.

Чтобы немного упростить понимание происходящего, приведу небольшой пример:

pwm_ru

 

Давайте представим, что у нас есть небольшой двигатель, который стоит в сверлильном станочке. Его можно либо включить (подать высокий потенциал 5 вольт) либо выключить (при этом потенциал будет равен 0 вольт), в и тоге есть два состояния. Включим его на пару минут (он будет работать в номинальном режиме), после отключения питания он конечно же остановится.

Но если же включать двигатель каждые 10-20 секунд, тогда он будет работать медленней чем при постоянно подключенном напряжении. Так вот регулируя частоту включения/выключения — будем регулировать обороты двигателя. Таким образом изменяя скважность (отношение длительности периода к длительности импульса) — можно менять напряжение на выходе. Если 50 % времени будет высокий уровень (подадим 5 вольт), а остальные 50% низкий уровень (напряжение 0 вольт), то на выходе получим — 2,5 вольт. В следствии чего двигатель будет вращаться медленнее.

 С теорией разобрались, переходим к практической реализации:

Для того чтобы работать с ШИМ нам понадобится ознакомиться с функцией analogWrite (). Именно она превратит наш цифровой код в соответствующий аналоговый сигнал который будет генерироваться с определенной частотой.

С параметрами функции analogWrite () ознакомились, но как задавать параметр value, не вручную же менять каждый раз значения. Для этого используем возможности функции analogRead(), она позволит нам читать аналоговый сигнал и превращать его в цифровой код.

Для изменения яркости светодиода мы используем потенциометр. Изменяя положение ручки переменного резистора (а вместе с этим и его сопротивление), будем менять яркость светодиода (от минимальной до максимальной).  Переходим к написанию программы:

Небольшой видео-тест работы:

Цифровой многоканальный термометр на ATmega8

Очень часто мы сталкиваемся с необходимостью измерения температуры и у каждого на то свои причины. Один мой хороший знакомый попросил ему в лабораторию сделать 3- канальный измеритель температуры который подключается к ПК и умеет вести лог. событий (проще говоря — журнал изменений температуры). При этом измерение температуры должно быть в диапазоне: 0 — 370 градусов. Так как задача поставлена, переходим к ее осуществлению.

Граница измеряемой температуры может доходить до 400 градусов, использование датчиков ds18b20 и подобных с диапазоном -55 / +125 — невозможно. В связи с этим было принято решение в качестве датчиков температуры использовать — термопару. Термопары — известны возможностью измерять высокие температуры, а также высокой линейностью и стабильностью показаний. Есть много разновидностей термопар, в этом проекте применены хромель-алюмелевые термопары (тип К).

Для наглядности сделал график в Excel:

Зависимость_термопара

 

Данный график показывает зависимость возникающей термоэдс от температуры спая, при этом видно что зависимость — линейная. И для получения текущего значения температуры, необходимо значение термоэдс умножить на определенный коэффициент, который нужно подобрать при калибровке устройства. Но этим путем мы не пойдем, постараемся обойтись без программного умножения и деления. К тому же не все так просто, не стоит забывать что получение точных результатов возможно лишь при идеальных условиях. На практике же появляются такие неприятные вещи как наводки, температурный дрейф, что в свою очередь влечет к погрешностям при измерениях.

Для получения данных с датчика его нужно подключить к микроконтроллеру, но и тут возникает проблема. Так как выходное напряжение очень маленькое, порядка нескольких десятков мВ, при прямой оцифровке с помощью АЦП про какой-либо результат можно забыть, так как измеряемое напряжение просто смешается с шумами. Для того чтоб работать с этим сигналом, его необходимо усилить, как это сделать написал в статье про операционный усилитель.

Теперь собственно немного слов о самом устройстве:

Характеристики:

Подключение к ПК: COM-порт / USB
К-во подключаемых термопар: 3 шт.
Диапазон измерянмых температур: 0 — 400 градусов
Диапазон питающих напряжений: 7 — 20 Вольт (5 Вольт)
Ток потребления: 15 — 50 мА
Габариты платы: 65*65 мм

untitled-7

В устройстве есть возможность корректировки и калибровки температуры, это осуществляется переменными резисторами, после чего их следует залить термоклеем (чтобы не сбивались показания). Также присутствует индикация наличия питания. На плате есть кнопка для быстрого сброса микроконтроллера. Благодаря плотности монтажа,габариты платы получились небольшие. Это позволило поместить все в небольшой пластиковый корпус.

Схема устройства:

термопара_3канала_мега8

Читать далее »

Программируем ARDUINO на Си

                                                                  ArduinoUnoFront

Наверное у каждого желающего создавать свои устройства на микроконтроллерах возникали трудности. То программа не работает как надо, то программатор микроконтроллер не прошивает  — многим, думаю, это знакомо. Решение подобного рода проблем не заставило себя долго ждать. В массы была выпущена отладочная плата  ARDUINO (версий NANO, UNO, PRO MINI и тд.), которая упрощала начало работы с микроконтроллерами и писать код на языке Processing/Wiring было проще.

ARDUINO — представляет собой небольшую плату на которой уже выполнена разводка питания, линий портов ввода/вывода и линий программирования. Есть возможность программирования и общения через терминал  с ПК. В общем не мне вам рассказывать.

                             ARDUINO_V2

Но поработав в среде ARDUINO IDE — стает заметно что потенциал и ресурсы микроконтроллера используются не полностью. Толкового способа это исправить или как-то обойти нет. Как быть в такой ситуации и что лучше предпринять — дело конечно сугубо личное, но… Не спешите забрасывать свою отладочную плату в ящик и покупать что-то другое. Компания Atmel в ноябре 2015 года выпустила AVR Studio 7.0, в которой добавлена поддержка бутлоадера Arduino и исправлены ошибки которые были в младшей версии. Теперь в среде разработки AVR Studio можно писать программы на языке С, С++, Assembler и загружать их непосредственно в Arduino. Что значительно улучшает положение. Теперь разберемся что и как для этого нужно сделать.

Если у вас уже установлена среда Arduino IDE версий 1.5 / 1.6 и среда AVR Studio версий 6.2 / 7.0, то первые два пункта можно пропустить.

I. Установка среды Arduino IDE 1.6

Среду советую скачать на официальном сайте. Тест проводился с версиями 1.5 и 1.6, все хорошо работало. Возможно использование старых версий ситуацию не ухудшит и все будет работать, но опробовать это придется самостоятельно.

II. Установка среды AVR Studio 7.0

Скачиваем на сайте AVR Studio версии 6.2 или 7.0 и устанавливаем на ПК. После необходимо будет пройти регистрацию, чтобы потом установить расширение для Arduino. В  AVR Studio версии 6.1 — корректной работы с плагином не получилось.

III.Установка расширения — Arduino

Для установки расширения необходимо войти в меню Tools и перейти по пункту — Extension Manager. После чего должно открыться окно:

tools

Выбираем плагин «Arduino IDE for Atmel Studio 7.0″ и нажимаем на кнопку Download. Далее вводим логин и пароль, который создавали при регистрации в AVR Studio.

password

Читать далее »

Вводной курс AVR. Hello World !!!

Создание устройств подразумевает не только подключение микроконтроллера и необходимых компонентов обвязки  но и написание программы. Если с подключением МК и его выбором мы уже ознакомились, то с написанием программы будем разбираться. В любом языке программирования (в нашем случае Си)  есть такое понятие как первая программа, что-то типа «Hello World». Она поможет получить представление о составлении структуры программы и синтаксисе языка.  Для написания программы можно пользоваться абсолютно любой, удобной для вас, средой разработки, в проектах буду использовать AVR Studio 6. О том как создать проект и получить прошивку написал в статье про AVR Studio.

Постановка задачи:

Нужно сделать так, чтобы микроконтроллер мигал светодиодом с частотой 1 Гц. Это будет просто в написании и наглядно как пример. Согласно составленному алгоритму и будет выполняться программа.

Для работы с портами микроконтроллера — подключаем библиотеку для ввода/вывода

Так как нам нужно мигать светодиодом с частотой 1 Гц (раз в секунду) — подключаем библиотеку задержек

Дальше производим настройку порта С, к выводу 5 которого подключен светодиод — D1. Вывод порта настраивается на выход и на нем устанавливается лог.0 (подключенный светодиод при этом будет выключен)

В цикле while(1): выставляем на ножке микроконтроллера лог.1 (тем самым включая светодиод), после ждем 1 секунду и выставляем на ножке микроконтроллера лог.0 (тем самым выключая светодиод), опять ждем 1 секунду и все повторяется заново.

Программный код:

Схема нашего устройства :

 

Led_blink_shm

Читать далее »