Электронная метка с жки на микроконтроллере

AVR Урок 12. LCD индикатор 16×2. Часть 1

Урок 12

LCD индикатор 16×2

Сегодня мы начнём изучение жидкокристаллического индикатора символьного, который способен выводить определённые символы в две строки по 16 символов в каждую. Изучать мы данный индикатор будем с целью его подключения к микроконтроллеру AVR и управления им.

Выглядит индикатор, с которым мы будем работать вот таким вот образом

То есть индикатор выполнен в виде модуля, в котором установлен контроллер HD44780, предназначенный для управления дисплеем. Также, как мы видим, в данном модуле существуют 16 контактов, которые я припаял самостоятельно и к которым мы и будем подсоединяться с контроллера с помощью проводов. Поставляется данный модуль без контактов. На их месте существуют контактные технологические отверстия. Скорее всего, сделано это для того, чтобы мы сами могли выбрать тип контактов, которые нам будут удобны для работы с данным модулем.

Вроде и кажется, что 16 контактов – это много, но на самом деле не так уж и много. За счет контроллера HD44780, установленного в модуле, нам не придется подводить по 8 и более контактов к каждому из 32 символов, этим как раз и займётся данный контроллер. Мы лишь только будем давать ему определённые команды и посылать определённые данные. Хотя это также сопряжено с определёнными трудностями программирования данного устройства, но на это и существует урок, чтобы данные трудности как-то преодолеть.

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

Например, модуль компании Winstar на 1 ножке имеет анод, а наш китайский дисплей, который стоит дешевле, в отличие от Winstar, на данной ножке имеет катод.

Поэтому будьте внимательны и читайте документацию на тот именно модуль, который будет у вас.

Иногда ножки подключения индикаторов нумеруются на плате, как, например в том модуле, который мы будем сегодня использовать

Ну раз уж мы увидели надписи на ножках модуля, давайте тогда разберёмся, какая ножка для чего служит. Пойдём слева направо.

Ножка первая – VSS – это общий провод или «земля»

2 – VDD – питание.

3 – V0 – это ножка, с помощью которой регулируется контрастность дисплея. То есть контрастность дисплея будет зависеть от поданного напряжения на данную ножку. Как правило берётся переменный резистор на 10 килоом, подключенный крайними ножками на общий провод и на питание, а с центральной ножки данного резистора провод идёт как раз на ножку V0 и посредством регулировки движка резистора мы и регулируем контрастность дисплея в модуле.

4 – RS – это такая хитрая ножка, с помощью которой контроллер дисплея будет «знать», какие именно данные нахдятся на шине данных. Если мы подадим на данную ножку логический 0, то значит будет команда, если 1 – то это данные.

5 – RW – данная ножка в зависимости от логического состояния на ней говорит контроллеру дисплея, будем мы с него читать или будем мы в него писать данные. Если будет 0 – то мы в контроллер дисплея будем писать, а если 1 – то будем читать данные из контроллера дисплея. Данная функция используется редко. Как правило мы всегда только пишем данные в дисплей. Чтение обычно требуется для того, чтобы определить, что дисплей принял наши данные, либо чтобы определить состояние. Но существуют определённые тайминги, позволяющие нам на слово «верить» котнроллеру дисплея, что он наши данные принял и обработал. Также читать мы можем из памяти дисплея, что, в принципе, незачем. Поэтому мы обычно соединяем данный контакт с общим проводом.

6 – E – это так называемая стробирующая шина, по спадающему фронту (когда 1 меняется в 0) на которой контроллер дисплея понимает, что именно сейчас наступил момент чтения данных на ножках данных D0 – D7, либо передачи данных из модуля в зависимости также от состояния ножки RW.

Ножки D0 – D7 – это параллельная восьмибитная шина данных, через которую и передаются или принимаются данные. Номера 0 – 7 соответствуют одноименным битам в байте данных. Но также есть ещё 4-битный способ передачи данных в контроллер и из контроллера дисплея, когда используются только ножки данных D4 – D7, а ножки D0 – D3 уже не используются. Как правило такой способ используется в целях экономии ножек порта и именно такой способ мы и будем сегодня использовать, так как мы теряем скорость вдвое, но у нас дисплей символьный и спешить нам некуда. В 4-битном режиме мы передаём или принимаем байт в 2 приёма по половинке, сначала старшую часть байта, затем младшую.

Ножки A и K – это анод и катод для подачи напряжения для питания светодиодной подсветки дисплея. Как правило можно питать от 5 вольт, но желательно поставить токоограничивающий резистор на 100 ом и скорее всего тогда подсветка дисплея «проживёт» дольше. Всё это обычно указывается в технической документации на дисплей.

Также данную информацию мы видим в технической документации на дисплей

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

В самой первой колонке данной таблице находятся сами команды. Следующие 2 колонки – это то, в каком состоянии должны в момент команды находиться ножки RS и RW. Дальнейшие 8 колонок показывают нам состояние ножек шины данных, затем идёт колонка с пояснениями к командам, то есть что именно с помощью данной команды мы достигнем. А затем в последней колонке находятся тайминги или временные интервалы, необходимые для того, чтобы та или иная команда или инструкция выполнилась. Причем оговорено, при какой именно частоте генератора это достигается. То есть, я так понимаю, что в модуле существует генератор, тактирующий работу контроллера дисплея, который настроен на определённую частоту и данная частота может быть разной. Поэтому желательно пробовать сначала с большим интервалом, то есть всё достигается на практике. Поэтому некоторые модули других моделей могут не работать с тем же кодом, который мы в данном уроке напишем. Опять же читайте внимательно техническую документацию именно к своему модулю.

Например, первая команда Clear Display говорит сама за себя. Она очищает дисплей. Вообще за отображение на дисплее у нас отвечает оперативная память DDRAM, также существующая в контрроллере дисплея. Вот данную память как раз и очищает данная команда.

Остальных команд мы коснёмся несколько позднее.

Теперь идём дальше по технической документации. Дальше идёт объяснение каждой команды и назначение каждого бита, представленного в таблице. Мы можем заметить, что в таблице каждый используемый бит как-то называется.

