Простые часы на светодиодных матрицах.
Простые часы на светодиодных матрицах.
Многие радиолюбители, начинающие и не только любят «изобретать велосипед» — строить СВОИ электронные часы. Не обошла эта участь и меня. Конструкций часов в инете сегодня конечно предостаточно, но вот часов на светодиодных матрицах почему-то среди них единицы. В русскоговорящем интернете я нашел только одну полностью законченную конструкцию. В тоже время, светодиодные матрицы сейчас очень сильно подешевели, и их стоимость не выше, а то и ниже, чем у семисегментных индикаторов такого же размера. Например примененные мной GNM23881AD при размере 60х60мм были куплены за 1,5уе (3 индикатора обошлись в 4,5уе) за эти деньги вы вряд ли купите четыре семисегментника таких-же размеров). А вот информации, разместить на матричном индикаторе, можно намного больше. Кроме цифр на них можно отображать буквы, знаки, а с помощью бегущей строки еще и текст. Исходя из этого, появилось желание построить часы на светодиодных матрицах, но чтоб схема при этом получилась не сложнее чем на семисегментниках.
Функционал у часов такой:
- Отсчет времени, календарь, день недели. (високосный год учитывается, переход на летнее/зимнее время не осуществляется).
- Сохранение хода часов при пропадании внешнего питания (потребление составляет 15мка).
- Коррекция хода + — 59,9сексутки, с шагом 0,1сек.
- 9 будильников. 3 из которых «одноразовые», и 6 «постоянных», индивидуально настраиваемых по дням недели.
- Индивидуально настраиваемая длительность звукового сигнала каждого будильника (1-15мин).
- Звуковое подтверждение нажатия кнопок (возможно отключить).
- Ежечасный звуковой сигнал (возможно отключить). С 00-00 до 08-00 сигнал не подаётся.
- 1 или 2 датчика температуры (Улица и дом).
- Настраиваемая бегущая строка, посредством которой выводится вся информация (кроме времени)
- Значение коррекции хода, и настройки «бегущей строки» — сохраняются даже при пропадании резервного питания.
«Сердцем» часов выбрана AtMega16A, из-за её доступности, дешевизны и «ногастости». Схему хотелось максимально упростить, поэтому все что можно, было возложено на контроллер. В результате удалось обойтись всего двумя микросхемами, контроллером и регистром с мощными выходами TPIC6B595. Если кому то недоступен TPIC6B595, то можно его заменить на 74НС595 + ULN2803. Оба варианта были опробованы. Так же можно попробовать применить TPIC6С595, она немного слабовата, и слегка грелась, но в целом работала стабильно. Отсчет времени производится с помощью асинхронного тайме – Т2. Ход часов продолжается и при пропадании питания. В это время бОльшая часть схемы обесточена, и только контроллер получает питание от батарейки, аккумулятора , или от ионистора. Мне было интересно «по играться» с ионистором, поэтому применил его. Ток потребления часами в дежурном режиме составляет 15мка. При питании от ионистора на 1Ф, часы «продержались» четверо суток.