Дальше идёт объяснение процесса инициализации модуля дисплея. Инициализация любого активного устройства – это неотъемлимая часть программирования. Без первичной инициализации не будет работать ни одно устройство.

Сначала показана инициализация 8-битного режима, а затем 4-битного режима. Нам интересен именно последний способ. Поэтому посмотрим данную страничку

Мы видим, что всё здесь очень подробно рассказано и показано. Вот эту диаграмму мы и будем использовать, когда будем писать код инициализации дисплея. Опять же требование – 270 кГц частота работы генератора.

Также посмотрим организацию знакомест дисплея в памяти DDRAM. Это нам будет необходимо для написания функции позиционирования

Как мы видим, вторая строка находится в области видиопамяти через некоторый пропуск после первой. Во-первых, существуют дисплеи разной размерности, например у меня ещё есть дисплей 20х4 на том же контроллере, поэтому и пропуск. Также существует определённая команда, которая передвигает видимую часть памяти, это может быть использовано для подготовки символов в невидимой области, а затем путём передвижения невидимую область мы делаем видимой. Нам это пока не требуется. Если потребуется, то мы обязательно с этим разберёмся, ну либо для какого-то красивого скроллинга дисплея также может это потребоваться.

Подобная документация существует также не только на дисплей, а ещё и на контроллер. Я её также в конце статьи обязательно приложу к страничке.

А теперь наконец-то проект.

В отличие от предыдущих занятий сегодня у нас будет пустой проект. Обычно мы продолжали начатый и копировали код с прошлого занятия. Сегодня мы этим заниматься не будем и создадим пустой проект Test09. Создадим мы его таким же образом, как и все предыдущие, выбрав тот же контроллер, поэтому процедуру создания и настройки я показывать не буду. У нас и так урок обещает быть очень большим.

Для протеуса проект мы скопируем как и раньше, переименовав его в Test09, и выбрав путь к прошивке нового проекта, чтобы нам заново не искать контроллер, резисторы и прочие вещи, а также не настраивать контроллер.

Вернемся в наш проект в студию. Верхнюю часть файла, где мы объявляем частоту и подключаем библиотеки, мы, в принципе можем всё-таки их прошлого кода скопировать

#define F_CPU 8000000UL

#include

Скомпилируем код, чтобы у нас была хотя бы какая-то прошивка.

Напишем функцию port_ini(). Под все ножки модуля дисплея мы будем использовать порт D. Так как режим у нас 4-битный, то нам вполне хватит ножек, даже останутся

void port_ini ( void )

PORTD =0x00;

DDRD =0xFF;

Также давайте данную функцию вызовем в функции main()

port_ini (); //Инициализируем порты

Зайдём теперь в проект в протеус и найдем там дисплей в библиотеке компонентов

Подключим его следующим образом

Если мы запустим проект, то мы увидим всего лишь, что дисплей у нас просо будет светиться и всё.

Дальнейшую работу с данным дисплеем мы продолжим в следующей части.

Программатор и дисплей можно приобрести здесь:

Сообщества › Электронные Поделки › Блог › LCF-метр на ATMEGA8 и LCD1602

Я уже собирал несколько измерительных приборов, Частотомер, испытатель транзисторов.
Но, как говорится «наши руки, не для скуки» решил собрать Измеритель LCF. Схему и всю подноготную почерпнул с этой страницы LCF-метр на ATMEGA8 и LCD1602.

Данный прибор предназначен для измерения ёмкости конденсаторов, индуктивности и частоты.

Конденсаторы:
Диапазон измерений: 0,1 pF ÷ 10 000,0 uF.
Измерения проводятся в трех диапазонах, переключение диапазонов автоматическое.
В первом диапазоне измеряются емкости до 100 nF, во втором до 100 uF, в третьем выше 100 uF.

Индуктивность:
Диапазон измерений: 0,1 uH ÷ 100,0 H.

Частота:
Диапазон измерений: 1 Hz ÷ 4 MHz.

Выбор измеряемого параметра осуществляется кнопкой «Выбор» по кругу.
Если параметр выходи за пределы измерения на индикатор выводятся прочерки.

Схему и плату делал в ДипТрейс под свои компоненты.

Сначала собирал прибор в безкорнусном варианте на ATMega8(32). В моём архиве есть вариант этой платы.
Но побывав в магазине Чип и Дип обнаружил там много разных корпусов для РЭА
И сразу решил оформлять прибор в подходящий корпус.
Корпус G1204B 142.8×8, 5×38мм как нельзя лучше подходил для данного проекта. Тем более блок питания в корпусе я размещать не собирался. Место было много, я и не старался мельтешить.

Читайте также  Компания adlink представила 4-канальный 24-битный usb-2405 модуль регистрации динамического сигнала

Вот готовое устройство.

Что касаемо применяемых деталей, к точности номиналов никаких особых требований нет.

В прилагаемом архиве есть несколько прошивок, как на русском, так и на английской мове. Установите какую понравится, по функционалу разницы не заметил.

Фьюзы для ATMega8 будут
LOW= DE
HIGH= D9

После включения прибор начинает работать сразу, но прежде чем начать им пользоваться его следует его откалибровать. Привожу инструкцию автора по калибровке прибора.

Калибровка измерителя емкости.
1. Для калибровки следует выбрать режим измерения емкости и нажать на кнопку SET. В верхней строке дисплея появятся настроечные коэффициенты. Устанавливаемый параметр мигает. В нижней строке измеренная емкость.
2. К входным щупам не должно быть никаких подключений.
3. Нажать на кнопку PLUS или MINUS – произойдет настройка показаний емкости на 0. Коэффициент Z1 (Z2, Z3) установится автоматически. Если показания не стали нулевыми – операцию повторить.
4. Подключить к щупам образцовый конденсатор (для нижнего диапазона 1 nF ÷ 100 nF, для второго 100 nF ÷ 100 uF, для третьего 100 uF ÷ 10000 uF). Прибор автоматически выберет предел измерения.
5. Если показания емкости отличаются от номинала конденсатора – нажать на кнопку SET, начнет мигать параметр C1 (C2, C3).
6. Кнопками PLUS/MINUS установить требуемую емкость.
7. Повторить настройку, начиная с п.1.
8. Все диапазоны настраиваются аналогично. (В верхних диапазонах параметр Z2, Z2 как правило устанавливается в 0.)
9. Через 10 сек от последнего нажатия на кнопки прибор перейдет в основной режим, настройки запишутся в память.
10. Если из основного режима нажать на кнопки PLUS/MINUS, то произойдет установка коэффициентов Z1 (Z2, Z3).

Калибровка измерителя индуктивности.
1. Для калибровки следует выбрать режим измерения индуктивности и нажать на кнопку SET. В верхней строке дисплея появятся настроечные коэффициенты. Устанавливаемый параметр мигает. В нижней строке измеренная индуктивность.
2. Закоротить входные щупы.
3. Нажать на кнопку PLUS или MINUS – произойдет настройка показаний индуктивности на ноль. Параметр L0 устанавливается автоматически. Если показания не стали нулевыми – операцию повторить.
4. Подключить к щупам индуктивность известного номинала.
5. Если показания индуктивности отличаются от номинала – нажать на кнопку SET, начнет мигать параметр LC.
6. Кнопками PLUS/MINUS установить требуемую индуктивность.
7. Повторить настройку, начиная с п.1.
8. Через 10 сек от последнего нажатия на кнопки прибор перейдет в основной режим, настройки запишутся в память.
9. Если из основного режима нажать на кнопки PLUS/MINUS, то произойдет установка коэффициента L0 (настройка показаний на ноль, при этом щупы должны быть замкнуты).

Моя оценка работы прибора.
Начну с простого. Частоту прибор меряет достаточно точно и хорошая чувствительность, максимальное напряжение не мерил, щупы в розетку не совал.

Замер индуктивностей, на сколько точно он меряет не знаю эталонной индуктивности у меня не оказалось, но меряет.

Электронная метка с жки на микроконтроллере

Измеритель всего, что попадется под руку (RLC-метр)

Автор: Neekeetos, neekeetos@yahoo.com
Опубликовано 16.09.2013
Создано при помощи КотоРед.
Участник Конкурса «Поздравь Кота по-человечески 2013!»

В процессе создания радиолюбительских конструкций и ремонта радиоаппаратуры довольно часто приходится сталкиваться с необходимостью измерить тот или иной элемент схемы или подобрать номинал. Обычно присутствующий на столе тестер тут может помочь лишь в измерении сопротивлений, иногда емкости с плохой точностью. Это и явилось причиной создания такого прибора, который был бы способен с приемлемой точностью замерить все возможные параметры электронного компонента, попавшего в руки радиолюбителя, но при этом был достаточно прост по конструкции, недорог в сборке и компактен. В результате была придумана конструкция на мк stm32f100c4t6 с такими параметрами:

  • резисторы в диапазоне от 0,001Ом до 500кОм
  • конденсаторы 1нФ – 10000мкф
  • индуктивности 1мкГн – 10Гн

Для конденсаторов и индуктивностей дополнительно оценивается значение внутреннего сопротивления ( ESR ) и добротность Q

Измерение производится на частоте 1кГц. На измеряемую деталь подается сигнал синусоидальной формы. Амплитуда сигнала зависит от многих факторов. Максимальное ее значение составляет 1В. Во время измерения электролитических конденсаторов данное напряжение не превышает 10мВ, что позволяет производить измерения без выпайки элемента из платы (при этом измеряемая схема не должна быть под напряжением, а сам измеряемый конденсатор должен быть разряжен, те его выводы необходимо ненадолго замкнуть перед измерением, если этого не сделать, то прибор с большой вероятностью сломается).

  • в режиме измерения с включенной подсветкой прибора — 20ма,
  • в выключенном состоянии — 15мка.

Питание прибора осуществляется от LiIon аккумулятора, который можно зарядить подсоединив прибор USB кабелем к компьютеру или сетевой зарядке 5В.

Для включения прибора необходимо нажать и удерживать кнопку PWR в течение 2 секунд. После чего наэкране появится приветствие и начнется калибровка. На первом шаге калибровки измеряется сопротивление разомкнутых щупов, в случае если это не так прибор выведет подсказку «Open leads», после размыкания щупов или отсоединения от них детали прибор начнет процесс калибровки. Вторым шагом калибровки оценивается сопротивление щупов в замкнутом состоянии, для начала калибровки необходимо замкнуть щупы, до тех пор пока это не сделано на экране будет показываться подсказка «Close leads» . После проведения всех калибровок прибор сразу переходит в режим измерения и показывает на экране результаты замеров.

Управление осуществляется тремя кнопками (PWR, S/P, REL), присутствующими сбоку платы. Во включенном состоянии короткое нажатие кнопки PWR позволяет включать/выключать подсветку. По умолчанию при включении она включена. Длительное удержание кнопки приведет к выключению прибора. Кнопка S/P позволяет переключать режим замещения между двумя режимами:

— последовательный , когда измеряемый элемент представлен активным сопротивлением включенным последовательно с емкостью/индуктивностью. Данный режим обозначен на экране значком SER в верхней части экрана, а замеренные значения отображаются с именами Rs,Cs,Ls. Это основной режим прибора и позволяет замерять внутреннее сопротивление конденсаторов(ESR) и катушек одновременно с их номиналом.

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

Кнопка REL позволяет включить режим относительных измерений, в этом режиме можно вычесть вклад отдельного элемента в измерение. Используя данный режим можно например замерять элементы, находящиеся под постоянным напряжением. Сам прибор не допускает подключения источников напряжения к щупам, однако, если последовательно со щупами включить емкость, то можно замерять например внутреннее сопротивление аккумуляторов. Схема измерения при этом такая – разделительную емкость необходимо подсоединить к щупам прибора и произвести измерение, затем нужно включить режим относительных измерений, при этом показания на экране обнулятся . После этого необходимо отсоединить один из щупов от разделительной емкости и включить аккумулятор между этим щупом и свободным выводом разделительной емкости. Прибор при этом отобразит внутреннее сопротивление аккумулятора. ( Это все касается низковольтных аккумуляторов. Напряжение аккумулятора не должно быть выше 3 вольт!)