В обычном режиме на экране отображается время в формате часы-минуты. С интервалом в одну минуту происходит запуск бегущей строки. Бегущей строкой отображается день недели, дата, год, темп. дома, и темп. на улице. Бегущая строка настраиваемая, т.е. можно включить/выключить отображение любого из элементов. (я например всегда отключаю отображение года). При выключении отображения всех элементов бегущей строки, она не запускается вовсе, и часы постоянно отображают только время.
9 будильников разделены на 3 одноразовых и 6 многоразовых. При включении будильников 1-3, они срабатывают только один раз. Для того чтоб они сработали еще раз, их нужно повторно включать вручную. А будильники 4-9 многоразовые, т.е. они будут срабатывать ежедневно, в установленное время. Кроме того эти будильники можно настроить на сработку только в определенные дни недели. Это удобно, например если не хотите чтоб будильник разбудил Вас в выходные. Или например Вам нужно просыпаться в будние дни в 7-00, а в четверг в 8-00, а на выходных будильник не нужен.
Коррекция хода производится один раз в сутки, в 00-00. Если часы спешат к примеру на 5 сек в сутки, то в 00-00-00 время установится в 23-59-55, если же часы отстают на 5 сек, то в 00-00-00 время установится в 00-00-05. Шаг коррекции – 0,1 сек. Максимальная коррекция – 59,9 сек/сутки. С исправным кварцем больше вряд ли понадобиться. Коррекция осуществляется и в дежурном режиме при питании от батареи.
Светодиодные матрицы можно использовать любые 8*8 светодиодов с общим катодом. Как уже было указано, я применил GNM23881AD. В принципе можно «набрать» матрицу и из отдельных светодиодов. Микроконтроллер AtMega16a можно заменить на «старый» AtMega16 с буквой L. При этом, теоретически должен немного увеличится ток потребления от батарейки. Наверное будет работать и просто AtMega16, но могут возникнуть проблемы при работе от 3х вольтовой батарейки. Диод D1 — желательно любой диод шоттки. С обычным выпрямительным тоже работает, но чтоб обезопасить себя от различных глюков, связанных с тем что часть схемы питается напряжением «до диода», а часть «после диода» лучше поискать шоттки. Транзистор VT1 – любой n-p-n.
Управление часами осуществляется двумя кнопками. Их количество можно было довести до 8шт, не добавляя больше вообще ни одного компонента, кроме самих кнопок, но захотелось попробовать «выкрутится» всего двумя. Кнопки условно названы «ОК» и «ШАГ». Кнопкой «ШАГ» как правило происходит переход к следующему пункту меню, а кнопкой «ОК» изменение параметров текущего меню. Сигнал сработавшего будильника также выключается кнопками «ОК» или «ШАГ». Нажатие любой кнопки во время сигнала будильника отключает его. Схема управления получилась такой:
Конструктивно часы выполнены на одной ПП. Размер ПП соответствует размеру индикаторов. Минимальная ширина дорог ПП – 0,4мм, расстояние между – 0,4мм. Так что любители «ЛУТа» смогут без труда изготовить плату самостоятельно.
Все элементы — в SMD исполнении, и расположены с одной стороны платы. А индикаторы с другой. Получается миниатюрный монолитный блок, который легко встроить в какой ни будь небольшой плоский корпус.
Корпус спаян из стеклотекстолита, прошпаклеван и покрашен в цвет «спелая вишня». Стекло передней панели – обычное тонированное стекло.
Финальный результат.
>>> Видео работы часов
Изображение на видео слегка подергивается и мерцает. Как мне объяснили знающие люди, с моей камерой лучше снять и не получится, так как частота смены кадров у часов и у камеры разная. Отсюда всякие мерцания и прочая лабуда. В реальности ничего подобного не наблюдается.
Ну вот в принципе и все. Ниже есть все необходимое для повторения часов. Вопросы можно задавать на форуме . Если у кого появятся интересные идеи, так же пишите не стесняйтесь. Удачи, и спасибо за внимание.
************************************************************* ************************************************************
АПГРЕЙД …….
Судя по отзывам после публикации статьи проектом заинтересовались. Многие повторили. Значит нужно развиваться дальше. ))) На данный момент самая свежая прошивка — V1_06. В ней добавлены — «скроллинг» цифр, полностью переписана работа будильников(были глюки при одновременном использовании нескольких будильников), названия дней недели в настройках будильников сделаны привычные двухбуквенные (было – пон, вто, сре….) и неделя начинается с понедельника (было на американский манер с воскресенья). Также добавлена поддержка AtMega32 (нужна перекомпиляция), новые шрифты цифр (выбор пока на этапе компиляции), переназначение датчиков температуры (можно программно определить какой датчик является домашним, а какой уличным), регулировка скорости бегущей строки, и кое что по мелочи. Также отловлены мелкие глюки, и конечно же добавлены большие новые )))).
Регулировка скорости бегущей строки находится в пункте «НАСТРОЙКА». Теперь после настройки звукового сигнала клавиатуры, по нажатию кнопки «ШАГ» мы не возвращаемся в основной режим, а переходим к настройке скорости. На экране в это время бежит текст, а кнопкой «ОК» можно регулировать его скорость. Когда выставите желаемую скорость, нажмите «ШАГ» и выйдите из этого пункта меню. Теперь везде скорость текста будет такой, как вы установили.
Если в часах установлено два датчика температуры ds18b20, то после настройки скорости строки, мы попадаем в меню «переопределения» датчиков. В этом меню можно указать какой датчик у нас находится дома, а какой на улице. На экране в это время выводится буква «д» и температура одного из датчиков. Нажатием кнопки «ОК» переключаем датчики так, чтоб на экране отображалась «домашняя» температура. После чего кнопкой «ШАГ» выходим из этого меню. Если в часах установлен один датчик, или не установлено вовсе, то в пункт переопределения датчиков мы не попадаем, и сразу после настройки скорости строки переходим в основной режим.
Больше всего вопросов поступило по применению матриц с ОА в строке, и замене регистра TPIC6B595. Самый простой и дешевый вариант заменыTPIC6B595 это регистр 74HC595 + ULN2803. Также можно заменить на 74HC595 + восемь ключей на отдельных транзисторах. Транзисторы подойдут и биполярные структуры NPN, и полевики (мосфеты) N-канальные.
СХЕМА 74HC595 + ULN2803
СХЕМА 74HC595 + восемь NPN транзисторов.
СХЕМА 74HC595 + восемь N-канальных полевых транзистора (практически повторяет предыдущую схему).
Для того чтоб в часах применить матрицы с «ОА» в строке их нужно немного доработать. Для этого нам понадобится крупный напильник (рашпиль) и станок лазерной резки……. )))))) Шучу, я шучу, ничего для этого нам не понадобится, Достаточно просто развести печатную плату по другому. Вы спросите, а как это матрица с ОА будет работать в схеме с ОК? Легко! Дело в том, что понятие «ОК» или «ОА» для светодиодной матрицы довольно условное, и для того чтобы «превратить» матрицу с ОА в строке в матрицу с ОК, достаточно всего лишь повернуть её на 90 градусов влево или вправо.
Матрица ОА
Поворачиваем на 90 градусов и получаем матрицу ОК
Попутно давайте разберемся с «путаницей» в маркировке. Многие наверное заметили что матрицы с общим катодом в строке, в прайсах продавцов значатся матрицами с общим анодом. А все потому, что производители маркируют матрицы не по строкам, как многие привыкли , а по столбцам. По мне, это как то нелогично, но производителям как говорится видней…. Давайте будем называть матрицы у которых в нормальном положении в строке катоды диодов – матрицами с ОК, а у которых в строке аноды – матрицами с ОА. Ну а для данной конструкции можно с этим вообще не заморачиваться, и сначала, приобрести матрицы, а потом изготовить нужный вариант платы.
Как я писал выше, в новой прошивке добавлен выбор шрифтов цифр. Вернее даже не в прошивке, а в исходнике. Возможно в будущем я встрою выбор шрифтов прямо в прошивку, но пока, для выбора нового шрифта, нужна перекомпиляция прошивки. Для этого откройте исходник, в самом начале найдите строчки
Напротив FONT вместо нолика поставьте номер желаемого шрифта от 0 до 6. (0 – «родной» шрифт). Компилируйте и прошивайтесь.
(шрифты рисовал форумчанин sirgio с сайта радиокот).
Для применения AtMega32 также понадобится перекомпиляция. В начале исходника найдите строчки
Напротив #define ATMEGA16 поставьте ноль, а напротив #define ATMEGA32 поставьте единичку. Компилируйте и прошивайтесь.
Вариант замены TPIC6B595 на 74нс595+8 транзисторов ВС817 был опробован в железе. Работает нормально. Корпус новых часов сделал из оргстекла. На матрицы наклеил тонировочную автомобильную пленку зеленого цвета. Это немного снижает яркость, зато здорово добавляет контрастности, и улучшает эстетическое восприятие ))). Но главное — на солнце читаемость становится лучше. Вообще, я если честно разочарован зелеными матрицами. При той же заявленной яркости что и красные, и при большем закаченном в них токе чем у красных – читаемость на солнце у них гораздо хуже.
74нс595+8 транзисторов ВС817 вместо TPIC6B595. Места много, все прекрасно помещается.
Индикаторы без светофильтра. Яркость хороша, но читается плохо.
Индикаторы со светофильтром. Менее ярко, но читаемость лучше.
Корпус из оргстекла.
Контроль за соблюдением тех. норм и допусков, осуществлялся серьёзными специалистами высокого уровня.
Ну и напоследок >>>видео новых возможностей часиков.
(«старые» возможности смотрите на видео выше), и
>>>видео двух часов рядом. (В этот раз взял у друга камеру получше, теперь мерцаний и прочей ерунды невидно.)
Вот, вроде пока и все. В ближайших планах добавить всякие спецэффекты при смене информации, сделать пины контроллера к которым подключены столбцы программно переназначаемыми (идея форумчанина ВНН), В далеких планах, — очень хочется сделать голосовое проговаривание времени каждый час, и при сработке будильников. Пока понятия не имею как к этому подступится, и реально ли это сделать на данном железе, но самый «жирный» таймер контроллера Т1 специально нигде не использовал, берегу для этой задачи.
Принимаю интересные идеи для реализации.
Коммерческое использование конструкции без разрешения автора — запрещено
Файлы:
01.rar
02.rar
03.rar
04.rar
05.rar
06.rar
07.rar
12.jpg
Все вопросы в Форум.
Простые часы на светодиодных матрицах.
Многие радиолюбители,начинающие и не только любят «изобретать велосипед» — строить СВОИ электронные часы. Не обошлаэта участь и меня. Конструкций часов винете сегодня конечно предостаточно, новот часов на светодиодных матрицах почему-то среди них единицы. В русскоговорящем интернете я нашел толькоодну полностью законченную и описанную конструкцию. В тоже время,светодиодные матрицы сейчас очень сильно подешевели, и их стоимость не выше, а то и ниже, чем у семисегментныхиндикаторов такого же размера. Например примененные мной GNM23881AD при размере 60х60мм были куплены за 1,5уе (3индикатора обошлись в 4,5уе), за этиденьги врядли можно купить четыре семисегментника таких-же размеров. А вот информации, разместить на матричном индикаторе, можно намногобольше. Кроме цифр на них можноотображать любые буквы, знаки, а с помощью бегущей строки еще итекст. Исходя из этого, появилось желание построить часы на светодиодныхматрицах, но чтоб схема при этом получилась не сложнее чем на семисегментниках. Также хотелось чтоб она была достаточно функциональная и не похожая надругие. Так родилась следующая схема.
Функционал у часов такой:
Отсчет времени, календарь, день недели. (високосный годучитывается, переход на летнее/зимнее время не осуществляется).
Сохранение хода часов припропадании внешнего питания (потребление составляет 15мка).
Коррекция хода + — 59,9сек\сутки, с шагом 0,1сек.
9 будильников. 3 из которых «одноразовые», и 6 «постоянных», индивидуально настраиваемых по дням недели.
Индивидуально настраиваемаядлительность звукового сигнала каждого будильника (1-15мин).
Звуковое подтверждение нажатиякнопок (возможно отключить).
Ежечасный звуковой сигнал(возможно отключить). С 00-00 до 08-00 сигнал не подаётся.
1 или 2 датчика температуры (Улица и дом).
Настраиваемая бегущая строка,посредством которой выводится вся информация (кроме времени)
Значение коррекции хода, и настройки«бегущей строки» — сохраняются даже при пропадании резервногопитания.
«Сердцем» часов выбрана AtMega16A,из-за её доступности, дешевизны и «ногастости». Схему хотелось максимально упростить, поэтому все что можно, было возложено на контроллер. В результате удалось обойтись всего двумямикросхемами, контроллером и регистром TPIC6B595. Если кому то недоступен TPIC6B595, то можно его заменить на 74НС595 + ULN2803. Оба варианта были опробованы. Так же можно попробовать применить TPIC6С595, она немногослабовата, и слегка грелась, но в целом работала стабильно. Отсчет времени производится с помощью асинхронного тайме – Т2. Ход часов сохраняется и при пропадании питания. В это время бОльшая часть схемы обесточивается, а контроллер питается от батарейки,аккумулятора , или от ионистора. Мнебыло интересно «по играться» с ионистором, поэтому применил его. Токпотребления часами в дежурном режиме составляет 15мка. При питании от ионисторана 1Ф, часы «продержались» четверо суток. Этого вполне достаточно для поддержания ходаво время перебоев питания. Еслиприменить батарейку СR2032, то теоретически, по расчетам заряда должно хватить на 1,5года. Наличие сетевого напряжения контроллер«слушает» через вывод РВ.3 Этот вывод является инвертирующем входомкомпаратора. Напряжение питания, через делитель R2-R3 подается на вывод РВ.3, и в нормальном состоянииравно примерно 1,5в. Если внешнеенапряжение упадет ниже 4,1 вольта, то напряжение на выводе РВ.3 станет меньше 1,23вольта, при этом сгенерируется прерывание от компаратора, и вобработчике этого прерывания выключаютсявсе «лишние» узлы контроллера и сам контроллер усыпляется. В этом режиме продолжает работать толькоотсчитывающий время таймер Т2. Припоявлении внешнего питания, напряжение на РВ.3 снова подымится выше 1,23в, контроллер «увидев» это, переведет все узлы врабочее состояние. Если вместо ионистора, будет использоватьсябатарейка СR2032, то её нужно подключить через диод(предпочтительнодиод шоттки). Анод диода подключается к + батарейки, а катод к катоду VD1.
В обычном режиме на экране отображается время в форматечасы-минуты. С интервалом в одну минуту происходит запуск бегущей строки. Бегущей строкой отображается деньнедели, дата, год, темп. дома, и темп. наулице. Бегущая строканастраиваемая, т.е. можно включить/выключить отображение любогоиз элементов. (я например всегдаотключаю отображение года). Привыключении всех элементов, бегущая строка не запускается, и часы постоянно отображают текущее время.
9 будильников разделены на 3 одноразовых и 6многоразовых. При включениибудильников 1-3, они срабатывают только один раз. Для того чтоб они сработали еще раз, их нужноповторно включать вручную. А будильники4-9 многоразовые, т.е. они будут срабатывать ежедневно, вустановленное время. Кроме того этибудильники можно настроить на сработкутолько в определенные дни недели. Это удобно, например если не хотите чтоб будильник разбудил Вас ввыходные. Или например Вам нужно просыпаться в будние дни в7-00, а в четверг в 8-00, а на выходныхбудильник не нужен. Тогда настраиваемодин многоразовый на 7-00 в понедельник-среду и пятницу, а второй на 8-00 в четверг….. Кроме того все будильники имеют настройкудлительности сигнала, и если Вам, длятого чтоб проснуться, мало сигнала втечении 1 минуты, то можно увеличить егона время от 1 до 15мин.
Коррекция хода производится один раз в сутки, в 00-00. Если часы спешат к примеру на 5 сек всутки, то в 00-00-00 время установится в 23-59-55, если же часы отстают, то в 00-00-00 время установится в 00-00-05. Шаг коррекции – 0,1 сек. Максимальная коррекция – 59,9 сек/сутки. С исправным кварцем больше вряд липонадобиться. Коррекция осуществляетсяи в дежурном режиме при питании от батареи.
Светодиодные матрицы можно использовать любые 8*8 светодиодов с общим катодом. Как уже было указано, я применил GNM23881AD. В принципе можно «набрать» матрицу и из отдельных светодиодов. Микроконтроллер AtMega16a можно заменить на «старый» AtMega16 с буквой L. При этом, теоретически должен немногоувеличится ток потребления от батарейки. Наверное будет работать и просто AtMega16, но могут возникнутьпроблемы при работе от батарейки. Диод D1 — желательно любой диод шоттки. С обычным выпрямительнымтоже работает, но чтоб обезопасить себяот различных глюков, связанных с тем чточасть схемы питается напряжением «до диода», а часть «после диода» лучшепоискать шоттки. Транзистор VT1 – любой n-p-n.
Управление часами осуществляется двумя кнопками. Их количество можно было довести до 8шт, недобавляя больше вообще ни одного компонента, кроме самих кнопок, но захотелось попробовать «выкрутится» всего двумя. Кнопки условно названы «ОК» и «ШАГ». Кнопкой «ШАГ» как правило происходит переходк следующему пункту меню, а кнопкой «ОК»изменение параметров текущего меню. Сигнал сработавшего будильника также выключается кнопками «ОК» или «ШАГ». Нажатие любой кнопки во время сигналабудильника отключает его. Схема управления получилась такой:
Конструктивно часывыполнены на одной ПП. Размер ППсоответствует размеру индикаторов. Минимальная ширина дорог ПП – 0,4мм, расстояние между – 0,4мм. Такчто любители «ЛУТа» смогут без трудаизготовить плату самостоятельно.
Все элементы — в SMD исполнении, и расположены с одной стороныплаты. А индикаторы с другой. Получается миниатюрный монолитный блок, который легко встроить в какой ни будьнебольшой плоский корпус.
Корпус «спаян» изстеклотекстолита, прошпаклеван ипокрашен в цвет «спелая вишня». Стеклопередней панели – обычное тонированноестекло.
Финальный результат.
Проект в протеусе у меня почему то не заработал, так что отлаживал в железе. Если кто соберет в протеусе, и у него нормально заработает — присылайте,обязательно выложу.
Обсуждение и вопросы можно задавать на форуме http://radiokot.ru/forum/viewtopic.php?f=25&t=50199 Если у кого появятся интересные идеи что ещеможно добавить в часы – пишите не стесняйтесь, реализую все, что смогу (правда кодер я слабенький..…).
Видео работы часов — http://www.youtube.com/watch?v=kYM-qe5YGf0 (что то не получается у меня нормальноснять видео. Изображение в реальностиплавное и четкое, а на видео выходит дерганное и «рваное»….)
Прошивка и исходникна си (CodeVision_AVR_2.05)
Плата Lay
Прошивка на українській мові — скачать
|
||||||||
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
FUSE, ATtiny24а устанавливаются на внутренний генератор МК — 8МГц.
в архиве .
Радиодатчик для матричных часов, от батарейного питания, схема и прошивка в форуме.
DS18b20
, RTC
DS1307
, датчик освещения, кнопки управления, комплект
RF
-модулей, и блок питания 5 вольт (потребление схемы в пиковых моментах, при максимальной яркости, составляет до 0.6А, а в среднем это 0.3А, можно использовать и лишнюю зарядку от мобилки, если имеется с подходящими параметрами)
).
В чем интерес применения
Arduino Nano Atmega328
.
В том, что на борту этой платки уже имеется модем с выходом на мини USB, прошить такой контроллер можно без особого труда через bootloader, с помощью вашего компьютера и телефонного шнура для зарядки мобильного телефона с разъемом под мини USB.
Все это несложно делается с помощью простенькой программки
XLoader
.
Чуть подробней про опыт прошивки через bootloader, описывал здесь «Nano вольт — амперметр 2 канала.
«.
При желании все необходимые модули можно по выгодной цене купить на Aliexpress.
MAX7219 dot matrix |
Nano Atmega328 |
DS1307 |
DS18b20 |
Датчик освещения |
Блок питания |
После заказа, немного терпения пока все эти детальки придут по почте, и вы сможете себе гарантированно собрать, эту весьма интересную схему с часами и термометром.
В общем, с элементарной базой, думаю вопросов не должно возникнуть, так все здесь стандартно.
Оформление отображения вида работы часов — термометра, это уже любительский вариант исполнения.
В программе имеется три варианта оформления работы часов термометра.
- Первый вариант это, поочередное отображение времени (часы и минуты), уличной температуры и температуры помещения (два датчика DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Второй вариант, отображение времени (часы и минуты), температуры окружающего воздуха (один датчик DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Третий вариант, просто часы, отображение времени (часы и минуты),
отображение в режиме бегущей строки — дата, месяц, год и день недели (отображение температуры отключено).
Собственно различия вариантов небольшие, и заключается только в различиях отображения температуры на матричном дисплее часов термометра, практически каждый вариант может быть востребован.
Схема.
— В схеме использованы три кнопки управления, при кратковременном нажатии на эти кнопки, одноразово вызываем ротацию показаний на основном экране часы – дату — день недели – температура.
— При нажатии
Кн2
более 2х сек., осуществляется вход в меню установок (при нахождении в меню, нажатие
Кн2
более 2х сек., выход из меню установок).
— После входа в меню, кнопками
Кн1
–
Кн3
можно сделать коррекцию даты и времени, движение по меню осуществляется
Кн2
, изменяемый параметр будет находиться в инверсном свечении.
— Также в меню, возможно, если в этом есть необходимость, установить коррекцию неточности хода часов, в течение суток ±9сек.
— Следующий пункт в меню будет, это выбор используемого языка, в одной прошивке предусмотрено использование языков
UA-EN-RU
.
— Пункт варианта анимации на экране, один из трех, что описан в начале статьи.
— Радиодатчик, при выборе значение «0» , радиодатчик в программе не задействован, при выборе 1 или 2, показания температуры с радиодатчика займут место на дисплее, вместо
ds
18
b
20 №1 или №2.
Фото часов в процессе отладки на макетной плате.
Схема в протеусе
Схема передатчика для этих часов.
С помощью перемычек Jp -1, Jp -2, Jp -3, можно выбрать, частоту передачи RF -модулем пакетов информации с температурой от датчика №3.
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
(1 – перемычка замкнута, 0 – нет)
Печатная плата для часов, и радиодатчика.
FUSE для работы ATmega328 с загрузчиком (архив с прошивкой загрузчика ATmega328. )
FUSE, если кто будет использовать ICSP программатор для прошивки ATmega328 в этой схеме.
Прошивка “Часы – термометр на матричных модулях ” , печатные платы, proteus, в архиве .
Эта бегущая строка позволяет читать текст объемом не более 8192 буквы включая пробелы. Текст вводится в память 24С64 бегущей строки при помощи клавиатуры от компьютера без подключения самого компьютера. Во время ввода текста есть возможность стирания букв при помощи клавиши (Backspace) наблюдая за этим действием удаления букв на табло.
Есть возможность регулировки скорости бега букв при помощи двух клавиш рядом с цифрами клавиатуры (+ и -). Скорость бега строки записывается в самую последнюю ячейку памяти 24С64 поэтому при первом включении без регулировки скорости будет наблюдаться медленный бег букв и поэтому нужно сделать первую регулировку. Скорость бега очень сильно меняется при регулировки записи числа в последнюю ячейку 24С64 числа от 1….30 в десятичном измерении или в шестнадцатиричном1..1Е в чем можно убедиться с помощи программатора PICKIT2, но это не обязательно.
Память строки содержит знакогенератор имеющий в своей памяти весь алфавит русских букв заглавных и маленьких букв, а также некоторые знаки и все цифры.
Индикация строки построчная динамическая состоящая из 8 строк которые зажигаются сверху вниз по очереди одна за другой 300 раз в секунду выполняется весь цикл из 8 строк, что позволяет наблюдать картинку без мерцания.
Микросхемы табло 74НС595 выполняют роль зажигания горизонтали табло или строки из 160 светодиодов, а транзисторы дают возможность менять горизонтали или строки от верхних до нижних по очереди то есть зажигание табло происходит построчно с верху вниз по очереди со скоростью 300 кадров в секунду.
Сама микросхема 74НС595 представляет из себя обычный сдвиговый регистр с выводом каждого регистра на светодиодную матрицу но есть большое НО матрица с регистрами соединяется не на прямую а через фиксирующие логическое состояние регистрами.
Зачем это нужно? Это нужно для того чтобы пока идет загрузка от МК сдвиговых регистров по цепочке от одного к другому с каждым тактовым сигналом на выводе 11 и при этом наблюдалось на светодиодных матрицах чего нам вовсе не нужно так как картинка при этом засвечивалась светодиодами не в нужных местах. Поэтому дополнительные фиксирующие регистры блокируют во время загрузки данных вывод информации на матрицы и обновляют только после того как на выводах 12 появиться тактовый сигнал передовая от сдвиговых регистров к фиксирующим данные, а фиксирующие передают на матрицы.
Данные табло создающие все картинку строки поступают от МК с вывода 34 на вход регистра 14 микросхемы 74НС595 от первой микросхемы 74НС595 ко второй данные передаются с выхода 9 на вход 14 и так по цепочке до последней 20 микросхемы.
Повторюсь данные двигаются с каждым тактом на входе 11 всех микросхем 74НС595 по цепочке к самой последней микросхеме 74НС595 и после загрузки все 20 микросхем появляется такт на фиксирующих регистрах вывод 12 тем самым обновляя изображение всей строки, а не всего изображения табло. Строки каждый раз обновляются после перехода на более нижнюю строку.
При сборки табло очень удобно делать платы из двух матриц 8х8 или чтобы плата содержала по две матрицы с возможностью наращивания количества плат, подключив первую плату дисплея к плате микроконтроллера можно убедиться в ее работе без остальных плат дисплея и только после этого проверить следующие платы, так будет проще искать изъяны и ляпы пайки.
Чтобы проверить первую плату дисплея нужно подключить клавиатуру к плате МК подать питание нажать одну или несколько букв подать команду конца строки, что текст введен нажав клавишу ENTER после этого пойдет бег строки с низкой скоростью так как скорость бега тоже нужно отрегулировать нажимая клавишу (-) до тех пор пока не запишется константа от 5..1Е в шестнадцатиричном виде в память 24С64.
Если вам не нужна строка такой большой длинны состоящая из 20 матриц 8х8, то я могу вам выслать прошивку с меньшим количеством от 2 до 19 это делается просто и быстро ответ вам вышлю письмо с прошивкой мой адрес evgen100777(sobaka)rambler.ru.
Платы дисплея разведены для матриц 6х6 сантиметров красного цвета свечения с маркировкой QFT 2388ASR плата микроконтроллера сделана с условием модернизации добавления строке часов и термометра но так как прошивка под это дело не доделана не рекомендую добавлять кнопки, чтобы не спалить порт МК.
Командные кнопки.
(Shift ) – кнопка переключения на большие буквы, нажав на нее и отпустив нажимается буква и выводиться на табло заглавная буква если нажать следующую букву без предварительного нажатия Shift выводиться маленькая буква, то есть перед каждым вводом заглавной буквы нужно нажать и отпустить Shift.
(+ и— ) — эти клавиши работают при включении бегущей строки до набора текста и регулируют скорость перемещения букв по табло + увеличивает скорость – уменьшает скорость перемещения букв.
Backspace — клавиша стирания текста во время набора, работает только в режиме набора текста отображая на табло удаленную букву смещением текста налево.
Enter эта клавиша запускает бег строки после набора текста обозначая конец текста в памяти 24С64 и говорит о том что нужно с этого места текста начать бег строки с начала.
Для нового набора текста бегущую строку нужно выключить и снова включить с подключенной клавиатурой выбрать скорость бега текста клавишами плюс и минус и при первом нажатии на букву табло очищается с отображением в правой части строки первой буквы набирая текст он продвигается в левую сторону после этого нажимается клавиша Enter и строка уходит в рабочий режим бега не реагируя на клавиатуру.
Для повторного вода текста нужно не забывать включить и выключить строку.
Бегущая строка с часами, календарем и набором текста на клавиатуре PS/2
Бегущая строка показывает время часы минуты секунды день цифрами, а месяц и день недели словами например ВРЕМЯ 12.30.10 20 ЯНВАРЯ СРЕДА.
Точно такая же бегущая строка с набором текста на клавиатуре только имеет еще часы с календарем. В этой строке нельзя менять количество светодиодных матриц так как они все 20 штук задействованы в настройке времени даты и месяца и дня недели.
Во время набора текста нажатием клавиши левого CTRL вставляются часы с календарем в текст бегущей строки. Эта строка имеет все те же функции что и прошлые строки на PIC16F628 и PIC16F877 и управляется она точно также.
Для настройки времени нужно нажать кнопку выбор на плате с микроконтроллером при этом появляется табло настройки времени, начинают мигать секунды нажатием кнопки изменить секунды сбрасываются в ноль. Давим повторно кнопку выбор начинают мигать минуты нажатием кнопки изменить увеличиваем минуты, тоже самое с часами датой месяцем и днем недели.
В настройках времени день недели и месяц отображается в виде цифр.
Вот чуть измененная схема этой строки тут добавилось две кнопки с подтягивающими резисторами изменения времени и часовым кварцем на 32768 Гц и еще один резистор подтягивающий вход контролера отвечающий за ввод клавиатуру.
Для более стабильной работы PIC16F877 лучше запитывать через резистор 11 ом 0.25 Ватт по плюсовому питанию для понижения помех идущих от транзисторов которые коммутируют строки табло.
Бегущая строка с часами и термометром для улицы и дома.
Бегущая строка работает на датчиках DS1820 и показывает температуру в доме и на улице путем вставки в текст бегущей строки вывода показаний на табло.
Показания выводиться в виде надписи ТЕМПЕРАТУРА ДОМ 25,2 УЛИЦА -12,4 показания температуры имеют младший показатель в виде десятой доли градуса.
Для вставки термометра в текст надо нажать клавишу левый ALT на компьютерной клавиатуре, подключенной к бегущей строке.
Диапазон температур выводимым термометром -55 до 99 градусов но не рекомендуется нагревать датчик выше 70 градусов во избежание его порче.
Длина провода идущего к датчику на улице должен быть не более 4 метров.
Есть прошивка с тремя Украинскими буквами.
Сигнал будильника снимается в виде лог 0 во время сигнала с 38 вывода PIC16F877
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Схема 1 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
IC2, IC3 | Сдвиговый регистр | CD74HC595 | 20 | В блокнот | |||
VT1-VT8 | Биполярный транзистор | BD140 | 8 | В блокнот | |||
C1, C2 | Конденсатор | 100 нФ | 2 | В блокнот | |||
C3, C4 | Конденсатор | 15 пФ | 2 | В блокнот | |||
C5 | Конденсатор | 3.3 нФ | 1 | В блокнот | |||
R1-R16, R18, R19, R21-R24, R30, R31 | Резистор | 330 Ом | 24 | В блокнот | |||
Резистор | 330 Ом | 144 | В блокнот | ||||
R26, R27 | Резистор | 5.1 кОм | 2 | В блокнот | |||
R28, R29 | Резистор | 4.7 кОм | 2 | В блокнот | |||
Cr1 | Кварцевый резонатор | 20.000 МГц | 1 | В блокнот | |||
Светодиодная матрица | 8х8 | 20 | В блокнот | ||||
Разъём | PS/2 | 1 | В блокнот | ||||
Схема 2 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
Сдвиговый регистр | CD74HC595 | 20 | В блокнот | ||||
Биполярный транзистор | BD140 | 8 | В блокнот | ||||
C2 | Конденсатор | 100 нФ | 1 | В блокнот | |||
C3, C4 | Конденсатор | 15 пФ | 2 | В блокнот | |||
C5 | Конденсатор | 3.3 нФ | 1 | В блокнот | |||
C6, C7 | Конденсатор | 33 пФ | 2 | В блокнот | |||
C8 | Конденсатор электролитический | 47 мкФ | 1 | В блокнот | |||
R18, R19, R21-R24, R30, R31 | Резистор | 330 Ом | 24 | В блокнот | |||
Резистор | 330 Ом | 144 | В блокнот | ||||
R26, R27, R32, R33 | Резистор | 5.1 кОм | 4 | В блокнот | |||
R29, R34, R35 | Резистор | 4.7 кОм | 3 | В блокнот | |||
R36 | Резистор | 11 Ом | 1 | В блокнот | |||
Cr1 | Кварцевый резонатор | 20.000 МГц | 1 | В блокнот | |||
Cr2 | Кварцевый резонатор | 32768 Гц | 1 | В блокнот | |||
S1, S2 | Кнопка тактовая | 2 | В блокнот | ||||
Светодиодная матрица | 8х8 | 20 | В блокнот | ||||
Разъём | PS/2 | 1 | В блокнот | ||||
Схема 3 | |||||||
IC | МК PIC 8-бит | PIC16F877 | 1 | В блокнот | |||
IC1 | Микросхема памяти | 24C64 | 1 | В блокнот | |||
Сдвиговый регистр | CD74HC595 | 20 | В блокнот | ||||
Датчик температуры | DS18B20 | 2 |
- Второй вариант, DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
Общая схема.
— При нажатии
Кн2
Кн2
Кн1
–
Кн3
Кн2
UA-EN-RU
.
ds
18
b
20 №1 или №2.
Возможны схемные решения, с вариантами комбинаций для подключения датчиков, ниже примеры вариантов, с которыми данная программа будет работать корректно.
Схема в протеусе
прошивкой загрузчика ATmega328.)
FUSE, если кто будет использовать ICSP программатор для прошивки ATmega328 в этой схеме.
С помощью перемычек Jp -1, Jp -2, Jp RF
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
FUSE, ATtiny24а устанавливаются на внутренний генератор МК — 8МГц.
в архиве .
Радиодатчик для матричных часов, от батарейного питания, схема и прошивка в форуме.
DS18b20
, RTC
DS1307
, датчик освещения, кнопки управления, комплект
RF
-модулей, и блок питания 5 вольт (потребление схемы в пиковых моментах, при максимальной яркости, составляет до 0.6А, а в среднем это 0.3А, можно использовать и лишнюю зарядку от мобилки, если имеется с подходящими параметрами)
).
В чем интерес применения
Arduino Nano Atmega328
.
В том, что на борту этой платки уже имеется модем с выходом на мини USB, прошить такой контроллер можно без особого труда через bootloader, с помощью вашего компьютера и телефонного шнура для зарядки мобильного телефона с разъемом под мини USB.
Все это несложно делается с помощью простенькой программки
XLoader
.
Чуть подробней про опыт прошивки через bootloader, описывал здесь «Nano вольт — амперметр 2 канала.
«.
При желании все необходимые модули можно по выгодной цене купить на Aliexpress.
MAX7219 dot matrix |
Nano Atmega328 |
DS1307 |
DS18b20 |
Датчик освещения |
Блок питания |
После заказа, немного терпения пока все эти детальки придут по почте, и вы сможете себе гарантированно собрать, эту весьма интересную схему с часами и термометром.
В общем, с элементарной базой, думаю вопросов не должно возникнуть, так все здесь стандартно.
Оформление отображения вида работы часов — термометра, это уже любительский вариант исполнения.
В программе имеется три варианта оформления работы часов термометра.
- Первый вариант это, поочередное отображение времени (часы и минуты), уличной температуры и температуры помещения (два датчика DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Второй вариант, отображение времени (часы и минуты), температуры окружающего воздуха (один датчик DS18b20 ) .
Отображение в режиме бегущей строки — дата, месяц, год и день недели.
- Третий вариант, просто часы, отображение времени (часы и минуты),
отображение в режиме бегущей строки — дата, месяц, год и день недели (отображение температуры отключено).
Собственно различия вариантов небольшие, и заключается только в различиях отображения температуры на матричном дисплее часов термометра, практически каждый вариант может быть востребован.
Схема.
— В схеме использованы три кнопки управления, при кратковременном нажатии на эти кнопки, одноразово вызываем ротацию показаний на основном экране часы – дату — день недели – температура.
— При нажатии
Кн2
более 2х сек., осуществляется вход в меню установок (при нахождении в меню, нажатие
Кн2
более 2х сек., выход из меню установок).
— После входа в меню, кнопками
Кн1
–
Кн3
можно сделать коррекцию даты и времени, движение по меню осуществляется
Кн2
, изменяемый параметр будет находиться в инверсном свечении.
— Также в меню, возможно, если в этом есть необходимость, установить коррекцию неточности хода часов, в течение суток ±9сек.
— Следующий пункт в меню будет, это выбор используемого языка, в одной прошивке предусмотрено использование языков
UA-EN-RU
.
— Пункт варианта анимации на экране, один из трех, что описан в начале статьи.
— Радиодатчик, при выборе значение «0» , радиодатчик в программе не задействован, при выборе 1 или 2, показания температуры с радиодатчика займут место на дисплее, вместо
ds
18
b
20 №1 или №2.
Фото часов в процессе отладки на макетной плате.
Схема в протеусе
Схема передатчика для этих часов.
С помощью перемычек Jp -1, Jp -2, Jp -3, можно выбрать, частоту передачи RF -модулем пакетов информации с температурой от датчика №3.
1сек. |
2сек. |
4сек. |
8сек. |
16сек. |
32сек. |
64сек. |
128сек. |
|
Jp -1 |
||||||||
Jp -2 |
||||||||
Jp -3 |
(1 – перемычка замкнута, 0 – нет)
Печатная плата для часов, и радиодатчика.
FUSE для работы ATmega328 с загрузчиком (архив с прошивкой загрузчика ATmega328. )
FUSE, если кто будет использовать ICSP программатор для прошивки ATmega328 в этой схеме.
Прошивка “Часы – термометр на матричных модулях ” , печатные платы, proteus, в архиве .
В предлагаемом устройстве используются символьные светодиодные шестнадцатиэлементные индикаторы PSA08-11 с общими анодами. Выбор пал именно на них из-за невысокой стоимости, большого размера отображаемого символа и высокой яркости. Для того чтобы выводить максимум полезной информации, текст перемещается справа налево. На шести знакоместах поочерёдно отображаются текущее время, температура в помещении, температура вне его, число, день недели и месяц прописью, например, “18 МАРТА ЧЕТВЕРГ.
Счёт времени ведёт микросхема DS1307. Она представляет собой часы реального времени (Real Time Clock -RTC) со встроенным календарём. При выключенном общем питании эта микросхема продолжает работать от резервного источника — литиевого элемента CR2032 напряжением 3 В. Поскольку при отсутствии внешних обращений потребляемый микросхемой DS1307 ток не превышает 300 нА, счёт времени в таком режиме может продолжаться до десяти лет. Тактовый генератор этой микросхемы построен с применением внешнего кварцевого резонатора частотой 32768 Гц, что обеспечивает высокую точность хода. Микросхема отсчитывает секунды, минуты, часы, дни месяца (с учётом високосных лет), месяцы, дни недели и годы. Её календарь действителен до 2100 г. Более подробную информацию о ней можно получить в .
Для измерения температуры в устройстве применены цифровые термодатчики LM75, имеющие погрешность не более 2 °С в интервале температуры от -25 до +100°С. Более подробную информацию о них можно найти в .
Схема часов и термометра с бегущей строкой
показана на рис. 1. Все функции, за исключением счёта времени, выполняет микроконтроллер DD2 (PIC16F873A-20I/P), тактируемый встроенным генератором с кварцевым резонатором ZQ2. Для управления устройством предназначены кнопки SB1-SB5. Когда их контакты разомкнуты, резисторы R4-R8 обеспечивают высокий логический уровень на соответствующих входах микроконтроллера. Резистор R11 поддерживает высокий уровень на входе начальной установки микроконтроллера, предотвращая перезапуск программы случайными помехами.
Для питания часов необходим стабилизированный источник напряжения 5 В с максимальным током нагрузки не менее 600 мА. Его подключают к разъёму XS1. В авторском варианте используется зарядное устройство от сотового телефона. Конденсаторы С1 и С2 — сглаживающие, причём ёмкость конденсатора С1 должна быть не менее 1000 мкФ.
В часах предусмотрен будильник. Его звуковой сигнал подаёт пьезоизлучатель со встроенным генератором НА1 (НРА24АХ). По сигналам микроконтроллера им управляет ключ на транзисторе VT7. Подбирая резистор R18 в цепи базы этого транзистора, можно в некоторых пределах регулировать громкость звука.
Для индикации режимов работы предназначены светодиоды HL1-HL3 красного цвета свечения. Их яркость изменяют, подбирая резисторы R15- R17.
Для программирования микроконтроллера, установленного на плату, на ней имеется разъём ХР1. На время выполнения этой операции к нему присоединяют программатор, например, PICkit2, EXTRAPIC или другой подобный . В действующем устройстве этот разъём не нужен. Его можно не устанавливать, если до монтажа на плату запрограммировать микроконтроллер в панели программатора.
Программирование микроконтроллера заключается в загрузке программного кода из НЕХ-файла в его FLASH-память. Для этого требуется управляющая программатором программа, например WinPic800, которая находится в свободном доступе по адресу www.winpic800.com/descargas/WinPic800.zip в сети Интернет. Подробную инструкцию по программированию микроконтроллера также можно прочитать в .
Для упрощения программы микроконтроллера и устройства в целом микросхема RTC DD1 и датчики температуры ВК1 и ВК2 связаны с микроконтроллером по одной и той же шине I2C. Датчик ВК2 подключают к разъёму ХР2 кабелем длиной до нескольких метров по схеме, изображённой на рис. 2.
Резисторы R2 и R9 соединяют линии SCL и SDA шины I 2 C с плюсом питания, поддерживают на них высокий уровень в паузах передачи информации, как того требует спецификация шины. Более подробно об использовании этой шины можно узнать из . Адресные входы датчиков температуры ВК1 и ВК2 по-разному соединены с плюсом питания и общим проводом, что даёт микроконтроллеру возможность программно различать датчики.
Шестнадцатиразрядные параллельные коды для вывода информации на индикаторы образуются на выходах микросхем DD3 и DD4. Микроконтроллер DD2 заносит информацию в эти микросхемы последовательным кодом, используя для этого всего три линии своих портов В и С. Установив на линии RC6 и информационном входе сдвигового регистра микросхемы DD3 уровень, соответствующий значению (0 или 1) очередного разряда кода, он формирует на линии RC7 и тактовых входах обеих микросхем нарастающий перепад уровня. При этом уже содержащийся в соединённых последовательно сдвиговых регистрах код перемещается на одну позицию в сторону старшего разряда регистра DD4, а в освободившийся младший разряд регистра DD3 записывается значение, установленное микроконтроллером на его входе.
После шестнадцати таких операций весь код записан в образованный микросхемами DD3 и DD4 шестнадцатиразрядный сдвиговый регистр. Однако на выходах микросхем этот код ещё не появился, на них продолжает действовать тот, что был выведен в предыдущем цикле. Чтобы обновить состояние выходов, микроконтроллер формирует нарастающий перепад уровня на своей линии RB0 и входах записи кода из сдвиговых регистров микросхем DD3 и DD4 в их регистры хранения. Более подробно с работой микросхемы преобразователя последовательного кода в параллельный 74НС595 можно ознакомиться, прочитав .
После записи кода в микросхемы DD3 и DD4 микроконтроллер подаёт команду включить тот из шести индикаторов, для катодов элементов которого этот код предназначен. Чтобы не перегружать выходы микроконтроллера, аноды индикаторов соединены с ними через ключи на транзисторах VT1-VT6. Схема платы индикаторов показана на рис. 3, а условные обозначения элементов индикатора PSA08-11SRW – – на рис. 4. Разъёмы ХР1 и ХР2 платы индикаторов соединяют соответственно с разъёмами XS3 и XS2 основной платы.
Чертежи основной платы и размещения элементов на ней приведены на рис. 5. Она изготовлена из фольгированного с одной стороны стеклотекстолита. Плата рассчитана на установку датчика температуры ВК1 в корпусе DIP8, однако датчик LM75AD выпускают в корпусе SO8 для поверхностного монтажа, поэтому устанавливать его следует через плату-переходник (рис. 6). На рис. 5 контур переходника показан штрихпунктирной линией. В соответствующие отверстия переходника и платы вставляют и пропаивают с обеих сторон отрезки провода. Можно, конечно, изменив топологию печатных проводников на основной плате, обойтись и без переходника.
Двусторонняя печатная плата индикаторов показана на рис. 7. Обратите внимание, что разъёмы на ней устанавливают со стороны, противоположной той, где находятся индикаторы. При сочленении разъёмов обе платы располагаются одна над другой “этажеркой”, как можно видеть на фотоснимке рис. 8.
Транзисторы КТ502Б можно заменить любыми той же серии. Вместо светодиодов АЛ307БМ подойдут и другие маломощные красного цвета свечения, например АЛ310А.
Правильно собранное устройство с корректно запрограммированным микроконтроллером в налаживании не нуждается и начинает работать сразу после включения.
После подачи питания первым на индикаторы выводится приветственное сообщение. За ним следует время в 12- или 24-часовом формате, который можно выбрать в соответствующем пункте меню. Далее бегущая строка с текущим временем на 10с останавливается. По их истечении выводятся температура в помещении (показания датчика ВК1), температура на улице (показания датчика ВК2) и выдерживается ещё одна десятисекундная пауза, в течение которой индикатор показывает уличную температуру. После этого выводится число, за ним месяц и день недели прописью, после чего цикл (за исключением приветственного сообщения) повторяется.
Для установки текущего времени и других параметров переходят в режим “Меню” кратковременным нажатием на кнопку SB3 “М”. Включается светодиод HL2, показывая, что этот режим включён. На индикаторе после сообщения “НАСТРОЙКА” выводится и останавливается строка “ЧАС XX”, где XX — текущее значение часа, которое можно увеличить нажатием на кнопку SB1 “+” или уменьшить нажатием на кнопку SB5 “-“.
Для того чтобы перейти к следующему пункту меню, нажимают на кнопку SB2 “>”. С её помощью меню можно “листать” в указанном далее порядке, с помощью кнопки SB4 “” выводится строка “МИН XX”, затем “ГОД 20ХХ” (по умолчанию 2011), далее “МЕСЯЦ XX”, “ЧИСЛО XX”, “ДЕНЬ НЕДЕЛИ XX”, “БУД_ЧАС XX” (час срабатывания будильника), “БУД_МИН XX” (минуты срабатывания будильника).
Затем на индикаторе появляется одна из строк “БУД ВЫКЛ” или “БУД ВКЛ”, отображая текущее состояние будильника. Его можно менять, нажимая на кнопку SB1 “+” или SB5 “-“. Когда будильник включён, горит светодиод HL1, сигнализируя об этом.
Далее выводится строка “ФОРМАТ XX”, где XX равно 12 или 24 в зависимости от выбранного нажатиями на кнопку SB1 “+” или SB5 ” формата отображения времени. После очередного нажатия на SB2 “>” выводится строка “ПОКА”, выключается светодиод HL2, часы переходят в обычный рабочий режим.
Когда текущее время совпадает с заданным временем срабатывания будильника, включаются светодиод HL3 и излучатель звука НА1. Чтобы отключить световую и звуковую сигнализацию, достаточно нажать на любую кнопку. Электрический сигнал для управления внешним исполнительным устройством при необходимости можно снять с выхода RB5 микроконтроллера, к которому через резистор R17 подключён светодиод HL3.
При выключенном внешнем питании устройство продолжает счёт времени — микросхема DD1 работает от литиевого элемента G1.
Прилагаемые файлы: source.zip
ЛИТЕРАТУРА
1. DS1307 – 64 X 8 часы реального времени с последовательным интерфейсом. – www.piclist.ru/D-DS-DSB1 “+”307-RUS/D-DS-DS1307-RUS.html
2. LM75A Digital tem- perature sensor and thermal watchdog. www.alldatasheet.com/datasheet-pdf/pdf/100962/PHILIPS/LM75AD.html
3. Долгий А. Программаторы и программирование микроконтроллеров. – Радио, 2004, № 1, с. 53.
4. Семёнов Б. Ю. Шина I2C в радиотехнических конструкциях. – М.: “СОЛОН-Р”, 2002.
5. 74НС595; 74НСТ595 8-bit serial-in, serial or parallel-out shift register with output latches; 3-state. — www.nxp.com/documents/data_sheet/74HC_HCT595.pdf
В. БАЛАНДИН, с. Петровское Тамбовской обл.
“Радио” №9 2012г.
Бегущая строка STX AVR 4RGY
1 Бегущая строка STX AVR RGY Предлагаемая бегущая строка имеет простую схему и обладает следующими возможностями: Двухцветный вывод информации Разрешение: до 0*8 цветных пикселей Длина текстового сообщения: не менее 00 знаков Эффекты над текстом Отображение даты, времени и температуры Связь с компьютером для загрузки текстов и изменения настроек табло Гибкая конфигурация. Если какая то функция не требуется, то соответствующие детали можно не устанавливать. Принципиальная схема контроллера табло. Основа схемы микроконтроллер ATmega с зашитой в него программой. Он работает от внутреннего тактового RC генератора на 8МГц. Для работы часов/календаря используется таймер с подключенным к нему часовым кварцем ZQ. Высокостабильная частота генератора на часовом кварце также используется для автоматической подстройки основного RC генератора на 8МГц. В нормальном режиме работы напряжение питания В подается на разъем J, далее через открытый диод Шоттки D напряжение подается на цепь питания микроконтроллера. К этой цепи также подключен ионистор(это конденсатор большой емкости) C C или батарейка через разъем J. С резистивного делителя R R напряжение +,В подается на вход AIN аналогового компаратора микроконтроллера и разрешает работу программы. Когда напряжение питания пропадает, потенциал на входе AIN уменьшается, срабатывает внутренний аналоговый компаратор, выполнение программы останавливается и микроконтроллер переводится в малопотребляющий режим сна. Диод D закрывается и не дает разрядиться резервному источнику питания. Резервный источник на ионисторе C C или батарейке питает только микроконтроллер и поддерживает ход часов/календаря(ток потребления мка). Когда питание восстановится, микроконтроллер проснется и снова перейдет в нормальный режим работы. Цифровой термодатчик U и микросхема связи с компьютером U подключены к одному и тому же интерфейсу USART в полудуплексном режиме. Выход «открытый коллектор» образуется с помощью диодов D D и подтягивающих резисторов R, R. Ключевой транзистор Q открывается только для получения информации с термодатчика U. Он исключает конфликт на шине при обмене данными с компьютером(загрузка текста, установка параметров и т.д.). С разъема J данные поступают на платы сдвиговых регистров светодиодного табло(сигналы CLOCK, DATA, STROB). На этот разъем также выведены контакты для внутрисхемного программирования контроллера(reset и MISO). Штыревой разъем J служит для возможности программирования контроллера по интерфейсу JTAG(программаторы JTAG ICE, AVR Dragon и т.п.). Тип разъема и расположение контактов разъема JTAG нестандартное, но так упрощается печатная плата. К разъему J7 подключается обычная PS/ клавиатура. Гнездо клавиатуры J вынесено на корпус устройства. К разъему J9 подключается COM порт компьютера или переходник USB COM(см. рисунок ниже).
2 Описываемый контроллер бегущей строки рассчитан в основном на матрицу светодиодов с общими анодными строками(горизонтальные строки на плюс, столбцы на минус). Но программа по запросу может быть изменена под конкретную конфигурацию матрицы. На печатной плате контроллера предусмотрены мощные P канальные транзисторные ключи Q Q. Во время динамической развертки они замыкают выбранную светодиодную строку на плюс. Плюс питания светодиодов подается на J8. Резисторы R0 R7 ускоряют рассасывание зарядов на затворах ключевых транзисторов. Открывающий транзисторы сигнал берется с выхода буферной микросхемы U. Если предполагается использовать внешние транзисторы(например, недорогие распространенные PNPтранзисторы типа КТ97), то вместо Q Q на плату ставятся R R0, а к разъему J подключаются их базы. Перемычка JP в данной версии не задействована, ее следует оставить открытой. Перемычка JP управляет функцией часов и связью с компьютером: JP Разомкнута Замкнута Функция Часы и связь с компьютером активны. Часы и связь с компьютером блокированы. Можно исключить из схемы соответствующие компоненты.
3 A B C D E F G H J K 0 7 +V J9 J POWER CONN-SIL C8 uf*v C0 DEV_TX DEV_RX uf*v 7 8 C 00nF C+ V+ C- C+ C- V- Tout Rin C9 uf*v U MAX C uf*v C uf*0v Tout Rin Rout Tin Tin Rout 0 9 PWR PWR R k8 D N89 C 00uF*0V C7 00nF D N89 Cтавить если нужна связь COMP C 00nF U_TX U_RX C 00nF R k V C 00nF DS8B0 DS8S0 U C 00nF DQ DS8S0 R 00E Соблюдать точное соотношение номиналов! C9 00nF C 00nF PWR R0 E J_RST D N89 R k7 C F*.V R k7 D J BATTERY V C8 00nF N C F*.V Резервный источник(если нужны часы) Ставить если нужна температура Q BS70 PWR R k7 U_RX U_TX RST На табло CLOCK DATA STROB PWR CLK MISO DAT STB XT XT Замкнуть для отключения часов J CONN-H JP JUMPER MOSI/PB MISO/PB SCK/PB7 RESET XTAL XTAL RXD/PD0 TXD/PD INT0/PD COMP JP JUMPER SS/PB AIN/OC0/PB AIN0/INT/PB T/PB XCK/T0/PB0 ADC0/PA0 ADC/PA ADC/PA ADC/PA PD/INT PD/OCB PD/OCA PD/ICP PD7/OC PC0/SCL PC/SDA PC/TCK PC/TMS R8 7k Верхние ключи GT R0 0 GT R 0 GT R 0 GT R 0 ADC/PA ADC/PA ADC/PA ADC7/PA7 AREF A TOSC/PC7 TOSC/PC TDI/PC TDO/PC ATMEGA J_TMS J_TCK R9 7k U J_RST DR DR DR DR J_TDO J_TDI R E R7 E R8 E R9 E ZQ 78Hz R 7k R7 7k J8 PIN Q:A IRF7 Q:B IRF7 Q:A IRF7 Q:B IRF7 GT R 0 GT R 0 GT7 R 0 GT8 R U 8B 7B B B B B B B DR DR DR7 DR8 ULN80A R E R E R E R E COM 8C 7C C C C C C C GT GT GT GT GT GT GT7 GT8 Q:A IRF7 Q:B IRF7 Q:A IRF7 Q:B IRF7 Одно из двух 0E DR DR DR DR DR DR DR7 7 DR8 8 R R7 R R8 R R9 R R0 J 0 LED_STRING 7 PWR 8 9 C7 00nF J MINIDIN S R 0k KB_CLK KB_DAT R 0k J7 DAT CLK KEYBOARD J JTAG 7 TCK TMS TDO TDI FILE NAME: STXRGY_C.DSN DESIGN TITLE: STX AVR RGY 8 DATE: PAGE: PATH: C:\Program Files\Labcenter Electronics\Proteus of 7 Professional\SAM BY: Sergey REV: C TIME: ::07 A B C D E F G H J K
4 Детали. Микроконтроллер ATmegaA AU, ATmega в корпусе для поверхностного монтажа. Можно использовать и DIP корпус с соответствующей переделкой печатной платы. Интерфейсная микросхема MAXD в SMD исполнении, можно использовать также аналоги других производителей, например STACD. Транзистор BS70 можно попробовать заменить на другой N канальный полевик с управлением логическим уровнем (пороговое напряжение затвора менее В), например на BS08, N7000, N700, BSS8(этот в корпусе SOT ). Диоды D, D обязательно диоды Шоттки т.к. они имеют малое падение напряжения: N89, N87. К остальным диодам особых требований не предъявляется и они могут быть любыми, например N00, N007, N8 и др. Для резисторов R R следует соблюдать точное соотношение их номиналов. В точке их соединения(comp идет на вход компаратора, на вывод контроллера ) должно быть напряжение не ниже +,В, иначе схема не запустится либо будет работать со сбоями. Если таких номиналов нет, то вместо резисторов R R можно использовать подстроечный резистор и им выставить требуемое напряжение. Если часы и/или связь с компьютером не нужны, то D можно заменить проволочной перемычкой, перемычку JP для этого нужно замкнуть и R,R не ставить. Номиналы остальных компонентов некритичны и могут значительно отличаться от указанных значений на принципиальной схеме. Микросхема термодатчика DS8B0 или DS8S0. Тип подключенного датчика и его наличие автоматически распознается программой устройства. Термодатчик со своей обвязкой, микросхема связи с компьютером и резервный источник питания для часов могут не устанавливаться если не нужны соответствующие функции. От емкости ионистора C C зависит время работы часов при отсутствии основного напряжения питания. Так, ионистора F*,V хватает примерно на сутки, F*,V уже до недели. Ионистор выглядит как большая таблетка с ножками(похож на батарейку CR0). Вместо ионистора возможно использовать батарейку на,в(подключается к контактам разъема J). Использование х вольтовых батарей (например, литиевых типа CR0) не рекомендуется т.к. в этом случае не гарантируется долгая работа часов без основного напряжения. Резистор R0 ограничивает ток зарядки ионистора. Если блок питания контроллера способен отдать ток более ампера, то R0 можно заменить перемычкой. Подтягивающие резисторы R R9 можно не ставить. Часовой кварц ZQ надо ставить когда нужна функция часов и функция связи с компьютером. Если вы не ставите кварц, то нужно замкнуть перемычку JP. Наличие остальных компонентов на печатной плате НЕОБХОДИМО для нормальной работы устройства. Список компонентов см. в конце документа.
5 Печатная плата. Печатная плата односторонняя с достаточно толстыми дорожками. Поэтому не должно возникнуть каких либо проблем с ее изготовлением даже с помощью утюга. Размер платы: 7*мм. При печати в настройках принтера важно выбрать правильный масштаб изображения т.к. если плата будет иметь неверные размеры, то вы не сможете припаять микросхемы. На плате имеется проволочных перемычек, они отмечены красным цветом. Для упрощения процедуры монтажа возле компонентов имеются значения их номиналов (текст серого цвета). Вид со стороны компонентов(сквозь плату).
6 Вид на плату со стороны токопроводных дорожек. В архиве с печатными платами вы также найдете альтернативный вариант разводки под транзисторы КТ97.
7 Прошивка микроконтроллера. Прошивка микроконтроллера ATmega обычно производится внутрисхемно(т.е. без выпаивания микросхемы). В зависимости от имеющегося в наличии программатора и его возможностей, могут использоваться следующие интерфейсы: Интерфейс SPI. Его сигналы MOSI, MISO, SCK и Reset выведены на разъем J. Большинство простых программаторов работают именно через этот интерфейс. Интерфейс JTAG. Выведен на разъем J. Обычно используется в отладочных целях и поддерживается в основном программаторами отладчиками типа JTAG ICE AVR, AVR Dragon и др. При прошивке через SPI к разъему J не должно быть подключено длинных проводов(т.е. плата контроллера должна быть отключена от плат сдвиговых регистров). Файл прошивки main.hex следует записать в Flash память, а файл main.eep в память EEPROM. После этого надо записать Fuse биты: CKSEL = 0 CKSEL = CKSEL = 0 CKSEL0 = 0 SUT = SUT0 = 0 BODLEVEL = BODEN = 0 SPIEN = 0 ( этот бит не виден/не доступен из режима SPI ) JTAGEN = 0 Все остальные биты = 0 = запрограммированное состояние бита, = незапрограммированное состояние бита. Если ваш программатор поддерживает ввод битов в ричном формате, то нужно записать: Fuse HIGH = 0x99 Fuse LOW = 0xA Данные Fuse биты активируют внутренний тактовый RC генератор на 8МГц, настраивают схему сброса BOD на,7 Вольт и разрешают интерфейсы программирования SPI, JTAG.
8 Для оболочки программатора в CVAVR Fuse биты будут выглядеть следующим образом:
9 Для программатора в AVR Studio :
10 Программа. Программа устройства имеет следующие режимы работы: Обычный режим бегущей строки Режим часов Режим меню и встроенного редактора Режим связи с компьютером. При подаче напряжения питания схема выжидает несколько секунд и после этого переходит в обычный режим работы(бегущая строка). Текст воспроизводится циклически, при достижении конца строки начинается отображение с самого начала. Изменить записанный текст и режим работы табло можно как с помощью подключаемой клавиатуры, так и с компьютера на котором установлена программа STX RGY Control. Здесь рассматривается только управление с клавиатуры. Меню. Для входа в главное меню из обычного режима нажмите клавишу [F]. Передвижение по пунктам меню: [ ] и [ ], вход в пункт [ENTER], выход на уровень выше или из меню [ESC]. Главное меню имеет следующие пункты: Редакт (редактор) Время Дата Темпер (температура) Таймер [Shift] + [L] удерживать секунды вход в скрытое меню настройки длины табло. Прим. Пункт редактора виден всегда. Остальные пункты видны только в том случае, если были активированы соответствующие функции. Редакт встроенный редактор текста. Управляющие клавиши: [ESC] выход из редактора в главное меню без сохранения нового текста. [ENTER] сохранить новый текст и перейти в режим бегущей строки. [F] диалог выбора шрифта, по нажатию на [ENTER] в текст будет скопирована команда нового шрифта. В тексте вы можете одновременно использовать разные шрифты, чтобы выделить его части. [F] выбор цвета текста. Вы можете пометить разные части текста различными цветами. Команды выбора цвета и шрифта должны размещаться перед тем участком текста, на который они воздействуют. [F] команда очистки табло. Когда текст в бегущей строке дойдет до этой команды, табло будет очищено. [F] вставка команды времени, даты и температуры. Команда температуры видна только когда к табло подключен термодатчик. [F] команды выбора скорости движения текста. Когда текст бегущей строки дойдет до этой команды, то будет изменена скорость движения текста. Скорость самая медленная, Скорость самая быстрая.
11 [F] вставка паузы. Текст остановится(замрет) на некоторое время. Пауза самая короткая, Пауза 9 самая длинная пауза. [F8] Эффекты над текстом: Мигалка текст мигает раза. Вверх текст на табло сдвигается вверх, табло очищается. Вниз текст сдвигается вниз. Вправо текст сдвигается вправо с очисткой табло. Вращен текст вращается вокруг своей оси. Шторка текст закрывается шторкой слева направо. Точки текст исчезает по точкам. Печать текст печатается по буквам (эффект печатной машинки). [F] очистить табло для ввода нового текста (т.е. удалить существующий текст). [Caps Lock] и [Shift] работают как на компьютере(т.е. печать заглавными буквами). [Ctrl] переключает клавиатуру между различными языками ввода(русский + английский). По запросу может быть добавлена третья кириллическая раскладка казахская или украинская. [Back Space] удалить символ, выделенный курсором. Курсор сдвигается влево. [Delete] удалить следующий за курсором символ(тот что правее). Курсор не сдвигается. [ ] и [ ] передвинуть курсор на одну позицию влево или вправо. [ ] и [ ] перейти в самое начало или конец текста. Текст вводится с позиции, следующей за позицией курсора. Чтобы изменить шрифт, цвет, добавить команду или эффект вам следует нажать на соответствующую клавишу [Fx]. После этого открывается диалог со списком доступных команд. Когда вы выберете нужную команды нажмите клавишу [ENTER], в текст с позиции курсора будет вставлена эта команда. Если вы передумали, то нажмите [ESC] и вы вернетесь в редактор без вставки команды. Когда вы закончите ввод текста в редакторе, нажмите клавишу [ENTER]. Введенный текст будет сохранен и табло перейдет в режим бегущей строки. Время меню настройки времени табло. Управляющие клавиши: [F] выбор шрифта для отображения времени. [F] выбор цвета для отображения времени (красный/желтый/зеленый). [F] показ времени по центру или с правого края табло. [F] настройка коррекции времени. Механизм суточной коррекции прибавляет или отнимает определенное количество секунд в полночь(00:00:00). Если часы за сутки убегают вперед на 0 секунд и вы желаете скомпенсировать эту ошибку, установите значение 0s. А если отстают на 0 секунд, то установите +0s. [F] формат времени: Время в формате ЧАС : МИН Время в формате ЧАС : МИН : СЕК [ ] и [ ] изменить значение. Изменяемое значение(час или минута) выделяется подчеркиванием. [ ] и [ ] переключиться между изменением часа или минуты. [ENTER] сохранить настройки времени и вернуться в главное меню. [ESC] вернуться в главное меню без сохранения настроек времени. Настройки шрифта и цвета отображения времени действуют всегда, вне зависимости от того, какие команды были использованы в тексте бегущей строки. Если вы зашли в меню настройки времени и не нажимаете на клавиши более секунд, то активируется режим часов. В режиме часов постоянно отображается время без бегущей строки. Чтобы покинуть режим часов, войдите в главное меню (клавиша [F] ).
12 Дата меню настройки даты табло Управляющие клавиши: [F] выбор шрифта для отображения даты. [F] выбор цвета для отображения даты (красный/желтый/зеленый). [F] показ даты по центру или с правого края табло. [F] разделитель даты: Тире (минус): ДЕНЬ МЕСЯЦ ГОД Косая(слеш): ДЕНЬ / МЕСЯЦ / ГОД Точка: ДЕНЬ. МЕСЯЦ. ГОД [ ] и [ ] изменить значение. Изменяемое значение(день, месяц или год) выделяется подчеркиванием. [ ] и [ ] переключиться между изменением дня, месяца и года. [ENTER] сохранить настройки даты и вернуться в главное меню. [ESC] вернуться в главное меню без сохранения настроек даты. Настройки шрифта и цвета отображения даты действуют всегда, вне зависимости от того, какие команды были использованы в тексте бегущей строки. Темпер меню настройки температуры. Меню настройки температуры отображается только тогда, когда к табло подключен термодатчик. Управляющие клавиши: [F] выбор шрифта для отображения температуры. [F] выбор цвета для отображения температуры (красный/желтый/зеленый). [F] показ температуры по центру или с правого края табло. [ENTER] сохранить настройки температуры и вернуться в главное меню. [ESC] вернуться в главное меню без сохранения настроек температуры. Настройки шрифта и цвета отображения температуры действуют всегда, вне зависимости от того, какие команды были использованы в тексте бегущей строки. Таймер меню настроек таймера отключения. Таймер отключения(ночной таймер) может использоваться чтобы автоматически отключать табло на ночь. Эта функция может оказаться полезной если вы желаете продлить срок жизни светодиодов табло и сэкономить немного электроэнергии. При входе в меню таймера вам будет предложено выбрать: Откл отключить функцию таймера. Вкл включить функцию таймера. Если вы выбрали Вкл (включить таймер), то после этого вам следует установить время включения и отключения табло. По умолчанию установлены следующие значения: 8. Это означает, что табло включится в часов утра и выключится, когда будет 8 часов вечера. С помощью клавиш [ ], [ ],[ ] и [ ] вы можете изменить время включения/отключения. Чтобы сохранить настройки таймера нажмите клавишу [ENTER]. Включенная функция таймера активна до тех по
Ардуино в качестве программаторов AVR контроллеров
С последней версией Arduino IDE перестал работать USBASP, с помощь которого прошивал массу контролеров.
У USBASP пора обновить прошивку, а может быть и схему, а я буду использовать в качестве программатора обычный Arduino. Тем более я уже использовал эту схему для программирования ATTiny13.
Для Arduino на ATmega168/328 схема будет выглядеть так — между собой соединяем D11, D12, D13, а D10 контроллера программатора соединяем с RESET программируемого контроллера. Устанавливаем кварц для прошивки контроллеров, работающих от внешнего резонатора.
Для удобства работы собираю программатор на макетке. Для микросхем в корпусе DIP28 использую панель DIP с нулевым усилием.
Также на плате устанавливаю разъем под Arduino Pro Mini, на которых делаю все последние Arduino-проекты
Получаю такую платку
Устанавливаю на плату микроконтроллеры
Можно приступать к прошивке/
Для этого в Ардуину нужно записать скетч ISP-программатора
Затем выбираем тип программатора
И все. Программатор собран и настроен.
Немного о применении
- Загрузка скетча с 0-го адреса без загрузчика. Экономит память микроконтроллера и время загрузки. Особенно интересно в микросхемах с малой памятью — Atmega8 и различных Attiny.
- Установка загрузчика на «голую» Atmega328, чтобы в дальнейшем заливать в нее скетчи через RX/TX, как в обычную Ардуину.
- Замена загрузчика, например, на OPTIBOOT, нормально поддерживающий режимы сна и сторожевой таймер.
- Установка фьз-битов. Полезно при создании «батареечных проектов», когда отключается BOD — контроль входного напряжения и микроконтроллеру устанавливается режим работы с пониженной частотой, опять же для уменьшения напряжения питания до 2.8-3.3В и энергопотребления.
- Восстановление «мертвых» микроконтроллеров после неудачных экспериментов
Если нужно залить прошивку одной Ардуины через другую, то делается все тоже самое, только без платы. Соединяются вывод ардуин согласно схеме и точно так же программируется.
со своего сайта.
Команды ассемблера для avr — MOREREMONTA
Справочник по системе команд микроконтроллеров AVR основан на переводе документации от Atmel. Помимо этого сюда добавлено больше примеров из практики, в частности, примеры для ассемблера AVR GCC.
Чтобы быстро перейти к нужной команде достаточно ввести её имя. Также можно выбрать команду из списка внизу.
Справочник будет дополняться по мере появления вопросов.
Справочник по системе команд микроконтроллеров AVR основан на переводе документации от Atmel. Помимо этого сюда добавлено больше примеров из практики, в частности, примеры для ассемблера AVR GCC.
Чтобы быстро перейти к нужной команде достаточно ввести её имя. Также можно выбрать команду из списка внизу.
Справочник будет дополняться по мере появления вопросов.
Здесь представлены примеры различных программ на языке Ассемблера для микроконтроллеров Atmel AVR. Примеры выложены в виде проектов для AVR Studio под микроконтроллер ATmega16, поэтому при переносе на другие МК семейства AVR это нужно учитывать. Тактовая частота микроконтроллера во всех примерах 8 МГц (используется тактирование от внутреннего генератора). Код примеров разбит на блоки и снабжен комментариями. При обнаружении ошибок просьба сообщить на почту.
Краткое описание команд Ассемблера AVR представлено здесь.
Подробное описание каждой команды представлено в AVR 8bit Instruction Set.
Для более глубокого изучения ассемблера AVR советую к прочтению книгу Юрия Ревича «Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера» . С беcплатным фрагментом книги можно ознакомиться здесь. Также можно изучить различные методические пособия ВУЗов, например, вот.
Start – Заготовка стартовой инициализации микроконтроллера, в которую входят инициализация стека, очистка ОЗУ (SRAM) и регистров общего назначения (R0 — R31), а также глобальный запрет прерываний. Пример кода приведён ниже. При использовании следует помнить, что регистры ввода-вывода (порты, периферия и т.д.) не очищаются, поэтому их НЕОБХОДИМО инициализировать отдельно.
Delays – Библиотека с подпрограммами задержки. Все задержки рассчитаны на тактовую частоту МК 8 МГц. Библиотека включает следующие процедуры:
- Delay1us – Задержка повышенной точности в 1 мкс c учетом длительности RCALL и RET.
- Delay5us – Задержка повышенной точности в 5 мкс c учетом длительности RCALL и RET.
- Delay10us – Задержка повышенной точности в 10 мкс c учетом длительности RCALL и RET.
- Delayus – Задержка высокой точности в несколько десятков микросекунд.
- Delayms – Задержка высокой точности в несколько миллисекунд.
Math – Библиотека с подпрограммами математических операций, включает следующие процедуры:
- SUB16X16 – Вычитание 16-разрядных чисел.
- ADD16X16 – Сложение 16-разрядных чисел.
- MUL16X16s – Знаковое умножение 16-разрядных чисел.
- MUL16X16u – Беззнаковое умножение 16-разрядных чисел.
- DIV16X16s – Знаковое деление 16-разрядных чисел.
- DIV16X16u – Беззнаковое деление 16-разрядных чисел.
- DIV16POWER2s – Знаковое деление 16-разрядного числа на степень 2.
- DIV16POWER2u – Беззнаковое деление 16-разрядного числа на степень 2.
- SIGN16 – Смена знака 16-разрядного числа.
- DEC2BCD – Перевол 8-разрядного десятичного числа в двоично-десятичное (BCD).
- BCD2DEC – Перевол 8-разрядного двоично-десятичного (BCD) числа в десятичное.
- CP16X16 – Сравнение 16-разрядных чисел.
- DIGITS8 – Вычисление цифр 8-разрядного числа.
- DIGITS16 – Вычисление цифр 16-разрядного числа.
IO Ports – В данном примере рассматривается работа с портами ввода-вывода. К порту А подключены 8 светодиодов (линии 0-7). К линии 0 порта С подключена кнопка, с подтяжкой на землю. При нажатии кнопка выдает на линию 0 порта С уровень логической единицы. Цикл программы организован следующим образом: при запуске включается бегущий огонь, сначала загорается светодиод на линии 0 порта А, затем на линии 1 и т.д. По достижении линии 7 направление бегущего огня меняется (от 7 к 0). При нажатии на кнопку бегущий огонь останавливается и загораются одновременно все светодиоды. После повторного нажатия на кнопку бегущий огонь продолжает перемещаться с места остановки.
Dynamic Indication – В данном примере рассматривается работа с 7-сегментным индикатором. В моём случае он имеет 4 разряда (цифры). Поскольку у меня на плате установлены транзисторы для управления разрядами, то управление осуществляется выводом логической единицы и на разряды и на сегменты. Схема подключения следующая: к линиям 0-7 порта C подключены сегменты индикатора, а к линиям 0-3 порта В разряды индикатора. При запуске на индикатор выводятся цифры 1 2 3 4.
UART – В данном примере рассматривается периферийного модуля UART (универсальный асинхронный приёмопередатчик). Модуль UART можно настроить как на работу с прерываниями, так и без них (вручную, путём работы с флагами). Пример работает следующим образом: при получении байта, МК переходит в обработчик прерывания (используется только прерывание по приёму данных) и разбирает численное значение байта (0-255) на цифры, которые и выводятся на 7-сегментный индикатор. Схема подключения аналогична предыдущему примеру. Передача осуществляется по двум линиям UART (порт D линии 0-1), к которым необходимо подключить линии RX и TX преобразователя USB-UART. Для настройкки без прерываний необходимо обнулить бит RXCIE в регистре UCSRB и вручную опрашивать интерфейс в основном цикле программы.
Clock – В данном примере рассматривается реализация простых часов с 7-сегментым индикатором и парой кнопок. Только здесь уже требуется 6 разрядов, хотя секунды можно опустить. Кнопки с подтяжкой на землю. При нажатии кнопка выдает на линию высокий логический уровень. Индикатор подключается как и в предыдущих примерах (сегменты к порту C, разряды к порту B), а кнопки к линиям 2-3 порта D. Кнопка PD2 используется для установки минут, а PD3 для установки часов. По нажатию каждой из кнопок увеличивается значение соответствующего разряда (минуты или часы).
DS18B20 – В данном примере рассматривается работа с цифровым датчиком температуры DS18B20. Показания температуры выводятся на 7-сегментый индикатор. Вывод DQ датчика поключен к линии PC7. Линия должна быть подтянута к плюсу питания резистором на 4.7-10 кОм (согласно документации). Датчик опрашивается каждую секунду. Температура выводится на 4-разрядный индикатор: знак, два разряда на целуюю часть и один на вещественную. Документация к датчику здесь.
ADC Indication – Данный пример аналогичен примеру с UART. Отличие в том, что байт берется с линии 0 порта А (линия 0 АЦП, ADC0). Микроконтроллер по таймеру производит аналого-цифровое преобразование напряжения на линии 0 порта А, (младшие 2 бита отбрасываются как шум). При измерении используется внутренняя опора 5 В. К линии PD2 порта D подключена кнопка, которая определяет режим вывода показаний. При нажатии на кнопку выводится результат измерений в виде числа от 0 до 255. Если кнопка не нажата, то результат измерений переводится в вольты и выводится на индикатор (с точностью до десятых).
Fast PWM – В данном примере показана настройка аппаратного ШИМ (широтно-импульсная модуляция, англ. PWM). К линиям 4 и 5 порта D подключены светодиоды, а к линиям 0-3 порта С – кнопки. Кнопки с подтяжкой на землю (при нажатии кнопка выдает на линию порта уровень логической единицы) подключены к линиям 2-5 порта C. Кнопки на линях 2 и 3 соответственно увеличивают и уменьшают коэффициент заполнения ШИМ (меняется яркость светодиода) канала А. Кнопки на линях 4 и 5 соответственно увеличивают и уменьшают коэффициент заполнения ШИМ канала B. Число сравнения для каждого из каналов меняется в диапазоне от 0 до 255. Для канала А шаг изменения равен 10, для канала В шаг равен 5.
HCSR04 – В данном примере рассматривается работа с ультразвуковым датчиком расстояния HCSR04. К линии PD6 подключен вывод Trigger датчика, а к линии PD7 вывод Echo. Поключение 7-сегментного индикатора аналогично предыдущим примерам. По таймеру микроконтроллер раз в секунду опрашивает датчик и определяет расстояние до препятсвия в миллиметрах. После этого число разбивается на цифры и выводится на дисплей. Документация к датчику здесь.
Matrix Keyboard – В данном примере показана работа с матричной клавиатурой. Микроконтроллер динамически опрашивает клавиатуру, а затем определяет номер нажатой клавиатуры. Размер поля 3 на 3 – получаем 9 кнопок. Нажатие первых 8-ми приводит к зажиганию светодиода на соответствующей линии порта А, нажатие 9-ой кнопки зажигает все светодиоды порта А. Матричная клавиатура подключается к линиям 0-5 порта С (три столбца и три строки). В архиве схема и печатная плата матричной клавиатуры (Diptrace).
Shift Register – В данном примере рассматривается работа с модулем SPI на примере сдвигового регистра 74HC595. К регистру подключены светодиоды, в качестве линии CS используется линия 4 порта B (вывод not SS). Линия DS (14 нога) регистра идет к MOSI (PB5), линия SHCP (11 нога) к линии SCK (PB7), линия STCP (12 нога) к линии SS (PB4). Линии MR (10 нога) и OE (13 нога) должны быть подтянуты к высокому и низкому логическим уровням соответственно. По таймеру микроконтроллер меняет состояние светодиодов: поочерёдно горят то чётные светодиоды, то нечётные. Если при этом передать байт по UART’у, то он будет выведен в порт на светодиоды. Чтобы обратно переключиться в режим мигания необходимо послать по UART’у 0x00 (ноль). Документация к микросхеме 74HC595 здесь.
SG-90 Servo – В данном примере рассматривается работа с сервоприводом SG-90. Используется аппаратный ШИМ. Линия ШИМ сервпопривода подключена к каналу А аппаратного ШИМ. Кнопки поворота подключены к линиям PD2 и PD3. Кнопка на линии PD2 увеличивает длительность импульса, кнопка на линии PD3 уменьшает длительность импульса. Длительность импульса меняется от 1 до 2 мс. Описание сервомотора здесь.
RGB Lamp – В данном примере рассматривается работа с трехцветным RGB-светодиодом. Реализовано плавное переливание цветов с использованием программного ШИМ. Линии красного, зеленого и синего цветов подключаются соответственно к линиям 2, 3 и 4 порта D.
Разработка средств измерения температуры
Объект. Микроконтроллер ATmega16.
Предмет. Измерение температуры
Цель. Измерение температуры контактным методом.
Задачи. Измерение температуры контактным методом, обработка измерительного сигнала с помощью микроконтроллера и вывода значения температуры на 7-сегментный дисплей.
Программное обеспечение:
1. Программная среда разработки AVRStudio или AtmelStudio, для разработки программ для МК AtmelAVR® (Atmel).
2. Стандартный Windows-приложение — калькулятор (Microsoft).
3. Пакет программ для автоматизированного проектирования электронных схем – Proteus DesignSuite CAD Software (Labcenter electronics).
Ход работы предусматривает последовательное выполнение рекомендаций и действий, описанных далее в этом проекте по пунктам.
СОДЕРЖАНИЕ
1. ВСТУПЛЕНИЕ
2. АППАРАТНАЯ РЕАЛИЗАЦИЯ ПРОЕКТА
2.1 Микроконтролер ATmega16
2.2 Датчик температуры DS18B20
2.3 Четырехразрядный семисегментный индикатор
2.4 Моделирование электронной схемы проекта
3. ПРОГРАМННАЯ РЕАЛИЗАЦИЯ ПРОЕКТА
3.1 Среда разработки AtmelStudio
3.2 Разработка программы
ЗАКЛЮЧЕНИ
1. Вступление
Температура — физическая величина, являющаяся мерой интенсивности теплового движения атомов и молекул.
Контактный метод измерения температуры метод измерения температуры при теплового контакта между объектами измерения и чувствительным элементом измерительного оборудования.
Измерительная система — разновидность информационно-измерительной системы в виде совокупности измерительных каналов, измерительных устройств и других технических средств, объединенных для создания сигналов измерительной информации о нескольких измеряемых физических величин. Перечисленные элементы измерительной системы объединены общим алгоритмом функционирования для получения данных о величинах, характеризующих состояние объекта исследования. Информационные системы могут быть составляющими развитых структур измерительных информационных систем и систем управления, на которые возлагаются функции контроля, диагностики, распознавания образов, автоматического управления научными экспериментами, испытаниями сложных объектов и технологическими процессами.
Средство измерения делаем на базе микроконтроллера AVRATmega16.
AVR — семья восьмибитных микроконтроллеров фирмы Atmel.
Микроконтроллеры AVR имеют гарвардскую архитектуру и систему команд, близкую к идеологии RISC. Процессоры AVR имеют 32 8-битных регистров общего назначения. Максимальная тактовая частота — 20 мегагерц, короткие команды выполняются за один такт.
Разработка аппаратного обеспечения и моделирования работы измерительной системы может быть выполнена с помощью пакета программ Proteus DesignSuite CAD Software (Labcenterelectronics).
2. Аппаратная реализация проекта
Средство измерения температуры создаем на базе микроконтролера AVR ATmega16.
AVR — семейство восьмибитных микроконтроллеров, ранее выпускались фирмой Atmel, затем Microchip.
Микроконтроллеры AVR имеют гарвардскую архитектуру (программа и данные находятся в разных адресных пространствах) и систему команд, близкую к идеологии RISC. Процессор AVR имеет 32 8-битных регистра общего назначения, объединенных в регистровый файл. В отличие от «идеального» RISC, регистры не абсолютно ортогональны.
Система команд микроконтроллеров AVR очень развита и насчитывает в разных моделях от 90 до 133 различных инструкций. Большая часть команд Занимает всего 1 ячейку памяти (16 бит). Большинство команд выполняется за 1 такт.
Управление периферийными устройствами осуществляется через Адресное пространство данных.Для измерения температуры используем цифровой датчик температуры DS18B20. Если нет особых требований к датчику температуры по параметрам, условиям работы, цене, то очевидным решением является выбор цифрового датчика для совместной работы с микроконтроллером. Цифровые датчики могут подключаться через довольно длинные проводные линии; в отличие от слабых аналоговых сигналов, поступающих из других типов датчиков, цифровой сигнал устойчив к воздействию помех. Используемые интерфейсы позволяют в одной линии подключить сразу несколько цифровых датчиков. Цифровая форма передачи данных позволяет использовать цифровые датчики температуры совместно с совсем простыми микроконтроллерами, не имеющих АЦП и даже не имеют нужного цифрового интерфейса — используемые интерфейсы достаточно просты и легко реализуются программно.
Значение температуры должно отражаться на 4-разрядном 7-сегментном индикаторе.
2.1 Микроконтролер ATmega16
ATmega16 — 8-разрядный высокопроизводительный AVR микроконтроллер с
малым энергопотреблением.
Микроконтролер ATmega16Технические характеристики:
Серия | AVRATmega |
Ядро | AVR |
Ширина шины данных | 8-біт |
Тактова частота | 16 МГц |
Количество входов / выходов | 32 |
Объем памяти программ | 16 кбайт (8k*16) |
Тип памяти программ | Flash |
Объем EEPROM | 512*8 |
Объем SRAM | 1k*8 |
Наличие АЦП/ЦАП | АЦП 8*10b |
Встроенные интерфейсы | I2C, SPI, UART |
Встроенная периферия | Brown-outdetect/reset, POR, PWM, WDT |
Напряжение питания | 4.5…5.5 В |
Рабочая температура | -40…+85 ºC |
Отличительные особенности:
Прогрессивная RISC архитектура
130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл
32 8-разрядных рабочих регистра общего назначения
Полностью статическая работа
Производительность приближается к 16 MIPS (при тактовой частоте 16 МГц)
Встроенный 2-цикловийперемножувач
Энергонезависимая память программ и данных
Обеспечивает 1000 циклов стирания / записуFlashи 100000 циклов стирания / записи EEPROM
Дополнительный сектор загрузочных кодов с независимыми битами блокировки
внутрисистемных программирования встроенной программой загрузки
Обеспечена режим одновременного чтения / записи (Read-While-Write)
Программируемый блокировки, обеспечивает защиту программных средств пользователя
Интерфейс JTAG (совместим с IEEE 1149.1)
Возможность сканирования периферии, соответствует стандарту JTAG
Расширенная поддержка встроенной отладки
Программирование через JTAG интерфейс: Flash, EEPROM памяти, перемычек и битов блокировки
Встроенная периферия
Один 16-разрядный таймер / счетчик с отдельным предварительным делителем и режимами захвата и сравнения
Счетчик реального времени с отдельным генератором
Четыре канала PWM (ШИМ)
8-канальный 10-разрядный аналого-цифровой преобразователь
Два 8-разрядных таймера / счетчика с отдельным предварительным делителем, один с режимом сравнения
8 несимметричных каналов
7 дифференциальных каналов (только в корпусе TQFP)
2 дифференциальных канала с программируемым усилением в 1, 10 или 200 раз (только в корпусе TQFP)
Байт-ориентированный 2-проводной последовательный интерфейс
Программируемый последовательный USART
Последовательный интерфейс SPI (ведущий / ведомый)
Программируемый сторожевой таймер с отдельным встроенным генератором
Встроенный аналоговый компаратор
Специальные микроконтроллерные функции
Сброс по подаче питания и программируемый детектор кратковременного снижения напряжения питания
Встроенный калиброванный RC-генератор
Внутренние и внешние источники прерываний
Шесть режимов пониженного потребления: Idle, Power-save, Power-down, Standby, ExtendedStandby и снижение шумов ADC
Выводы I / O и корпуса
Описание выводов микроконтроллераVCC -питание.
GND — земля.
Port A (PA7..PA0) служит в качестве аналоговых входов преобразователя A / D.
Port A также служит в качестве 8-битный двунаправленный порт ввода / вывода, если преобразователь A / D не используется.
Port B (PB7..PB0) является 8-битным двунаправленным портом ввода / вывода с внутренними подтягуючемые резисторы (выбранными для каждого бита).
Port B также выполняет функции различных специальных функций ATmega16.
Port C (PC7..PC0) является 8-битным двунаправленным портом ввода / вывода с внутренними подтягуючимые резисторами (выбранными для каждого бита).
Port C также выполняет функции интерфейса JTAG и других специальных функций ATmega16.
Port D (PD7..PD0) является 8-битным двунаправленным портом ввода / вывода с внутренними подтягивающий резистор (выбранными для каждого бита).
Port D также выполняет функции различных специальных функций ATmega16.
RESET — сброс входных данных. Низкий уровень на этом выводе дольше минимальной длины импульса приведет к сбросу.
XTAL1 — вход на инвертирующий усилитель осциллятора и вход во внутреннюю схемы работы часов.
XTAL2 — выход из инвертирующего усилителя осциллятора.
AVCC — это контактный разъем питания для порта A и A / D преобразователя. Она должна быть внешне подключена к VCC, даже если АЦП не используется. Если используется АЦП, он должен быть подключен к VCC через фильтр низких частот.
AREF- это аналоговый контрольный пин для A / D-преобразователя.
2.2 Датчик температуры DS18B20
DS18B20 — цифровой температурный датчик, имеет много функций. По сути, DS18B20 — это целый микроконтроллер, который может хранить значения измерений, сигнализировать о выходе температуры за установленные пределы (сами границы мы можем устанавливать и изменять), менять точность измерений, способ взаимодействия с контроллером и многое другое. Все это в очень небольшом корпусе, который, к тому же, может быть в водонепроницаемом исполнении.
Описание выводов датчика:
датчик DS18B20VDD – питание.
GND – земля.
DO–цифровой выход.
Микросхема имеет три выхода, из которых для данных используется только один, два других — это земля и питание. Число проводов можно сократить до двух, если использовать схему с позитивным питанием и соединить VDD с землей. К одному провода данным можно подключить сразу несколько датчиков DS18B20 и в микроконтроллере ATmega16 будет задействован только один пин.
Технические характеристики:
Напряжение питания | 3,0…5,5 В |
Потребляемый ток | 1,5 мА (рабочий режим) 1 мкА (спящий режим) |
Диапазон измеряемых температур | -55…+125 ºC |
Разрешение АЦП | 9…12 біт |
Абсолютная погрешность | ±0.5 ºC (в диапазоне от -10 до +85 ºC) ±2ºC (в диапазоне от -55 до +125 ºC) |
Максимальное время полного 12-Разрядного преобразования | ~750 мс |
Интерфейс | 1-Wire |
Схема подключення:
DS18B20Для корректной работы между 2 и 3 выводами датчика (VDDта DO) необходимо устанавливать резистор номиналом 4,7 кОм.
Особенности датчика:
Интерфейс 1-Wire® требует только одного порта для связи
Каждое устройство имеет уникальный 64-битный серийный код, хранящийся в бортовом ПЗУ
Возможность многоканального подключения упрощает измерения температуры
Питание может осуществляться от линии данных
Разрешение термометра по выбору от 9 до 12 бит
Микросхема имеет встроенный механизм сигнализации о выходе температуры за один из выбранных диапазонов.
2.3 Четырехразрядный семисегментный индикатор
Результаты измерения отображаются на 4-разрядном 7-сегментном LED индикаторе.
Семисегментный индикаторСемисегментный индикатор — устройство отображения цифровой информации. Это наиболее простая реализация индикатора, который может отображать арабские цифры. Для отображения букв используются более сложные многосегментные и матричные индикаторы.
Семисегментный индикатор, как понятно из его названия, состоит из семи элементов индикации (сегментов), включаемых и исключаются отдельно. Включая их в различных комбинациях, из них можно составить упрощенные изображения арабских цифр. Часто семисегментный индикаторы делают в курсивное начертание.
Сегменты обозначаются буквами от A до G; восьмой сегмент — десятичная точка (decimalpoint, DP), предназначенная для отображения чисел с плавающей точкой.
Расположение выводов 4-разрядного семисегментного индикатора:
4-разрядный 7-сегментный индикатор имеет 12 выводов. Выводы A-G отвечают сегментам, обозначенные этими буквами, decimal — точка, D1-D4 соответствуют номеру разряда справа налево.
Технические характеристики:
Напряжение питания | 1,8 В |
Рабочий ток | 20 мА |
Количество разрядов | 4 |
Рабочая температура | -35…+85 ºC |
2.4 Моделирование электронной схемы проекта
Моделирование электронной схемы проекта выполняем с помощью пакета программ ProteusDesignSuiteCADSoftware (Labcenterelectronics).
ProteusDesign — пакет программ для автоматизированного проектирования (САПР) электронных схем. Разрабатывается компанией LabcenterElectronics (Великобритания).
Пакет представляет собой систему схемотехнического моделирования, базирующуюся на основе моделей электронных компонентов, принятых в PSpice. Отличительной чертой пакета ProteusDesign является возможность моделирования работы программируемых устройств: микроконтроллеров, микропроцессорных систем, DSP и ин. Причем в Proteus полностью реализована концепция сквозного проектирования, когда например инженер меняет что-то в логике работы схемотехники и программный пакет тут же «подхватывает» данные изменения в системе трассировки. Библиотека компонентов содержит справочные данные. Дополнительно в пакет PROTEUS VSM входит система проектирования печатных плат. Пакет Proteus состоит из двух частей, двух подпрограмм: ISIS — программа синтеза и моделирования непосредственно электронных схем и ARES — программа разработки печатных плат. Вместе с программой устанавливается набор демонстрационных проектов для ознакомления.
Также в состав восьмой версии входит среда разработки VSM Studio, что позволяет быстро написать программу для микроконтроллера, используемого в проекте, и скомпилировать.
Пакет является коммерческим. Бесплатная ознакомительная версия характеризуется полной функциональностью, но не имеет возможности сохранения файлов.
Примечательной особенностью является то, что в ARES можно увидеть 3D-модель печатной платы, позволяет разработчику оценить устройство еще на стадии разработки.
Система поддерживает подключение новых элементов (SPICE) и подключения различных компиляторов (PICOLO, ARM-образные, AVR и т.д.).
Также программа включает в себя инструменты USBCONN и COMPIM, которые позволяют подключить виртуальное устройство к USB- и COM-портов компьютера.
Моделирование аппаратного обеспечения проекта начнем с запуска программы ProteusDesignSuiteCADSoftware. Для этого необходимо дважды кликнуть по ярлыку Proteus.
Создаем новый проект. Для этого в строке меню находится в верхней части окна выбираем File → NewProject. Задаем имя проекта, путь к файлам проекта, выбираем шаблон формата бумажного документа DEFAULT, шаблон монтажной платы пропускаем, создаем проект с использованием встроенных в Proteusпрограм для семейства микроконтроллеров AVR, микроконтроллера ATmega16; компилятор AVRASM (Proteus) файл быстрого старта не создаем.
Все необходимые в проекте компоненты выбираем из списка библиотеки компонентов, которую открываем с меню Library → Pickpartsfromlibraries. Открывается окно PickDevices. Выбранный компонент добавляется в список компонентов в окне DEVICES. В дальнейшем, компоненты из этого списка размещаем в рабочем окне проекта.
Поиск необходимого компонента осуществляем, введя ключевое слово или по категории и подкатегории, или по производителю компонента.
Выбираем микроконтроллер. Вводим ключевое слово ATMEGA, и в списке результатов поиска выбираем необходимый компонент — ATMEGA16. Подтверждаем выбор, два раза кликнув левой кнопкой мыши на элемент списка, после чего, избранный компонент появляется в окне DEVICES.
Далее по аналогии добавляем в окно DEVICES другие компоненты.
Список необходимых компонентов:
· ATMEGA16 – микроконтролер ATmega16
· DS18B20 – цифровой датчик температуры
· 7SEG-MPX4-CA – четырехразрядный семисегментный индикатор с общим анодом
· RES – резистор
· OSCILLOSCOPE – осциллограф
Размещаем все выбранные компоненты в окне проекта.
На вертикальной панели инструментов расположена кнопка TerminalsMode, что открывает окно TERMINALS, из которого выбираем компоненты POWER (питание) и GROUND (земля), и располагаем их в рабочем окне проекта.
Для того, чтобы отредактировать свойства компонента, необходимо дважды кликнуть по нему мышкой. На экране появится окно редактирования компонента.
На вертикальной панели инструментов нажимаем кнопку SelectionMode и соединяем между собой компоненты линиями-проводами следующим образом:
Электронная схема проектаПосле создания электронной схемы сохраняем проект и закрываем программу Proteus.
3. ПРОГРАМННАЯ РЕАЛИЗАЦИЯ ПРОЕКТА
Для разработки программного обеспечения для микроконтроллеров AVRиснуе много сред разработки. Некоторые из них приведены в списке ниже:
WinAVR- программный пакет под Windows, включающий в себя компилятор, ассемблер, компоновщик и другие инструменты.
AlgorithmBuilder- алгоритмическая среда разработки программного обеспечения для микроконтроллеров с архитектурой AVR.
Code :: Blocks – кросс платформенного среду разработки.
Avrdude- средство для прошивки микроконтроллеров.
AVR-Eclipse-плагин для среды разработки Eclipse, позволяет разрабатывать программы на С / С ++ и ассемблере, программировать и отлаживать контроллеры, используя внешний набор инструментов (WinAVR, Atmel AVR Toolchain)
AtmelStudio- бесплатная IDE от самой Atmel
ArduinoIDE — бесплатная среда разработки для плат Arduinoна базе микроконтроллеров AVR.
Программное обеспечение для средства измерения температуры создаем в программной среде разработки AVRStudio или AtmelStudio, используемый для разработки программ для МК AtmelAVR® (Atmel).
Программное обеспечение с помощью AtmelStudio можно разработать с использованием следующих языков программирования:
Программу создаем с использованием языка программирования AVRAssembler.
3.1 Среда разработки AtmelStudio
AtmelStudio (ранее AVRStudio) — основанное на VisualStudio бесплатное проприетарное интегрированную среду разработки (IDE) для разработки приложений для 8- и 32-битных микроконтроллеров семейства AVR и 32-битных микроконтроллеров семейства ARM от компании Atmel, работающий под управлением операционных систем Windows NT / 2000 / XP / Vista / 7/8/10. AtmelStudio содержит компилятор GNU C / C ++ и эмулятор, позволяющий наладить выполнения программы без загрузки в микроконтроллер.
Ранее среда разработки носило название AVR Studio, но начиная с версии 6.0, вышедшей в 2012 году, в нее была добавлена поддержка разработки для микроконтроллеров архитектуры ARM, также выпускаются фирмой Atmel, и среда разработки получило новое название AtmelStudio. Текущая версия (AtmelStudio 7) поддерживает все микроконтроллеры архитектур AVR, AVR32 и ARM, выпускаемые на сегодняшний день фирмой Atmel.
AtmelStudio содержит в себе менеджер проектов, редактор исходного кода, инструменты виртуальной симуляции и внутрисхемного наладка, позволяет писать программы на ассемблере или на C / C ++.
Характеристики AVRStudio:
Интегрированный компилятор C / C ++;
Интегрированный симулятор;
С помощью плагина возможна поддержка компилятора GCC в виде сборника WinAVR;
Поддержка инструментов Atmel, совместимых с 8-разрядной AVR архитектурой, в том числе AVR ONE !, JTAGICE mkI, JTAGICE mkII, AVR Dragon, AVRISP, AVR ISPmkII, AVR Butterfly, STK500 и STK600;
Поддержка плагина AVR RTOS;
Поддержка AT90PWM1 и ATtiny40;
Интерфейс командной строки с поддержкой TPI.
3.2 Разработка программы
Создаем проект, используя интегрированную платформу разработки AtmelStudioдля разработки и отладку программ для МК AtmelAVR.
Загружаем AtmelStudio. Создаем новый проект:
Выбираем тип проекта, Atmel AVR Assembler (AVR Assembler Project)
Вводим имя проекта
Вводим местоположение проекта
Выбираем отладочных платформу, AVRSimulator
Выбираем МК, ATmega16
Нажимаем кнопку Finish
Окно редактора программы можно открыть, дважды кликнув на имя выходного файла * .ASM окне Project.
В окне редактора программы набираем следующий программный код:
.include "m16def.inc" // подключаете заголовочный файл
.deftemp = r16 // Присваиваем регистр символические имена
.defrazr1 = r17
.defrazr2 = r18
.defrazr3 = r19
.defsys = r20
.deftry = r21
.defcount = r22
.equch0 = 0x03 // 0 для отображения
.equFREQ = 8000000 // Частота процессора
.equW1_DDR = DDRA // Регистр порта датчика
.equW1_PORT = PORTA // Регистр порта датчика
.equW1_PIN = PINA // Регистр порта датчика
.equW1_BIT = 0 // Бит порта на котором датчик
.dseg // ОЗУ
Trm: // 2 комирку под температуру
.byte2
Visible: // 4 ячейки под отображение на индикатор
.byte4
Otobr: // 4 ячейки под промежуточные вычисления
.byte4
.cseg // Программный сегмент
.org0 // Вектор прерывания Reset
jmpReset // Переходим на Reset
.org $ 012 // Вектор прерывания запереполненнием таймера 0
jmpTIM0_OVF // динамично индикация
Reset: // Предустановки
lditemp, 128
outMCUCSR, temp // Вимкнемо JTAG, бит JTD в MCUCSR = 1
lditemp, high (RAMEND) // Инициализуемо в стек
out sph, temp
lditemp, low (RAMEND)
out spl, temp
lditemp, 0xFF // Порты DиCна выход, там семисегментный индикатор
out DDRD, temp
out DDRC, temp
lditemp, 128
outMCUCSR, temp // Выключим JTAG, бит JTD = 1
lditemp, 0b00000010
outTCCR0, temp // Установим предделитель таймера, биты CS
lditemp, 1
outTIFR, temp // Позволим прерывания запереповненням, битTOV0 = 1
outTIMSK, temp
ldisys, 0b10000000 // Установим sys на первый разряд индикатора
Proga_Pred:
rcallW1_Sbros // Сбрасываем шину и проверяем есть ли датчик
cpir17 0 // После сброса, если датчик евr17 будет 1
breqProga_Pred // Если этого нет, идем в бесконечность проверки
rcallW1_Init_12bit // Перестроюемо конфигурационный байт на 9 битную схему работы
sei // позволяется прерывания
Proga:
cli // Запрещаем прерывания на время работы с датчиком
rcallW1_Sbros // Сбрасываем шину и перевиряемочы есть датчик
cpir17 0 // После сброса, если датчик есть в r17 будет 1
breqProga // Если этого нет, идем в бесконечность проверки
rcallW1_ConvTemp // Говорим датчику конвертировать температуру
sei // позволяется прерывания и ждем
rcallDelay // Подождем несколько секунд, пока датчик закончит конвертировать
Proga 0:
cli // Запрещаем прерывания на время работы с датчиком
rcallW1_Sbros // Сбрасываем шину и перепроверяем есть датчик
cpir17 0
breqProga0 // Если этого нет, идем в нескончаемость проверки
rcallW1_ReadMem // Читаем в ОЗУ текущую температуру
sei // позволяется прерывания и начинаем пересчет температуры
lditemp, 0x00 // обнуляем ячейки, где будет температура
stsOtobr + 1, temp
stsOtobr + 2, temp
stsOtobr + 3, temp
ldstemp, Trm // Загружаем старший регистр температуры
sbrstemp, 7 // Проверим положительная у нас температура
rjmpProga_Plusovay // если 7 бит установлен пропускаем эту срока, то есть температура -
lditemp, 0b11111101 // Запишем в Otobr отображения сегменту G, то есть "-"
stsOtobr, temp // Сохраним в 1 разряд
ldstemp, Trm // Загружаем в temp старший регистр температуры
anditemp, 0b00001111 // Выполняем логическое И с константой, отсекаем 4 бита слева
ldirazr1, 0x0F // Записываем число 0x0F в razr1
subrazr1, temp // Отнимаем от 0x0F число из старшего регистра датчика
ldstemp, Trm + 1 // Загружаем в temp младший регистр температуры
anditemp, 0b11110000 // Выполняем логическое И с константой, отсекаем 4 бита справа
ldirazr2, 0xF0 // Записываем число 0xF0 в razr2
subrazr2, temp // Вычитаем от 0xF0 число с младшего регистра датчика
swaprazr2 // Меняем тетради младшего регистра датчика
incrazr2 // Увеличиваем мона 1
swaprazr2 // Изменение назад тетради младшего регистра датчика
rcallRasch_Decimal // Вызываем под программу пересчета температуры в десятинный вид
rcallRasch_Otobr // Вызываем под программу конвертации учитаемий вид
rcallOtobr_Visible// Вызываем подпрограмму перезаписи ячеек
rjmpProga // Переходим на Proga
Proga_Plusovay: // Пришли, если температура +
lditemp, 0b11111111 // Запишем в Otobr отображения "Ничего", то есть "+"
stsOtobr, temp
ldsrazr1, Trm // Загрузим старший регистр температуры
ldsrazr2, Trm + 1 // Загрузим младший регистр температуры
andirazr2, 0b11110000 // Выполняем логическое С константой, отсекаем 4 бита справа
// Этим мы от Сика с младшего бита мусора десятинности температуры
rcallRasch_Decimal // Вызываем подпрограмму пересчете температуры в десятинный вид
rcallRasch_Otobr // Вызываем подпрограмму преобразования в читабельный вид
rcallOtobr_Visible // Вызываем подпрограмму перезаписи ячеек
rjmpProga // Переходим на Proga
Rasch_Decimal: // Пересчет регистра на десятинную форму
swaprazr1 // Изменим тетради в razr1 (старший регистр)
swaprazr2 // Изменим тетради в razr2 (молодшийрегистр)
addrazr1, razr2 // Просуммируем регистры, теперь получена температура в razr1
cpirazr1 0 // Проверим, не 0 градусов
breqNULL_Temp // Перейдемоякщо 0 градусов
Rasch_Decimal0:
ldiXH, High (Otobr + 3) // Загрузим ячейку Otobr + 3 в регистр косвенной адресации X
ldiXL, Low (Otobr + 3)
ldtemp, X // Загрузим с Otobr + 3 значения
inctemp // Увеличим на 1
stX, temp // Сохраним назад в Otobr + 3
cpitemp, 10 // Проверим на 10
brneRasch_Decimal1 // Если не равно перейдем по метке
lditemp 0 // если же = 10, тогда обнулить Otobr + 3
stX, temp
ldtemp, -X // А здесь уже загрузим Otobr + 2 и проведем те же манипуляции
inctemp
stX, temp
cpitemp, 10
brneRasch_Decimal1
lditemp 0
stX, temp
ldtemp, -X
inctemp
stX, temp
Rasch_Decimal1:
decrazr1 // Зменшимона 1 razr1
brneRasch_Decimal0 // Если не = 0 перейдем заметкой
ret // иначе все пересчитали и выходим из подпрограммы
Rasch_Otobr: // Пересчет регистров вчитабельну форму
ldstemp, Otobr + 3 // Загрузим в temp значение ячейки Otobr + 3
rcallRasch_Otobr_Podp // Вызовем подпрограмму пересчете
stsOtobr + 3, razr1 // Сохраним полученное значение в Otobr + 3, ниже по аналогии
ldstemp, Otobr + 2
rcallRasch_Otobr_Podp
stsOtobr + 2, razr1
ldstemp, Otobr + 1
rcallRasch_Otobr_Podp
stsOtobr + 1, razr1ret
Rasch_Otobr_Podp: // Подпрограмма пересчете в читабельную форму
ldiZH, High (CH * 2) // Загрузим в Z наш адрес цифр у памяти программ
ldiZL, Low (CH * 2)
inctemp // Увеличим temp на 1
Rasch_Otobr_Podp0:
lpmrazr1, Z + // Загрузим с программно и памяти число вrazr1
dectemp // Снизим temp
brneRasch_Otobr_Podp0 // Если temp не = 0 перейдем
ret // Если же = 0, выйдем из подпрограммы и в razr1 у нас полученное число
NULL_Temp: // т.к. уOtobr ячейках и так 0, просто выйдем из подпрограммы
ret
Otobr_Visible: // Переписываем готовы ячейки с Otobr у Visible
cli // Запретим прерывания
ldstemp, Otobr
stsVisible, temp
ldstemp, Otobr + 1
stsVisible + 1, temp
ldstemp, Otobr + 2
stsVisible + 2, temp
ldstemp, Otobr + 3
stsVisible + 3, temp
sei // Позволим прерывания
ret
TIM0_OVF: // Динамическая индикация
cli // Запрещаем прерывания
pushtemp // Записываем temp в стек
intemp, SREG // Достаем значение SREG в temp
pushtemp // и сохраняем в стеке
lsrsys // Логический сдвиг вправо
cpisys, 0b00001000 // Проверяем не вышло за границы сегментов
brneTIM0_OVF_Vix // если не получилось переход моза меткой
ldiYH, High (Visible) // а если вышло за границы, обнулить регистровую пару Y
ldiYL, Low (Visible)
ldisys, 0b10000000 // Поставим 7 бит регистра sys, он контролирует который разряд включительно.
TIM0_OVF_Vix:
ldtemp, Y + // Загрузим значение Y и повысим его адрес
outPORTD, sys // Отправим сегмент в порт
outPORTC, temp // И число или знак который выводим
poptemp // Достаем из стека значенния SREG
outSREG, temp // инадсилаемо назад в SREG
poptemp // Достаем значення temp
sei // позволяется прерывания
reti // Выходим из прерывания
//////////////////////////// Начало подпрограмм 1-Wire
W1_Sbros: // Сложения шины и проверка на месте датчик
ldsr16, W1_BIT // Записываем в r16 ножку де датчик
sbiW1_DDR, W1_BIT // Ножку на выход
cbiW1_PORT, W1_BIT // Опракидуем вывод на землю
rcallW1_DelayH // Задержка 480 мкс, для сброса
cbiW1_DDR, W1_BIT // Ножку на вход
rcallW1_DelayI // Ждем тайм слот 70 мкс
sbisW1_PIN, W1_BIT // Пропускает мо следующею срока, если бит порта в 1
ldir17, 1 // И установим сигнальный регистр в 1
sbicW1_PIN, W1_BIT // Пропускаем следующую строку, если бит порта в 0
ldir17 0 // И установим сигнальный регистр в 0
rcallW1_DelayJ // Ждем тайм слот 410 мкс
ret // Если датчик на месте, в r17 по выходе отсюда будет 1, в противном случае 0
W1_ReadMem: // Чтения памяти регистре в температуры
ldir16, 0xCC // Вышлем команду 0xCC, это пропустить уникальный номер датчика
rcallds_byte_wr // Так как он у нас один на проводе
ldir16, 0xBE // Говорим датчику, мы сейчас будем читать
rcallds_byte_wr // Запуливаемо байт
rcallds_byte_rd // А здесь уже начинаем читать, прочитали первый (младший)
stsTrm + 1, r16 // И запулилы его в память, по метке Trm + 1
rcallds_byte_rd // Читаем второй (старший)
stsTrm, r16 // И запулилы его в память, по метке Trm
ret
W1_ConvTemp: // Подпрограмма преобразования температуры
ldir16, 0xCC // Пропускаем уникальный номер датчика
rcallds_byte_wr
ldir16, 0x44 // Говорим что нужно сконвертировать температуру, этот процесс занимает 750 мс
rcallds_byte_wr
ret
W1_Init_12bit: // Подпрограмма перестройки на 12 бит температуры
ldir16, 0xCC // Пропускаем уникальный номер датчика
rcallds_byte_wr // Спуливаемо в датчик
ldir16, 0x4E // Говорим что сейчас будем писать в RAM регистры датчика
rcallds_byte_wr // Спуливаемо в датчик
ldir16, 0xFF // 0xFF записываем в первые 2 регистры, это регистры температуры, они нам не нужны
rcallds_byte_wr // поэтому их оставляем в стандартном состоянии
ldir16, 0xFF // 0xFF второй байт температуры
rcallds_byte_wr // Спуливаемо на порт
ldir16, 0x1F // Говорит мощо 12 бит - 7F, или 1F - 9бит, 3F - 10 бит, 5F - 11 бит
rcallds_byte_wr // Спуливаемо на порт
ret
ds_byte_rd: // Подпрограмма чтения данных в регистр r16 с 1 Wire
ldir17, 8 // Пишем в r17 - 8, т.к. у нас 8 бит в регистре
clrr16 // Чистимоr16, сюда будем читать данные
ds_byte_rd_0:
sbiW1_DDR, W1_BIT // Вывод на выход
cbiW1_PORT, W1_BIT // Опрокидуемо вывод на землю
rcallW1_DelayA // Ждем 6 микросекунд
cbiW1_DDR, W1_BIT // Вывод на вход
rcallW1_DelayE // Ждем 9 микросекунд
sbisW1_PIN, W1_BIT
clc // Очищаем бит C = 0
sbicW1_PIN, W1_BIT
sec // Очищаем бит C = 1
rorr16 // Выполняем циклический сдвиг вправо через С
rcallW1_DelayF // Ждем 55 микросекунд
decr17 // Снижаем на 1 регистр r17
brneds_byte_rd_0 // Если не равно 0 обращаемся в цикле
ret
ds_byte_wr: // Подпрограмма записи данных с региструr16 в датчик
ldir17, 8 // Пишем в r17 - 8, т.к. у нас 8 бит в регистре
ds_byte_wr0:
sbiW1_DDR, W1_BIT // Вывод на выход
cbiW1_PORT, W1_BIT // Опрокидаем вывод на землю
sbrcr16 0 // Проверим, в r16 бит 0 очищено или установлена
rjmpds_byte_write_1 // Если установлено перейдем по этой метке
rjmpds_byte_write_0 // Если очищено перейдем по этой метке
ds_byte_wr1:
lsrr16 // Логический сдвиг вправо
decr17 // Знижуемоr17 на 1
brneds_byte_wr0 // Если не равно 0, обращаемся в цикле
ret // Выход из подпрограммы
ds_byte_write_0: // Запись 0
rcallW1_DelayC // Ждем 60 микросекунд
cbiW1_DDR, W1_BIT // Вывод на вход
rcallW1_DelayD // Ждем 10 микросекунд
rjmpds_byte_wr1
ds_byte_write_1: // Запись 1
rcallW1_DelayA // Ждем 6 микросекунд
cbiW1_DDR, W1_BIT // Вывод на вход
rcallW1_DelayB // Ждем 64 микросекунд
rjmpds_byte_wr1
W1_DelayA: // Задержка 6 mcs
ldiXH, high (FREQ / 1000000)
ldiXL, low (FREQ / 1000000)
rcallW1_Delay
ret
W1_DelayB: // Задержка 64 mcs
ldiXH, high (FREQ / 65000)
ldiXL, low (FREQ / 65000)
rcallW1_Delay
ret
W1_DelayC: // Задержка 60 mcs
ldiXH, high (FREQ / 68000)
ldiXL, low (FREQ / 68000)
rcallW1_Delay
ret
W1_DelayD: // Задержка 10 mcs
ldiXH, high (FREQ / 500000)
ldiXL, low (FREQ / 500000)
rcallW1_Delay
ret
W1_DelayE: // Задержка 9 mcs
ldiXH, high (FREQ / 600000)
ldiXL, low (FREQ / 600000)
rcallW1_Delay
ret
W1_DelayF: // Задержка 55 mcs
ldiXH, high (FREQ / 75000)
ldiXL, low (FREQ / 75000)
rcallW1_Delay
ret
W1_DelayH: // Задержка 480 mcs
ldiXH, high (FREQ / 8332)
ldiXL, low (FREQ / 8332)
rcallW1_Delay
ret
W1_DelayI: // Задержка 70 mcs
ldiXH, high (FREQ / 58000)
ldiXL, low (FREQ / 58000)
rcallW1_Delay
ret
W1_DelayJ: // Задержка 410 mcs
ldiXH, high (FREQ / 9756)
ldiXL, low (FREQ / 9756)
rcallW1_Delay
ret
W1_Delay: // Подпрограмма задержки
sbiwXH: XL, 1 // Отнимаем единицу с регистровой пары
brneW1_Delay // Если не равно 0 крутимся в цикле
ret // Выход из подпрограммы
//////////////////////////// Конец подпрограммы 1-Wire
Delay: // Стандартная задержка
ldirazr1, 255
ldirazr2, 255
ldirazr3, 10
Pdelay:
decrazr1
brnePdelay
decrazr2
brnePdelay
decrazr3
brnePdelay
ret
CH: // Цифры динамической индикации от 0 до 9
.db0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09
После ввода кода программу необходимо сохранить и скомпилировать в * .hex-файл.
4. Симуляция работы проекта
Для симуляции работы проекта воспользуемся пакетом программ ProteusDesignSuiteCADSoftware.
Откроем у Proteus созданный ранее проект термометра.
Дважды кликните по микроконтроллера ATmega16 для редактирования. В появившемся окне, в разделе ProgramFile указываем * .hex-файл программы и нажимаем кнопку ОК.
На нижней панели инструментов нажимаем кнопку Runtimesimulation.
Симуляция работы проектаЗаключение
Итак, я разработал проект средства измерения температуры в диапазоне от -10 до +85 ºCз абсолютной погрешностью ≤ 0,5 ºC, отражающий значение температуры на четырехразрядному семисегментному индикаторе.
Датчик температуры DS18B20передае значение температуры в микроконтроллер ATmega16, который его обрабатывает, конвертирует в десятинный формат и выводит на четырехразрядный семисегментный индикатор.
Для моделирования электронной схемы были использованы программный пакет ProteusDesignSuiteCADSoftware, который позволяет проектировать и симулировать работу электронных схем.
Для разработки программного обеспечения были использованы программный пакет AtmelStudio, который позволяет разрабатывать программное обеспечение для любых микроконтроллеров семейства AVR. ПО разработано с использованием языка программирования AVRAssembler, что обеспечивает высочайшее быстродействие, но достаточно сложным по сравнению с C / C ++.
Данную работу, мне помогал мой однокурсник и коллега, Коваль Игорь. Спасибо, может кому-то пригодиться в будущем.
ATTiny2313 Многорежимные светодиодные матричные часы
Это проект многорежимных часов , основанный на attiny2313 . в качестве дисплея используется светодиодная матрица 8 × 8. с ограниченным разрешением эти 12-часовые часы показывают время в 6 различных режимах.
Схема использует мультиплексирование строк и столбцов для управления светодиодами, по одной строке за раз, это дает рабочий цикл 12,5%, когда «наборы» из светодиодов (8 из них в каждой из 8 строк) включаются на короткое время . Токоограничивающие резисторы устранены для экономии макетной платы, и, поскольку мы не используем постоянно отдельные светодиоды , они не будут повреждены.
Элемент управления (пользовательский интерфейс) также устроен так, что мы используем только одну тактильную кнопку для ввода. при захвате прошивки долгое нажатие (нажатие и удерживание) кнопки для поворота меню и нормальное нажатие кнопки для выбора меню.
Это проект для хобби, и точность часов зависит от точности калибровки вашего внутреннего генератора. Я не использовал кристалл в этом проекте, так как это нарушит макет «матрица поверх микроконтроллера». кристалл можно использовать для повышения точности на альтернативном макете (или печатной плате).С программной компенсацией я могу добиться перерыва в 2 минуты в день. Мне нужно будет корректировать время каждые 3 или 4 дня
Шаг 2: Функции и детали
особенности
* минимальное количество компонентов, 3 части
* батарея работает от 3В до 5В
* использование сторожевого таймера для отсчета времени, спящий режим при отключении питания занимает около 1 мкА энергии
* калибровка позволяет настроить время в секундах для каждого час
* это 12-часовой , а не 24-часовой и нет индикатора AM / PM
* не очень точно, планируется добавить чип RTC
список деталей
* attiny2313v (v — версия с низким энергопотреблением, которая работает с 3V)
* Светодиодный матричный дисплей 8 × 8 (красный лучше всего работает при питании 3 В)
* тактильная кнопка
Распиновка светодиодной матрицы
Светодиодная матрица 8 × 8 имеет размер точки 1.9 мм и с общим катодом, если у вас общий тип анода, вы можете изменить несколько строк в коде для принятия. см. следующую схему и убедитесь, что у вас правильные распиновки. Похоже, они довольно распространены, и если вы покупаете их на ebay, большинство поставщиков имеют одинаковую распиновку, даже если номер модели отличается.
. . . . . C8 C7 R2 C1 R4 C6 C4 R1. . . . верхний ряд контактов (C — столбец, R — строка)
. . . . . R5 R7 C2 C3 R8 C5 R6 R3. . . . В нижнем ряду контактов
светодиодная матрица 8 × 8 имеет размер точки 1.9 мм и с общим катодом, если у вас общий тип анода, вы можете изменить несколько строк в коде для принятия. см. следующую схему и убедитесь, что у вас правильные распиновки. Похоже, они довольно распространены, и если вы покупаете их на ebay, большинство поставщиков имеют одинаковую распиновку, даже если номер модели отличается.
Для получения дополнительной информации щелкните: ATTiny2313 Многорежимные светодиодные матричные часы
GPS 64×16 Dual LED точечно-матричные часы [AVR ATmega16]
GPS 64×16 Dual LED точечно-матричные часы [AVR ATmega16] Видеоклипы.Продолжительность: 6,08 мин.GPS 64×16 Dual LED Dot Matrix Clock Технические характеристики оборудования: — Модель процессора: Atmel ATmega16 — Системные часы: 14,7456 МГц — RTC: Dallas DS1307 — Питание: 5 В, 3 А SMPS — Резервное копирование: 2032 3 В аккумуляторная батарея — Двухцветная матрица 64 * 16 (совместимый режим Active Low / Active High) — Встроенный динамик — Датчик температуры (TCN75) — Приемник дистанционного управления (603LM) — Встроенные датчики освещенности (CdS) — 4 кнопки ( или сенсорный датчик) — 1 светодиодный индикатор состояния — Дополнительная спецификация программного обеспечения GPS: — Язык программирования: Сборка — Редактирование / Сборка: AVR Studio 4.18 — Используемый сегмент кода: 81% — Используемый сегмент данных: 81% — Используемый сегмент EEPROM: 8% Характеристики: — Часы, дата, температура, отображение ДНЯ — Простое в использовании меню пользователя. — Пульт дистанционного управления или сенсорная кнопка. — Режим GPS / RTC — 3 вида перехода отображения (прокрутка вниз, перевод строки, снег). — 4 вида будильника (один раз, каждый день, будний день, выходные). — 4 вида отображаемых шрифтов (жирный шрифт, тонкий шрифт, сегмент, фиксированная система). — Автоматика или ручная регулировка яркости. — Быстрая памятка. Мин Чжу, Ли (Южная Корея) Контактное лицо: soma9nice @ naver.com ————————————————- ———————— GPS 64 * 16 컬러 전광판 시계 하드웨어 정보: — CPU 모델: Atmel 社 ATmega16 — 클럭: 14,7456MHz — RTC: Dallas 社 DS1307 — 전원: 5V, 3A SMPS — 전원: 3V 2032 수은 전지 — 64 * 16 2 컬러 도트 메트릭스 (активный низкий / активный высокий 호환) — 스피커 내장 — 온도 센서 내장 (TCN75) — 리모컨 수신부 내장 (603LM ) — 센서 내장 (CdS) — 4 개의 버튼 (혹은 터치 센서) — 1 개의 상태 …
Теги: AVR, Atmel, RTC, DS1307, TCN75, LED, atmega16, GPS, Точечная матрица, матрица , Часы настенные, it-style.kr Отображение текста с прокруткой
на светодиодной матрице 8×8 с использованием микроконтроллера AVR (ATmega32)
В этом уроке мы собираемся спроектировать прокручиваемый светодиодный матричный дисплей 8×8 с использованием ATMEGA32 , который будет отображать алфавиты прокрутки.
Светодиодная матрица 8×8 содержит 64 светодиода (светоизлучающие диоды), которые расположены в виде матрицы, отсюда и название — светодиодная матрица. Мы собираемся сделать эту матрицу, припаяв 64 светодиода к монтажной плате или DOT PCB. Светодиоды могут быть любого цвета, выбирайте те, которые есть в наличии. Затем мы напишем программу на языке C для микроконтроллера ATmega32 AVR для управления этой матрицей из 64 светодиодов. ATmega, согласно программе, включает соответствующие светодиоды для отображения символов в режиме прокрутки.Ранее мы делали тот же проект с прокруткой текста с Arduino.
Требуется компонентов:
- ATMEGA32
- Блок питания (5В)
- 64 светодиода
- Резисторы 1КОм (8 шт.),
- Программатор AVR ISP
- Перфорированная плита с другими паяльными инструментами
- ATMEL СТУДИЯ 6.1
Схема и объяснение работы:
Имеется 64 светодиода, расположенных в виде матрицы. Итак, у нас 8 столбцов и 8 строк.В этих строках и столбцах собраны все положительные клеммы в ряду. В каждом ряду имеется один общий положительный вывод для всех 8 светодиодов в этом ряду. Это показано на рисунке ниже,
.
Итак, на 8 рядов у нас есть 8 общих положительных выводов. Рассмотрим первый ряд, как видно на рисунке, 8 светодиодов от D57 до D64 имеют общий положительный вывод и обозначены «POSITIVE0». Теперь, если мы хотим зажечь один или все светодиоды в первом РЯДЕ матрицы, мы должны запитать A0 светодиодной матрицы.Аналогичным образом, если мы хотим зажечь какой-либо светодиод (или все) в любом ROW, нам нужно запитать соответствующий общий положительный контактный вывод этого соответствующего ROW.
Это еще не конец, и просто оставить СТРОКИ МАТРИЦЫ с положительным предложением ничего не даст. Нам нужно заземлить негативы светодиодов, чтобы они светились. Таким образом, в светодиодной матрице 8×8 все отрицательные клеммы светодиодов в любом столбце объединены в восемь общих отрицательных клемм , , как и все отрицательные клеммы в первом столбце, соединены вместе с C7 (ОТРИЦАТЕЛЬНЫЙ7).Это показано на рисунке ниже:
На эти контакты следует обращать внимание при пайке светодиодов на Perfboard.
Теперь, если нам нужно заземлить любой светодиод в первом столбце, мы заземлим PIN-C7 (NEGATIVE7) МАТРИЦЫ, и он заземлит все светодиоды в первом столбце. То же самое происходит и со всеми другими семью общими отрицательными столбцами.
Теперь вы знаете, как работает общий положительный и общий отрицательный. Давайте соберем их вместе, чтобы увидеть, как они работают вместе, и последний Circuit for Scrolling 8×8 LED Matrix Display будет выглядеть так:
Управление светодиодной матрицей 8×8 с использованием мультиплексирования:
Теперь предположим, что мы хотим включить LED57, затем нам нужно запитать PORTA0 ATMEGA32 и заземлить PORTC0 ATMEGA32.Теперь, чтобы включить LED57 и LED50, нам нужно запитать PINA0, PINA1 и заземлить PINC0, PINC1. Но при этом будут включены не только D57, D50, но и D49, D58. Чтобы избежать этого, мы используем метод под названием Multiplexing . Мы уже подробно обсуждали эту технику мультиплексирования в светодиодной матрице 8×8; прочтите эту статью для подробного объяснения. Здесь мы кратко объясняем мультиплексирование.
Человеческий глаз не может уловить частоту более 30 Гц. То есть, если светодиод постоянно горит и гаснет с частотой 30 Гц или более.Глаз видит, что светодиод постоянно включен. Однако это не так, и светодиод будет постоянно включаться и выключаться. Этот метод называется мультиплексированием .
Скажем, например, мы хотим включить только LED57 и LED50, не включая D49 и D58. Хитрость в том, что сначала мы подадим питание на первый ряд, чтобы включить LED57 и подождать 1 мсек, а затем выключим его. Затем мы подадим питание на второй ряд, чтобы включить LED50 и подождать 1 мсек, а затем выключим его.Цикл идет непрерывно с высокой частотой, и LED57 и LED50 будут быстро включаться и выключаться, и нам будет казаться, что оба светодиода постоянно горят. Это означает, что мы обеспечиваем питание только одного ряда за раз, что исключает возможность включения других светодиодов в других рядах. Мы будем использовать эту технику, чтобы показать всех персонажей.
Мы запишем десятичное значение для каждого символа и запрограммируем эти значения в ATMEGA32. Программа сдвигает эти значения слева направо, непрерывно показывая символы прокрутки.
Обычно микросхема MAX7219 используется для управления светодиодной матрицей 8×8, мы использовали эту микросхему в нашем предыдущем проекте с Arduino: проверьте здесь.
Объяснение программирования:
Полный код приведен под статьей, мы написали программу на C для ATmega32 для горизонтальной прокрутки символов на светодиодной матрице 8×8.
Чтобы изменить отображаемые символы, просто замените значение в массиве char ALPHA [] в соответствии со значениями символов, приведенными ниже,
{0,0b01111111,0b11111111,0b11001100,0b11001100,0b11001100,0b11111111,0b01111111}, // А {0,0b00111100,0b01111110,0b11011011,0b11011011,0b11011011,0b11111111,0b11111111}, // B {0,0b11000011,0b11000011,0b11000011,0b11000011,0b11100111,0b01111110,0b00111100}, // C {0,0b01111110,0b10111101,0b11000011,0b11000011,0b11000011,0b11111111,0b11111111}, // D {0,0b11011011,0b11011011,0b11011011,0b11011011,0b11011011,0b11111111,0b11111111}, // E {0,0b11011000,0b11011000,0b11011000,0b11011000,0b11011000,0b11111111,0b11111111}, // F {0b00011111,0b11011111,0b11011000,0b11011011,0b11011011,0b11011011,0b11111111,0b11111111}, // G {0,0b11111111,0b11111111,0b00011000,0b00011000,0b00011000,0b11111111,0b11111111}, // H {0b11000011,0b11000011,0b11000011,0b11111111,0b11111111,0b11000011,0b11000011,0b11000011}, // I {0b11000000,0b11000000,0b11000000,0b11111111,0b11111111,0b11000011,0b11001111,0b11001111}, // J {0,0b11000011,0b11100111,0b01111110,0b00111100,0b00011000,0b11111111,0b11111111}, // К {0b00000011,0b00000011,0b00000011,0b00000011,0b00000011,0b00000011,0b11111111,0b11111111}, // L {0b11111111,0b11111111,0b01100000,0b01110000,0b01110000,0b01100000,0b11111111,0b11111111}, // М {0b11111111,0b11111111,0b00011100,0b00111000,0b01110000,0b11100000,0b11111111,0b11111111}, // N {0b01111110,0b11111111,0b11000011,0b11000011,0b11000011,0b11000011,0b11111111,0b01111110}, // O {0,0b01110000,0b11111000,0b11001100,0b11001100,0b11001100,0b11111111,0b11111111}, // П {0b01111110,0b11111111,0b11001111,0b11011111,0b11011011,0b11000011,0b11111111,0b01111110}, // Q {0b01111001,0b11111011,0b11011111,0b11011110,0b11011100,0b11011000,0b11111111,0b11111111}, // R {0b11001110,0b11011111,0b11011011,0b11011011,0b11011011,0b11011011,0b11111011,0b01110011}, // S {0b11000000,0b11000000,0b11000000,0b11111111,0b11111111,0b11000000,0b11000000,0b11000000}, // T {0b11111110,0b11111111,0b00000011,0b00000011,0b00000011,0b00000011,0b11111111,0b11111110}, // U {0b11100000,0b11111100,0b00011110,0b00000011,0b00000011,0b00011110,0b11111100,0b11100000}, // V {0b11111110,0b11111111,0b00000011,0b11111111,0b11111111,0b00000011,0b11111111,0b11111110}, // W {0b01000010,0b11100111,0b01111110,0b00111100,0b00111100,0b01111110,0b11100111,0b01000010}, // X {0b01000000,0b11100000,0b01110000,0b00111111,0b00111111,0b01110000,0b11100000,0b01000000}, // Y {0b11000011,0b11100011,0b11110011,0b11111011,0b11011111,0b11001111,0b11000111,0b11000011} // Z
Например, если вы хотите, чтобы отображал DAD на светодиодной матрице , сначала замените значения символов в массиве char ALPHA [] , поместив значения для символов D, A и D из приведенного выше списка:
char ALPHA [] = {0,0,0,0,0,0,0,0,0,0,0, 0,0b01111110,0b10111101,0b11000011,0b11000011,0b11000011,0b11111111,0b11111111, 0,0b01111111,0b11111111,0b11001100,0b11001100,0b11001100,0b11111111,0b01111111, 0,0b01111110,0b10111101,0b11000011,0b11000011,0b11000011,0b11111111,0b11111111, 0,0,0,0,0,0,0,0,0,0,0};
Всего значений теперь 5 * 10 = 50 значений, поэтому
Заменять, for (int x = 0; x <142; x ++) // 150-8 (чтобы остановить переполнение) {…….. С участием, for (int x = 0; x <42; x ++) // 50-8 (чтобы остановить переполнение) {…… ..
Значит, вам просто нужно изменить номер.
На этом вы выполнили программирование и теперь можете Прокручивать любой текст на светодиодной матрице 8x8 с помощью AVR , проверьте Полный код ниже с демонстрацией Video .
formatc1702 / Micro-Word-Clock: отображение времени в 8x8 пикселей
Описание
Крошечная копия знаменитых Word Clock, использующая только микроконтроллер ATmega, часы реального времени DS1307 и несколько пассивных компонентов для отображения времени на светодиодной матрице 8x8.Буквы были напечатаны на прозрачном листе и наклеены на светодиоды для обеспечения удобочитаемости времени. Смотрите видео на YouTube здесь.
Структура каталога
- MicroWordClock2-Arduino содержит микропрограммное обеспечение, включая определения контактов для светодиодной матрицы и расположение слов на каждом языке.
- EAGLE содержит файлы схемы и дизайна печатной платы для проекта.
- Графика содержит дизайн прозрачного листа для размещения поверх светодиодной матрицы для формирования слов, разработанный в Inkscape.Приветствуются материалы на других языках!
Ведомость материалов
Название детали | Размер упаковки | Каталожный номер Reichelt | |
---|---|---|---|
IC1 | ATmega328P-AU | TQFP-32 | ATMEGA 328P-AU |
IC2 | DS1307Z + | СО-8 | DS 1307Z |
C1 | 220 нФ керамика | 2012 метрическая / 0805 британская | X7R-G0805 0,22µ |
C2 | 2.2 мкФ тантал | 3528 метрическая система / корпус B | СМД ТАН.2,2 / 20 |
S1 | Кнопка SMD | 6,2x6,5 мм | ТЕСТЕР 9314 |
XTAL | Кристалл 32,768 кГц | 3216 метрическая / 1206 дюймовая | 32 768 CC7V-12,5 |
Светодиодная матрица | 8x8 матрица | 20x20 мм | GYXM-788ASR * (DealExtreme) |
Печатная плата | 20x20 мм | ОшПарк | |
* Наверное, подойдет любая светодиодная матрица с маркировкой 788. |
Вам потребуется внутрисистемный программист (ISP) для записи прошивки на микроконтроллер.
Запись загрузчика и загрузка скетча
Пожалуйста, прочтите эти два руководства, если вы не знакомы с записью загрузчика:
Требуемая процедура описана как «AVR на макетной плате» и «Минимальная схема», соответственно, поскольку к микроконтроллеру не подключен внешний кристалл.
Загрузите файл конфигурации платы Barebones ATmega Chips Карлоса Родригеса: https: // github.com / carlosefr / atmega (инструкции внутри)
Заголовок ICSP на печатной плате Micro Word Clock имеет стандартную компоновку, описанную здесь (рис. 2).
Взносы
Карл Монк построил свою собственную версию, используя Unicorn HAT.
quistoph сделал голландский макет.
Tanguy Rewers независимо разработал альтернативный голландский макет (обозначенный как dutch3).
Показано на
Лицензия
Этот проект (программный и аппаратный) опубликован под лицензией Creative Commons BY-SA 3.0 Лицензия.
Создайте часы реального времени на Proteus, используя точечно-матричный светодиодный дисплей
Разработка часов реального времени с использованием точечно-матричного дисплея на Proteus
Объектив - время отображения на матричном дисплее 8X32
В этой статье часы реального времени RTC DS 1307 связаны с микроконтроллером, а время отображается на матричном дисплее. Схема моделируется с помощью программного обеспечения Proteus. Мы обсудим проект в двух частях, одна - , взаимодействующая с матричным дисплеем , а другая - , обеспечивающая интерфейс RTC DS 1307 .Любая ИС RTC, например DS 3232, поставляется со встроенным кристаллом, с которым могут быть связаны сигналы тревоги.
В этой статье последовательно объясняется часть программирования с использованием программного обеспечения « mikro C PRO для AVR» . Логика разрабатывается поэтапно, чтобы, следуя статье, можно было проектировать дисплеи разных размеров и форматов. Давайте сначала обсудим точечно-матричные дисплеи. Отображение текста или символов на матричном дисплее выполняется путем обновления дисплея фреймами данных.Теперь обсудим обновление столбца. Для этого собираются и обновляются кадры данных для столбцов.
Выбор матричного дисплея Матрица
Массив 32 X 8 содержит 8 строк и 32 столбца. Это выбрано, потому что мы должны отображать время с точностью до секунд, и оно состоит из 6 цифр. Каждая цифра оформлена в виде матрицы 5 X 7, то есть 5 столбцов и 7 строк. Итак, для шести цифр нам нужно 5 * 6 = 30 столбцов и два столбца для разделения часов, минут и секунд.Из дисплеев, доступных в виде модуля, достаточно 4 * 8X8 светодиодных матричных дисплеев. Однако мы можем изменить матрицу отображения в соответствии с нашими требованиями, внося соответствующие исправления в программную часть.
Обрамление персонажей
Теперь давайте представим цифры в виде матрицы 5X7. Для этого нам нужно объявить двумерный массив типа « char » на 10 цифр. На изображении ниже показано обрамление цифры « 0 » для модуля с общим катодом столбца, что означает, что столбцы включаются, давая сигнал low , а соответствующие светодиоды строк включаются с сигналом high
Кадрирование данных для цифры «0»
На изображении выше каждая точка в цифре считается High i.е .., логика 1. Поскольку существует 5 столбцов, для каждого отдельного столбца светодиоды строк, которые должны светиться, хранятся в массиве. Таким образом, нам нужно 5 байтов на каждую цифру. Шрифт или стиль - по нашему выбору. Стиль также может быть сегментным. Мы должны обрамить цифру в соответствии с формой. Аналогичным образом обрамлены и другие цифры. На изображении ниже показаны рамки цифры «0» общего типа анода Column, поскольку он легко доступен в Proteus. Просто отрицая данные, символы в рамке можно поменять местами.
Рамки цифры «0»
Поскольку цифры заключены в рамки, самое время отобразить их.В этом случае для отображения цифр в матричных массивах требуется 5-контактных контактов для управления отдельными столбцами и 7-контактных разъемов для управления строками . Последовательность выполнения программы выглядит следующим образом: включить столбец-1 и передать данные соответствующих строк в строки. Подождите несколько миллисекунд и отключите столбец-1. Теперь удалите данные строк, включите столбец-2 и выдайте данные строк столбца-2. Повторяйте предыдущие шаги непрерывно в виде цикла, чтобы показать цифру.
Отображение цифр
Для одной цифры возможно управление с помощью одного микроконтроллера.Но если несколько матриц объединяются в массив, приведенная выше схема изменяется, оставляя тот же поток программы. Чтобы уменьшить количество выводов столбцов, Столбец-1 всех матриц 8X8 соединяется вместе, образуя единый узел, и, как и другие, остальные столбцы. Таким образом, для управления всеми столбцами массива требуется только 8 контактов.
Как уже обсуждалось, столбцы просто обновляются в определенной и единственной последовательности, которая представляет собой смещение сигнала HIGH из одного столбца в следующий столбец .Для этого можно использовать декадный счетчик IC. Теперь мы используем матрицу 8X8, поэтому нам нужно управлять 8 столбцами. «Сбросив» декадный счетчик с выходом 9 -го , мы можем достичь требуемой последовательности. Микроконтроллер должен послать тактовый сигнал через один из своих выводов ввода / вывода на счетчик декад, а еще один вывод требуется для Master Reset счетчика при запуске дисплея, чтобы избежать повреждения данных. Итак, теперь мы уменьшили контакты управления колонкой с 5 контактов до 2 контактов .Это применимо для обновления массивов до 10 столбцов (в случае, если вы проектируете панель дисплея без использования готовых модулей).
Последовательная передача данных от микроконтроллера
Теперь уменьшим количество контрольных штифтов ряда. Для этой цели мы используем регистры Serial-In, Serial-Out и Parallel-Out с Load / Store и O utput E nable входами. Микроконтроллер должен иметь интерфейс SPI-S erial P eripheral I .Данные строк из микроконтроллера последовательно сдвигаются в эти регистры для каждого кадра всей дисплейной платы. Затем данные загружаются на параллельный выход этих регистров путем выдачи микроконтроллером сигналов включения нагрузки и вывода. В этом проекте мы постоянно включили вывод нагрузки / STB, подключив его к Vcc. Итак, для передачи строковых данных нам нужны два контакта для последовательной передачи и два контакта для сигналов загрузки и включения. Для одной матрицы требуется один регистр.Итак, мы должны увеличить матрицы и регистры как пару, чтобы увеличить размер массива. Ниже представлена измененная принципиальная схема.
Схема с использованием сдвигового регистра
Процедура построения схемы и код включения SPI показаны на следующем видео.
Построение схемы - демонстрация
Последовательность выполнения программы и результаты моделирования представлены в следующем видео. До сих пор мы использовали только 5 столбцов матрицы 8X8 для отображения одной цифры.
Вывод моделирования
Не принимайте эти выходные данные как окончательные. Наша цель - отобразить время на матричном массиве, состоящем из шести цифр. Чтобы отобразить это множество символов, мы должны изменить нашу схему, расширив модули отображения матрицы и регистры сдвига.
Изменение схемы
Обрамление текста
Сложно отобразить эти шесть цифр с указанным выше форматом программы, лучше сгруппировать все данные строки для каждого столбца в одну переменную.Предположим, что нам нужно показать цифры от 0 до 5. Теперь мы должны сформировать массив, в котором данные всех этих цифр хранятся одна за другой. Чтобы сократить пояснение, давайте обозначим цифры так, как будто мы показываем время. Для этого мы должны определить массив с именем « time» типа char, который содержит фактическое время, которое мы собираемся считать с часов реального времени. Поскольку наш массив содержит 32 столбца, массив данных должен хранить 32 байта.
Фрагмент программы для Framing
Теперь мы сохранили данные строк для отдельных столбцов в одном массиве.Поскольку мы должны отображать время, мы должны разделить часы, минуты и секунды. Итак, мы должны вставить эти пробелы или пустые байты данных между только что созданным массивом.
Положение столбца разделителей
При подсчете цифр в столбцах мы получаем разделители в 10 столбцах -й и 21 -й столбцов. Измененный код для включения разделителей показан ниже.
Код для обрамления с разделителями
Перенос данных из микроконтроллера в регистры сдвига
Пора отображать символы.Мы должны посылать данные, хранящиеся в массиве строковых данных, кадр за кадром из микроконтроллера в регистры сдвига. Поскольку для каждой матрицы есть 8 столбцов, и мы объединили уникальные столбцы всех модулей матрицы, получается 8 кадров. Ниже приведен пример покадрового отображения.
Пример покадрового отображения
Из приведенного выше изображения ясно, что мы должны отправлять данные в соответствии с кадрами. В первом кадре отправляются данные, соответствующие столбцу 1 всех матриц.Поскольку мы выдаем данные через регистры последовательного сдвига, сначала отправляются данные, соответствующие столбцу 1 матрицы 4 -й , а затем 3-й матрице -й матрицы , 2-й матрице -й и, наконец, 1 матрице -й . Ниже показано соотношение «один-один» между столбцами и ранее созданным массивом данных строк.
Связь столбцов и строк - матричный дисплей
S. No. | Столбец в терминах матриц | Адрес массива данных строк |
---|---|---|
1. | Матрица 1 - Столбец 1 (M1 C1) | 0 |
2. | M1 C2 | 1 |
3. | M1 C3 | 2 |
4. | M1 C4 | 3 |
5. | M1 C5 | 4 |
6. | M1 C6 | 5 |
7. | M1 C7 | 6 |
8. | M1 C8 | 7 |
9. | м2 C1 | 8 |
10. | M2 C2 | 9 |
11. | M2 C3 | 10 |
12. | M2 C4 | 11 |
13. | M2 C5 | 12 |
14. | M2 C6 | 13 |
15. | M2 C7 | 14 |
16. | M2 C8 | 15 |
17. | M3 C1 | 16 |
18. | M3 C2 | 17 |
19. | M3 C3 | 18 |
20. | M3 C4 | 19 |
21. | M3 C5 | 20 |
22. | M3 C6 | 21 |
23. | M3 C7 | 22 |
24. | M3 C8 | 23 |
25. | M4 C1 | 24 |
26. | M4 C2 | 25 |
27. | M4 C3 | 26 |
28. | M4 C4 | 27 |
29. | M4 C5 | 28 |
30. | M4 C6 | 29 |
31. | M4 C7 | 30 |
32. | M4 C8 | 31 |
Логика программы для отправки данных в соответствии с обсуждаемым форматом показана ниже.Перед запуском цикла while мы должны вызвать функцию «кадрирование ».
Программный код для посылки данных строк кадр за кадром
По умолчанию мы предварительно определили время как 12 00 00 , указав соответствующие значения в массиве времени. Последовательность временного массива следующая: «время [0]» == десять часов и «время [5]» == секунды. Результат моделирования показан ниже.
Отображение 6 цифр времени по умолчанию
Связь с часами реального времени IC
К настоящему времени мы завершили матричный матричный дисплей с сопряжением.Теперь мы обсудим вторую часть, которая касается взаимодействия с микросхемой RTC DS 1307 / DS 3232 и последующего считывания с нее времени. Для этого требуется TWI - T wo W ire serial I интерфейсная функция в микроконтроллере. Мы используем микроконтроллер ATMEGA 8 . Согласно паспорту, программный код для передачи и приема данных следующий. Мы должны прочитать данные из ИС RTC и перенести их в наши ранее заявленные «временные» регистры.Прямоугольная волна с частотой 1 Гц генерируется микросхемой RTC с помощью подходящих настроек регистра. Эта прямоугольная волна используется в качестве внешнего источника прерывания для микроконтроллера, поэтому регистры времени обновляются каждую секунду. Ниже приведен код обсуждаемой процедуры.
Программный код для операции чтения RTC
Эта операция чтения выполняется каждую секунду. Функция read вызывается в подпрограмме прерывания внешнего прерывания, которое активируется входным прямоугольным сигналом с частотой 1 Гц.Пустой столбец разделителя можно заменить на обычные мигающие точки с помощью следующего фрагмента. Каждую секунду данные, соответствующие столбцу разделителя, изменяются с пустых данных на точки в подпрограмме прерывания ввода прямоугольной волны.
Программный код для обновления мигающего разделителя
В зависимости от значения разделителя, равного «0» или «1», массив данных строк этих двух столбцов изменяется вместе со временем в функции кадрирования. Ниже приведен код для этого.
Программный код для кадрирования мигающего разделителя
Ниже приведены результаты моделирования проекта, закодированного до сих пор.
Результат моделирования, отображающий время
Редактирование времени
К настоящему времени у нас есть сопряженные матричные дисплеи и часы реального времени. Полученный результат в этом состоянии не позволяет пользователю редактировать время. В качестве последнего шага давайте создадим код для редактирования времени. Для этого мы используем 3 кнопки для установки / изменения , переключения между цифрами и настройки выбранной цифры.Внешнее прерывание микроконтроллера INT0 используется для редактирования времени. Схема разработана таким образом, что нажатие любой из кнопок вызовет прерывание. Таким образом, считывая фактическую кнопку, которая используется в подпрограмме прерывания, мы предпринимаем соответствующие действия для изменения времени. Ниже представлена принципиальная схема.
Схема для редактирования времени
Программная логика для установки времени представлена в программном файле. Чтобы указать выбранную цифру, дисплей ограничивается рамкой только до выбранной цифры.Для этого определяется функция set_framing, которая вызывается во время редактирования.
Вывод моделирования с возможностью редактирования
При аппаратной реализации лучше использовать драйверы для столбцов, так как один декадный счетчик не может управлять всем током. Если используются модули катодного типа столбца, удалите отрицание при загрузке SPDR с данными строки, и транзисторы NPN могут использоваться для управления столбцами, управляя их базами с выходами счетчика декад.
Загрузки
Загрузка - программный файл C и двоичный файл в шестнадцатеричном формате
Итак, мы закончили наше руководство по созданию часов реального времени в среде Proteus с использованием матричного светодиодного дисплея.
Аналоговые часы | Hackaday
Есть ли какие-нибудь проекты в последнюю минуту, которые вы завершили незадолго до конца десятилетия? Чтобы помочь скоротать время, [Эрих Стайгер] решил создать мета-цифровые часы, состоящие из 24 отдельных аналоговых часов, - идеальный предмет, который поможет встретить новый год. Шаговые часы управляются сетью микроконтроллеров LPC, отображающих время и температуру в помещении, а также несколько эстетически приятных анимаций загрузки.
Каждые часы работают от 5-вольтового блока питания USB, потребляя менее 2 А для полной 24-тактовой настройки.Мета-часы находятся в корпусе, вырезанном лазером, а стрелки на 3D-принтере показывают время. Хотя было бы проще реализовать одну доску на такт, [Эрих] решил использовать одну доску на четыре такта, расположенных рядами, чтобы сэкономить на затратах. Компоновка фиксирует расстояние между часами, хотя [Эрих] также для компенсации уменьшил размер часов.
«Шаговая» часть шаговых часов использует 360-градусную версию шагового двигателя VID28, чтобы уменьшить высоту конструкции и стоимость проекта.Помимо драйвера X12.017, который бесшумно управляет двигателями, для шаговых двигателей также удобно использовать только штырьки «направления» и «шага», что сокращает количество контактов, необходимое для микроконтроллера. Неодимовые магниты и датчики на эффекте Холла используются для отслеживания положения стрелок при движении часов, а магниты встроены в стрелки часов.
Что касается связи, вместо использования общего протокола I2C был выбран более надежный RS-485. Мастер координирует все часы с помощью шины, обеспечивая интерфейс командной строки.Мастер также может связываться с главным компьютером через USB для поддержания времени RTC.
На этапе разработки программного обеспечения [Эрих] использовал мини-интерфейс командной строки SEGGER J-Link EDU для отслеживания информации о драйвере и каждом отдельном шаговом двигателе. Программное обеспечение, управляющее двигателями, написано на языке C, а платы работают под управлением FreeRTOS. Пошаговое переключение обрабатывается прерыванием таймера, но поскольку LPC845 не имеет достаточного количества каналов таймера, все функции выполняются в пределах одного канала.Это приводит к множеству обработчиков прерываний, флагов и обратных вызовов по всему коду, что доставляет удовольствие.
Говоря о часах, ознакомьтесь с некоторыми другими нашими прошлыми хитростями, включая эти часы с мини-VFD и эти забавные часы со светодиодной матрицей (они позволяют играть в тетрис!).
Читать далее «Создание гигантских мета-часов из меньших часов» →
Atmel ATmega Микроконтроллер VGA / PAL адаптер
> > Прототип видеоадаптера VGA
> > Вот как это выглядит на мониторе VGA... |
> > ... и выводить на телек.
|
Предпосылки проекта.
Несколько месяцев назад я пытался подключить микроконтроллерную систему к Монитор VGA для вывода данных в виде текста.Я был удивлен, обнаружив немного по этой теме в Интернете, чтобы помочь мне в достижении этой цели. Безусловно ничего простого новичка не может найти полезным.
Есть примеры, которые используют стандарты, такие как PC-104. или сложные реализации FGPA, найденные на www.opencores.org. Другие решения включают графические контроллеры Fujitsu или даже один локальный Русский человек, который выставлял на продажу проект за 5000 долларов на ACEX. Эти хорошо, но они мало помогают большинству любителей и т. д., которые хотят показать текст на VGA или подобном экране.
Что Я хотел получить «быстрое и грязное» решение, которое не стоило бы слишком дорого.
Первоначальные расчеты показали, что 8-битный микроконтроллер AVR от ATMEL, с его тактовой частотой 16 МГц, обеспечивающей примерно 16 MIPS, было хороший кандидат на дальнейшие исследования. Также обратите внимание, что более новые AVR, такие как Mega48, Mega88 и Mega168 будут официально поддерживать тактовую частоту до 20 МГц. Поэтому я пришел к выводу, что с тактовая частота 16 Mhz я мог добиться чего-то порядка 8 Mhz скорости передачи данных переводятся из порта.Я также выбрал AVR, поскольку у меня уже накопился большой опыт работы с ним, и так я начал работу над проектом.
После примерно два-три месяца исследований, представляю вам плоды моих труд!
Цель проекта:
Задача, которую я поставил перед собой, достаточно проста, чтобы перечислить. С общедоступными микроконтроллеры, такие как Mega8, Mega16 и аналогичные, и с минимальным внешние компоненты Мне нужен был дизайн, который можно было бы отображать на минимум 15x15 символов на мониторе VGA с использованием стандартных частот VGA.Сами данные должны быть получены микроконтроллер через его порт USART. Все используя тактовую частоту 16 МГц для AVR.
данная проблема на данный момент решена успешно.
Более того - проект немного расширен и дополнен введение формации обыкновенной
Видео монохромный (PAL / SECAM) сигнал. Т.е. в зависимости от положения перемычки тип сформированное видео сигнала VGA или композитного видео.
Первоначальная цель была достигнута. Проект расширился за счет включения сингла Monochomatic Video (PAL / SECAM). В моей тестовой установке простая перемычка определяет, VGA или композитное видео.
>> Схема видеоадаптера VGA |
Характеристика проекта:
VGA-терминал:
Количество символов: 20 строк по 20 знаков.
разрешение символьной матрицы: 8х12 точек
Поддерживается кодовая страница: WIN 1251
Сформировано сигнал: VGA
разрешение: 640x480
Частота вертикальной синхронизации: 60 Гц
Скорость обмена UART 19200 бит / с
Видеотерминал:
Количество символов: 20 строк по 38 знаков.
разрешение индивидуальной символьной матрицы: 8х12 точек
Поддерживается кодовая страница: WIN 1251
Сформировано сигнал: композитное видео (PAL / SECAM)
Разрешение: 625 строк (чересстрочная)
Частота вертикальной синхронизации: 50 Гц
Скорость обмена UART 19200 бит / с
Тип используемого микроконтроллера: Mega8, Mega16, Mega32, Mega8535 и др.
Часы частота микроконтроллера стандартная - 16Mhz.
Примечания:
1. Во избежание искажения изображения при получение данных через UART, для VGA рекомендуется сделать данные обмен с терминалом примерно через 300-600 мкс после сигнала вертикальная синхронизация (VSYNC).
2. Доступная внутренняя RAM Mega8535 (всего 512 байт) недостаточно для формирования видеосигнала с разрешение 38х20 символов.
Алгоритм программы:
Разъяснения по работе программы:
Алгоритм рендеринга изображения достаточно традиционный, основной ноу-хау проекта - это побитовое смещение изображения с использованием Регистр сдвига SPI SPDR через вывод MOSI. Таким образом, на заводе выполняются две работы. в то же время, когда отправляется следующий байт для рендеринга, предыдущий байт сдвигается через регистр сдвига (SPI SPDR MOSI).Различия между рисунки 2 и 3 демонстрируют это.
Заключение:
Учитывая, что проект был написан с WinAVR (GCC), это относительно легко увеличить разрешение и / или частоты, используемые при создании дисплея изображений. С предстоящим наличие микроконтроллеров AVR, таких как Mega48, Mega88 и Mega168 официально поддерживая тактовую частоту 20 МГц, можно добиться разрешение 20 строк по 25-30 знаков.Это возможно при использовании именно такая же схемотехника.
При необходимости код можно портировать на другие семейства современных RISC. микроконтроллеры с минимальными изменениями кода. Основные ограничения необходимы не менее 16 MIPS и пропускная способность через SPI не менее 8 мегабит в секунду.
Применение адаптера:
Приложения проекта не ограничиваются только один терминальный вариант (см. демо в папке с примерами) - несмотря на серьезную загруженность процессора регенерация дисплей
оставшейся мощности хватит на организацию обработки, например, нескольких цифровых и аналоговых сигналов и реакции на их, а также выдача результатов их измерений на дисплей в в реальном времени (Системы безопасности, Промышленная автоматика и т.п.). Автор имеет улучшенные варианты подобных систем с разрешение символьного дисплея 40x24 символа в режиме VGA, работа в коммерческие продукты.
Вы можете свободно использовать материалы этого проект для образовательных и некоммерческих целей. Все права этого проекта зарезервированы автором. Любая перепечатка, публикация, в том числе на Интернет, использование в коммерческих или аналогичных проектах материалов этого проекта категорически запрещено и только доступны с письменного согласия автора.
Файлы:
Исходники проекта, примеры
Эта статья в формате "PDF"
Полезные ссылки:
Теория Видео сигнал
Корнельский университет Электротехника 476 - Генерация видеосигнала на AVR
Теория сигнала VGA
Сигнал VGA поколенияна PIC
Дальнейшее развитие проекта смотрите на http: // www.vga-avr.narod.ru/
Связаться с автором по электронной почте: [email protected]
Автор Ибрагимов Максим Рафикович Россия, Тольятти 20.10.2005
.