Сборка прибора не должна представлять особых проблем. Возможно самое сложное это изготовление платы, но ее можно сделать в домашних условиях с ипользованием как ЛУТ технологии так и с помощью фоторезиста. Плата двухсторонняя, вторая сторона ее представляет собой просто слой фольги, желательно позаботиться о нем при травлении верхнего слоя с проводниками. Все те контактные площадки, которые обозначены внутренним серым кружком на рисунке платы необходимо запаять перемычками на нижний слой платы, он служит землей и экраном для схемы. К этой статье также прикреплено фото собраной платы для того, чтобы можно было сориентироваться что и как припаивается.

После сборки необходимо будет прошить МК. Это можно сделать двумя способами:

Если есть программатор/отладчик для STM32, то достаточно подключить его к соответствующим пинам на разъеме JP2 (верхние 4, два из них это питание, земля, оставшиеся два это SWD).

Если отладчика нету но есть желание прошить мк, то алгоритм действий таков:

  • необходимо найти конвертер USB-COM, такой , чтобы его выходные уровни были 3 вольта ,для этого отлично подходят старые кабели от сотовых телефонов.
  • надо припаять тонким проводком контакт P1 на + питания — верхний пин разъема JP2
  • С сайта STM необходимо скачать утилиту для прошивки МК через компорт и прошить ей МК. (на случай если ссылка сломается на сайте можно поискать «STM32 and STM8 Flash loader demonstrator (UM0462)»)
  • Убрать проводок между P1 и питанием.
  • Использовать прибор

Вот пожалуй и все. Надеюсь, что данная конструкция окажется полезной многим. Возможно, что в программе данного прибора будут производиться какие то изменения, с целью удаления багов, глюков, неудобств в работе и прочих вещей, в таком случае статья будет обновляться.

Видео работы прибора:

Комментарии по обновлению прошивки 6.03:

В новой прошивке добавлена поддержка нескольких частот ( 1кГц, 9кГц, 25кГц, 49кГц и 97кГц ) . Каждая из этих частот имеет собственную калибровку, поэтому алгоритм работы прибора поменялся. Теперь при первом включении на всех частотах отсутствует калибровка, это обозначается на экране статусом (—). После проведения калибровки она запоминается и при включении/выключении не пропадает, таким образом не требуется каждый раз калибровать прибор при включении, а лишь в случае необходимости. ( Значения запоминаются в озу прибора, так что в случае пропадания питания они все же будут сбрасываться, но зато ресурс flash мк не тратится при любом количестве перекалибровок ). В новой прошивке кроме добротности, одновременно рассчитывается также тангенс угла потерь.

Изменение в управлении

В новой версии прошивки

  • кнопка S/P , выбирающая режим замещения при долгом нажатии позволяет переключать частоту, на которой производится измерение.
  • кнопка REL ,при коротком нажатии активирует режим относительных измерений, что отображается на экране значком >.

Система радиочастотной идентификации (RFID) на микроконтроллере AVR ATmega32

Мы знаем, что сейчас в офисах, торговых центрах и многих других местах требуется авторизация людей, которые входят/выходят из этих мест. Часто для этих целей используется радиочастотная идентификация (RFID — Radio Frequency Identification). В частности, радиочастотная идентификация используется в торговых центрах для защиты от воров – все товары в них снабжены специальными радиочастотными метками и если кто то пытается вынести из торгового центра товар с такой меткой, то сразу включается сигнализация. Радиочастотные метки представляют собой очень маленькие устройства – их размер сравним с песчинками. Системы радиочастотной идентификации просты в разработке и дешевы в производстве, что и обусловило их широкое распространение по всему миру.

В этой статье будет рассмотрена система сбора данных на основе радиочастотной идентификации на микроконтроллере ATmega32 (семейство AVR), предназначенная для целей охраны. Система открывает ворота и пропускает только тех людей, у которых есть авторизованная (разрешенная) радиочастотная метка. Идентификатор этой метки записывается в память микроконтроллера ATmega32 и на основе этих данных микроконтроллер уже принимает решение кого пропускать, а кого не пропускать через ворота.

Необходимые компоненты

Аппаратное обеспечение

  1. Микроконтроллер ATmega32 (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. JHD_162ALCD (16×2 ЖК дисплей) (купить на AliExpress).
  4. Конденсатор 100 мкФ (соединенный через источник питания) (купить на AliExpress).
  5. Кнопка.
  6. Резистор 10 кОм (купить на AliExpress).
  7. Конденсатор 100 нФ (купить на AliExpress).
  8. Светодиод (2 шт.) (купить на AliExpress).
  9. EM-18 (модуль чтения радиочастотных меток, RFID) (купить на AliExpress).
  10. Драйвер двигателей L293D (купить на AliExpress).
  11. Электромотор постоянного тока на напряжение 5В.
  12. Источник питания с напряжением 5 Вольт.

Программное обеспечение

  1. Atmel Studio версии 6.1 (или выше).
  2. Progisp или flash magic (необязательно).

Работа схемы

Схема устройства представлена на следующем рисунке.

В представленной схеме PORTA микроконтроллера ATmega32 соединен с портом данным жидкокристаллического (ЖК) дисплея. При этом следует помнить о том, что необходимо деактивировать JTAG интерфейс микроконтроллера на порту PORTC при помощи изменения фьюзов (fuse bytes) чтобы использовать PORTC как обычный порт ввода/вывода. В ЖК дисплее (если мы не хотим использовать черный цвет) можно задействовать только 14 его контактов: 8 контактов для передачи данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или gnd&+5v), 3-й контакт для управления контарстностью, 3 контакта для управления (RS&RW&E).

В представленной схеме мы использовали только 2 контакта управления ЖК дисплея для лучшего понимания работы схемы. Бит контраста и READ/WRITE используются нечасто, поэтому они могут быть замкнуты на землю. Это обеспечивает ЖК дисплею максимальную контрастность и переводит его в режим чтения. Теперь нам всего лишь нужно контролировать контакты ENABLE и RS чтобы передавать на ЖК дисплей символы и данные. Также на нашем сайте вы можете прочитать более подробную статью о подключении ЖК дисплея к микроконтроллеру ATmega32.

В схеме необходимо сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS — земля
PIN2 или VDD или VCC — +5v питание
PIN3 или VEE — земля (обеспечивает максимальный контраст ЖК дисплею)
PIN4 или RS (Register Selection) – контакт PD6 микроконтроллера
PIN5 или RW (Read/Write) — земля (переводит ЖК дисплей в режим чтения что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) — контакт PD5 микроконтроллера
PIN7 или D0 — контакт PA0 микроконтроллера
PIN8 или D1 — контакт PA1 микроконтроллера
PIN9 или D2 — контакт PA2 микроконтроллера
PIN10 или D3 — контакт PA3 микроконтроллера
PIN11 или D4 — контакт PA4 микроконтроллера
PIN12 или D5 — контакт PA5 микроконтроллера
PIN13 или D6 — контакт PA6 микроконтроллера
PIN14 или D7 — контакт PA7 микроконтроллера

В схеме мы использовали 8-битную связь (D0-D7) ЖК дисплея с микроконтроллером, хотя можно было ограничиться и 4-битной – но в этом случае код программы стал бы немного сложнее.

Таким образом, мы использовали 10 контактов ЖК дисплея, 8 из которых будут использоваться для передачи данных и 2 для управления.

Принципы работы последовательного порта микроконтроллера AVR ATmega32

Чтобы двигаться дальше нам необходимо остановиться на принципах работы последовательного порта микроконтроллера потому что модуль чтения радиочастотных меток будет посылать данные микроконтроллеру именно по этому порту. Можно задействовать и другой режим связи модуля чтения радиочастотных меток с микроконтроллером (RFID), но в целях упрощения мы в данной статье остановимся на их связи через порт RS232. Таким образом, контакт RS232 модуля RFID необходимо соединить с контактом RXD микроконтроллера ATmega32.

Данные, передаваемые модулем RFID, выглядят следующим образом:

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

  1. Контакт RXD микроконтроллера должен быть доступен (активирован).
  2. Поскольку мы используем последовательную передачу данных, то мы должны знать момент окончания приема всего байта данных. То есть мы должны приостановить работу программы до тех пор, пока мы не примем весь байт. Это достигается при помощи использования соответствующего прерывания.
  3. Модуль RFID передает данные микроконтроллеру в 8 битном режиме, поэтому одновременно будут передаваться два символа, как показано на следующем рисунке.
  4. Биты четности не используются, но однако один стоповый бит посылается модулем RFID.

Регистры, используемые для управления последовательным портом микроконтроллера, представлены на следующем рисунке.

Кратко поясним данный рисунок.

RED (красный, RXEN): этот бит представляет особенности принимаемых данных. Он должен быть установлен для данных, которые передаются от модуля RFID к микроконтроллеру. Он также производит активацию (запускает в работу) контакт RXD микроконтроллера.

BROWN (коричневый, RXCIE): этот бит должен быть установлен для обработки прерывания после окончания успешного приема данных. Активируя этот бит мы знаем что произвели успешный прием 8 бит.

PINK (розовый, URSEL): этот бит должен быть установлен перед активацией других битов UCSRC. После его установки, другие биты UCSRC, URSEL должны быть деактивированы или установлены в 0.

YELLOW (желтый, UCSZ0,UCSZ1,UCSZ2): эти три бита используются для выбора номеров битов данных, которые мы передаем или принимаем при односторонней передаче. Поскольку данные от модуля RFID передаются в 8 битном формате мы должны установить биты UCSZ0 и UCSZ1 в единицу, а бит UCSZ2 – в ноль.

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

GREEN (зеленый, UPM1, UPM0): эти два бита корректируются на основе бита четности, который мы используем в процессе связи.

Поскольку модуль RFID передает данные без использования четности, то биты UPM1, UPM0 должны быть установлены в ноль либо не трогать их вообще поскольку по умолчанию все биты во всех регистрах устанавливаются в ноль при инициализации микроконтроллера.

BLUE (синий, USBS): этот бит используется для выбора числа стоповых битов которые мы используем в процессе связи.

Поскольку модуль RFID передает данные с одним стоповым битом, мы должны установить бит USBS в ноль.

После установки всех рассмотренных битов мы должны установить техническую (в бодах) скорость передачи по последовательному порту. Модуль RFID передает данные по этому порту со скоростью 9600 бод/с, поэтому такую же скорость мы должны выставить и у последовательного порта микроконтроллера при помощи установки соответствующего значения UBRRH.

Значение байта UBRRH должно выбираться из необходимой скорости передачи данных и используемой частоты работы микроконтроллера. Исходя из нижеприведенной таблицы мы видим, что нам необходимо записать в этот байт значение ‘6’.

Теперь, как показано на рисунке ниже, два контакта микроконтроллера необходимо соединить с драйвером электромотора L293D, который используется для управления скоростью и направлением вращения маломощных электродвигателей постоянного тока.

Этот драйвер содержит два моста, поэтому он может управлять двумя электромоторами.

Управление направлением вращения осуществляется при помощи уровней напряжений на INPUT1 и INPUT2.

Как видно из представленной таблицы, для вращения по часовой стрелке на контакте 2A должно быть высокое напряжение, а на контакте 1A – низкое. Аналогично для вращения против часовой стрелки на контакте 1A должно быть высокое напряжение, а на контакте 2A – низкое.

Когда карта авторизации подносится к модулю RFID, электромотор программируется на вращение по часовой стрелке чтобы на секунду открыть ворота, а затем по истечении этой секунды снова их закрыть. Более подробно эти моменты объяснены в комментариях к коду программы.

Исходный код программы на языке C (Си) с пояснениями

Программа для рассматриваемой схемы представлена следующим фрагментом кода на языке C (Си). Комментарии к коду программу поясняют принцип работы отдельных команд.

Семисегментные «цифровые» ЖКИ в схемах на микроконтроллере

Аббревиатура «ЖКИ» расшифровывается как «Жидкокристаллический Индикатор». По-английски — LCD (Liquid Crystal Display). Впервые жидкие кристаллы, как физическое вещество, были исследованы австрийским ботаником F.Reinitzer в 1888 г. при изучении свойств органических тканей. Однако прошло ещё почти столетие, пока в 1964 г. не появился первый в мире калькулятор CS10A, имеющий ЖК-дисплей (фирма Sharp), а в 1966 г. — первые электронные часы с семисегментными ЖКИ (фирма RCA).

Упрощённую модель ЖКИ можно образно представить в виде конденсатора. Верхняя его обкладка состоит из стеклянной пластины, с внутренней стороны которой напылён прозрачный электрод, а нижняя — металлизированная подложка тёмного цвета. Электрод и подложка разделяются тонким слоем жидкокристаллического вещества. При отсутствии напряжения на обкладках этого «конденсатора» молекулы жидкого кристалла хаотически ориентированы и не пропускают свет. Поверхность индикатора выглядит светлой. Если подать на электроды ЖКИ напряжение, то молекулы упорядоченно выстраиваются вдоль линий напряжённости поля и жидкий кристалл становится прозрачным. Свет, вместо того, чтобы отражаться от верхней поверхности, проходит сквозь образовавшийся просвет и поглощается тёмной подложкой, т.е. экран в этом месте темнеет. Если электрод сделан в форме горизонтальной/вертикальной полоски, то на экране появится горизонтальная/вертикальная черта.

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

ЖКИ разделяют на следующие большие группы:

• цифровые ЖКИ, имеющие отводы от каждого сегмента. Их расположение топологически образует семисегментное знакоместо с десятичной точкой, подобно светодиодным индикаторам;

• специализированные заказные семисегментные ЖК-модули с внутренним контроллером. Они часто используются в телефонных аппаратах, часах, игрушках, органайзерах, бытовой технике;

• стандартные алфавитно-символьные ЖК-модули, у которых в памяти контроллера прошиты знакогенераторы разных алфавитов;

• чёрно-белые графические ЖК-дисплеи, имеющие экран из матрицы точек, управление которыми производится чипсетом «контроллер + драйвер»;

• цветные ЖК-дисплеи, применяемые в сотовых телефонах и телевизорах.

Достоинства ЖКИ: низковольтное питание, удобное конструктивное оформление, долговечность, чрезвычайно малый потребляемый ток, что является следствием «конденсаторной» природы.

Недостатки ЖКИ: необходимость подсветки экрана в темноте, узкий угол обзора, инерционность, сложность системы управления и коммутации, поскольку на обкладки ЖКИ требуется подавать импульсы переменной полярности.

Семисегментные «цифровые» ЖКИ бывают одноразрядные и многоразрядные. ЖКИ производства стран СНГ обычно имеют «русскую», а не латинскую, маркировку единичных разрядов (Рис. 2.33). Если индикаторы многоразрядные, то к букве добавляется номер знакоместа, например, «а1», «г5», «g4», «2D».

Рис. 2.33. Расположение сегментов ЖКИ: а) две разновидности с маркировкой кириллицей; б) с маркировкой латиницей.

Главным параметром при выборе ЖКИ является диапазон питания. Для MK подходят те ЖКИ, которые допускают напряжение 1.5…6 В или 5…10 В. Их можно подключать к MK напрямую и через КМОП-дешифраторы (Рис. 2.34, а…ж). Единственное, что требуется, — это сформировать пульсирующее напряжение для подложки в виде меандра частотой 30…1000 Гц. Меандр должен быть максимально «строгим», чтобы постоянная составляющая за период не превышала 50…250 мВ, иначе снижается срок службы ЖКИ из-за химического электролиза.

Рис. 2.34. Схемы подключения семисегментных ЖКИ к MK (начало):

а) DD1 — это преобразователь двоично-десятичного кода в семисегментный. Меандр частотой 30…100 Гц поступает от MK на вход «S», далее проходит без инверсии на выход «Р» и подаётся на подложку «ВР» ЖКИ HG1. Сигналы на выходах «a»…«g» микросхемы DD1 синфазные (сегмент светится) или противофазные (сегмент погашен). Индицируются цифры «0»…«9», буквы «L», «Н» «Р» «А», знак «минус». При коде 1111 на верхних выходах MK индикатор HG1 гаснет;

б) надпись «СНЕГ» на четырёхразрядном ЖКИ HG1 появляется при противофазных сигналах на выходах MK. Если установить два НИЗКИХ или ВЫСОКИХ уровня, то HG1 гаснет; О

О Рис. 2.34. Схемы подключения семисегментных ЖКИ к MK (продолжение):

в) M К должен иметь достаточное число свободных выходных линий для прямого подключения трёхразрядного ЖКИ HG1. Инвертор на транзисторе VT1 формирует противофазный сигнал по отношению к подложке («Common»), чтобы постоянно индицировалась децимальная точка первого разряда («dpl»). Децимальная точка второго разряда («dp2») постоянно погашена;

г) подключение к MK специализированного заказного ЖКИ HG1. Предполагается, что MK программно и аппаратно поддерживает режим сопряжения с ЖКИ, т.е. он имеет три нижних линии, автоматически формирующие опорные напряжения Vl…V3. Такой режим встроен, например, в MK Microchip PIC16F914;

д) прямое подключение 3.5-разрядного ЖКИ HG1 к MK с низковольтным питанием. Сегменты ЖКИ, выводы которых постоянно соединяются с подложкой «Common», светиться не будут. Это, в частности, две десятичные точки «dp3», «dp4». Все свободные в ЖКИ выводы «NC» (No Connect) 4…7, 33…38 должны соединяться с подложкой, а не «висеть в воздухе»; О

О Рис. 2.34. Схемы подключения семисегментных ЖКИ к MK (окончание):

е) индикация температуры от —99 до + 199°С на четырёхразрядном ЖКИ. Счётчики DD1, DD2 перед индикацией нового значения обнуляются положительным импульсом на входе «R». Затем на входы «С» подаётся то количество импульсов, которое соответствует индицируемой цифре. Символ «минус» («ж1») и одна единица сотен градусов («62», «в2») формируются прямо от линий MK. Сигнал меандра для подложки «П» ЖКИ должен иметь частоту 30…200 Гц;

ж) аналогично Рис. 2.34, e, но счётчики DD1…DD4 соединяются последовательно через выходы переноса «Р» и входы «С». Четырёхразрядное число формируется за один цикл, который включает в себя обнуление по входу «R» и генерацию определённого числа синхроимпульсов на входе «С». Достоинство схемы — экономия линий MK. Недостаток — относительно большое время на передачу всех синхроимпульсов, т.к. их по максимуму может быть 9999.

Источник: Рюмик, С. М., 1000 и одна микроконтроллерная схема. Вып. 2 / С. М. Рюмик. — М.:ЛР Додэка-ХХ1, 2011. — 400 с.: ил. + CD. — (Серия «Программируемые системы»).

Электронная метка с жки на микроконтроллере

ЦИФРОВОЙ ИЗМЕРИТЕЛЬ ЭПС НА

МИКРОКОНТРОЛЛЕРЕ ATMEGA 8

Общая информация

С момента изготовления стрелочного измерителя ЭПС прошло более двух лет. В течение этого вре­мени прибор постоянно эксплуатировался при ремонте различной техники и показал хорошие ре­зультаты. Помимо прочего, радует экономичность: установленный элемент питания работает до сих пор. Накопилась и некоторая статистическая информация :

— основная масса измерений приходится на диапазон сопротивлений 0. 1 Ом. Большие зна­чения либо не имеют смысла для конденсаторов ёмкостью более нескольких микрофарад, либо нужны просто для справки;

— хотя длинная шкала прибора позволяет без труда определять сопротивления от 0,1 Ома, возможность измерения в пределах от 0 до 0,1 Ома с шагом 0,01 Ом представляется более полезной, не­жели измерение сопротивлений более 10 Ом;

— полностью подтвердилась мысль о том, что для ремонтных работ совершенно безраз­личны размерность и соответствие истинному значению ЭПС, поскольку выводы делаются исключи­тельно сравнительным способом. Достаточно чтобы измеритель просто обнаруживал разницу сопро­тивлений в требуемом диапазоне. Поэтому шкалу миллиамперметра можно было и не градуировать.

Тем не менее, практика показала, что несмотря на простоту изготовления, надёжность, экономич­ность, многих отпугивает суровый вид стрелочного индикатора эпохи расцвета тоталитарно-тёплого лампового звука. Поразмыслив, автор поддался течению и заменил взывающую к совести стрелку на мирские блага микроконтроллера:

Не секрет, однако, что все блага имеют свою цену, которая неизбежно компенсирует иллюзорное представление о прекрасном.

За основу измерения положен тот же принцип, что и в стрелочном измерителе. Поскольку основ­ной диапазон измерения теперь принят от 0 до 1 Ома (т.е. сдвинут в область малых значений), а полная кратность измеряемого сопротивления составляет 1000, становится ясно, что десять разрядов АЦП мик­роконтроллера ATmega 8 хватит впритык.

— диапазон измеряемых сопротивлений 0,01. 9,9 Ом;

— возможность коррекции и сохранения нулевых показаний;

— питание 9 Вольт, от батареи 6LR61 («Крона») щелочного типа;

— индикация напряжения батареи после включения в течение двух секунд.

Измеритель собран в корпусе от USB модема D — Link :

Размеры корпуса позволили использовать безымянный сегментный индикатор типа 2 1/2 разряда, без десятичных точек, высота символов 11 мм. Подобные индикаторы когда-то устанавливали на передние панели системных блоков.

Рис. 3

Следует учесть, что символ единицы в данном индикаторе загорается сразу целиком, а аноды его сегментов объёдинены с анодами предыдущего разряда. При повторении конструкции можно использо­вать любые индикаторы с общим анодом и соответствующим объединением указанных сегментов.

Выбор индикатора привёл к характерным извращениям при отображении информации:

— десятичная точка выполнена в виде углубления залитого белой краской на передней па­нели (рис. 1);

— величины от 0,1 до 9,9 (Ом или Вольт) отображаются «как есть», без гашения нуля в стар­шем разряде. При этом сотые доли не выводятся;

— величины менее 0,1 Ома отображаются с гашением нулей в старших разрядах. Выводится только значение сотой доли Ома.

Возможные варианты индикации показаны на рис. 4:

Реализация прибора

Преобразователем эквивалентного сопротивления в напряжение служит генератор на транзи­сторе VT 1. Измеряемое ЭПС конденсатора уменьшает добротность контура C 1, C 2, L 1, в резуль­тате чего амплитуда колебаний снижается. Сигнал с генератора подается на АЦП микроконтроллера и после необходимой обработки выводится на индикатор.

Измерение сопротивления в диапазоне сотых долей Ома сопряжено с определёнными трудно­стями. Начинают сказываться такие явления, как шум АЦП, «дрожание» амплитуды генератора, неста­бильность питающего напряжения, температурный дрейф и т.д.

Всё вместе это выливается в две составляющие:

— шум, т.е. кратковременные случайные изменения показаний;

— дрейф, т.е. относительно медленное и, как правило, однозначное изменение показаний, свя­занных в основном с из­ме­не­нием температуры и питающего напряжения.

Шум достаточно эффективно устраняется программным способом. Так, при измерении сопротивле­ний от 0,01 до 0,09 Ом или обнулении могут наблюдаться нечастые изменения показаний на 1 единицу. Дрейф и все начальные смещения приходится устранять путём компенсации те­кущего значения. Для оперативного обнуления показаний на переднюю панель выведена кнопка S 2.

Следует отметить, что подобные сложности возникли из-за довольно большого, для такой про­стой схемы, диапазона измеряемых сопротивлений. Но любая разработка — это всегда поиск оптималь­ного решения, которого невозможно достичь без компромиссного подхода.

Принципиальная схема измерителя приведена на рис. 5:

Напряжение питания измеряется по линии CPWR .

Одноимённые катоды индикатора HG 1 соединены. На схеме через точку показаны номера выво­дов для используемого автором индикатора. При этом слева даны номера выводов старшего разряда. Например: 11 — вывод катода сегмента » A » младшего разряда, 16 — вывод катода сегмента » A » старшего разряда. Номер вывода зажигающего единицу — 9 .

Технологическая перемычка J 1 устанавливается во время наладки прибора и блокирует чтение из EEPROM сохранённого смещения. При этом после включения питания в ОЗУ пишется фиксированное значение смещения, необходимое для задания правильного режима работы генератора.

Наладка прибора

Для налаживания, кроме обычного мультиметра, желательно иметь осциллограф и лабораторный источник питания. Вся работа ограничивается, в основном, проверкой сигналов в разных точках.

Перед подачей питающего напряжения + 9 В следует выставить резистор R 6 в нижнее по схеме положе­ние и замкнуть пайкой выводы Cx . Микроконтроллер вставлять не нужно.

Проверить наличие напряжения питания +5 В на выходе стабилизатора, коллекторе транзистора и выводах панельки микроконтроллера.

Установив щуп осциллографа на 23 выводе панельки, убедиться в наличии сигнала подобного вида:

Частота генерируемых колебаний должна быть около 30 кГц. Вращая резистор R 6 убедиться, что амплитудное значение сигнала может достигать 4,5 Вольт. Если этого не происходит, скорее всего, низка добротность катушки L 1 (применён неподходящий материал сердечника). После этого установить амплитуду сигнала 3,5 Вольт. Указанная на рисунке амплитуда получится после того, как вращением R 6 будут выставлены нулевые показания индикатора.

Проверить сигнал измерения питающего напряжения на 24 выводе панельки. Он должен быть ра­вен половине напряжения питания.

Замыкая перемычками выводы 9, 10 панельки на +5 В, а выводы порта PD на землю, убедиться в правильной распайке индикатора HG 1. Буквенное обозначение сегментов индикатора:

Рис. 7

Вставить запрограммированный контроллер в панельку и установить перемычку J 1. Подать пита­ние и наблюдать за отображением величины питающего напряжения на индикаторе. Оно должно сов­падать с истинным до десятых долей вольта.

Через две секунды будет отображаться измеренное сопротивление. Кнопку S 2 не нажимать. Враще­нием резистора R 6 необходимо добиться показаний индикатора в границах 0,01. 0,09 Ом. После этого резистор трогать не следует.

Нажимая на кнопку S 2 убедиться в том, что показания обнуляются.

Снять перемычку J 1 и убедиться, что сохранённое смещение восстанавливается после выключе­ния питания.

Разомкнуть выводы Cx и убедиться, что показания индикатора соответствуют режиму «Зашкал» (см. рис. 4).

Наладка прибора закончена.

Работа с измерителем

Последовательность действий классическая :

— с некоторым усилием замыкаем щупы;

— нажимаем и отпускаем кнопку >0 — ждём 2. 3 секунды и считываем резуль­тат.

В процедуру обнуления можно выполнять в любое время, например, непосредственно перед точным замером конденсатора с низким ЭПС.

Если нажать на кнопку >0 DA 1 входное напряжение должно быть не меньше 6,5 Вольт. В противном случае напряжение на выходе снижается. Помимо прочего, это влияет на точность измерения питающего напряжения — показания становятся завышенными. Однако спутать такой режим с нормальным нельзя по двум причинам:

— яркость свечения индикатора явно занижена;

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

Конструктивное оформление

В авторском варианте вся конструкция собрана на печатной плате из односторонне фоль­ги­ро­ван­ного стеклотекстолита. Посадочные размеры сняты с оригинальной платы модема D — link (см. сбороч­ный чертёж). Для индикатора HG 1 предусмотрена выемка по переднему краю платы.

Рис. 8

Нижние выводы индикатора (с 1 по 9) припаиваются непосредственно к контактным площадкам. Так обеспечивается механическое крепление индикатора. Весь остальной монтаж выполнен перемыч­ками из одножильного провода в ПВХ изоляции. До установки индикатора следует запаять:

— 3 перемычки в отверстия на плате (соединяют выводы 1-5, 2-6, 3-8);

— 3 перемычки непосредственно на индикаторе (соединяют 11-16, 10-15, 12-18);

— 7 отводов с выводов 11, 12, 13, 14, 15 и 17 (2 шт), которые после установки индикатора впаи­вают в соответствующие отверстия платы.

Номиналы элементов колебательного контура C 1, С2, L 1, R 3 должны быть точно такими, как ука­зано на принципиальной схеме. Конденсаторы — плёночные К73-17.

Катушка L 1 намотана на кольце К10х4х2 из феррита марки М2000НМ и содержит 22 витка про­вода ПЭВ-2 диаметром 0,35 мм. Не следует брать внешне похожие кольца от распространённых сейчас элек­тронных трансформаторов, дросселей, балластов энергосберегающих ламп. Индуктивность будет в норме, зато добротность такой катушки оказывается значительно ниже.

Дроссель L 2 — SMD , подойдут типоразмеры 1812, 2220, 2525.

Конденсаторы C 5, C 6, C 9 — танталовые, SMD , тип корпуса А или B ; C 4, C 7, C 8 — керамические, ти­поразмер 0805.

Все постоянные резисторы — выводные, 0.125 или 0.25 Вт; впрочем, за исключением резистора R 3, конфигурация контактных площадок позволяет установить и SMD резисторы типоразмеров 0805 или 1206.

Переменный резистор R 6 — 3006 P -1-501, 500 Ом.

Диоды VD 1, VD 2 устанавливают «как один», спаяв выводы средней точки между собой.

До установки панельки под микроконтроллер необходимо запаять одну перемычку (см. сбороч­ный чертёж).

Во время прошивки микроконтроллера DD 1 следует запрограммировать (т.е. установить = «0») сле­дующие фьюзы: