Site Loader

Содержание

Устройства на микроконтроллерах Atmel серии AVR

GSM сигнализация для автомобиля (ATmega16) 07.10.2010
Устройство предназначено для своевременного оповещения автовладельца о взломе автомобиля. Сигнализация контролирует двери, окна,…
Просмотров: 10390

Простой цифровой спидометр с семисегментным индикатором (ATmega8) 07.10.2010
Устройство представляет собой простой спидометр на AVR микроконтроллере. Его отличительной чертой является минимум деталей, всего 4…
Просмотров: 13394

Тахометр на AVR микроконтроллере (ATtiny2313, C) 13.01.2010
Данное устройство представляет собой неплохой тахометр, предел его измерений составляет 100 — 9990 об/мин. Точность измерения — ± 3 об/мин….
Просмотров: 27914

Mega-Генератор (ATmega16, C) 09.08.2008
Попросили меня как-то на работе (автосервис) организовать генератор для проверки различных электроклапанов, инжекторов, катушек. ..
Просмотров: 9447

Простейший бортовой компьютер на любой инжекторный двигатель (ATmega8, C) 08.08.2008

Все началось с того, что как мне казалось, у меня большой расход топлива. Машина у меня Audi-80 с 2-х литровым движком (ABT) и моновпрыском (одна…
Просмотров: 13395

Автомобильный тахометр (AT89C2051, asm) 08.08.2008
Автомобильный тахометр представляет собой функционально законченный блок, который устанавливается в салоне автомобиля. …
Просмотров: 10902

Релейный регулятор громкости по схеме Никитина c LED дисплеем, ПДУ (RC5) (ATmega8, C) 16.02.2011
Как следует из названия, в данной статье представлено устройство собранное на микроконтроллере для регулирования громкости, по…
Просмотров: 5473

Релейный регулятор громкости по схеме Никитина с LCD дисплеем и ПДУ (RC5) (ATmega8, C) 16.02.2011
Как следует из названия, в данной статье представляется устройство для регулирования громкости, собранное по схеме Никитина.

В отличии…
Просмотров: 4326

Релейный регулятор громкости по схеме Никитина с LCD, ПДУ (RC5) и кнопками (ATmega8, C) 16.02.2011
Как следует из названия, в данной статье представляется устройство для регулирования громкости, собранное по схеме Никитина. В этой…
Просмотров: 3076

Релейный регулятор громкости по схеме Никитина с LCD, ПДУ (RC5) и энкодером (ATmega8, C) 16.02.2011
Очередная модификация устрйоства для регулирования громкости, собранно по схеме Никитина. В этой версии присутствует LCD дисплей для…
Просмотров: 6041

Одноканальный микроконтроллерный приёмник диапазона 400 мГц на синтезаторе (ATtiny24) 02.12.2010
Приёмник предназначен для приёма сигналов радиомикрофонов на ПАВ-резонаторах, работающих в диапазоне 400-450 мГц с WFM – широкополосной…

Просмотров: 3669

Приёмник 399-469 мГц с дисплеем от NOKIA 3310 (ATmega8) 02.12.2010
Данный приёмник является продолжением разработки «Приёмника диапазона 4хх мГц на синтезаторе».   Приёмник имеет следующие…
Просмотров: 5843

Простой WAV плеер на AVR микроконтроллере (ATtiny25/45/85, C) 31.10.2010
Это простой SD аудио плеер на одном микроконтроллере ATtiny25/45/85. У этих микроконтроллеров есть два быстрых ШИМ (fast PWM) выхода с несущей…
Просмотров: 9521

Музыкальный Звонок на MMC/SD карте (ATmega32, C) 17.03.2008
Простые однотональные мелодии на сегодняшний день уже не могут вызвать восторга у благодарных слушателей. За примерами далеко ходить…

Просмотров: 9378

AVR-USB-MEGA16: USB BootloadHID для микроконтроллеров AVR (ATmega8, ATmega16, C) 30.08.2010
В статье описывается USB bootloader BootloadHID, который хорошо подходит для ATmega8 и ATmega16, так как у него код умещается в 2048…
Просмотров: 5829

Загрузчики (bootloader) для микроконтроллеров AVR 30.08.2010
Описана технология bootloader, встроенная во все микроконтроллеры Atmel AVR семейства ATmega. Материал для статьи взят с сайта…
Просмотров: 6388

Управление электрическими цепями через USB (ATmega8, C) 29.10.2011
Давайте сделаем устройство, которое будет подключаться к USB и сможет управлять электроцепями(например, включать освещение),…

Просмотров: 18359

USB-контроллер джойстика на основе микроконтроллера AVR (ATmega8, C) 15.05.2011
Я начал разрабатывать этот контроллер джойстика, вдохновленный необходимостью в простом самодельном джойстике, который мог бы…
Просмотров: 9416

LCD2USB — подключение LCD индикатора к компьютеру через USB (ATmega8, C) 04.10.2010
Цель LCD2USB — подсоединить текстовые дисплеи на основе контроллера HD44780 к персональным компьютерам (PC) через USB. LCD2USB разрабатывался как…
Просмотров: 6727

Простой VGA/Видео адаптер (ATmega8, C) 28.08.2010
Задавшись целью подключить VGA-монитор для вывода текстовых данных с микроконтроллерной системы сбора информации — я с удивлением. ..
Просмотров: 10457

Уменьшение шума от кулеров, с выводом температур на LCD (ATmega8, C) 28.08.2010

Устройство создано для уменьшения шума от кулеров компьютера и контроле температур в системном блоке на LCD дисплее. Включает в себя…
Просмотров: 3959

Индикатор интенсивности работы компьютера (AT89C2051, asm) 28.08.2010
Идея создания этого устройства пришла после того, как в компьютере начали разом «стучать» оба жестких диска, причиной чего, как…
Просмотров: 3978

Регулятор оборотов 12V вентилятора на DS18B20 (ATtiny13, C) 01.07.2009
Взял все вентиляторы из своего компа и попробовал при каком напряжении они стартуют. Получилась довольно печальная картина: некоторые…
Просмотров: 12234

Подключение знакосинтезирующего LCD 4×16 к USB (AT90S2313, C) 01.07.2009
Данный проект представляет из себя LCD дисплей 4×16 подключаемый к USB. Проект реализован на довольно дешёвом и доступном МК AT93S2313 формы Atmel.


Просмотров: 3037

Управление большим количеством нагрузок через USB/COM порт (PIC18F252, C) 15.02.2009
Цель устройства — обеспечить контроль большого числа цифровых нагрузок через компьютер. Основные применение — автоматическое…
Просмотров: 5722

Стрелочный индикатор загрузки центрального процессора (AT90S2313, C) 09.08.2008
Драйвер берет значение текущей загрузки ЦП и передает его в СОМ порт. К СОМ порту подключен контроллер, принимающий значения текущей…
Просмотров: 4559

Цифровая паяльная станция своими руками (ATmega8, C) 27.05.2012
Состав: ATmega8, LM358, IRFZ44, 7805, мост, 13 резисторов, один потенциометр, 2 электролита, 4 конденсатора, трехразрядный светодиодный семисегментный…

Просмотров: 46060

Переделка ультразвуковой ванночки Ya Xun YX2000A (ATtiny2313, C) 12.03.2011
Перед покупкой уз-ванночки я долго бегал по городу и заходил в сервисные центры, где ремонтируют мобилки, чтобы узнать, какими. ..
Просмотров: 5415

Измеритель емкости и индуктивности (ATtiny15, asm) 19.02.2011
Описание опубликовано в журналах «Радио» № 7 за 2004 г., стр. 26, 27 Измеритель LC и «Радиолюбитель» № 8 за 2005 г., стр. 35…37 Измеритель…
Просмотров: 7878

Тестер для LAN кабеля (ATtiny2313, asm) 02.11.2010
Очень простой но практичный тестер для LAN кабелей. Проверяет тип кабеля (прямой или кросс), а так же возможные неисправности. Фото…

Просмотров: 6712

Цифровой осциллограф на микроконтроллере AVR (ATmega32, C) 01.11.2010
Несколько месяцев назад, во время сёрфинга в интернете, я наткнулся на осциллограф на микроконтроллере PIC18F2550 и графическом дисплее на…
Просмотров: 11409

Частотомер на AVR микроконтроллере (ATmega16, C) 11.10.2010
Частотомер 4-110 МГц. Изначально разработан для измерение частоты и подсчёта импульсов (за 1сек.) при разработке цифровых устройств, но. ..
Просмотров: 4204

Микроконтроллерный сверлильный станок для печатных плат (ATtiny13, C) 11.10.2010
Травить платы мы уже научились, теперь надо сверлить отверстия. Можно ручной дрелью, можно электродрелью, можно станком… Электродрелью…

Просмотров: 17212

Блок питания 3-20В, 0.1-10А (ATmega8, C) 12.01.2010
Без чего не может обойтись не один радиолюбитель? Правильно — без ХОРОШЕГО блока питания, а ещё лучше ХОРОШЕГО ДВУХКАНАЛЬНОГО блока…
Просмотров: 25935

Микроконтроллерный частотомер с LCD индикатором (ATmega8515, asm) 09.08.2008
Принцип работы частотомера хорошо известен. Подсчитав число периодов входного сигнала за известное время, он приводит его к секундному…
Просмотров: 4339

Таймер для паяльника (ATmega16, C) 09.08.2008
Многие из нас сталкивались с прогоранием жала паяльника из-за того, что забыли выключить после завершения заботы. Так же горячий. ..
Просмотров: 3275

Цифровая паяльная станция своими руками (v1.0) (ATmega8, C) 09.08.2008

Начать нужно с того, что однажды я озадачился приобретением паяльной станции, ибо «вечные» жала портятся от перегрева, а мой…
Просмотров: 11425

Цифровая паяльная станция своими руками (v2.0) (ATmega8, C) 09.08.2008
Это вторая версия статьи «Цифровая паяльная станция своими руками» Начать нужно с того, что однажды я озадачился приобретением…
Просмотров: 7620

Паяльная станция на микроконтроллере с PID регулятором температуры (ATmega8) 09.08.2008
Цифровая паяльная станция на микроконтроллере представляет собой по сути ПИД (Пропорционально — Интегрально — Дифференциальный)…
Просмотров: 11809

Mega-Генератор (ATmega16, C) 09.08.2008
Попросили меня как-то на работе (автосервис) организовать генератор для проверки различных электроклапанов, инжекторов, катушек.

..
Просмотров: 9447

Измеритель емкости и частотомер на AVR микроконтроллере (ATmega8, C) 09.08.2008
Предыстория данного проекта такая… Нашел я в интернете одну статейку китайского разработчика, в которой описывалось устройство…
Просмотров: 12589

Цифровой КСВ метр на микроконтроллере (ATmega8) 09.08.2008
Цифровой автоматический КСВ метр обеспечивает быстрый пересчет Коэффициента Стоячей Волны в автоматическом режиме. Этот прибор…
Просмотров: 5435

Вольтметр и амперметр на микроконтроллере для лабораторного блока питания (ATmega8) 09.08.2008
Не так давно я задался целью сделать себе для работы лабораторный источник питания. Долго думал как реализовать с помощью ШИМ и мощных…
Просмотров: 16306

Двухканальный стабилизированный диммер (с подробнейшим описанием) (ATmega16, asm) 03.08.2013

1. ОБЩИЕ СВЕДЕНИЯ 1.1. Введение Несмотря на бурное развитие сверх ярких светодиодов, в широкой продаже пока не появились светодиодные. ..
Просмотров: 5793

Cхемотехника и программирование устройств фазового регулирования (ATtiny2313, C) 24.11.2011
Кто из вас не хотел изготовить себе сенсорный диммер с возможностью дистанционного управления светом? Наверное, многие. Так вот и я…
Просмотров: 6162

Цифровой инклинометр (акселерометр) MMA7260Q (ATmega32, AD7799, C) 10.06.2011
Инклинометр — устройство, предназначенное для измерения угла наклона различных объектов, относительно гравитационного поля…
Просмотров: 5869

Динамическая индикация индикатора по последовательной шине (ATmega8, 74HC595, C) 17.02.2011
Девяти разрядный семисегментный индикатор с последовательной шиной выполнен на двух микросхемах 74HC595D. Индикатор стоял в…
Просмотров: 6110

Использование графического LCD WG12864A (ATmega8, C) 25.12.2010
Наряду с символьными ЖК, современные производители выпускают разнообразные графические индикаторы. Если у символьных, как правило,…
Просмотров: 5004

Применение семи сегментных LED модулей HT1611, HT1613, МТ10Т7-7 (asm) 24.12.2010
Практически любое микроконтроллерное устройство имеет те или иные устройства индикации. В простейшем случае это всего несколько…
Просмотров: 5295

Шаговые двигатели — Stepper motors (AT90S2313, asm) 24.12.2010
Шаговые двигатели уже давно и успешно применяются в самых разнообразных устройствах. Их можно встретить в дисководах, принтерах,…
Просмотров: 20090

Подключаем тачскрин к AVR — The AVR based USB HID Touchscreen Mouse (ATmega168, C) 19.11.2010
Примечание от администрации сайта eldigi.ru. Данная статья является поучительным примером по подключению резистивного сенсорного экрана…
Просмотров: 5284

LCD2USB — подключение LCD индикатора к компьютеру через USB (ATmega8, C) 04.10.2010
Цель LCD2USB — подсоединить текстовые дисплеи на основе контроллера HD44780 к персональным компьютерам (PC) через USB. LCD2USB разрабатывался как…
Просмотров: 6727

Приёмник RC5 на AVR контроллере (ATmega16, C) 25.09.2009
На рисунке сверху — структура посылки передатчика. По первым двум стартовым битам вычисляется период Р. Затем, как видно из рисунка,…
Просмотров: 3276

Подключение знакосинтезирующего LCD 4×16 к USB (AT90S2313, C) 01.07.2009
Данный проект представляет из себя LCD дисплей 4×16 подключаемый к USB. Проект реализован на довольно дешёвом и доступном МК AT93S2313 формы Atmel….
Просмотров: 3037

Управление большим количеством нагрузок через USB/COM порт (PIC18F252, C) 15.02.2009
Цель устройства — обеспечить контроль большого числа цифровых нагрузок через компьютер. Основные применение — автоматическое…
Просмотров: 5722

Музыкальный Звонок на MMC/SD карте (ATmega32, C) 17.03.2008
Простые однотональные мелодии на сегодняшний день уже не могут вызвать восторга у благодарных слушателей. За примерами далеко ходить…
Просмотров: 9378

Двухканальный стабилизированный диммер (с подробнейшим описанием) (ATmega16, asm) 03.08.2013
1. ОБЩИЕ СВЕДЕНИЯ 1.1. Введение Несмотря на бурное развитие сверх ярких светодиодов, в широкой продаже пока не появились светодиодные…
Просмотров: 5793

15-ти канальный управляемый диммер (ATmega8) 20.05.2011
В наш повседневный быт всё чаще входят различные интеллектуальные системы управления. Стиральные машинки давно сами стирают и сушат,…
Просмотров: 7718

Пульт дистанционного управления для цифровых зеркальных камер (ATtiny12, asm) 02.12.2010
Некоторые модели цифровых фотокамер имеют возможность дистанционного управления с помощью ИК-лучей. Дистанционное управление…
Просмотров: 4738

15-ти канальная система инфракрасного дистанционного управления (ATmega8) 26.10.2010
​ Основные возможности разработанного модуля дистанционного управления: · 15 выходов для подключения нагрузок; ·. ..
Просмотров: 4086

Универсальное устройство: часы, термометр, система удалённого управления (ATmega16) 01.08.2010
Устройство “Universal device” (Универсальное устройство) содержит в себе функции нескольких устройств, которые сильно облегчают жизнь…
Просмотров: 8069

Часы на микроконтроллере ATmega16 (ATmega16, C) 26.01.2010
От администрации сайта eldigi.ru Автор конструкции предоставил только схемы, исходники и проект для симуляции в Proteus-e. За что ему…
Просмотров: 6981

Сенсорный регулятор освещения с дистанционным управлением (ATtiny2313) 08.03.2009
Предлагаемое устройство — один из вариантов микроконтроллерных регуляторов яркости ламп накаливания, конструкции которых можно…
Просмотров: 7334

Многоканальная система дистанционного управления или «Умный дом» (ATmega16) 24.01.2009
Как говорится, лень – двигатель прогресса. Возможно, поэтому всё большее распространение получают системы дистанционного. ..
Просмотров: 9479

Часы на ATmega8 (ATmega8, C) 21.06.2008
Два датчика температуры DS18B20 (дома и на улице). 5 будильников. Отсрочка сигнала, если будильник не отключить, срабатывает примерно…
Просмотров: 15545

Домашняя метеостанция с часами, календарем и будильниками (ATmega32, C) 21.04.2008
Предлагаемый прибор отличается от аналогов использованием современной базы, исчерпывающим в домашних условиях набором измеряемых…
Просмотров: 9009

«МультиПульт» — расширь возможности своего пульта! (ATtiny2313) 13.04.2008
Данная конструкция будет интересна прежде всего владельцам ТВ тюнеров на чипсете Philips SAA7134 и SAA7135. Теоретически, любой пульт от таких ТВ…
Просмотров: 3179

Музыкальный Звонок на MMC/SD карте (ATmega32, C) 17.03.2008
Простые однотональные мелодии на сегодняшний день уже не могут вызвать восторга у благодарных слушателей. За примерами далеко ходить…
Просмотров: 9378

Регулятор яркости лампы накаливания на микроконтроллере (AT89C2051, asm) 01.03.2008
В этом проекте рассказывается о микроконтроллерном регуляторе яркости лампы накаливания (далее просто регулятор). Регулятор…
Просмотров: 6275

Регулятор освещения с дистанционным управлением (AT90S2313, C) 22.01.2008
Предлагаемый прибор умеет не только включать и выключать освещение, но и регулировать его яркость. Он имеет и дополнительную функцию…
Просмотров: 4698

Часы будильник термометр и ИК-ДУ (AT89C4051, C) 18.01.2008
Предлагаемое вниманию читателей устройство выполнено на современной элементной базе и отличается от ранее опубликованных в журнале…
Просмотров: 3661

Счетчик на микроконтроллере (AT90S2313, asm) 06.01.2008
Во многих устройствах бытовой техники и промышленной автоматики сравнительно недавних лет выпусков установлены механические. ..
Просмотров: 5256

Блок жизнеобеспечения аквариума (AT89C2051, asm) 08.12.2007
Блок жизнеобеспечения аквариума представляет собой функционально законченный блок, который управляет включением компрессора,…
Просмотров: 3728

Продвинутые радио-часы/будильник с термометрами на графическом LCD (ATmega8515) 29.11.2007
Представленное устройство не слишком рентабельно для серийного производства, но представляет собою весьма неплохой пример…
Просмотров: 6303

Датчик утечки газа на микроконтроллере (ATtiny13, C) 10.11.2010
В данной статье представлен датчик утечки газа на микроконтроллере ATtiny13, а в качестве сенсора газа применён MQ-4 фирмы HANWEI ELETRONICS. Это…
Просмотров: 6369

GSM сигнализация для автомобиля (ATmega16) 07.10.2010
Устройство предназначено для своевременного оповещения автовладельца о взломе автомобиля. Сигнализация контролирует двери, окна,. ..
Просмотров: 10390

Контроллер доступа «Tiny KTM» (AT90S2343) 09.08.2008
Контроллер доступа «Tiny KTM» — проще схемы не бывает! Контроллер предназначен для ограничения и контроля доступа в помещения, такие…
Просмотров: 3481

Электронный замок с ключами iButton (AT89C2051, asm) 09.08.2008
Некоторое время тому назад появился проект «ИМИТАТОР TOUCH-MEMORY DS1990A», т.е. отмычка. Теперь Вашему вниманию предлагается замок к зтой…
Просмотров: 4866

Если Вы потеряли Touch Memory… (AT89C2051, asm) 09.08.2008
Последнее время во многих организациях, а порой и дома, появились дверные замки, ключом к которым является таблетка Touch Memory фирмы DALLAS….
Просмотров: 4145

Имитатор touch-memory DS1990A (AT89C2051, asm) 09.08.2008
Этот проект является развитием проекта Если Вы потеряли Touch Memory… Имитатор touch-memory DS1990A, который предлагается Вашему вниманию, способен. ..
Просмотров: 4480

Телефонный охранный сигнализатор (AT90S2313, asm) 09.08.2008
Передать тревожный сигнал на некоторое расстояние можно различными способами. В случае охраны квартиры, когда расстояние до хозяина…
Просмотров: 2606

Автономная охранная система на базе ТМ (ATmega8) 09.08.2008
Автономные системы охраны получили достаточно широкое распространение в нашей стране из-за простоты и дешевизны. Классическая…
Просмотров: 5411

SignALL — GSM сигнализация всем (ATtiny2313) 09.08.2008
“SignALL” – GSM сигнализация (далее по тексту “устройство”), предназначена для охраны помещений, таких как квартиры, дачи,…
Просмотров: 8581

Контроллер доступа Visual KTM (ATiny2313) 09.08.2008
Контроллер предназначен для ограничения и контроля доступа в помещения, такие как жилая комната, рабочий кабинет и т.д., с количеством…
Просмотров: 3566

Система оповещения GSM-click (ATmega8, C) 09. 08.2008
Предлагаемое устройство предназначено для оповещения о произошедшем событии по GSM каналу, проще говоря СМС-кой. Подключаем его…
Просмотров: 4479

Зарядное устройство для NiMh и NiCd аккумуляторов AA AAA (ATmega8, C) 29.08.2010
Зарядное устройство предназначено для зарядки NiMh и NiCd аккумуляторов (АА AAA) методом быстрого заряда. В принципе сейчас много микросхем…
Просмотров: 7059

Повышающий преобразователь с PID регулятором (ATmega8) 01.04.2010
ПИД регулятор или пропорционально-интегрально-дифференциальный  регулятор – это самый совершенный из существующих типов…
Просмотров: 5079

Блок питания 3-20В, 0.1-10А (ATmega8, C) 12.01.2010
Без чего не может обойтись не один радиолюбитель? Правильно — без ХОРОШЕГО блока питания, а ещё лучше ХОРОШЕГО ДВУХКАНАЛЬНОГО блока…
Просмотров: 25935

Устройство защиты от опасных напряжений (трёхфазное) SOKOL UZP-3F (ATmega8) 08. 06.2009
Часто причиной выхода из строя дорогостоящего оборудования, в первую очередь промышленного, является отклонение сетевого напряжения…
Просмотров: 3601

Устройство защиты от опасных напряжений в электросети SOKOL UZP-1F (ATmega8) 08.05.2009
Основные возможности устройства: Изменение и индикация на двустрочном ЖК-дисплее действующего значения напряжения в диапазоне…
Просмотров: 2795

Вольтметр и амперметр на микроконтроллере для лабораторного блока питания (ATmega8) 09.08.2008
Не так давно я задался целью сделать себе для работы лабораторный источник питания. Долго думал как реализовать с помощью ШИМ и мощных…
Просмотров: 16306

Моддинг блока питания (ATmega8) 25.04.2008
Наверняка нет радиолюбителя, который бы не делал для собственных нужд лабораторный блок питания (БП). Сложность таких устройств может…
Просмотров: 5918

Два микроконтроллерных регулятора мощности (AT89C2051, asm) 30. 01.2008
Рис. 1 Для управления инерционной нагрузкой часто применяются тиристорные регуляторы мощности, работающие по принципу подачи на…
Просмотров: 3950

Повышающий преобразователь напряжения на AVR (AT90S2313, asm) 15.01.2008
История создания этого девайса такова: некий господин N, экстремал в годах и большой любитель сплава по горным рекам, утопил в одном из…
Просмотров: 3819

Зарядное устройство для малогабаритных аккумуляторов (AT89C2051, MCP3208, asm) 08.12.2007
Зарядное устройство предназначено для зарядки любых малогабаритных аккумуляторов емкостью до 2А*Ч. Ток выдаваемый зарядным…
Просмотров: 3781

USB программатор микроконтроллеров AVR / 89S совместимый с AVR910 (ATmega8, C) 22.01.2012
Схема программатора приведена на рисунке ниже. Предохранитель F1 служит для защиты линий питания порта USB от случайного замыкания по…
Просмотров: 10641

USB, COM отладчик JTAG ICE (ATmega16) 27. 04.2010
Иногда, программа зашитая в микроконтроллера работает совсем не так как надо её создателю. Тогда наступает стадия отладки (Отлаживать…
Просмотров: 3951

Параллельный программатор для микроконтроллеров AVR (ATmega16) 16.02.2008
Поводом для создания данного устройства послужило появление новых чипов AVR поддерживающих отладку по протоколу debugWIRE. Так как он не…
Просмотров: 13746

USB параллельный программатор для микроконтроллеров AVR (ATmega16) 16.02.2008
Этот программатор является продолжением «Параллельного программатора для микроконтроллеров AVR»  Предлагаемый вариант…
Просмотров: 6211

Пульт дистанционного управления для цифровых зеркальных камер (ATtiny12, asm) 02.12.2010
Некоторые модели цифровых фотокамер имеют возможность дистанционного управления с помощью ИК-лучей. Дистанционное управление…
Просмотров: 4738

Cхемотехника и программирование устройств фазового регулирования (ATtiny2313, C) 24. 11.2011
Кто из вас не хотел изготовить себе сенсорный диммер с возможностью дистанционного управления светом? Наверное, многие. Так вот и я…
Просмотров: 6162

15-ти канальный управляемый диммер (ATmega8) 20.05.2011
В наш повседневный быт всё чаще входят различные интеллектуальные системы управления. Стиральные машинки давно сами стирают и сушат,…
Просмотров: 7718

PWM (ШИМ) управление LED матрицей 8х8 через регистр сдвига 74HC595 (ATmega8, C) 23.01.2011
Есть матрица 8х8, одноцветная. Всего, соответственно, 16 выходов: 8 на столбцы и 8 на строки. Проблема номер один – понять какой контакт чем…
Просмотров: 5629

Светодиодное табло «Волшебная палочка» (AT89C2051/PIC18C84, asm) 06.11.2010
За этим замысловатым названием кроется очень интересная конструкция на PIC-контроллере. Главное достоинство — это оригинальность идеи. В…
Просмотров: 4522

Бегущая строка на микроконтролере (AT90S2313) 21.08.2008
Это устройство может использоваться как гирлянда на праздниках, вечеринках. Для вывода поздравительных сообщений. А так же везде, где…
Просмотров: 5407

Регулятор яркости лампы накаливания на микроконтроллере (AT89C2051, asm) 01.03.2008
В этом проекте рассказывается о микроконтроллерном регуляторе яркости лампы накаливания (далее просто регулятор). Регулятор…
Просмотров: 6275

Многоканальный USB-Термометр (ATmega8, C) 27.10.2011
Когда то давно я написал статью о том, как сделать USB Термометр и разместил ее на двух сайтах. Девайс очень простой, но спустя пару дней,…
Просмотров: 5188

Уменьшение шума от кулеров, с выводом температур на LCD (ATmega8, C) 28.08.2010
Устройство создано для уменьшения шума от кулеров компьютера и контроле температур в системном блоке на LCD дисплее. Включает в себя…
Просмотров: 3959

USB Термометр (ATmega8, C) 10.03.2010
В качестве микроконтроллера, был выбран ATmega8 (такие, как ATtiny8/48 не захотел использовать по причине их дискретности в некоторых городах)….
Просмотров: 6756

Термостат на ATtiny2313 и DS18B20 (ATtiny2313, C) 13.01.2010
Данная конструкция стала прямым продолжением конструкции «Термометр на ATtiny2313 и DS18B20». Как там упоминалось, хотелось…
Просмотров: 9699

Улучшенный термостат на ATtiny2313 и DS18B20 (ATtiny2313, C) 13.01.2010
По многочисленным просьбам дорабатываю конструкцию «Термостат на ATtiny2313 и DS18B20». Теперь умеет: Измерение температуры от -55°С до…
Просмотров: 26374

Термометр на ATtiny2313 и DS18B20 (ATtiny2313, C) 12.01.2010
В Интернете есть куча схем термометров на AVR, но как всегда хочется чего-то своего.. Да и мозги размять тоже следует. Этот термометр был…
Просмотров: 14058

Цифровой термометр на DS18B20 (ATmega8, C) 18.10.2009
Цифровой термометр предназначен для измерения температуры с точностью до одной десятой доли градуса Цельсия*. Цифровой термометр…
Просмотров: 5835

Регулятор оборотов 12V вентилятора на DS18B20 (ATtiny13, C) 01.07.2009
Взял все вентиляторы из своего компа и попробовал при каком напряжении они стартуют. Получилась довольно печальная картина: некоторые…
Просмотров: 12234

Многофункциональные часы-термостат с дистанционным управлением (ATmega8) 08.03.2009
Возникла у меня потребность в настольных часах-термометре, чтобы помимо времени можно было узнать температуру на улице и в доме. В…
Просмотров: 4451

Термометр — меньше не бывает (ATmega8) 18.05.2008
Предлагается схема на микроконтроллере ATMega8 для измерения температуры в диапазоне от −55° C до +127° C с точностью не хуже +-0,5° C. В…
Просмотров: 6523

Термометр с ЖКИ и датчиком DS18B20 (ATtiny15) 01.03.2008
В технической литературе и в Интернете можно найти множество описаний и схем цифровых термометров. В большинстве конструкций…
Просмотров: 4153

Термостат (AT90S2313, C) 15.02.2008
Прибор был создан по просьбе одного знакомого для контроля температуры в комнате — включения отопителя / вентилятора при достижении…
Просмотров: 4386

Термостат на DS18B20 и ATmega8 (ATmega8, C) 27.01.2008
В схеме, можно применять светодиодные семисегментные индикаторы с общим катодом или анодом (2 прошивки). Датчик температуры DS18B20….
Просмотров: 15452

Простой термометр на DS18B20 (ATtiny2313, C) 26.01.2008
Это простой термометр на основе термо датчика DS18B20 и мк ATtiny2313 (или AT90S2313) выводящий информацию на 7-сегментный ЖКИ – модуль на основе…
Просмотров: 8168

Схемы на микроконтроллерах, самодельные устройства и программаторы


Схема цифровой шкалы на Arduino UNO для связного КВ-приемника

Здесь приводится описание цифровой шкалы для коротковолнового связного приемника, работающего в диапазонах 160м, 80м, 40м, 20м, 10м или любом из них. Шкала работает с двухстрочным ЖК-дисплеем. В его верхней строке показывает значение частоты в кГц,а в нижней длину волны в метрах. Внося …

1 900 0

Самодельный велоспидометр на ARDUINO UNO (ATMEGA328)

Здесь описывается цифровой прибор на микроконтроллере, измеряющий скорость движения велосипеда. Индикатором служит ЖК-дисплей типа 1602А, он стандартный, на основе контроллера HD44780. Обозначение 1602А фактически значит, что он на две строки по 16 символов в строке. Используется только одна его …

1 635 0

Девятиразрядный мультиметр на АЦП AD7705 и AVR микроконтроллере

Основой предлагаемого мультиметра является микросхема 16-битного двухканального дельта-сигма аналого-цифрового преобразователя (АЦП) AD7705. Широко распространенные мультиметры на основе  АЦП двойного интегрирования ICL7106 [2] обеспечивают отображение результата преобразования числом, не превышающим 1999, что соответствует, без учета знака, 11-битному АЦП, за вычетом 48 единиц счёта…

1 1811 0

Реле времени на микроконтроллере AVR ATtiny2313 с индикатором фирмы Data Vision

Схема и описание самодельного реле времени на AVR микроконтроллере ATtiny2313 с индикатором фирмы Data Vision. Реле времени (таймеры), пожалуй, одна из самых массовых разработок конструкторов электронных техники. Автор предлагает вариант 4-х канального реле времени, разработанного на базе микроконтроллера семейства AVR и жидкокристаллического индикатора фирмы Data Vision. Принципиальная схема реле времени …

1 555 0

Макет светофора на ARDUINO UNO, схема и описание

Этот макет светофорного управления движения на перекрестке можно использовать в различных играх по изучению правил дорожного движения. Он может быть сделан как в миниатюрном, настольном варианте для передвижения по нему игрушечных моделей машин и кукол-пешеходов, так и в варианте для детского …

1 326 0

Самодельный кодовый замок на микроконтроллере (PIC16F628A)

Схема самодельного кодового замка, построенного на микроконтроллере PIC16F628A и транзисторах, имеет цифровое табло. Этот замок можно использовать для ограничения доступа в помещение, гараж, дом, сейф, шкаф. Его исполнительным устройством может служить механизм запирания двери автомобиля …

1 997 0

Часы с календарем на индикаторах ИН-12

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

1 1032 0

Автоматическое управления вентиляцией помещения, схема на МК ATtiny2313A

Схема самодельного устройства, автоматически включающего и выключающего принудительную вентиляцию помещения. Работа устройства осуществляется в зависимости от относительной влажности воздуха в помещении и скорости её изменения. Оно не содержит дефицитных деталей и может быть помещено в стандартный …

0 1083 0

Двоичные часы на микроконтроллере PIC16F628A

Схема самодельных двоичных часов на микроконтроллере PIC16F628A и светодиодах. Эти необычные карманные часы могут стать оригинальным подарком. Индикатор времени в них построен всего на шести единичных светодиодах. Секрет в том, что число часов и число минут текущего времени отображаются ими …

1 629 0

Термометр на микроконтроллере для четырех датчиков DS18B20

Схема самодельного термометра, предназначенного для отображения данных с четырех датчиков DS18B20, используется микроконтроллер. К этому микроконтроллерному термометру можно подключить до четырёх цифровых датчиков температуры DS18B20, расположив их в тех местах, где необходимо контролировать …

1 931 0

1 2  3  4  5  … 10 

Радиодетали, электронные блоки и игрушки из китая:

Блок питания с защитой + микроконтроллер ATMEGA16, ATMEGA8535, PIC16F877. Часть вторая, практическая

Читайте также первую часть статьи о БП, лирическую. Я описал эту конструкцию с сокращениями в журнале «Радиоаматор» в 2011 году. Но отправлять вас на его поиски смысла не вижу, особенно если учесть, что я сам с вами, на Датагоре.

Блок питания вполне доступен для изготовления радиолюбителями, которые имеют минимальные знания в микропроцессорной технике, а именно — владеют алгоритмами «прошивания» готовых программ в микроконтроллер (МК) или могут обратиться к друзьям способным им в этом помочь. В остальном – просто придерживайтесь принципов работы с микросхемами и, безусловно, не забывайте о правилах безопасности.

Содержание / Contents

Несмотря на простоту конструкции, данный блок питания обладает следующими техническими характеристиками:
Напряжение питания, В: 220 В / 50 Гц;
Выходное напряжение, В: от 0 до 25,5 В постоянного однополярного напряжения;
Диапазон выходного тока, А: до 2 А;
Шаг регулировки напряжения: «Плавно» 0.1 В, «Грубо» 1.5 В;
Точность измерения: Напряжение 0.1 В; Ток 0.01 А;
Защита: по току от короткого замыкания; отсечка при превышении максимального тока регулируемого транзистора на уровне 2 А;
Просадка выходного напряжения при изменении тока нагрузки от 0 до 2 А не превышает 0.2%;
Индикация динамическая на 6 индикаторах, светодиодная индикация шага и срабатывания защиты.

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

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

Схема построена блочным способом. Состоит из цифровой, аналоговой части и блока питания для самого блока питания, извините за тавтологию. Это дает возможность безболезненно модернизировать систему. Хотя таких нужд пока нет. Цифровая плата имеет несколько вариантов построения, — зависит от используемых микроконтроллеров. Тут вмешалась ценовая политика и почти религиозная схватка приверженцев разных производителей (в данном случае Atmel и Miсrochip), а также типов светодиодных индикаторов, которые, как известно, бывают с общим анодом или катодом. Мелочь, а существенная.

Таким образом начнем с основной части конечно – цифрового модуля управления (А1), изображен на рис. 1.

Рис. 1
Работа цифровой части устройства построена на микросхеме U1 фирмы AVR ATMEGA16. Имейте ввиду, ее можно заменить без физической переделки на ATMEGA8535. Но конечно же, разное программное обеспечение. Буквенные индексы в конце для нас никакой роли не играют.

В составе ATMEGA16 имеются 10 разрядные аналого-цифровые преобразователи (АЦП). Источником опорного напряжения 5 Вольт для АЦП служит питание микроконтроллера (МК), поданное на 30 ногу через фильтр L1 C4.

На МК возложены функции оцифровки выходного напряжения и тока через внутренний 10 битный АЦП, и вывод результата на шесть семисегментных индикаторов, обработка клавиатуры, управление регулятором выходного напряжения, защита стабилизатора.

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

К регистру порта РВ через восемь токоограничивающих резисторов R1-R8 включены соединенные в параллель сегменты шести индикаторов. К портам РD0 – РD5 подключены транзисторы, активирующие конкретный разряд индикатора. Таким образом процессор поочередно «засвечивает» каждый разряд индикатора и одновременно через порт РВ0 — РВ7 формирует изображение нужного числа.
Напряжение с выхода источника питания поступает для оцифровки на АЦП0 через резисторный делитель R49, R50, R51, C9, коэффициент деления =5. МК производит выборки и затем определяет среднее значение.

В качестве датчика тока, который потребляет нагрузка, используется мощный безындукционный резистор малого сопротивления R44. Величина падения напряжения на нем усиливается операционным усилителем DA2.2 и подается для анализа на АЦП1 МК.

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

Следующим, не мене важном узлом, является цифро-аналоговый преобразователь (ЦАП), который через порт РС0-РС7 управляет аналоговой частью устройства и формирует выходное напряжение. Из соображения доступности, простоты изготовления и уменьшения уровня излучаемых шумов использован так называемый R-2R ЦАП на R21-R37. Схема ЦАП, взята из открытых источников, неоднократно проверена и показала приемлемые характеристики.

Алгоритм работы микроконтроллера построен таким образом: микроконтроллер при включении питания жестко блокирует выход. Все на нуле. Зачем нам неизвестное напряжение. Его формирование на выходе производится давно известным методом при помощи указанного R-2R ЦАПа. Хотя умные люди высказывают некоторые предостережения для его нормальной работы, практика показала его простоту, надежность и приемлемую стабильность при соблюдении ряда условий при его построении. Улыбнитесь, практика показала, что самым главным из них, это взять резисторы каждого номинала из одной партии.
Используется два контура защиты: быстродействующая – аналоговая (выставлено на 3А) и не совсем быстрая – типа «смотрит» за выходом сам микроконтроллер – тут верхняя точка программно выставлена в 2 Ампера.

При активации ЦАПа напряжение на выходе и ток потребления нагрузкой измеряется АЦП, которое есть в наличии в самом МК. Таким образом, МК не только регулирует выходное напряжение, а и измеряет реальные, именно реальные, а не мнимые (заданные), значения на выходе. Работает как будто «тестер» выхода. Любой беспорядок будет немедленно отражен на индикаторах. Смотрите за ними внимательно при первом включении подопытного устройства. При достижении граничного тока потребления – отрубает все и ждет команды, что делать дальше. Все делается в автоматическом режиме и никаких дополнительных телодвижений не требуется (тоже хорошо). Уровень выходного напряжения сознательно не сохраняется, что бы не сжечь что-нибудь, при включении на следующий день.


Рис. 2
Да, чуть не забыл, а то «побьют» еще, та же часть на конкуренте, смотрите на рис. 2. Правда маленькое уточнение – на PICe в железе еще никто не делал, может, кто первым будет, я помогу. Тем более что буква А в конце названия МК хоть и существенна, но не критична есть прошивка и на процессор без нее.
«Каковы отличия?», — спросите Вы. Небольшие. В целом в нем иная архитектура портов, тем не менее, удалось подобрать оптимальный вариант его подключения с минимальными изменениями. Основные из которого – наличие кварцевого резонатора Cr1, отсутствие обвязки цепи «RESET», питания аналоговой части АЦП и, конечно же, иного разъема внутрисхемного программирования. В данном случае он 10-и штырьковый. Программная часть PIC16F877A работает аналогично. Теперь важно, к этим платам нужен блок индикации и управления А4.
Он тоже разработан в двух вариантах, и подходит для всех плат типа А1.

Рис. 3 и 4. Для индикаторов с общим анодом и общим катодом соответственно
Таким образом (А4) состоит из узлов:
 — индикации, а именно буферная цепочка Т1-Т6 из 6 транзисторов, где использованы транзисторы n-p-n или p-n-p проводимости в зависимости от типа индикатора, уменьшающих до приемлемого значения ток через порты микроконтроллера;
 — опроса энкодера, — резисторы R38, R39 и сам энкодер, подключенный к свободным портам А МК;
 — управления самогенерирующим бипером.

Кнопки подключены к порту РА2, РА3, РА4. Их три: S1 – «+», в зависимости от величины шага, увеличивает значение выходного напряжения, S2 – «-» соответственно уменьшает. Кнопка S3 — «Плавно/грубо» определяет величину шага настройки. При включении, — шаг составляет 0.1В, при нажатии на кнопку – увеличивается до 1,5В. Типа тонко/грубо.

Повторное нажатие возвращает исходное значение, которое индицируется зеленым светодиодом LED2. Этот режим введен с целью быстрого ввода значений без утомительных нажатий на кнопку «+».Почему в 1,5 Вольт, а не 1 Вольт спросите Вы, а все просто, — согласно ряда выходных напряжений гальванических элементов, которые используют для питания низковольтной аппаратуры.

Таким образом настройка напряжения происходит кнопками «+» и «-» или так называемым энкодером (типа переменник, но крутится во все стороны без ограничения с тактильно заметными щелчками, как в СВЧ печке импортного производства или автомагнитоле).

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

Для удобства работы с блоком питания в программу добавлен алгоритм включения звукового излучателя (бипера) при переходе системы в режим «Авария» и обработки энкодера (валкодера). При этом оставлен режим работы с кнопками. Таким образом, пользователю предоставлено возможность выбора варианта управления. Например, мной было использовано только одну кнопку S3 «Шаг» и энкодер. Такой вариант особо пригодится тем, кто имеет механический энкодер со встроенной кнопкой.

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

К плате (А1) подходит любой вариант платы управления (А4), но нужно учесть различия в программном продукте.


Рис. 5
Очень аскетичная аналоговая часть схемы (А2) изображена на рис. 5. и состоит из сдвоенного операционного усилителя DA1, который формирует напряжение управления выходными транзисторами и усиливает напряжение от датчика тока. Тут неожиданно для меня тоже, по началу, возникли трудности. Прежде всего, с выбором узла регулирования.

Как я писал ранее трансформатор то у меня на 24 вольта переменки. После диодного моста на электролитическом конденсаторе «набегает» 26 Вольт постоянного напряжения. Вроде все хорошо, достаточно, ан-нет. Если учесть что на регулирующем транзисторе обязательно будет падение напряжения, а на составном вообще ужас – около 1,5 вольта. А как без составного транзистора управлять мощным – выходным. Пришлось использовать довольно подзабытое или может просто редко используемое в силу наличия в большинстве случаев «запаса мощности», как для блоков питания, схемное решение включений выходных транзисторов.

При этом, если рассматривать работу схемы в целом, то DA1.1 в связке с транзисторами Т7, Т9, Т10 осуществляют необходимое усиление по току и напряжению. Т7 и Т9 включен по схеме с общим эмиттером, а Т10 — с общим коллектором, у включения последнего транзистора есть неоспоримые достоинства: большое входное и малое выходное сопротивление, что очень важно в источнике питания. Схему с таким включением еще называют «эмиттерным повторителем». В целом схема работает следующим образом, выходной ток ОУ усиливается транзистором Т7. Его коллекторный ток подается на базу Т9, а затем проинвертированный и усиленный сигнал управляет мощным транзистором Т10. По сути дела Т10 является усилителем тока коллектора Т9 который увеличивает его в h31э раз. Исходя из чего на месте Т9 можно использовать транзисторы средней и даже малой мощности.

Питание операционного усилителя осуществляется однополярным положительным напряжением. Благодаря применению выходных транзисторов разной проводимости удалось добиться минимальной разности входного и выходного напряжений и четкой управляемости системы в целом. Наличие резистора R42 в цепи эмиттера Т7 ограничивает его базовый и, главное, коллекторный ток на уровне около 30 мА. Коэффициент усиления по напряжению ОУ DA1.1 и транзисторов Т7, Т9, Т10 равен 1+ R40/R39.

На DА1.2 собран усилитель напряжения датчика тока потребления нагрузки — резистора R44. Коэффициент усиления по напряжению ОУ DA1.2 равен 25. Резистор R48 и D2 представляют собой простейший стабилизатор, задача которого состоит из защиты порта РА1 от возможного перенапряжения, ограничивая входное напряжение на уровне в 5.1 В. Аналогично используется D1 и R49 для порта РА0.

На элементах R51, R54, R53, Т8 собран электронный предохранитель. Он введен, исходя из того, что время реакции МК может быть недостаточным для блокировки биполярного транзистора при быстротечной перегрузке системы. Ток срабатывания определяет R54 и в небольших пределах регулирует R53.

Максимальный ток срабатывания защиты – 2-3А, что не даст возможности выйти из строя транзистору Т10. Да, хочу Вас сказать, что R58, как и R53 в принципе можно не ставить вообще. Первый нужен для облегчения токового режима Т8, второе сопротивление (в суме с предыдущим) увеличивает уровень напряжения срабатывания того ж транзистора, а значит и повышает уровень срабатывания самой защиты. Какой-то замкнутый круг получается.

Если падение напряжения на R54, которое зависит от тока потребления, превысит величину, равную приближенно 0,6 В, транзистор T8 откроется и предотвратит дальнейшее увеличение базового тока транзистора Т9, а вслед за ним и Т10. Ток нагрузки ограничится на безопасном для системы уровне. Использованная защита не имеет тригерного режима работы, а посему сразу после снятия короткого замыкания возвратится в исходное состояние. Таким образом, регулятор напряжения выдерживает возмущения выходного тока и случаи короткого замыкания на клеммах, в том числе и импульсного характера.

Аналоговая защита – дополнительный рубеж защиты выходного транзистора, если в момент перегрузки (скажем импульсной) микроконтроллер выполняет команды не связанные с защитой. Ведь от состояния выходного транзистора напрямую зависит вся система в целом и потребитель в частности. Пока он цел вся система будет полностью под контролем и ничего не случится неприятного, если Вы сами собственными руками не прикажете «угробить» нагрузку превышением выходных значений.

Независимо от вышеуказанного электронного предохранителя на аналоговых элементах, который защищает источник питания от нагрузки, защита самой нагрузки возложена на МК. Именно он, в реальном времени, следит за значениями выходного тока. Если этот показатель превысит заданную максимальную величину он примет защитные меры, а именно: немедленно выключит ЦАП путем обнуления регистра порта РС, а также проинформирует пользователя миганием светодиода LED1. Отсутствие потенциала на резисторах ЦАП, а значит и на входе DА1.1., закроет транзисторы регулятора. Напряжение на выходных клеммах будет снято – нагрузка отключена. В этом состоянии блок питания может находиться неограниченное время.

Для возобновления подачи напряжения достаточно нажатиями на кнопку S1 выставить необходимое выходное напряжение. При превышении указанных режимов защита автоматически сработает опять.
Таким образом, в этом источнике питания используется две независимые петли защиты: быстродействующая – аналоговая на транзисторе Т8 и «контролирующая» — цифровая на U1.


Рис. 6
Питание схемы описано на рис. 6. и состоит из двух микросхем VR1, VR2 и цепей выпрямления, а также фильтрации.
Стандартная схема включения пояснений не требует, кроме R58 мощностью в 1 Ватт. Наличие последнего не обязательно, но с ним значительно лучший тепловой режим работы стабилизатора VR2 на 5 Вольт.

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

U1 — МК AVR ATMEGA16-16PU, ATMEGA16А-16PU, ATMEGA16L-8, ATMEGA8535, PIC16F877A и PIC16F877. Файлы прошивки разные для каждого МК, универсальная только для ATMEGA16, у нее буква в конце не имеет принципиального значение для нашего устройства.

Если от микроконтроллера никуда не убежишь то остальные детали – практически «ширпотреб», которого всегда в достатке. Детали блока не критичны к замене.

При построении ЦАП, безусловно, наилучшим вариантом был бы R-2R ЦАП в гибридном корпусе на одном кристалле. При его отсутствии, используйте резисторы в SMD исполнении или обычные, но обязательно возьмите каждый из номиналов из одной партии (коробки). Таким образом, будет максимально соблюдена линейность преобразования. Точность их симметрии по сопротивлению уменьшит уровень искажений, которые проявятся в выходном напряжении в виде «ступенек». Практика эксплуатации показала его стабильность и легкость реализации.

Индикаторы применены импортные типа GNT-3631BG, GNS-3611BD, но можно использовать и аналогичные отечественные, а также одиночные, типа АЛС321Б или АЛС324Б. Будьте внимательны, от типа внутреннего соединения диодов в индикаторе также различается программное обеспечение для МК.

Буферные транзисторы на плате индикаторов заменяются любыми транзисторами, что имеются в наличии, малой мощности с соблюдением расположения выводов, проводимости и током коллектора около 100 мА.
Энкодер типа РЕС 12, РЕС 16 либо аналогичный.

Транзисторы Т7, Т8 – импортные малой мощности, но можно ставить КТ203, КТ208, КТ315 и КТ361 соответственно. В этом случае обратите внимание на максимально допустимое напряжение коллектор-эмиттер в сравнении с напряжением питания после диодного моста, если оно превышает 26 Вольт. Т9 — КТ361, КТ801Б, КТ807Б. Т10 – средней мощности КТ803А, КТ814, КТ805, КТ808А или любой мощный с допустимым током коллектора не менее 2А и допустимым напряжением коллектор-эмиттер больше напряжения питания.

Испытано использование в качестве выходного составного транзистора по схеме Дарлингтона — TIP110. Но у него большее напряжения падения, посему надо питать схему напряжением не меньше 28 Вольт. Транзистор Т10 желательно выбрать с большим статическим коэффициентом передачи тока базы.

Т10 установлен на радиаторе площадью 400 см2. Если Ваш радиатор мал, — установите вентилятор от компьютера. Имейте в виду, что при выходном напряжении в 0,5 Вольт и токе в 2 Ампера, выделяемая тепловая мощность запросто достигнет больше 50 Вт.

Резисторы — датчики тока С5-16В, мощностью 3-10 Ватт. Мощность токозадающих резисторов из соображения надежности сознательно увеличена.
Конденсаторы на плате А1 – керамические, можно в SMD исполнении. Электролиты в стабилизаторе — К50-12.
Подстроечные резисторы из серии СП5, СП3-19 б.

Стабилизаторы питания на 5 и 18 Вольт работают без радиатора, при наличии R58. Соединять их по привычке — последовательно нельзя. Ибо ток потребления по 5 вольтовой шине запросто перегреет стабилизатор на 18 Вольт и наступит крах всех Ваших надежд. Я это уже испытал на себе, пришлось покупать новый МК.
Диодная сборка на 2А и более или любые выпрямительные диоды с допустимым прямым током не менее 2А и обратным напряжением превышающим напряжение на вторичной обмотке трансформатора. Если использовать трансформатор на 24В переменного напряжения – тогда или германиевые с малым прямым падением напряжения и обратным не менее 30 В или современные диоды-Шоттки.
Светодиоды можно применить любого типа.

Габаритная мощность трансформатора должна быть не мене 60 Вт, выходное переменное напряжение от 25 до 35 Вольт, 2А.

Конструктивно изготавливается на 3-х или 2-х платах. В последнем случае блоки А2 и А3 сведены в один. Такая конструкция даст возможность быстрой модернизации блока в будущем, путем замены устаревшей части, а также облегчит наладку.

Правильно собранный БП начинает работать сразу, но нужно учесть нижеследующее.
В цифровой части распайку платы провести без МК, вместо которого установить 40 выводную панельку. Можете установить шести или десяти штырьковый разъем для внутрисхемного ISP программирования (JMP1- JMP3) в зависимости то типа МК. Катушку L1 и конденсатор С4 расположите как можно ближе к МК. Разводку платы произведите так, чтобы шина питания схемы и МК шла «звездочкой» с одной точки, чтобы не было «сквозного» тока через выводы микроконтроллера.

«Зашейте» программу в микроконтроллер. Внимательно отнеситесь к выставлению фюзов. Иначе введете его в нокаут и будете долго морочить себе голову. Если этот этап впервые — сначала почитайте соответствующую литературу. «Прошитый» контроллер засветит нули в индикаторе и будет реагировать на прикосновение пальцами к первым двум портам АЦП, высвечивая разные цифры. Подав через резисторы в сотню Ом на РА0, РА1 5 Вольт от его же питания — получите соответствующие показания на индикаторах.

Аналоговую часть можно собирать всю сразу и начинать налаживать отдельно, без цифровой платы. Запаяйте все резисторы, конденсаторы и диоды. Впаивать цепочку транзисторов после DA1.1. поочередно с обязательным измерением тока коллектора Т7. Таким образом, проконтролируйте, чтобы он не достиг значения больше 30 мА. Иначе меняйте очередной транзистор на другой. Аналогичный или меньшей мощности (важен h31э).
Если это условие не соблюсти, то резистор R2 придется уменьшать до десятков Ом и он превратится в «печку». Это является банальной ошибкой при построении схемы с аналогичной структурой построения. После этого ставим в панельку LM358. Убедившись в работоспособности усилителя напряжения, приступайте к электронному предохранителю на Т8. При нагрузке в 2А он должен «реагировать» и блокировать выходную мощность на безопасном уровне.

Начальная настройка показаний вольтметра и амперметра производится по показаниям тестера. На 2 ногу DА1 подается 5 Вольт от стабилизатора питания и подстроечным резистором R50 выставляется 5 Вольт при выходном напряжении в 25 Вольт. Движком резистора R47 выставляете на выходе 7 DА1 -1.5 вольта при нагрузке в 1.5А.

Когда вся цепь по напряжению работоспособна, выставляем верхнюю границу напряжения, в зависимости от входного напряжения от трансформатора, с помощью R40.

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

К кварцевому резонатору в схеме, возможно, не потребуется присоединение по стандартной схеме двух одинаковых конденсаторов – на 10-30 pF (С2и С3) около PIC16F877A.

Теперь можно соединить все части воедино и произвести окончательную настройку – согласование, указанными ранее, подстроечными резисторами.
Программировать микроконтроллер можно как в отдельно собранном программаторе, так и внутрисхемно через указанный соответствующий разъем.
Вдогонку, учтите, что при программировании МК нужно выставлять конфигурацию микроконтроллера или так называемые фюзы.

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


Рис. 7
Вариант установки фюзов для AVR ATMEGA16 в программе PonyProg2000 указан на рис. 7.
Для AVR ATMEGA8535 аналогично выставляете указанные фюзы, а PIC16F877 нужное конфигурационное слово: 0×3f3a.Наконец-то дошли до самого интересного. Как я все это сооружал. Да все очень просто. Платы все сделаны на одностороннем текстолите. Разводка плат не сложная. Повторить под себя нет проблем. Главное в цифровой части правильно развести цепи питания, а именно так, чтобы питание МК не было по пути питания других потребителей. Так называемая «звездочка». По сему, я выложу только свой изначальный вариант на ATMEGA16 с индикаторами с общими анодами.

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

При осмотре корпуса оказалось мало места, ибо я к тому времени умудрился туда втиснуть еще и плату блока питания заводского изготовления который на выходе имеет напряжения для газоразрядных и прочих индикаторов. Кроме того остались готовые платы с припаянными индикаторами от ранее изготовленных вольтметров на PICах. Желание и рыбку съесть и воду из аквариума выпить взяло верх и я ее использовал без переделки. При этом вся цифровая часть уместилась прямо на передней панели. Но стыковать ранее сделанную плату индикаторов, с новой не удавалось без платы – переходника. Чем я и воспользовался, разместив на нее еще и буферные каскады.


Рис. 8
Здесь все три платы цифровой части на одном рисунке 8. Можно использовать ее как основу. Если кому не нравиться, ибо монтаж очень плотный и требует сноровки.

Рис. 9. Платы между собой соединяются как бутерброд на штыревых разъёмах
Рис. 10
Плата аналоговой части рис. 10 конечно попроще и посвободней. Рассчитывалась на рабочий ток в 5 Ампер, посему все огромное хоть танцы танцуй. Но мне она нравиться. Очень приятно с ней было работать и экспериментировать. Для умощнения дорожек (которые жирные) сверху напаял толстый медный провод, который остался после ремонта в квартире, то есть замены электропроводки. Сейчас как раз при токе до 5 Ампер ее испытываю. Если все будет нормально, и будет интересно, выложу, как сделать.

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


Рис. 11
Вот так выглядит вся электронная часть в сборе. Правда, на момент когда сделана эта фотография еще не был задействован энкодер, ввиду его отсутствия. На маленьком радиаторе видно составной транзистор ТIP110 (испытывался и такой вариант). Сейчас стоит обычный транзистор — всем известный КТ803 в железном корпусе. А внизу два бледно-розовых 2-х ватных резистора, — это нагрузка во время первых испытаний. Два белых импортных резистора, это датчики тока. Остальное должно быть понятно и так.

Рис. 12
А вот здесь, рис. 12, мой БП в процессе испытаний. На последнем разряде амперметра – некая чушь. Но это не ошибка, это я умудрился во время поиска ножек для подключения сжечь парочку сегментов. Жаль неимоверно, пришлось покупать новый индикатор, попался зеленый.

Фотку законченного изделия не привожу, жду от знакомого прикольные цветные наклейки с надписями на панели. А пока идут так сказать «боевые» испытания на практике и житейских ситуациях.


Рис. 13 и 14Программы для прошивки микроконтроллеров и чертежи ПП в формате Sprint Layout в архиве.
▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.

▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.

Спасибо за внимание. Успехов в повторении!

Камрад, рассмотри датагорские рекомендации

🌻 Купон до 1000₽ для новичка на Aliexpress

Никогда не затаривался у китайцев? Пришло время начать!
Камрад, регистрируйся на Али по нашей ссылке. Ты получишь скидочный купон на первый заказ. Не тяни, условия акции меняются.

🌼 Полезные и проверенные железяки, можно брать

Куплено и опробовано читателями или в лаборатории редакции.

 

03.08.14 изменил Datagor.

AVR-USB-MEGA16: измеряем и контролируем температуру | avr-working-with-usb

В этой статье я хочу рассказать о двух небольших разработках, выполненных недавно в лаборатории проблем материаловедения Института химии и химической технологии СО РАН в Красноярске (www.icct.ru). Буду рад, если статья поможет сэкономить время и деньги кому-нибудь из моих коллег, решающих аналогичные проблемы.

Обе конструкции связаны с измерением и регулированием температурных режимов для лабораторных установок. В их основе лежит плата AVR-USB-MEGA16, которая выполняет следующие функции:

1. Программная реализация низкоскоростного USB для связи с ПК.
2. Аппаратная генерация сигналов ШИМ (Широтно-Импульсная Модуляция) для регулирования мощности нагревателей.
3. Программная реализация шины 1-Wire для обслуживания температурных датчиков DS18B20.
4. Аналого-цифровое преобразование сигналов с термопар.

Firmware в плате AVR-USB-MEGA16 спроектировано таким образом, что управление всеми необходимыми ресурсами микроконтроллера (инициализация портов, таймеров, ШИМ и т. п.) происходит со стороны хоста через класс-обертку ATMega16. Поэтому единственное firmware подходит для всех проектов ПО хоста, опубликованных в статье. 

Все проекты ПО хоста разработаны с использованием свободно доступной на сайте Microsoft среды разработки — Visual Studio 2008 Express Edition (подойдет также любая среда Visual Studio более свежей версии). Для работы с USB используется библиотека libusb-win32 [7]. Для построения графиков используется бесплатная библиотека zedGraph [9]. Все необходимые комментарии находятся в исходных файлах. Проекты и firmware, описываемые в статье, можно скачать по ссылке [8]. 

Устройства (или их фрагменты), представленные в данной статье, могут использоваться не только в физико-химической лаборатории, но и в быту. Например, системы типа «умный дом» — регулирование температуры в помещениях, недорогая реализация «хитрых» температурных режимов кухонной печи или духовки, водонагреватели и т.п. Другие примеры – моделирование естественных температурных режимов для обитателей аквариумов или растений в теплицах.

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

[Блок-схема устройств]

Первая разработка – программируемая водяная баня. Водяная баня – это просто водяной термостат, но в данной задаче температура термостата должна изменяться по некой задаваемой программе и иногда — весьма сложным образом. Мощность – до 1 кВт. Вторая разработка — печь для исследования реакций в сверхкритических флюидах. Температура – от 200oC до 400oC, но выходы на режимы и дальнейшее поведение температуры должно было регулироваться  по определенным законам, зависящим от процесса. Мощность – до 3 кВт.

По сути, проблема несложная – обычный температурный регулятор с компьютерным управлением. Различаются только датчики. В первом случае (водяная баня) решение очевидно – недорогие датчики DS18B20. В этом случае аппаратная реализации регулятора становится тривиальной задачей. Во втором случае (печь) я решил использовать термопары для измерения температуры в печи и те же датчики  DS18B20 для измерения температуры окружающей среды (и холодного спая термопары). Пара медь-константан вполне подходит для этого диапазона температур. Силовые блоки для регулирования мощности нагревателя различаются только маркой симисторов и размерами радиаторов для них.

Процессы медленные (минуты, десятки минут). Поэтому никаких особых требований к скорости электроники нет. Сам регулятор можно было бы реализовать на каком-нибудь несложном автономном микроконтроллере. Но в этом случае возникает непростая проблема пользовательского (приборного) интерфейса для программирования и протоколирования температурных режимов. Лучшее решение для таких вещей – все-таки персональный компьютер. Поэтому оптимальный вариант стенда для обеих задач мне представился таким (рис. 1). 

Рис. 1. Блок-схема регулятора

На долю персонального компьютера приходятся интерфейсные, сервисные функции и высокоуровневые функции управления температурой. На долю микроконтроллера платы AVR-USB-MEGA16 – низкоуровневые функции, перечисленные во введении: ШИМ, 1-Wire, АЦП и USB.

Начнем с силового блока.

[Силовой модуль]

Нагреватели питаются от сети переменного тока. Поэтому естественное решение для управления нагревом – фазовая регулировка мощности. Несложных схем тиристорных регуляторов в Сети много. Однако, можно еще упростить решение, если учесть инерционность нагревателя как нагрузки. В этом случае можно перейти к режиму регулирования мощности по количеству целых полупериодов, пропущенных в нагрузку. Для управления яркостью лампочек освещения (диммеров) это не пойдет, т.к. они будут сильно мигать, но для печек или водонагревателей – в самый раз. Единственная задача, возникающая при конструировании таких регуляторов, – синхронизация моментов отпирания симисторов или тиристоров с нулем сетевого напряжения. Можно было бы нагрузить на эту задачу микроконтроллер платы AVR-USB-MEGA16, но более изящное решение — использовать оптосимисторы с детекторами перехода через ноль (Zero Crossing). Например, MOC3061-MOC3063. Этот вариант и был положен в основу силового модуля.

Схема и конструкция

Схема силового модуля, взята непосредственно из datasheet на опторазвязки MOC3061-MOC3063 без изменений. Она приведена на рис. 2.
 

Рис. 2. Схема силового модуля

Токоограничивающий резистор Rin = 330 Ом для выбранной мною микросхемы MOC3061. Симистор – BT137-600 для бани, BT139-800 – для печки. Максимальный ток этого первого симистора в открытом состоянии — 8А, второго – 16А, так что моих этих задачи хватит с запасом. При подаче “0” на вход Vin, симистор откроется в ближайший момент прохождения нуля и нагрузка (нагреватель) будет подключена к сети. При подаче “1” – закроется и нагрузка от сети отключится.

На рис. 3 представлена конструкция силового модуля для водяной бани. Без радиатора симистор может работать на нагрузку 100-150 Вт.

ВНИМАНИЕ! Узлы этой схемы во время работы находятся под высоким напряжением. Поэтому соблюдайте правила электробезопасности при работе с этими устройствами в открытом виде. ПОДАВИТЕ в себе искушение потрогать симистор пальцем в процессе работы (нагрелся или еще не очень)!

Рис. 3. Конструкция силового модуля

Проверим работоспособность силового модуля самым простым способом. Подадим на Vcc (рис. 2) сигнал от генератора прямоугольных импульсов напряжением около 5 В, Vin – землю. В данной конструкции резистор Rin будет размещен на плате AVR-USB-MEGA16, поэтому на плате силового модуля разъем подключении непосредственно к ножке 1 микросхемы MOC3061. Следовательно, сигнал от генератора нужно подать на разъем через резистор 300-330 ом. В качестве нагрузки подключим лампочку 220 В мощностью до 100 Вт. Мне подвернулась под руку лампочка на 75 Вт. Частоту следования импульсов установим равную 1 Гц. Изменяя длительность импульсов (от 0 до 1 сек) мы можем менять длительность вспышек лампочки от нуля до постоянного свечения. На рис. 4 показан процесс такого испытания. В качестве генератора импульсов я использовал генератор, имеющийся в  USB-осциллографе PV6501 (светлая коробочка в правом верхнем углу снимка).

Рис. 4. Проверяем силовой модуль

Силовой блок успешно прошел испытания – идем дальше. Для подключения силового модуля к плате AVR-USB-MEGA16 нужно выполнить маленькую модификацию платы.

Модификация платы AVR-USB-MEGA16
Первая модификация платы AVR-USB-MEGA16 заключается во впаивании небольшого разъема (розетка на 2 гнезда) и резистора на 330 Ом. Вид модифицированной платы представлен на рис. 5.

Рис. 5. Модернизированная плата. Фрагмент для управления силовым модулем выделен красным

Схема подключения разъема показана на рис. 6. Эта и следующие модификации отмечены красным цветом. Данная модификация – правая на схеме сверху.

Рис. 6. Схема изменений и дополнений платы AVR-USB-MEGA16 (отмечено красным)

Разъем лучше сразу подключить к контакту P20 платы AVR-USB-MEGA16 (PD5 микроконтроллера ATMega16), т.к. именно с этого выхода мы впоследствии сможем взять сигнал аппаратного ШИМ.

Помигаем лампочкой через USB
Для проверки работы силового модуля от платы AVR-USB-MEGA16 напишем простейшее приложение, позволяющее включать или выключать лампочку. Программа называется Bulb. Проект приложения хоста для Visual Studio 2008 Express Edition находится в архиве «01 Управляем лампочкой по USB.zip» (см. ссылку [8]). Firmware для всех проектов этой статьи одно и то же и находится в архиве «00 Firmware.zip» (см. ссылку [8]). Hex-файл в этом архиве – прошивка для микроконтроллера платы AVR-USB-MEGA16. Прошиваем микроконтроллер. Подключаем к плате силовой модуль (с той же лампочкой на 75 Вт, что и в предыдущем эксперименте). Запускаем приложение хоста. Нажимая кнопку «Вкл/Выкл» в этом приложении мы можем включать и выключать лампочку через USB (см. рис. 7). Параллельно на плате AVR-USB-MEGA16 загорается и гаснет светодиод. 

Рис. 7. Управление лампочкой через USB

Все работает. Силовая часть готова для построения простейшего позиционного (релейного) терморегулятора. Но перед этим нам нужно научиться измерять температуру. К этому и приступим.

[Работаем с датчиками температуры DS18B20]

Следующий этап разработки – очередная (вторая) модификация платы, необходимая для реализации шины 1-Wire. Она позволит нам измерять температуру при помощи недорогих датчиков фирмы Dallas Semiconductor — DS18B20. DS18B20 – это, по сути, готовый цифровой термометр с разрешением до 12 разрядов и способный обмениваться данными по шине 1-Wire. Рабочий диапазон температур  от -55oC до +125oC. Время оцифровки температуры для 12 разрядов около 750 мс.

Программная реализация шины 1-Wire

В шине 1-Wire всего один сигнальный провод. Его нужно «подтянуть» к +5В через резистор 4.7 кОм. Еще один провод – земля. В принципе, устройства, работающие на шине 1-Wire, могут использовать паразитное питание от сигнального провода, но в данной разработке мы используем отдельный провод для питания датчиков. Таким образом, модификация платы заключается в установке 6-гнездовой розетки (мы планируем использовать два датчика – по три гнезда на датчик) и подтягивающего резистора. На схеме (рис. 6) эта модификация отображена в центре сверху. Сигнальная линия шины 1-Wire подключен к разряду 1 порта B (PB1). На рис. 8 представлен  вид платы. Красным выделен фрагмент для работы с 1-Wire.

Рис. 8. Реализация 1-Wire для двух датчиков

Интерфейс 1-Wire достаточно хорошо описан в Сети (в том числе и программная реализация на микроконтроллерах AVR). Соответствующие фрагменты кода подробно прокомментированы в исходных файлах программного обеспечения firmware (см. файл «main.c» в архиве «00 Firmware.zip», ссылка [8]). Поэтому перейдем к работе с конкретными устройствами 1-Wire — температурными датчиками DS18B20.

Измеряем температуру при помощи датчиков DS18B20

Если низкоуровневая программная реализация шины 1-Wire выполнена на микроконтроллере платы AVR-USB-MEGA16, то работа с датчиками (DS18B20) реализована в приложении хоста. Во втором архиве (файл «02 Работаем с датчиками температуры.zip», см. ссылку [8]) находится пример программного обеспечения хоста (программа TempTest), обслуживающего несколько датчиков (до 16 в данном примере, но может быть и другое — просто константу DMAX в firmware я установил равную 16). Все термодатчики подключаются параллельно (у нас их будет максимум два), см. рис. 6.

Логика работы приложения следующая (см. файл Form1.cs). После запуска приложения и инициализации USB, запускается таймер timer1sec (в конце метода Form1_Load()). Каждую секунду этот таймер генерирует событие, которое обрабатывается в методе timer1sec_Tick(). В этом методе сначала определяется количество датчиков, подключенных к шине 1-Wire. Если на шине есть датчики, то всем им посылается команда начать оцифровать температуру. Время преобразования не превышает 750 мс. Поэтому после команды «начать преобразование» запускается второй таймер timer750ms. Через 750 мс этот таймер генерирует событие, при котором вызывается метод timer750ms_Tick(). В этом методе таймер timer750ms  выключается  и далее в цикле опрашиваются все датчики, подключенные к шине. Полученный двухбайтовый код температуры преобразуется в десятичное число со знаком и выводится на экран. Программа отслеживает наличие датчиков в каждом цикле. Поэтому датчики можно подключать и отключать в любой момент. Скриншот работающей программы показан на рис. 9. Первый датчик я положил на настольную лампу сверху, а второй показывает температуру в комнате.
 

Рис. 9. Пример работы с несколькими датчиками

[Водяная баня]

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

Собираем экспериментальный стенд – модель водяной бани

Общий вид стенда представлен на рис. 10.

Рис. 10. Стенд для отработки алгоритмов температурного регулятора

Мощность нагревателя составляет около 400 Вт, поэтому симистор силового блока нужно прикрепить к радиатору. Термометр термостата, представляет собой датчик DS18B20, помещенный в узкую пробирку с тонкими стенками, заполненную трансформаторным маслом для улучшения контакта с водой термостата. Второй датчик, измеряющий температуру окружающей среды, воткнут непосредственно в разъем шины 1-Wire на плате AVR-USB-MEGA16. Правильнее было бы поместить его где-нибудь вблизи наружной стенки термостата, но для данных тестов это не так существенно.

Реализуем простейший регулятор

Рассмотрим простейший алгоритм регулирования температуры, который называется позиционным или релейным. Суть этого алгоритма проста. Если текущая температура термостата меньше заданной величины (она называется «уставка»), то нагреватель включается (естественно, на полную мощность). Если температура сравнялась или превысила уставку – нагреватель сразу же выключается. В архиве «03 Простейший регулятор.zip» (см. ссылку [8]) представлен проект приложения, реализующего этот алгоритм.

Пример работы приложения показан на рис. 11. Температурный режим водяной бани запрограммирован следующим образом. Температура бани должна быть поднята до 80oC с шагом 20oC. На каждом шаге – прогрев в течении 20 мин. После прогрева на максимальной температуре – естественное охлаждение до 50oC и поддержание температуры на этом уровне до конца эксперимента. На графике по горизонтали отложено время с начала процесса в минутах, по вертикали – температура термостата в oC.

Рис. 11. Работа бани с позиционным регулятором

Видно, что результат работы простейшего регулятора трудно назвать удовлетворительным. Видны заметные колебания температуры около точек равновесия, есть серьезные выбросы  температуры (почти на 5oC) после фронтов нагрева.

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

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

Делаем ШИМ

ШИМ означает широтно-импульсную модуляцию (по-английски PWMPulse-Width Modulation). ШИМ сигнал – это прямоугольные импульсы, следующие с некоторой частотой, но длительность (т. е. ширину) этих импульсов мы можем изменять по нужному нам закону.

Силовой модуль в нашей системе управляется дискретно. Симистор закрыт, когда на вход модуля подается «1» (+5В) и открыт, когда «0», причем момент открытия симистора «привязан» к моменту прохождения питающего напряжения через 0. Поэтому, если мы возьмем достаточно длительный период повторения открывающих импульсов (например, 1 сек) и будем изменять их длительность, то мы будем регулировать количество пропущенных к нагрузке полуволн питающего напряжения, т. е. регулировать среднюю мощность, поступающую в нагрузку.

Например, при периоде 1 сек, мы сможем регулировать мощность с точностью 1% (в секунде как раз 100 полупериодов сети переменного тока 50 Гц). Как только длительность открывающего импульса станет больше 0.01 сек, каждую секунду в нагрузку будет подаваться 1 полупериод питающего напряжения и нагреватель будет работать с 1% мощностью от номинала. Как только ширина импульса превысит 0.02 сек, то к нагрузке будут проходить два полупериода каждую секунду и мощность возрастет до 2% от номинала и т.д. Когда длительность импульсов сравняется с периодом их следования, все 100 полупериодов будут поступать в нагрузку каждую секунду, и, следовательно, нагреватель будет работать с полной мощностью. Вот так все просто.

Реализовать ШИМ можно несколькими способами. Можно реализовать программно на микроконтроллере или на ПК. Но в этом случае мы можем столкнуться со сбоями в работе ШИМ, особенно при малых или больших скважностях импульсов. Это связано с тем, что и микроконтроллер и ПК должен выполнять еще некоторые функции (обмениваться данными по USB, осуществлять их преобразование, вывод на экран и т.д.) и они могут не успевать обработать все прерывания при коротких интервалах.

К счастью, в микроконтроллере ATMega16 есть возможность реализовать аппаратный ШИМ с регулируемой частотой следования импульсов и скважностью. Для исследования этой возможности разработаем небольшое приложение, которое представлено в архиве «04 Помигаем лампочкой при помощи ШИМ и USB.zip» (см. ссылку [8]). Для генерирования сигналов ШИМ используется таймер TIMER1 микроконтроллера. Его инициализация и настройка подробно прокомментирована в исходных файлах проекта ПО хоста (файл «Form1.cs») – это происходит с помощью класса-обертки Atmega16.

Испытаем наш ШИМ-генератор. К выходу платы AVR-USB-MEGA16, который служит для подключения силового блока, подключим силовой модуль с лампочкой 75 Вт (как мы делали в самом начале статьи). А можно и просто воткнуть в этот разъем светодиод или подключить осциллограф. Запустим приложение PWM.exe из указанного архива. Устанавливая различную величину мощности нагревателя, мы увидим, что лампочка или светодиод мигают с различной длительностью в зависимости от установленного значения. На рис. 12 представлена осциллограмма ШИМ-сигнала, полученного с выхода платы AVR-USB-MEGA16 (порт PD5 микроконтроллера).

Рис. 12. Тестирование аппаратного ШИМ

Теперь мы можем приступить к созданию и изучению пропорционального регулятора.

Исследуем пропорциональный регулятор

Никаких аппаратных изменений по сравнению с позиционным регулятором не потребуется. Вся разработка сводится к написанию программы. В архиве «05 Пропорциональный регулятор.zip» (см. ссылку [8]) приведен проект приложения хоста для Visual Studio 2008 Express Edition. Все необходимые комментарии находятся в файле «Form1.cs».

Логика работы приложения следующая. При загрузке формы (метод Form1_Load()) создается объект dev класса ATMega16. В конструкторе этого класса происходит инициализация USB. Если с USB все в порядке, происходит инициализация рабочих переменных и запускается основной таймер программы timer1sec. Этот таймер генерирует события раз в секунду. В обработчике это события и происходит основная работа программы. Вернем к методу Form1_Load(). После запуска таймера timer1sec происходит настройка портов B и D и инициализация таймера Timer1 микроконтроллера ATMega16 для генерирования ШИМ-сигнала с регулируемой частотой и скважностью (управление настраиваемыми ресурсами микроконтроллера поддерживается firmware и классом-оберткой Atmega16). В оставшейся части метода Form1_Load() происходит инициализация библиотеки для построения графиков zedGraph. По событию Tick таймера timer1 вызывается метод timer1sec_Tick() в котором происходит измерение температуры и установка мощности нагревателя в зависимости от ситуации.

Измерение температур происходит следующим образом. Вначале определяется количество датчиков на шине 1-Wire. Если это количество не менее двух, то считается что первые два датчика участвуют в процессе (первый датчик измеряет температуру термостата, а второй – окружающей среды). Всем датчикам подается команда «начать преобразование» и включается таймер на 750 мс. По тику этого таймера произойдет считывание значений с датчиков и установка значений соответствующих переменных (см. метод timer750ms_Tick()). Параллельно продолжается работа метода timer1sec_Tick() – регулирование температуры (по их предыдущим значениям, полученным на секунду раньше).

Регулирование мощности нагревателя происходит просто. Определяется неувязка err, равная разности текущей температуры термостата и установленной (уставка). В зависимости от значения err устанавливается мощность нагревателя. Если невязка меньше 0, то греть не нужно, мощность устанавливается в 0. Если до желаемого значения далеко (т. е. невязка больше зоны пропорциональности), то мощность устанавливается в 100% от номинала. Если же мы находимся в зоне пропорциональности (т. е. недалеко от уставки), то мощность устанавливается пропорциональной невязке.

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

Рис. 13. Работа бани с пропорциональным регулятором

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

Но так ли уж все безоблачно для пропорционального регулятора? Если посмотреть внимательно вторую и третью «полочки» (60oC и 80oC на рис. 13), то мы видим, что равновесный уровень заметно ниже уставки (соответственно, 60oC и 80oC). На рис. 14 представлен увеличенный фрагмент. Видно, что систематическая ошибка на уровне 80oC составляет почти полтора градуса.
 

Рис. 14. Иллюстрация систематической ошибки регулятора

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

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

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

Пропорциональный регулятор с компенсатором тепловых потерь

Этот алгоритм был реализован и опробован на этой же модели водяной бани. Изменения по сравнению с предыдущим кодом минимальные. Модифицированный проект находится в архиве «06 Пропорциональный регулятор с компенсатором потерь.zip» (см. ссылку [8]). Результат работы на той же программе тепловых режимов показан на рис. 15. Видно, что систематическая ошибка пропорционального регулятора скомпенсирована при значении коэффициенте компенсатора 0.2. Уменьшая этот коэффициент до 0 мы получим чисто пропорциональный регулятор. Поэтому его значение также нужно подбирать экспериментально в зависимости от конструкции термостата и мощности нагревателя.

Рис. 15. Работа пропорционального регулятора с компенсатором тепловых потерь

Для данной задачи полученного результата вполне достаточно. На этом и остановимся и перейдем ко второй задаче – программированной печи.

[Печь]

Для измерения температуры в печи датчики DS18B20 уже не подойдут (они работают только до 125oC). Температура печи не должна превышать 400oC. Поэтому можно использовать низкотемпературные термопары. Поскольку термопара выдает аналоговый сигнал – необходимо использовать АЦП (аналого-цифровой преобразователь). В микроконтроллере ATMega16 есть 10 разрядный АЦП. Он достаточно быстрый (около 100 мкс на 10 разрядов) и снабжен аналоговым мультиплексором на 8 каналов. Для данной задачи вполне подойдет. Единственная проблема – малая термо-ЭДС термопары. Например, для пары медь-константан это порядка 40-60 мкВ/градус. Т. е. при разнице температуры между горячим и холодным спаем 400 градусов, мы имеем ЭДС всего 16-20 мВ. Поэтому перед АЦП необходимо поставить усилитель.

Термопара

Итак, для измерения температуры в печи мы собираемся использовать термопару медь-константан, которая как раз работает до 400oC. Константан – это сплав меди с никелем. Поскольку один провод термопары медный мы можем обойтись всего двумя спаями, а измерительную цепь включить в разрыв медного провода. Холодный спай будет расположен на датчике DS18B20, который у нас измерял температуру окружающей среды, а горячий спай – непосредственно в печке. По измеренной ЭДС термопары мы можем определить разность температур горячего и холодного спая. Поскольку температуру холодного спая мы знаем (датчик DS18B20, рядом с которым находится холодный спай), то, следовательно, мы будем знать и абсолютную температуру в печке. Естественно, что термопару мы предварительно должны откалибровать.

Способов изготовления термопар много. Описания легко найти в Сети. Используемые материалы достаточно легкоплавкие и поэтому я просто сходил в институтскую стеклодувную мастерскую и попросил стеклодува спаять мне две проволочки при помощи горелки на очень узеньком кончике пламени. Проволочки я предварительно пропустил в стеклянные капилляры для электрической изоляции в высокотемпературной зоне.  В холодной зоне достаточно лаковой изоляции, которая была на проводниках. У стеклодува получились два маленьких аккуратных шарика-спая. В разрез медного провода я впаял небольшую вилку. Что вышло в конечном итоге — показано на рис. 16.

Рис. 16. Готовая термопара для отладочных экспериментов

Теперь займемся предварительным усилителем.

Усилитель

В целом, изготовление усилителя для термопары для лабораторных условий не представляет серьезной проблемы. Коэффициент усиления порядка 100-200, желательно минимальный дрейф и смещение. Сигналы медленные, поэтому сетевая наводка легко отфильтровывается. Существуют усилители специально для термопар с компенсатором холодного спая. Но целью данной работы было использование только недорогих и достаточно доступных компонентов.

Немного поэкспериментировав с однополярным 5-вольтовым питанием операционных усилителей, я разочаровался в своих способностях справиться с нулем при помощи подручных средств и имеющихся у меня корпусов, поэтому решил вернуться к двухполярному питанию. Положительные 5 вольт возьмем с платы AVR-USB-MEGA16, а отрицательные (почти 5 вольт) получим при помощи преобразователей напряжения на коммутируемых конденсаторах. У меня под рукой оказались микросхемы LMC7660. Они рассчитаны на выходной ток до 20 мА, т. е. вполне подойдут для питания одного маломощного усилителя.

В качестве операционного усилителя была взята микросхема OP07 (отечественный аналог – 140УД17). Схема усилителя представлена на рис. 17.

Рис. 17. Схема усилителя для термопары

Работоспособность усилителя, запас по коэффициенту усиления и балансировку при питании от платы AVR-USB-MEGA16 я проверил на макетной плате (рис. 18). Но перед этим нужно опять слегка модернизировать плату AVR-USB-MEGA16. Схема этой третьей, и последней модернизации изображена на рис. 6 (красным слева). На плате появился еще один разъем, к которому необходимо подпаять +5В, землю и порт P1 (PA0) от АЦП.

Мы будем использовать внутренний источник опорного напряжения для работы АЦП. Поэтому необходима еще одна маленькая модификация. Выпаиваем аккуратно резистор R3 с платы AVR-USB-MEGA16, а ножку AREF выводим на этот же разъем для аналоговых модулей. Это опорное напряжение нам потребуется в другом проекте (измеритель pH) для смещения двухполярного сигнала в положительную область. Термопара, если горячий спай всегда теплее, чем холодный, будет выдавать однополярный сигнал (медь – плюс, константан – минус для нашей термопары). Поэтому в этом проекте напряжение AREF на внешней плате не потребуется, но резистор R3 отпаять все-таки нужно.
 

Рис. 18. Предварительный усилитель на макетной плате

Усилитель на OP07 мне понравился. Запас усиления достаточный, сбалансированный нуль стоит как вкопанный. Заметных шумов и наводок также не наблюдается. Так что можно переносить на печатную плату.

Плата усилителя разрабатывалась в Sprint Layout 5.0. Наконец-то появился повод попробовать метод «лазерного утюга» (точнее — «лазерно-утюжный») для изготовления платы. Получилось с первого же раза. Действительно, вполне работоспособная и удобная технология. Особенно если не нужны слишком узкие зазоры и тонкие отверстия и плата небольшая. Для тонкой работы нужно очень хорошо сбалансировать давление и температуру на подошве утюга, т.к. тонер может расплавляться неравномерно и расплываться (в местах где давление или температура избыточны). Итог работы представлен на рис. 19 и рис. 20.
 

Рис. 19. Готовый усилитель термопары

Плату усилителя можно соединить с платой AVR-USB-MEGA16 непосредственно, как показано на рис. 20.
 

Рис. 20. Вся электроника печи в сборе

Теперь осталось разобраться с АЦП.

Работаем с АЦП

Работа с АЦП очень проста. Пример простого приложения, работающего с одним каналом АЦП, находится в архиве «07 Проверяем работу АЦП.zip» (см. ссылку [8]). Firmware и класс-обертка ATMega16 разработаны так, что можно работать с портами и регистрами микропроцессора непосредственно из хоста через USB. Это делает работу с АЦП почти тривиальной. Логика работы программы такова (см. файл Form1.cs в проекте из архива «07 Проверяем работу АЦП.zip», ссылка [8]).

При создании объекта dev класса ATMega16 происходит инициализация USB. Если все прошло успешно (см. метод Form1_Load()), мы инициализируем АЦП. Собственно говоря работа идет с регистрам ADMUX и статусным регистром ADCSRA.

Сначала указываем, что мы будем работать с внутренним источником опорного напряжения (устанавливаем биты REFS0 и REFS1 регистра ADMUX в 1), разрешаем работу АЦП (бит ADEN регистра ADCSRA – в 1) и задаем коэффициент деления тактовой частоты процессора для работы АЦП (см. комментарий в тексте программы). В конце инициализации запускаем таймер, по событиям которого (каждые 0.1 сек) будем запускать АЦП, считывать и выводить результат. Это происходит в методе timer1_Tick().

Биты с 0 по 4 регистра ADMUX определяют режимы работы аналоговых входов. Установка их в 0 – означает работу с одиночным каналом AD0, который мы и собирались использовать. Запуск процесса преобразования происходит путем установки бита ADSC регистра ADCSRA в 1. По концу преобразования бит ADIF этого же регистра устанавливается в 1. Т.к. время преобразования весьма мало, ждем этого радостного события просто в цикле. После этого берем результат преобразования в регистрах ADCL и ADCH и выводим их в TextBox. Вот и все. Пример работы программы показан на рис. 21. Сигнал на вход АЦП удобно взять с того самого AREF, который мы вывели на разъем при последней модификации платы AVR-USB-MEGA16 (естественно, поделив его переменным резистором). Вот и пригодился AREF и в этом проекте.

Рис. 21. Тестирование АЦП

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

Сборка стенда и калибровка

Фотография собранного стенда представлена на рис. 22. Приступим к калибровке термопары.

Рис. 22. Все готово для калибровки термопары

Сам процесс калибровки несложен. Нагреем печь до максимальной рабочей температуры (в нашем случае 400oC). Регулируя коэффициент усиления усилителя (подстроечный резистор «Усиление», рис. 17) добьемся того, чтобы код АЦП был в конце диапазона с небольшим запасом (в случае 10 разрядного АЦП, пусть будет около 900). После этого оставляем печь остывать, фиксируя периодически код АЦП термопары, показания термометра, который считаем образцовым, и температуру холодного спая. Хотя это и не очень принципиально, но лучше производить калибровку именно при остывании печи, чем при нагреве (меньше градиенты температуры в печи).

Для облегчения этого процесса напишем небольшое приложение, которое представлено в архиве «08 Калибруем термопару.zip» (см. ссылку [8]). Вид работающего приложения показан на рис. 23.

 

Рис. 23. Процесс калибровки термопары

При нажатии на кнопку «Зафиксировать значения», текущие значения температур T0, T1 и код АЦП сигнала термопары заносятся в список справа панели. Потом по этим данным можно построить градуировочный график или использовать их непосредственно в табличном виде в программе регулятора температуры печи.

Построенный градуировочный график термопары показан на рис. 24. Видно, что в диапазоне от 100oC до 400oC градуировочная кривая хорошо описывается линейной функцией. Уравнение тренда – на графике слева вверху. Поэтому в программе регулятора можно использовать это уравнение для пересчета кода АЦП в градусы (естественно, не забывая прибавить температуру холодного спая, которая измеряется датчиком DS18B20).
 

Рис. 24. Градуировочный график

Теперь осталось определить оптимальную зону пропорциональности и коэффициент компенсатора для терморегулятора печи и – печь готова. Мы это уже один раз делали при настройке водяной бани, поэтому повторяться не будем.

Байты перемычек (fuse bits) ATmega16 должны быть 0xFF (low) и 0x09 (high).

@ S.V.Kukhtetskiy, 2009
Кухтецкий Сергей Владимирович,
лаборатория проблем материаловедения,
Институт химии и химической технологии СО РАН, Красноярск
E-mail: [email protected]

[Решение возможных проблем]

Здесь описаны некоторые типичные проблемы, которые возникают при использовании прошивки Сергея Кухтецкого. Решение других проблем см. в статье AVR-USB-MEGA16, V-USB, FAQ: переписка по вопросам программирования.

1. Записал в платку прошивку Сергея Кухтецкого с помощью загрузчика USB и программы Khazama, но платка не определяется как устройство USB. Если снова установить перемычку для активации загрузчика USB, то платка определяется, и загорается светодиод. В чем проблема? Ответ: платка у Вас исправна, но Вы записали в неё не ту прошивку. Например, прошивка соответствует другой частоте кварца, не той что используется на Вашей макетной плате AVR-USB-MEGA16. Прошейте HEX-файл прошивки Сергея Кухтецкого, рассчитанный на нужную частоту кварца, который стоит у Вас. Частоту кварца можно прочитать на его корпусе, например если на корпусе написано 12.000, то кварц на 12 МГц.

2. При подключении платки к компьютеру (в платку записана прошивка Сергея Кухтецкого) система Windows запрашивает драйвер. Что это за драйвер, где его брать? Ответ: это драйвер библиотеки LibUSB, скачайте его по ссылке [10].

3. На моей системе Windows драйвер LibUSB не устанавливается, и о причине система не сообщает. Как быть? Ответ: такое нередко бывает на урезанных версиях Windows. Причина может быть в том, что не отключена система проверки цифровой подписи драйвера, либо пакет драйвера неполон (например, если Вы скачали драйвер по ссылке из статьи на сайте vanoid.ru, то там не хватает некоторых файлов, требуемых для 64-битных версий Windows). Поэтому, во-первых, перезагрузите систему, и при загрузке отключите проверку цифровой подписи драйвера (нажимайте при старте F8, и на черном экране выберите соответствующую нижнюю строчку загрузочного меню). Во-вторых, устанавливайте полную версию драйвера LibUSB (скачайте его по ссылке [10]).

4. Скомпилированное ПО хоста на C# не запускается с ошибкой. Что делать? Ответ: возможно не установлена библиотека .NET 3.5 от Microsoft. В этом случае могут выскакивать разные ошибки (наподобие The application failed to initialize properly 0xc0000135), но программа в любом случае не запустится. Чтобы решить проблему, скачайте и установите эту библиотеку (строка для поиска Microsoft .NET Framework 3.5 site:microsoft.com). Инсталлятор для библиотеки можете скачать по ссылке [10] (инсталлятор требует подключения к интернет, так как он закачивает недостающие модули).

[Ссылки]

1. Макетные платы с интерфейсом USB.
2. AVR-USB-MEGA16: быстрая разработка USB приложений на C# при помощи класса-обертки ATMega16. Класс C# (для Visual Studio Express Edition 2008) и соответствующая прошивка, позволяющие быстро сделать USB HID устройство и написать для него приложение для компьютера. Вы управляете микроконтроллером прямо из кода на C# (дергаете его ножками, читаете регистры и т. п.).
3. avr-usb-russian.rar — библиотека V-USB, примеры, документация на русском языке.
4. Как работать с платой AVR-USB-MEGA16 из Visual Studio (версия 2003). На примере описано управление светодиодом на макетной плате из кода на C++.
5. V-USB Projects site:obdev.at — проекты, которые основаны на V-USB. Все эти проекты можно реализовать на макетной плате AVR-USB-MEGA16.
6. Пример управления портами микроконтроллера через USB.
7. Разработка устройства USB — как начать работу с библиотеками AVR USB и libusb.
8. 101022V-USB_C#_libusb.zip — здесь собраны в одном архиве все исходники программ, описанные в статье (ПО хоста и firmware), а также скомпилировал прошивки на все варианты частот кварцев для микроконтроллеров ATmega16 и ATmega32.
9. zedGraph site:sourceforge.net.
10. 140808LibUSB-driver.zip — архив с драйвером библиотеки LibUSB, он нужен для корректной работы прошивки Сергея Кухтецкого совместно с операционными системами Windows. Драйвер подходит для всех версий операционных систем Windows XP (32 bit и 64 bit), Windows 7 (32 bit и 64 bit), Windows 8 (32 bit и 64 bit). В этом же архиве найдете инсталлятор для библиотеки .NET 3.5 (требуется для приложений ПО хоста, написанных на Visual Studio C# 2010).

Первая программа для AVR микроконтроллера на Ассемблере

Приведен и подробно разобран пример простой программы для AVR микроконтроллера на языке Ассемблер (Assembler). Собираем простую схему на микроконтроллере для мигания светодиодами, компилируем программу и прошиваем ее в микроконтроллер под ОС GNU Linux.

Содержание:

  1. Подготовка
  2. Принципиальная схема и макет
  3. Исходный код программы на Ассемблере
  4. Документация по Ассемблеру
  5. Работа с числами в Hex, Bin и Dec
  6. Компиляция и прошивка программы в МК
  7. Заключение

Подготовка

Итак, у нас уже есть настроенный и подключенный к микроконтроллеру программатор, также мы разобрались с программой avrdude, изучили ее настройки и примеры использования. Пришло время разработать свою первую программу, которая будет выполнять какие-то реальные действия с AVR микроконтроллером (МК).

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

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

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

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

Первый инструмент, который нам понадобится — редактор исходного кода, здесь можно использовать любой текстовый редактор. В одной из прошлых статей мы рассматривали настройку среды разработки программ Geany для программирования AVR микроконтроллеров с использованием языков Ассемблера и Си.

В принципе там уже все готово, останется написать код программы и поочередным нажатием двух кнопок (Compile-Flash) скомпилировать и прошить программу в микроконтроллер.

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

Принципиальная схема и макет

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

Рис. 1. Принципиальная схема мигалки на светодиодах и микроконтроллере ATmega8.

Примечание: принципиальная схема нарисована за несколько минут в программе Eeschema, которая входит в комплекс программ EDA(Electronic Design Automation) KiCAD (для Linux, FreeBSD, Solaris, Windows). Очень мощный профессиональный инструмент, и что не мало важно — свободный!

Схема устройства состоит из микроконтроллера ATmega8 и двух светодиодов, которые подключены через гасящие резисторы. К микроконтроллеру подключен ISP-коннектор для осуществления программирования через программатор. Также предусмотрены клеммы для подключения внешнего источника питания напряжением 5В.

То как выглядит данная схема в сборе на макетной баспаечной панели (BreadBoard) можно посмотреть на рисунке ниже:

Рис. 2. Конструкция светодиодной мигалки на микроконтроллере ATmega8.

К микроконтроллеру подключен программатор USBAsp, используя ISP интерфейс, от него же и будет питаться наша экспериментальная конструкция. Если нужно запитать конструкцию от внешнего источника питания напряжением 5В то достаточно его подключить к + и — линиям питания панели.

Исходный код программы на Ассемблере

Разработанная нами программа будет попеременно зажигать и гасить два светодиода. Светодиоды подключены к двум пинам PD0 и PD1 микроконтроллера.

Ниже приведен исходный код программы на Ассебмлере(Assembler, Asm) для микроконтроллера ATmega8. Сохраните этот код в файл под названием leds_blinking.asm для последующей работы.

; Светодиодная мигалка на микроконтроллере ATmega8
; https://ph0en1x.net

.INCLUDEPATH "/usr/share/avra/" ; путь для подгрузки INC файлов
.INCLUDE "m8def.inc"            ; загрузка предопределений для ATmega8
.LIST                           ; включить генерацию листинга

.CSEG                           ; начало сегмента кода
.ORG 0x0000                     ; начальное значение для адресации

; -- инициализация стека --
LDI R16, Low(RAMEND)  ; младший байт конечного адреса ОЗУ в R16
OUT SPL, R16          ; установка младшего байта указателя стека
LDI R16, High(RAMEND) ; старший байт конечного адреса ОЗУ в R16
OUT SPH, R16          ; установка старшего байта указателя стека

.equ Delay = 5        ; установка константы времени задержки

; -- устанавливаем пины PD0 и PD1 порта PORTD (PD) на вывод --
LDI R16, 0b00000011   ; поместим в регистр R16 число 3 (0x3)
OUT DDRD, R16         ; загрузим значение из регистра R16 в порт DDRD

; -- основной цикл программы --
Start:
    SBI PORTD, PORTD0 ; подача на пин PD0 высокого уровня
    CBI PORTD, PORTD1 ; подача на пин PD1 низкого уровня
    RCALL Wait        ; вызываем подпрограмму задержки по времени
    SBI PORTD, PORTD1 ; подача на пин PD1 высокого уровня
    CBI PORTD, PORTD0
    RCALL Wait
    RJMP Start        ; возврат к метке Start, повторяем все в цикле

; -- подпрограмма задержки по времени --
Wait:
    LDI  R17, Delay   ; загрузка константы для задержки в регистр R17
WLoop0:  
    LDI  R18, 50      ; загружаем число 50 (0x32) в регистр R18
WLoop1:  
    LDI  R19, 0xC8    ; загружаем число 200 (0xC8, $C8) в регистр R19
WLoop2:  
    DEC  R19          ; уменьшаем значение в регистре R19 на 1
    BRNE WLoop2       ; возврат к WLoop2 если значение в R19 не равно 0 
    DEC  R18          ; уменьшаем значение в регистре R18 на 1
    BRNE WLoop1       ; возврат к WLoop1 если значение в R18 не равно 0
    DEC  R17          ; уменьшаем значение в регистре R17 на 1
    BRNE WLoop0       ; возврат к WLoop0 если значение в R17 не равно 0
RET                   ; возврат из подпрограммы Wait

Program_name: .DB "Simple LEDs blinking program"

Кратко рассмотрим приведенный выше код и построчно разберем его структуру. Выполнение программы происходит по порядку — с верху кода и к низу, учитывая при этом метки, переходы с возвратами и условия.

Все строки и части строк, которые начинаются с символа «;» — это комментарии. При компиляции и выполнении программы такие строчки игнорируются, они служат для документирования и примечаний.

При помощи директивы «.INCLUDEPATH» мы указываем путь «/usr/share/avra/», по которому компилятору нужно искать файлы для включения их в текущий файл с использованием директив «.INCLUDE«. В нашем примере подключается файл, полный путь к которому будет выглядеть вот так: «/usr/share/avra/m8def.inc».

Директива «.LIST» указывает компилятору о необходимости генерирования листинга с текущего места в коде, отключить генерирование можно директивой «.NOLIST». Листинг представляет собой файл в котором содержится комбинация ассемблерного кода, адресов и кодов операций. Используется для отладки и других полезных нужд.

Директива «.CSEG» (CodeSEGment) определяет начало программного сегмента (код программы что записан во флешь-память) — сегмента кода. Соответственно все что размещено ниже этой директивы относится к программному коду.

Для определения сегмента данных (RAM, оперативная память) или памяти EEPROM используются директивы «.DSEG» и «.ESEG» соответственно. Таким образом выполняется распределение памяти по сегментам.

Каждый из сегментов может использоваться в программном коде только раз, по умолчанию если не указана ни одна из директив используется сегмент кода (CSEG).

При помощи директивы «.ORG» компилятору указывается начальный адрес «0x0000» сегмента, в данном случае мы указали начальный адрес сегмента кода. В данной программе эту директиву можно было бы и не использовать, поскольку по умолчанию адрес программного кода всегда 0x0000.

Дальше в коде происходит инициализация стека. Стек (Stack) — это область памяти (как правило у всех AVR чипов размещается в SRAM), которая используется микропроцессором для хранения и последующего считывания адресов возврата из подпрограмм, а также для других пользовательских нужд.

При вызове подпрограммы flhtc nt записывается в стек и начинается выполнение кода подпрограммы. По завершению подпрограммы (директива RET)

Стек работает по принципу LIFO (Last In — First Out, последним пришёл — первым вышел). Для адресации вершины стека используется указатель стека — SP (Stack Pointer), это может быть однобайтовое или двухбайтовое значение в зависимости от доступного количества SRAM памяти в МК.

При помощи инструкции «LDI» мы загружаем в регистр R16 значение младшего байта конечного адреса ОЗУ «Low(RAMEND)» (предопределенная константа в файле m8def.inc что содержит адрес последней ячейки SRAM), а потом при помощи инструкции OUT выполняем загрузку данного значения из регистра R16 в порт SPL (Stack Pointer Low). Таким же образом производится инициализация старшего байта адреса в указателе стека SPH.

Инструкция LDI используется для загрузки старшего и младшего значений из константы в регистр общего назначения. А инструкция OUT позволяет выполнить операцию загрузки с немного иной спецификой — из регистра общего назначения в регистр периферийного устройства МК, порт ввода-вывода и т.п.

Если не произвести инициализацию стека то возврат из подпрограмм станет невозможным, к примеру в приведенном коде после выполнения инструкции перехода к подпрограмме «RCALL Wait» возврат не будет выполнен и программа не будет работать как нужно.

Директива «.equ» выполняет присвоение указанному символьному имени «Delay» числового значения «5», по сути мы объявили константу. Имя константы должно быть уникальным, а присвоенное значение не может быть изменено в процессе работы программы.

Дальше мы устанавливает два канала (пины PD0, PD1) порта DDRD (PortD) на вывод, делается это загрузкой двоичного значения 0b00000011 (0x3, число 3) в регистр R16 с последующим выводом этого значения из него в порт DDRD при помощи команды OUT.

По умолчанию все каналы (пины) порта настроены на ввод. При помощи двоичного числа 0b00000011, где последние биты установлены в 1, мы переводим каналы PD0 и PD1 в режим вывода. 

Начиная с метки «Start:» начинается основной рабочий цикл нашей программы, эта метка послужит нам для обозначения начального адреса основного цикла и позже будет использована для возврата.

При помощи инструкции «SBI» выполняем установку бита PORTD0 (предопределен в файле m8def.inc) в порте PORTD чем установим на пине PD0 высокий уровень. Используя инструкцию «CBI» выполняется очистка указанного (PORTD1) бита в порте PORTD и тем самым устанавливается низкий уровень на пине PD1.

Дальше с помощью инструкции RCALL выполняем относительный вызов подпрограммы которая начинается с метки «Wait:«. Здесь для запоминания адреса возврата уже используется стек, который мы инициализировали в начале программы.

После завершения подпрограммы (в нашем случае ее функция — задержка по времени) программа вернется к позиции где был выполнен вызов подпрограммы (адрес возврата будет получен из стека) и с этого места продолжится выполнение последующих операторов.

После вызова подпрограммы задержки «Wait» следуют вызовы инструкций SBI и CBI в которых выполняется установка битов порта PORTD таким образом, что теперь на пине PD0 у нас будет низкий уровень, а на пине PD1 — высокий.

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

Таким образом выполняется реализация бесконечного цикла в котором будут «дергаться» пины порта PORTD микроконтроллера и поочередно зажигаться/гаснуть светодиоды которые подключены к каналам данного порта (пины PD0, PD1).

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

При помощи инструкций «BRNE» (условный переход) выполняется анализ нулевого бита статусных флагов процессора (Zero Flag, ZF). Переход на указанную в инструкции метку будет выполнен если после выполнения предыдущей команды нулевой флаг был установлен. В данном случае проверяется значение нулевого флага после выполнения команд «DEC» над значениями которые хранится в регистрах общего назначения (R17, R18, R19). Инструкция «BRNE» требует 1/2 такта процессора.

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

По умолчанию, без установки фьюзов что задают источник и частоту тактового генератора, в микроконтроллере ATmega8 используется откалиброванный внутренний RC-генератор с частотой 1МГц. Если же мы изменим частоту МК на 4Мгц то наши светодиоды начнут мигать в 4 раза быстрее, поскольку на каждую операцию вычитания и сравнения будет тратиться в 4 раза меньше времени.

Завершается подпрограмма инструкцией «RET«, которая выполняет возврат из подпрограммы и продолжение выполнения инструкций с того места, с которого эта подпрограмма была вызвана (на основе сохраненного адреса возвращения, который сохранился в стеке при вызове инструкции «RCALL»).

При помощи директивы «.DB» в памяти программ (флешь) резервируется цепочка из байтов под строчку данных «Simple LEDs blinking program», эти данные являются статичными и их нельзя изменять в ходе работы программы. Для резервирования слов (Double Word) нужно использовать директиву «.DW».

В данном случае, у нас во FLASH-память вместе с программным кодом будет записана строка «Simple LEDs blinking program«, которая содержит название программы. Данные из этой строчки нигде в программе не используются и приведены в качестве примера.

При каждом резервировании данных с использованием директивы «.DB» или «.DW» должна предшествовать уникальная метка, которая пригодится нам когда нужно будет получить адрес размещаемых данных в памяти для дальнейшего их использования, в нашем случае это «Program_name:«.

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

Эти данные можно разместить и в начале кода, использовав операторы перехода для изоляции этих байтов от выполнения:

RJMP DataEnd
Program_name: .DB "Simple LEDs blinking program"
DataEnd:

Документация по Ассемблеру

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

Процесс дальнейшего изучения Ассемблера для AVR микроконтроллеров полностью в ваших руках. Есть достаточно много полезных ресурсов в интернете, книг и материалов с примерами и пояснениями.

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

Справка по Ассемблеру для Atmel AVR (перевод Руслана Шимкевича): atmel-avr-assembler-quick-doc-ru.zip (16Кб, HTML, RU).

Справка по инструкциям Atmel Assembler: atmel-avr-instruction-set-manual-en.pdf.zip (700Кб, PDF, EN, 2015).

Работа с числами в Hex, Bin и Dec

В коде программы для загрузки значений в регистры используются числа и в скобках приведены их значения в шестнадцатеричной системе счисления, например: «50 (0x32, )». В двоичной системе счисления числа указываются в формате «0b00000011». Для удобной переконвертации чисел из шестнадцатеричной системы счисления в десятичную, двоичную и наоборот отлично подходит программный калькулятор из среды рабочего окружения KDE — KCalc.

Рис. 3. KCalc — простое и эффективное решение для пересчета между разными системами счисления.

В настройках (Settings) нужно выбрать режим (Numeral System Mode), после чего программа приобретет вид что на рисунке выше. Переключаться между системами счисления можно устанавливая флажки в полях «Dec», «Hex», «Bin». Для примера: переключаемся в Hex и набираем «FF», потом переключаемся в Dec и видим число в десятичной системе счисления — 255, просто и удобно.

В операционной системе GNU Linux с рабочей средой GNOME (например Ubuntu) также есть подобный калькулятор, это программа — galculator.

Компиляция и прошивка программы в МК

 Итак, у нас уже есть полный код программы, который мы сохранили в файл с именем «leds_blinking.asm». Теперь самое время скомпилировать его, делается это нажатием кнопки «Compile» в предварительно настроенной среде Geany или же отдельной командой в консоли:

avra --includepath /usr/share/avra/ leds_blinking.asm

Если результат выполнения будет без ошибок то мы получим файл прошивки в формате Intel HEX — «leds_blinking.hex», который уже можно прошивать во флешь-память микроконтроллера.

Примечание: опцию «—includepath /usr/share/avra/» можно и не указывать, поскольку в файле с исходным кодом уже была указана директива «.INCLUDEPATH» для поиска файлов с предопределениями для разных моделей МК.

Осталось прошить микроконтроллер используя полученный файл «leds_blinking.hex». В примере я использую программатор USBAsp и микроконтроллер ATmega8, вот так выглядит команда для записи получившегося файла во флешь-память МК:

avrdude -p m8 -c usbasp -P usb -U flash:w:leds_blinking.hex

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

Сразу же после прошивки флешь-памяти на микроконтроллер поступит команда сброса (RESET) и программа начнет выполняться, об єтом будут свидетельствовать два попеременно мелькающих светодиода.

Если же светодиоды не подают признаков жизни, значит что-то пошло не так. Посмотрите внимательно вывод команды для компиляции и прошивки МК, возможно что там увидите сообщения об ошибках которые нужно исправить.

Заключение

Увеличив значение константы «Delay» можно уменьшить частоту мерцания светодиодов, а уменьшив — увеличить частоту. Также можете попробовать добавить несколько светодиодов к свободным каналам порта (PD2-PD7) и модифицировать программу таким образом чтобы получить бегущий огонь из светодиодов.

В заключение приведу краткое видео работы рассмотренной схемы на двух светодиодах:

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

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

Программатор AVR ISP « схемопедия


Рис.1 AVR ISP

Программаторы, работающие под управлением PonyProg2000 и других любительских программ, очень просты. Однако большинство из них не может обеспечить такой функциональности, какой обладают фирменные средства разработки. Одним из самых популярных  программаторов Atmel является AVR ISP (внешний вид на рис.1). С помощью AVR ISP можно запрограммировать любой микроконтроллер с ядром AVR через последовательный интерфейс SPI. Программатор подключается через COM-порт и работает под управлением AVR Studio.

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

Рис.2 Аналог фирменного программатора AVR ISP

На рис.2 приведена принципиальная схема авторского варианта AVR ISP. В отличие от своего прообраза он содержит только один микроконтроллер, обладая теми же функциями. В место ATmega8535 (AT90S8535) в базовом варианте применён микроконтроллер ATmega16. Он имеет вдвое большим объёмом памяти программ и данных, и сопоставим с ATmega8535 по назначению выводов и внутреннему устройству. Запись и обновление содержимого DD2 осуществляются через встроенную программу-загрузчик (boot-loader), которая использует для этих целей способность самопрограммирования микроконтроллеров AVR. Дополнительными программными средствами осуществляется так же согласование работы программы предназначенной для ATmega8535 с адресным пространством ATmega16 и использование прерывания TOV0 для отслеживания положения кнопки SB1 и управления линиями PD7, PC0…PC6.

Программатор подключается к любому свободному COM порту в системе через разъём X1. Напряжение 9…15 В подаётся на разъём X2 от отдельного источника питания способного отдавать в нагрузку ток не меньший чем 100 мА. Разъем X3 служит для внутрисхемного программирования или при программировании на отдельной панели.

На выводе 7 X3 присутствуют прямоугольные импульсы частотой 1.8432 МГц. Их можно использовать, если программируемый микроконтроллер настроен на работу с кварцевым резонатором либо с внешним тактовый генератором. В этом случае импульсы подаются на вход XTAL1. Устройства, не имеющие собственного источника энергии, можно запитать непосредственно от программатора через вывод 2 X3 (внутрисхемное программирование устройств с напряжением питания меньшим, чем 5 может привести к поломке!). Активизация и запрещение тактовых импульсов на выводе 2 X3, а также присутствие напряжения 5 В на выводе 7 X3, регулируются кнопкой SB1.

В ходе работы светодиод HL3 свидетельствует о нормальном функционировании программатора. HL1 будет светиться во время программирования микроконтроллера, а HL2 будет сигнализировать о наличии напряжения и тактовых импульсов (выводы 2 и 7 X3 соответственно).

Перед началом работы в DD2 нужно занести программу, находящуюся в Файле BootISP.hex (исходный текст в файле BootISP.asm) с помощью любого удобного программатора. FUSE-биты при этом должны выглядеть следующим образом:

CKSEL0 = 0    SUT0     = 1    BOOTRST = 0    EESAVE = 1

CKSEL1 = 0    SUT1     = 0    BOOTSZ0 = 0    CKOPT  = 1

CKSEL2 = 1    BODEN    = 0    BOOTSZ1 = 0    JTAGEN = 1

CKSEL3 = 1    BODLEVEL = 0    SPIEN   = 0    OCDEN  = 1

Рис.3 Процесс программирования

После того как программатор собран и подключён к компьютеру – приступают к загрузке текущей версии управляющей программы. Нажав на кнопку SB1(!), подают питание на разъём X2. Должен загореться светодиод HL1, что свидетельствует о переводе в режим  обновления программного обеспечения. После этого запускают AVR Studio и через меню Tools -> AVR Prog открывают окно обновления “прошивки” AVR ISP. Далее нужно указать путь к загрузочному файлу, который по умолчанию имеет размещение C:Program filesAtmelAVR ToolsSTK500STK500.ebn, и начать программирование, нажав на экранную кнопку Flash -> Program(окно на рис.3). В конце завершения операции необходимо кратковременно  снять напряжение, после чего программатор будет готов к применению. Связь осуществляется через меню Tools -> Program AVR -> Auto Connect. Вид окна программы поддержки AVR ISP приведен на рис.4.

Рис.4 Вид окна программы поддержки AVR ISP

Интерфейс программы очень простой и не требует подробных пояснений. Здесь только необходимо обратить внимание на несколько важных деталей. В списке устройств на вкладке Program в окне Device, кроме микроконтроллеров с ядром AVR (ATmega, ATtiny, AT90x и др.), доступны также некоторые модели семейства MCS-51 (названия начинаются с AT89S). Программирование AT89S через SPI принципиально ни чем не отличается от подобной операции у AVR-микроконтроллеров, за исключением одного существенного различая. Сигнала RESET у MCS-51 (в отличие от  AVR) имеет активный высокий уровень. Поэтому при программировании моделей AT89S резистор R2, предотвращающий запуск микроконтроллеров AVR, необходимо подключить к шине питания программатора.

Иногда случается так, что с первого раза не удается установить связь программатора с устройством. Если не считать ошибок монтажа и неправильной установки FUSE-битов, запрещающих работу SPI (SPIEN, DWEN и RSTDISBL), вероятнее всего проблема заключается в слишком высокой частоте тактовых импульсов на линии SCK. В этом случае необходимо уменьшить скорость последовательного интерфейса. Это можно сделать вручную через вкладку Board (окно ISP Freq). Модуль SPI ведомого микроконтроллера не может работать на частотах превышающих F­clk­/4.

Программатор был проверен в работе с AVR Studio версий 4.12…4.16 со многими типами микроконтроллеров. Никаких ошибок при этом не было выявлено.

Говорящие LED-часы — часть 3: Схема — DiMoon Electronics

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

Изначально, при проектировании часов, я не рисовал ни какие схемы. Были только небольших наброски в Proteus-е. Поэтому, пришлось заняться ее воссозданием по имеющемуся железу и программному обеспечению. Ссылка на схему в формате DipTrase и PDF будет в конце статьи.

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

«Мозгом» конструкции является микроконтроллер DD1 ATMega16. К нему подключена микросхема Flash-памяти DS1 на 4 метра для хранения семплов из предыдущей статьи, термометр DD4 DS18B20, буферы LED-дисплея DD2, DD3 с кнопками SB1-SB4 и внешний R-2R ЦАП. Питается конструкция от 5-и вольт через разъем XP2. Через XP1 производится заливка прошивки в микроконтроллер.

Микросхема флеш-памяти DS1 питается от отдельного линейного стабилизатора DD5 на 3.3 вольта. Судя по даташиту на флешку, все ее входы толерантны к 5-и вольтам, а это значит, что ее можно напрямую подключать к 5-и вольтной AVR-ке, не боясь что-либо сжечь.

 

Индикация производится с помощью 2-х строенных семисегментных индикаторов HG1 и HG2. Индикация динамическая. Для конкретных индикаторов токоограничивающие резюки R25-R32 поставил по 300 Ом.

Сигнал с ЦАП-а, выполненного на резисторах R1-R16, через потенциометр R33 подается на усилитель DA1 LM386N. R33 служит для подстройки громкости речевого информатора, чтоб он не орал и не будил окружающих, если те спят)) Обвязка LM-ки взята прямиком из datasheet-та, без изменений. И не забываем про цепочку Цобеля на С4-R34, иначе будем долго чесать репу и искать причину самовозбуда усилка высоких частотах. Ну и конденсаторы С6, С7 надо ставить поближе к микросхеме.

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

На рисунке изображена упрощенная схема внутренней части микроконтроллера и внешней обвязки. Она не совсем соответствует реальной, но для нашей задачи это не критично.

Переключатель PORTB управляет пином PBx микроконтроллера, настроенного на выход. В нижнем положении переключателя PORTB на выводе PBx выдает ноль, в верхнем — единица. Переключатель DDRD управляет направлением вывода PDx, в нижнем положении PDx является выходом, в верхнем положении переключателя — входом. Когда PDx настроен как выход, логическим уровнем на нем модно управлять с помощью переключателя PORTD, по аналогии с PBx. Резистор R2 — внутренний подтягивающий резистор, PIN:D — внутренний буфер, с выхода которого из программы в МК можно прочитать значение логического уровня на PDx, когда он настроен на вход. Буферы LED_BUFF:A и LED_BUFF:B — буферы LED-дисплея DD2 и DD3 соответственно, LED_SEGMENT — один сегмент одного светодиодного индикатора.

Начнем с простого — управление свечением светодиода. Для этого переключатель PORTB переведем в нижнее положение, там самым подадим на катод светодиода минус источника питания, DDRD так же в нижнее положение, и PDx у нас работает как выход. После этого с помощью переключателя PORTD мы сможем зажигать и гасить светодиод.

Переведем PORTD в верхнее положение. Черными стрелками указано направление обхода интересующей в данный момент части контура. Это не в коем случае не направление течения тока, скорее, это наглядное представление наличия «электрического» контакта; стрелка начинается на плюсе, проходит через светодиод и кончается на массе, при этом потенциал на аноде светодиода больше, чем на катоде, следовательно, он будет гореть:

Если в этот момент юзер нажмет на кнопку BUTTON, то ни чего страшного не произойдет, так как резистор R1 предотвратит КЗ, а за счет того, что выходное сопротивление вывода PDx в этом режиме очень мало, то наш резистор R1 ни как не повлияет на значение логического уровня на PDx.

Чтобы погасить светодиод, достаточно перевести переключатель PORTD в нижнее положение:

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

Все сказанное выше по своей сути является примером реализации динамической индикации для индикаторов с общим катодом: на PBx вешаются катоды индикаторов, на PDx аноды сегментов.

Вроде как все хорошо, зажигать и гасить светодиод научились. Перейдем теперь к вводу информации с кнопки.

Для начала переключателем PORTB установим на PBx логическую единицу. Это делаем для того, чтобы светодиод не светился при любом логическом значении на PDx. Далее, настроим PDx на вход, переведя DDRD в верхнее положение. Через резистор подтяжки логическая единица поступает и на вход внутреннего буфера PIN:D, и на PDx. Значение на выходе буфера PIN:D можно прочитать программно.

И вот, юзер решил нажать на кнопку BUTTON. Так как сопротивление резистора R1 намного меньше резистора подтяжки R2, на выводе PDx установится низкий уровень, который можно прочитать на выходе буфера PIN:D.

Таким образом реализуется временнОе мультиплексирование кнопок и LED-индикатора, висящих на одном и том же выводе порта. При частоте обновления индикатора, равной около 100 Hz, видимых задержек реагирования на кнопки не будет, а драгоценные выводы микроконтроллера мы сэкономим)) Правда при этом усложняется программа опроса кнопок и вывода значения на индикатор, по сути будет один программный модуль, который занимается и тем, и другим, но об этом как-нибудь потом.

Про схему собственно все))

Теперь немного о функционале. На данный момент часы умеют отсчитывать текущее время, что не удивительно, ведь это же часы)), имеют календарь, учитывающий високосный год, отображают температуру за окном и снижают яркость индикаторов в период с 23:00 до 7:00, чтоб ночью не мешали спать. Так же можно настроить диапазон часов, когда работает речевой информатор. У меня он объявляет каждый час начиная с 7:00 и до 22:00. Будильника нет. Не стал его делать по одной причине: если ночью «моргнет» свет, то время собьется, и будильник зазвенит не тогда, когда нужно, следовательно, есть опасность проспать. Когда были у меня китайские LED радио-часы, натыкался несколько раз на такой казус. Так что лучше на телефоне поставлю будильник, когда он нужен.

Немного фоток.

В качестве корпуса выбрана пластиковая китайская коробка

Печатную плату не делал, все собрано на макетке типа «решето»

Индикатор поближе: 5 секунд показывают текущее время, 2 секунды температуру

Видео с демонстрацией работы:

Собственно, на этом все, спасибо за внимание!))

Архив со схемой и фотками

Схема контактов

ATMega16, конфигурация, характеристики и техническое описание

ATMega16 — 8-битный микроконтроллер AVR

Микроконтроллер ATMega16

Микроконтроллер ATMega16

Схема выводов ATMega16

нажмите на картинку для увеличения

Конфигурация контактов ATMEGA16

ПИН.

НАИМЕНОВАНИЕ ПИН-кода

ОПИСАНИЕ

АЛЬТЕРНАТИВНАЯ ФУНКЦИЯ

1

PB0 (XCK / T0)

Контакт 0 порта PORTB

T0 (Вход внешнего счетчика Timer0)

XCK (ввод / вывод внешних часов USART)

2

PB1 (T1)

Контакт 1 порта PORTB

T1 (Вход внешнего счетчика Timer1)

3

PB2 (INT2 / AIN0)

Контакт 2 порта PORTB

AIN0 (положительный вход внутреннего аналогового компаратора)

INT2 (вход внешнего прерывания 2)

4

PB3 (OC0 / AIN1)

Контакт 3 порта PORTB

AIN1 (отрицательный вход внутреннего аналогового компаратора)

OC0 (выход таймера 0, выход сравнения совпадения) или выход ШИМ

5

PB4 (SS)

Контакт 4 порта PORTB

SS (вход выбора ведомого SPI).На этом выводе низкий уровень, когда контроллер действует как ведомый.

[Последовательный периферийный интерфейс (SPI) для программирования]

6

PB5 (MOSI)

Контакт 5 порта PORTB

MOSI (главный выход, подчиненный вход). Когда контроллер действует как подчиненный, данные принимаются на этот вывод.

[Последовательный периферийный интерфейс (SPI) для программирования]

7

PB6 (MISO)

Контакт 6 порта PORTB

MISO (главный вход и выход подчиненного устройства). Когда контроллер действует как ведомый, данные отправляются мастеру через этот вывод.

[Последовательный периферийный интерфейс (SPI) для программирования]

8

PB7 (SCK)

Контакт 7 порта PORTB

SCK (последовательные часы шины SPI).Это часы, совместно используемые этим контроллером и другой системой для точной передачи данных.

[Последовательный периферийный интерфейс (SPI) для программирования]

9

СБРОС

Контакт сброса (активный низкий сброс)

10

VCC

Подключено к + 5В

11

ЗЕМЛЯ

Подключено к ЗЕМЛЕ

12

XTAL2

Подключен к кварцевому генератору

13

XTAL1

Подключен к кварцевому генератору

14

PD0 (RXD)

Контакт 0 PORTD

RXD (входной контакт USART)

[Интерфейс последовательной связи USART

может использоваться для программирования]

15

PD1 (TXD)

Контакт 1 PORTD

TXD (выходной контакт USART)

[Интерфейс последовательной связи USART

может использоваться для программирования]

16

PD2 (INT0)

Контакт 2 PORTD

Внешнее прерывание INT0

17

PD3 (INT1)

Контакт 3 PORTD

Внешнее прерывание INT1

18

PD4 (OC1B)

Контакт 4 PORTD

OC1B (выход таймера, выход сравнения сравнения) или выход ШИМ

19

PD5 (OC1A)

Контакт 5 PORTD

OC1A (выход таймера, выход сравнения сравнения) или выход ШИМ

20

ПД6 (ИСП)

Контакт 6 PORTD

Входной захват таймера / счетчика 1

21

PD7 (OC2)

Контакт 7 PORTD

Выход таймера / счетчика2 Выход сравнения сравнения

22

PC0 (SCL)

Контакт 0 PORTC

Интерфейс TWI

23

PC1 (SDA)

Контакт 1 PORTC

Интерфейс TWI

24

PC2 (TCK)

Контакт 2 PORTC

Интерфейс JTAG

25

PC3 (TMS)

Контакт 3 PORTC

Интерфейс JTAG

26

PC4 (TDO)

Контакт 4 PORTC

Интерфейс JTAG

27

PC5 (TDI)

Контакт 5 PORTC

Интерфейс JTAG

28

PC6 (TOSC1)

Контакт 6 PORTC

Вывод генератора таймера 1

29

PC7 (TOSC2)

Контакт 7 PORTC

Вывод 2 генератора таймера

30

AVcc

Vcc для внутреннего преобразователя АЦП

31

ЗЕМЛЯ

ЗЕМЛЯ

32

AREF

Вывод аналогового опорного сигнала для АЦП

33

PA7 (АЦП7)

Контакт 7 PORTA

АЦП (аналого-цифровой преобразователь), канал 7

34

PA6 (АЦП6)

Контакт 6 PORTA

АЦП (аналого-цифровой преобразователь), канал 6

35

PA5 (АЦП5)

Контакт 5 PORTA

АЦП (аналого-цифровой преобразователь), канал 5

36

PA4 (ADC4)

Контакт 4 PORTA

АЦП (аналого-цифровой преобразователь), канал 4

37

PA3 (ADC3)

Контакт 3 PORTA

АЦП (аналого-цифровой преобразователь), канал 3

38

PA2 (АЦП2)

Контакт 2 PORTA

АЦП (аналого-цифровой преобразователь), канал 2

39

PA1 (АЦП1)

Контакт 1 PORTA

АЦП (аналого-цифровой преобразователь), канал 1

40

PA0 (ADC0)

Контакт 0 порта PORTA

АЦП (аналого-цифровой преобразователь), канал 0

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

ATMEGA16 — Упрощенные функции

ЦП

8-битный AVR

Количество контактов

40

Рабочее напряжение

Для ATMEGA16: +4.От 5 до +5,5 В (+ 5,5 В является абсолютным максимумом)

Для ATMEGA16L: от +2,7 до 5,5 В (+ 5,5 В — абсолютный максимум)

Количество контактов ввода / вывода

32

Коммуникационный интерфейс

Интерфейс JTAG (24,25,26,27 PINS) [Может использоваться для программирования этого контроллера]

Последовательный интерфейс SPI (5,6,7,8 PINS) [Может использоваться для программирования этого контроллера]

Программируемый последовательный USART (14,15 PINS) [Может использоваться для программирования этого контроллера]

Двухпроводной последовательный интерфейс (22,23 PINS) [Может использоваться для подключения периферийных устройств, таких как датчики и сервоприводы]

Модуль АЦП

8 каналов, разрешение 10 бит АЦП

Модуль таймера

Два 8-битных счетчика, Один 16-битный счетчик [Всего три]

Аналоговые компараторы

1

Модуль ЦАП

Нет

ШИМ каналов

4

Внешний осциллятор

0-8 МГц для ATMEGA16L

0-16 МГц для ATMEGA16

Внутренний осциллятор

Калиброванный внутренний осциллятор 0–8 МГц

Тип памяти программ

Вспышка

Программная память

16 Кбайт [10000 циклов записи / стирания]

Частота процессора

16 MIPS

байтов ОЗУ

1 КБ

Данные EEPROM

512 байт

Сторожевой таймер

Есть

Режимы энергосбережения

Шесть режимов [режим ожидания, шумоподавление АЦП, энергосбережение, отключение питания, режим ожидания и расширенный режим ожидания]

Рабочая температура

от -55 ° C до + 125 ° C (+125 — абсолютный максимум, -55 — абсолютный минимум)

Электрические характеристики ATMEGA16

  • Максимальное напряжение на любом контакте, кроме RESET: -0.От 5 В до (Vcc + 0,5) В
  • Максимальное напряжение на выводе RESET: от -0,5 В до + 13,0 В
  • Максимальный допустимый постоянный ток через любой контакт ввода / вывода: 40 мА
  • Максимальный постоянный ток через контакты Vcc и GND: 200 мА
  • Температура хранения: от -65ºC до + 150ºC

Замены ATMEGA16

ATMEGA32, ATMEGA8535

Альтернативы ATMEGA16

ATMEGA8, ATMEGA328p

Где использовать ATMEGA16

Микроконтроллер ATMEGA16 — один из популярных контроллеров серии AVR.Благодаря своим характеристикам и стоимости покупки он стал одним из любимых контроллеров как для любителей, так и для инженеров. Программирование ATMEGA16 похоже на любой другой контроллер AVR. В частности, это клон ATMEGA32, за исключением памяти. Хотя он имеет только половину памяти ATMEGA32, этого более чем достаточно, чтобы удовлетворить большинство встроенных систем .

ATMEGA16 также имеет спящий режим. Режимы можно запускать в желаемое время для экономии энергии.Имея на борту различные спящие режимы, ATMEGA16 может работать с МОБИЛЬНЫМИ ВСТРОЕННЫМИ СИСТЕМАМИ.

ATMEGA16 имеет 32 программируемых контакта ввода / вывода, с помощью которых ATMEGA16 может легко взаимодействовать со многими периферийными устройствами.

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

Как использовать микроконтроллер ATMEGA16

Как упоминалось ранее, ATMEGA16 похож на любой другой микроконтроллер и, в частности, на ATMEGA32.По сути, он может выполнять любую функцию, которую выполняет ATMEGA32. Подобно им, это не цифровые микросхемы Plug and Play. Для работы ATMEGA16 сначала необходимо сохранить шестнадцатеричный код программы в ATMEGA16 FLASH MEMORY . После выполнения этого кода ATMEGA16 создает желаемый ответ.

Весь процесс использования ATMEGA16 выглядит следующим образом:

  1. Перечислите в документе функции, которые должны выполняться ATMEGA16.
  2. Следующая загрузка приложения для разработки программ (IDE) для контроллеров AVR

(Обычно Atmel Studio 6.2 для Windows7,

Atmel Studio 7 для Windows10 [http://www.microchip.com/avr-support/avr-and-sam-downloads-archive])

  1. Напишите функции на языке «C» в среде IDE.
  2. После написания программы скомпилируйте ее в IDE. Это исключает ошибки.
  3. Сделать приложение IDE для создания файла HEX для написанной программы после компиляции.
  4. Выберите устройство программирования (обычно программатор SPI для контроллеров AVR), которое устанавливает связь между вашим персональным компьютером и ATMEGA16.
  5. Запустите программу записи файлов HEX, которая предоставляется для выбранного устройства программирования.
  6. Выберите соответствующий шестнадцатеричный файл программы в программном обеспечении программатора.
  7. Запишите шестнадцатеричный файл (содержащий программу в виде шестнадцатеричного кода) во флэш-память ATMEGA16 с помощью этой программы.

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

Приложения

Существует множество приложений для микроконтроллеров ATMEGA16.

  • Заявки для любителей
  • Инженерный дизайн
  • Системы контроля температуры
  • Измерение аналоговых сигналов и манипуляции с ними.
  • Встроенные системы, такие как кофеварка, торговый автомат.
  • Системы управления двигателями.
  • Цифровая обработка сигналов.
  • Система периферийного интерфейса.

2D Модель

Схема контактов

ATmega16 | Блок-схема и описание ATmega16

Выпущенное в 1996 году ядро ​​AVR сочетает в себе богатый набор команд с 32 рабочими регистрами общего назначения. Все 32 регистра напрямую подключены к арифметико-логическому устройству (ALU), что позволяет получить доступ к двум независимым регистрам в одной инструкции, выполняемой за один такт. Результирующая архитектура более эффективна с точки зрения кода и обеспечивает до десяти раз более высокую пропускную способность, чем обычные микроконтроллеры CISC.Микроконтроллеры AVR находят множество применений в качестве встроенных систем; они также используются в конструкциях плат Arduino. Здесь мы рассмотрим схему контактов ATmega16, блок-схему, режим работы и особенности. Но прежде чем говорить о схеме выводов ATmega16, давайте сначала рассмотрим блок-схему Atmega16.

Блок-схема

ATmega16

Блок-схема ATmega16

ATmega16 — это маломощный 8-разрядный КМОП-микроконтроллер, основанный на архитектуре RISC, улучшенной AVR. Выполняя мощные инструкции за один такт, ATmega16 достигает пропускной способности, приближающейся к 1 MIPS на МГц, что позволяет разработчику системы оптимизировать энергопотребление в зависимости от скорости обработки.

Особенности

  • Расширенная архитектура RISC
    • 131 Мощные инструкции — большинство циклов выполнения за один такт
    • 32 x 8 рабочих регистров общего назначения
    • Полностью статическая работа
    • Пропускная способность до 16 MIPS при 16 МГц
    • 2-тактный умножитель на кристалле
  • Сегменты энергонезависимой памяти повышенной прочности
    • 16 Кбайт внутрисистемной самопрограммируемой флэш-памяти программ
    • 512 байт EEPROM
    • 1 Кбайт внутренней SRAM
    • Циклы записи / стирания: 10 000 вспышек / 100 000 EEPROM
    • Сохранение данных: 20 лет при 85 ° C / 100 лет при 25 ° C (1)
    • Дополнительная секция загрузочного кода с независимыми фиксирующими битами
    • Внутрисистемное программирование с помощью программы загрузки на кристалле
    • Истинная операция чтения-во время записи
    • Блокировка программирования для защиты программного обеспечения
  • JTAG (IEEE std.1149.1 совместимый) Интерфейс
    • Возможности граничного сканирования в соответствии со стандартом JTAG
    • Расширенная поддержка отладки на кристалле
    • Программирование флэш-памяти, EEPROM, предохранителей и битов блокировки через интерфейс JTAG
  • Периферийные функции
    • Два 8-битных таймера / счетчика с отдельными предделителями и режимами сравнения
    • Один 16-битный таймер / счетчик с отдельным предделителем, режимом сравнения и режимом захвата
    • Счетчик реального времени с отдельным генератором
    • Четыре канала ШИМ
    • 8-канальный 10-разрядный АЦП
    • 8 несимметричных каналов
    • 7 дифференциальных каналов только в корпусе TQFP
    • 2 дифференциальных канала с программируемым усилением 1x, 10x или 200x
    • Последовательный двухпроводной интерфейс с байтовой ориентацией
    • Программируемый последовательный порт USART
    • Главный / подчиненный последовательный интерфейс SPI
    • Программируемый сторожевой таймер
    • с отдельным встроенным генератором
    • Встроенный аналоговый компаратор
  • Специальные функции микроконтроллера
    • Сброс при включении и программируемое обнаружение пониженного напряжения
    • Внутренний калиброванный RC-генератор
    • Внешние и внутренние источники прерываний
    • Шесть спящих режимов: холостой ход, шумоподавление АЦП, энергосбережение, отключение питания, режим ожидания и расширенный режим ожидания
  • I / O и пакеты
    • 32 программируемых линии ввода / вывода
    • 40-контактный PDIP, 44-контактный TQFP и 44-контактный QFN / MLF
  • Рабочее напряжение
    • 7В — 5.5 В для ATmega16L
    • 5 В — 5,5 В для ATmega16
  • скоростных классов
    • 0-8 МГц для ATmega16L
    • 0–16 МГц для ATmega16
  • Потребляемая мощность при 1 МГц, 3 В и 25 ° C для ATmega16L
    • Активный: 1,1 мА
    • Режим ожидания: 0,35 мА
    • Режим пониженного энергопотребления: <1 мкА

Давайте подробно рассмотрим схему выводов ATmega16.

Схема контактов и описание ATmega16

Схема выводов ATmega16

Подробное описание схемы выводов ATmega16:

Vcc: цифровое напряжение питания
GND: Земля
Порт A (PA7… PA0)

Порт A служит аналоговыми входами для аналого-цифрового преобразователя.Порт A также служит 8-битным двунаправленным портом ввода-вывода, если аналого-цифровой преобразователь не используется. Контакты порта могут иметь внутренние подтягивающие резисторы (выбираемые для каждого бита). Выходные буферы порта A обладают симметричными характеристиками привода с высокой пропускной способностью как приемника, так и источника. Когда контакты PA0 — PA7 используются в качестве входов и внешне подтянуты к низкому уровню, они будут источником тока, если активированы внутренние подтягивающие резисторы. Выводы порта A имеют тройное обозначение, когда условие сброса становится активным, даже если часы не работают.

Порт B (PB7… PB0)

Порт B — это 8-битный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами (выбираемыми для каждого бита). Выходные буферы порта B обладают симметричными характеристиками привода с высокой пропускной способностью как приемника, так и источника. В качестве входов контакты порта B, которые внешне подтянуты к низкому уровню, будут давать ток, если активированы подтягивающие резисторы. Контакты порта B имеют тройное обозначение, когда условие сброса становится активным, даже если часы не работают.

Порт C (PC7… PC0)

Порт C — это 8-битный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами (выбираемыми для каждого бита).Выходные буферы порта C обладают симметричными характеристиками привода с высокой пропускной способностью как приемника, так и источника. В качестве входов контакты порта C, которые внешне подтянуты к низкому уровню, будут давать ток, если активированы подтягивающие резисторы. Выводы порта C имеют тройное обозначение, когда условие сброса становится активным, даже если часы не работают. Если интерфейс JTAG включен, подтягивающие резисторы на контактах PC5 (TDI), PC3 (TMS) и PC2 (TCK) будут активированы, даже если произойдет сброс.

Порт D (PD7… PD0)

Порт D — это 8-битный двунаправленный порт ввода-вывода с внутренними подтягивающими резисторами (выбираемыми для каждого бита).Выходные буферы порта D обладают симметричными характеристиками привода с высокой пропускной способностью как приемника, так и источника. В качестве входов контакты порта D, которые извне подтянуты к низкому уровню, будут давать ток, если активированы подтягивающие резисторы. Выводы порта D имеют тройное обозначение, когда условие сброса становится активным, даже если часы не работают.

СБРОС

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

XTAL1: Вход для усилителя инвертирующего генератора и вход для рабочей схемы внутренних часов.
XTAL2: Выход из усилителя инвертирующего генератора.
AVcc: AVcc — это вывод напряжения питания для порта A и аналого-цифрового преобразователя. Он должен быть подключен к Vcc извне, даже если АЦП не используется. Если используется АЦП, он должен быть подключен к VCC через фильтр нижних частот.
Aref: Aref — это аналоговый опорный вывод для аналого-цифрового преобразователя.

Рабочие состояния

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

Встроенная флэш-память ISP позволяет перепрограммировать программную память в системе через последовательный интерфейс SPI, с помощью обычного программатора энергонезависимой памяти или программы загрузки на кристалле, запущенной на ядре AVR.Программа загрузки может использовать любой интерфейс для загрузки прикладной программы во флэш-память приложения. Программное обеспечение в разделе Boot Flash будет продолжать работать, пока обновляется раздел Application Flash, обеспечивая истинную операцию чтения-во время записи. Комбинируя 8-битный RISC-процессор с внутрисистемной самопрограммируемой флеш-памятью на монолитной микросхеме, Atmel ATmega16 представляет собой мощный микроконтроллер, который обеспечивает очень гибкое и экономичное решение для многих встраиваемых приложений управления.


Полный лист данных доступен здесь.

Более базовая статья доступна в учебном уголке.

Введение в Atmega16 — Инженерные проекты


Привет, ребята! Надеюсь у тебя все хорошо. Микроконтроллеры играют важную роль в разработке встраиваемых систем. Они используются там, где автоматизация является неотъемлемой частью системы. Сегодня я собираюсь раскрыть подробности о Introduction to Atmega16. Это 40-контактный 8-разрядный микроконтроллер с низким энергопотреблением, разработанный с использованием технологии CMOS и основанный на архитектуре AVR.Это наиболее часто используемый микроконтроллер AVR, который принадлежит к семейству Atmel Mega. Вы должны взглянуть на микроконтроллер под названием Atmega328, который также принадлежит к семейству Mega. Другие микроконтроллеры, которые легко доступны и подпадают под категорию AVR, — это Atmega 8 и Atmega 32. Все эти контроллеры выполняют схожие задачи, однако они отличаются только объемом памяти и стоимостью. Я расскажу обо всем, что связано с этим контроллером, поэтому вам не нужно копаться в Интернете и искать всю информацию в одном. место.Давайте углубимся и исследуем, что это такое, его основные функции, схему контактов и все, что вам нужно знать.

Введение в Atmega16

  • Atmega16 — это 40-контактный микроконтроллер малой мощности, разработанный с использованием технологии CMOS.
  • CMOS — это передовая технология, которая в основном используется для разработки интегральных схем. Он отличается низким энергопотреблением и высокой помехоустойчивостью.
  • Atmega16 — это 8-битный контроллер, основанный на архитектуре AVR Advanced RISC (Reduced Instruction Set Computing).AVR — это семейство микроконтроллеров, разработанных Atmel в 1996 году.
  • Это однокристальный компьютер с ЦП, ПЗУ, ОЗУ, EEPROM, таймерами, счетчиками, АЦП и четырьмя 8-битными портами, называемыми PORTA, PORTB, PORTC, PORTD, где каждый порт состоит из 8 контактов ввода-вывода.
  • Atmega16 имеет встроенные регистры, которые используются для установления связи между процессором и внешними периферийными устройствами. CPU не имеет прямого соединения с внешними устройствами. Он может принимать ввод путем чтения регистров и выдавать вывод путем записи регистров.
  • Atmega16 поставляется с двумя 8-битными таймерами и одним 16-битным таймером. Все эти таймеры могут использоваться как счетчики, если они оптимизированы для подсчета внешнего сигнала.
  • Большинство необходимых периферийных устройств, необходимых для выполнения автоматических функций, встроены в это устройство, например АЦП (аналого-цифровой преобразователь), аналоговый компаратор, USART, SPI, что делает его экономичным по сравнению с микропроцессором, для работы которого требуется внешнее периферийное оборудование. различные функции.
  • Atmega16 поставляется с 1 КБ статической оперативной памяти, которая является энергозависимой памятью i.e хранит информацию непродолжительное время и сильно зависит от постоянного источника питания. В то время как 16 КБ флэш-памяти, также известной как ПЗУ, также встроены в устройство, которое является энергонезависимым по своей природе и может хранить информацию в течение длительного периода времени и не теряет никакой информации при отключении питания.
  • Atmega16 работает на максимальной частоте 16 МГц, где инструкции выполняются за один машинный цикл.

Архитектура Atmega16

На следующем рисунке показана архитектура Atmega16, основанная на Гарвардской архитектуре и имеющая отдельные шины и память.Инструкции хранятся в памяти программы.

1. CPU

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

2. ПЗУ

Программа контроллера хранится в ПЗУ, также известном как энергонезависимая программируемая флэш-память. Флэш-память имеет разрешение не менее 10 000 циклов записи / стирания. Флэш-память в основном разделена на две части, известные как секция флеш-памяти приложений и секция флеш-памяти будки. Программа контроллера хранится во флеш-секции приложений. В то время как секция фотовспышки оптимизирована для работы непосредственно при включении контроллера.

3. RAM

SRAM (статическая память с произвольным доступом) используется для временного хранения информации и имеет 8-битные регистры.Это похоже на обычную оперативную память компьютера, которая используется для передачи данных во время выполнения.

4. EEPROM

EEPROM (электронно стираемое постоянное запоминающее устройство) — это энергонезависимая память, используемая для длительного хранения. Он не участвует в выполнении основной программы. Он используется для хранения конфигурации системы и параметров устройства, которые продолжают работать при сбросе процессора приложений. EEPROM поставляется с ограниченным циклом записи до 100000, в то время как циклы чтения не ограничены.При использовании EEPROM напишите минимум инструкций в соответствии с требованиями, чтобы вы могли использовать эту память в течение более длительного времени.

5. Прерывание

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

6. Модули аналогового и цифрового ввода / вывода. Модули цифрового ввода / вывода

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

7. Таймер / счетчик

Таймеры используются для расчета внутреннего сигнала в контроллере. Atmega16 поставляется с двумя 8-битными таймерами и одним 16-битным таймером. Все эти таймеры работают как счетчики, когда они оптимизированы для внешних сигналов.

8. Сторожевой таймер

Сторожевой таймер — замечательное дополнение к этому контроллеру, которое используется для генерации прерывания и сброса таймера.Он поставляется с отдельным источником CLK 128 кГц.

9. Последовательная связь

Atmega16 поставляется с модулями USART и SPI, которые используются для развития последовательной связи с внешними устройствами.

Распиновка Atmega16

На следующем рисунке показана схема контактов микроконтроллера AVR Atmega16.
  • Atmega16 предпочтительнее других микроконтроллеров, таких как Atmel 8051, потому что он обладает гораздо более быстрой способностью выполнять инструкции и состоит из модифицированного процессора RISC.
  • Он имеет встроенную флэш-память с функциями загрузчика.Он имеет встроенный 10-битный АЦП, SPI, PWM и EEPROM.

Выводы Описание Atmega16

Atmega16 поставляется с 40 выводами, каждый из которых используется для выполнения определенной задачи. Всего имеется 32 контакта ввода / вывода и четыре порта. Каждый порт состоит из 8 контактов ввода / вывода.
  • ПОРТА = 8 контактов (контакты 33-40)
  • PORTB = 8 контактов (контакты 1-8)
  • PORTC = 8 контактов (контакты 22-29)
  • PORTD = 8 контактов (контакты 14-21)
Ниже приведены основные функции, связанные с контактами. ПОРТА. Пины с 33 по 40 подпадают под PORTA. Он действует как аналоговый вход для аналого-цифрового преобразователя. Однако при отсутствии аналого-цифрового преобразователя PORTA используется как 8-битный двунаправленный порт ввода-вывода. Поставляется с внутренними подтягивающими резисторами. ПОРТБ. Контакты с 1 по 8 принадлежат PORTB. Это двунаправленные контакты ввода-вывода. Этот порт также состоит из внутренних подтягивающих резисторов. ПОРТК. PORTC — это двунаправленный порт ввода-вывода, состоящий из 8 контактов. Пин с 22 по 29 принадлежит этому порту. Как и другие порты, он оснащен внутренними подтягивающими резисторами. ПОРТД. Пин с 14 по 21 принадлежит этому порту. Это двунаправленный порт, в котором каждый вывод может использоваться как входной или выходной. Однако с этим портом связаны дополнительные функции, такие как прерывания, последовательная связь, таймер и ШИМ. Сброс. Pin9 является активным контактом сброса низкого уровня. Импульс низкого уровня, длина которого превышает минимальную, приведет к сбросу. Короткие импульсы вряд ли приведут к сбросу. VCC. Pin10 — это вывод питания для этого контроллера. Для приведения этого контроллера в рабочее состояние требуется источник питания 5 В. GND. Pin11 — это контакт заземления. AREF. Pin32 — это аналоговый опорный вывод, который в основном используется для аналого-цифрового преобразователя. AVCC. Pin30 — это AVCC, который является выводом напряжения питания для PORTA и ADC. Он подключен к VCC через фильтр нижних частот в присутствии АЦП. Однако при отсутствии АЦП AVCC подключается к VCC извне. Выводы 12 и 13. К этим выводам подключен кварцевый генератор. Atmega16 работает на внутренней частоте 1 МГц; Генератор добавлен для генерации высоких тактовых импульсов и частоты.

Приложения Контроллеры

AVR могут использоваться в широком спектре приложений, где требуется автоматизация. Ниже приведены основные приложения Atmega16.
  • Медицинское оборудование
  • Домашняя автоматизация
  • Встроенные системы
  • Проекты Arduino
  • Используется в автомобилях и промышленной автоматизации
  • Бытовая техника и системы безопасности
  • Устройства контроля температуры и давления
Это все на сегодня. Надеюсь, у вас достаточно информации об Atmega16.Если вы не уверены или у вас есть какие-либо вопросы, вы можете связаться со мной в разделе комментариев ниже. Я хотел бы помочь вам чем могу. Не стесняйтесь держать нас в курсе ваших ценных предложений и отзывов. Они помогают нам предоставлять вам качественный контент. Спасибо, что прочитали статью.

ATmega16 Распиновка микроконтроллера, программирование, особенности, приложения

ATMega16 — один из самых дешевых и наиболее часто используемых микроконтроллеров благодаря множеству контактов и особенностям. Он наиболее близок к ATmega328P, но меньше по объему памяти и больше по контактам.ATMEL разработала ATMega16 с использованием процессора RSIC и 8-битной технологии CMOS, которая помогает ему работать с другими устройствами TTL / CMOS, потребляя меньше энергии. Его внутренняя структура позволяет разработчику использовать спящий режим, методы сравнения мощности и производительности, чтобы использовать его эффективно, потребляя меньше энергии. Микроконтроллер поставляется в пакете, и их контакты в разных корпусах различаются.

Введение в микроконтроллер ATmega16

AVR ATmega16 — это маломощный 8-битный CMOS-микроконтроллер, основанный на архитектуре RISC, улучшенной AVR.Пропускная способность AVR ATmega16 составляет около 1 MIPS на МГц при использовании одного тактового сигнала на инструкцию, что позволяет разработчику системы оптимизировать энергопотребление в зависимости от скорости обработки. AVR имеет 32 рабочих регистра общего назначения и богатый набор команд. Они напрямую подключены к ALU и позволяют получить доступ к двум независимым регистрам в одной инструкции, выполняемой за один такт. Начало работы с микроконтроллером Avr. Учебное пособие поможет вам понять примеры в реальном времени. Atmel Studio 6 используется для написания кода c и генерации шестнадцатеричного файла.

Схема расположения выводов микроконтроллера

ATmega16

Этот раздел содержит информацию о конфигурации контактов , и пошаговую информацию о каждом контакте GPIO.

Питание: Каждому микроконтроллеру требуется питание для работы, а ATMega16 имеет три контакта питания, один — для входа питания, а два остальных — для заземления, они внутренне связаны друг с другом.Эти контакты в микроконтроллере:

  • VCC — контакт 10
  • GND — Pin11, Pin31

Осциллятор: ATMega16 имеет внутренний сменный осциллятор на 8 МГц, но для увеличения тактовой частоты будет использоваться внешний осциллятор на выводах осциллятора микроконтроллера, которые указаны ниже:

  • XTAL2 — GPIO12
  • XTAL1 — GPIO13

Цифровой ввод / вывод: Ввод и вывод — это требование каждого устройства, и микроконтроллеру эти функции необходимы для связи с внешними устройствами.В ATMega16 есть четыре порта (A, B, C и D), которые имеют в общей сложности 32 входа / выхода. Все эти контакты можно использовать для любой функции управления вводом / выводом с помощью внешних периферийных устройств. Эти контакты в ATMega16 приведены ниже:

.
  • PA0 — GPIO40
  • PA1 — GPIO39
  • PA2 — GPIO38
  • PA3 — GPIO37
  • PA4 — GPIO36
  • PA5 — GPIO35
  • PA6 — GPIO34
  • PA7 — GPIO33
  • PB0 — GPIO1
  • PB1 — GPIO2
  • PB2 — GPIO3
  • PB3 — GPIO4
  • PB4 — GPIO5
  • PB5 — GPIO6
  • PB6 — GPIO7
  • PB7 — GPIO8
  • PC0 — GPIO22
  • ПК1 — GPIO23
  • ПК2 — GPIO24
  • PC3 — GPIO25
  • PC4 — GPIO26
  • PC5 — GPIO27
  • PC6 — GPIO28
  • PC7 — GPIO29
  • PD0 — GPIO14
  • PD1 — GPIO15
  • PD2 — GPIO16
  • PD3 — GPIO17
  • PD4 — GPIO18
  • PD5 — GPIO19
  • PD6 — GPIO20
  • PD7 — GPIO21

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

  • INT0 — GPIO16
  • ИНТ1 — GPIO17
  • ИНТ2 — GPIO3

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

.
  • TX (выход) — GPIO15
  • RX (вход) — GPIO14
  • XCK (тактовый ввод / вывод) — GPIO1

SPI: Протокол SPI — один из лучших протоколов последовательной связи для нескольких модулей.Его можно использовать в случае нескольких периферийных устройств для эффективного взаимодействия с микроконтроллером. Коммуникационные провода состоят из трех проводов, два для данных и один для часов, но у него также есть третий провод, который используется для выбора устройства. Вывод выбора устройства известен как вывод выбора ведомого устройства и предопределен в микроконтроллере, но любой выходной вывод может быть сделан в качестве вывода ведомого устройства выбора путем программирования. Протокол SPI используется не только для связи, но также может использоваться для программирования микроконтроллера.Все выводы SPI ATMega16:

  • SS ’- GPIO5
  • MOSI — GPIO6
  • MISO — GPIO7
  • SCK — GPIO8

I 2 C: Некоторые датчики и сервоприводы поставляются с другим протоколом последовательной связи, который называется I 2 C. Для связи с этими периферийными устройствами ATMega16 также предоставляет интерфейс контактов I 2 C. Один вывод используется для передачи данных, а другой — для часов. Оба контакта перечислены ниже:

  • SDA — GPIO23
  • SCL — GPIO22

JTAG: Эти контакты присутствуют на большей части платы для тестирования.Причина создания JTAG заключалась в том, чтобы протестировать устройство и печатную плату после того, как производитель завершит проектирование. JTAG подключен к внутреннему тестовому порту, но его также можно использовать для программирования микроконтроллера и даже загрузчика. Контакты JTAG в микроконтроллере:

  • TDI (тестовые данные в) — GPIO27
  • TDO (выход тестовых данных) — GPIO26
  • TMS (выбирается тестовый режим) — GPIO25
  • TCK (тестовые часы) — GPIO24

Таймер: Микроконтроллер имеет три внутренних таймера / счетчика.Они могут работать с использованием внутреннего генератора или они также могут работать с генераторами, используемыми микроконтроллером, но они также могут выполнять счетчик, используя свой собственный внешний генератор. Два таймера являются 8-битными и один из 16 контактов, только два таймера поддерживают работу контактов внешнего импульсного входа. Все таймеры и выводы генератора для таймеров приведены ниже:

  • T0 — GPIO1
  • Т1 — GPIO2
  • TOSC1 — GPIO28
  • TOSC2 — GPIO29

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

  • AN0 — GPIO3
  • AN1 — GPIO4

Захват / Сравнение / ШИМ: ШИМ становится основной функцией для большинства устройств управления их напряжением.В ATMega16 есть четыре вывода ШИМ, которые используют предделитель для генерации желаемого выходного сигнала. Эти контакты:

  • OC0 — GPIO4
  • OC1A — GPIO19
  • OC1B — GPIO18
  • OC2 — GPIO21

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

.

Аналого-цифровой преобразователь: АЦП является требованием каждого микроконтроллера из-за вывода нескольких модулей в виде аналогового сигнала, а ATMega16 предоставляет 8 аналого-цифровых каналов.В микроконтроллере все АЦП могут использоваться для аналогового преобразователя по отдельности, но первый аналоговый преобразователь потребует внешнего питания для работы на его выводах AVCC. Все эти пины приведены ниже:

  • AVCC — GPIO30
  • АЦП0 — GPIO33
  • АЦП1 — GPIO34
  • АЦП2 — GPIO35
  • АЦП3 — GPIO36
  • АЦП4 — GPIO37
  • АЦП5 — GPIO38
  • АЦП6 — GPIO39
  • АЦП7 — GPIO40

AREF: Максимальное значение аналогового сигнала определяется напряжениями питания, которые иногда влияют на выход из-за разных уровней напряжения аналогового устройства вывода.Чтобы решить эту проблему, будет использоваться аналоговый опорный вывод, на котором напряжения аналогового выходного устройства будут использоваться для измерения выходного сигнала в соответствии с заданными напряжениями. Вывод Aref в микроконтроллере указан ниже:

СБРОС: Для сброса микроконтроллера ATMega16 используется внешний или внутренний сброс. Внутренний сброс можно использовать через программирование, но для использования внешнего потребуется импульсный сигнал низкого уровня.

Характеристики микроконтроллера

ATmega16

AVR ATmega16 обеспечивает следующие функции:

Мы использовали Atmega16 из-за следующих характеристик:

  • Имеет 8-битный КМОП-контроллер малой мощности с AVR RISC
  • Его пропускная способность до 16MIPS на
  • Он имеет 32 регистра общего назначения, напрямую подключенных к
  • 16 Кбайт программируемая внутрисистемная флеш-память
  • 512 байт EEPROM, 1 Кбайт SRAM, JTAG
  • Три таймера / счетчика для сравнения
  • Внутренние и внешние прерывания
  • Последовательный программируемый протокол USART + I2C
ХАРАКТЕРИСТИКИ И ХАРАКТЕРИСТИКИ
Архитектура процессора 8-битная архитектура RISC
Частота процессора 16 МГц
Диапазон рабочего напряжения (4.5 В — 5,5 В)
ПОРТЫ GPIO 32 контакта ввода / вывода
Прерывания 3
Таймеры 3 (два 8-битных и один 16-битный таймер)
ШИМ 4 КПУ
МСП Один контакт ICP
USART Один канал USART
Последовательный интерфейс Один последовательный интерфейс (два проводных)
I2C Один канал I2C
SPI Один канал SPI
JTAG В наличии
Самостоятельное программирование В наличии
Сторожевой таймер В наличии
ЛВС Нет в наличии
CAN Нет в наличии
АЦП 8 каналов
Расширенный модуль USART 1 канал
SRAM 1 КБ
FLASH (память программ) 16 КБ
EEPROM 512 байт
Компаратор 1
Пакеты PDIP (40 контактов), TQFP (44 контакта) и MLF (44 контакта)

Порты GPIO для микроконтроллера ATmega16 и периферийные устройства

Порт A (PA7-PA0) Используется для аналоговых входов A / D.Но если аналого-цифровой преобразователь не включен, он также служит в качестве 8-битного двунаправленного порта для ввода и вывода. Контакты порта могут иметь внутренние подтягивающие резисторы (выбираемые для каждого бита).

Порт B (PB7-PB0) Порт B используется как 8-битный двунаправленный порт ввода / вывода с внутренними подтягивающими резисторами. Выходные буферы порта B обладают симметричными характеристиками привода, имеющими высокую пропускную способность как приемника, так и источника. При работе в качестве входных контактов контакты порта B; если тянуть внешне низко; будет источником тока, если активированы подтягивающие резисторы.

Порт C (PC7-PC0) Особенностью порта C является интерфейс JTAG. Если интерфейс JTAG включен, подтягивающие резисторы на контактах PC5 (TDI), PC3 (TMS) и PC2 (TCK) будут активированы, даже если произойдет сброс. Наряду с этим порт C может также использоваться как 8-битный двунаправленный порт ввода / вывода, имеющий внутренние подтягивающие резисторы.

Порт D (PD7-PD0) Порт D выполняет функции различных специальных функций ATmega16, таких как ввод прерываний, вывод таймера / счетчика и UART.В дополнение к этому порт D используется как 8-битный двунаправленный порт ввода / вывода, имеющий внутренние подтягивающие резисторы.

ИСТОЧНИКИ ЧАСОВ для микроконтроллера

ATmega16 имеет следующие параметры источника синхронизации, выбираемые битами Flash Fuse, как показано ниже. Тактовая частота от выбранного источника вводится в тактовый генератор AVR и направляется в соответствующие модули. В устройстве вариант синхронизации для комбинации внешнего кристалла или керамического резонатора для бит составляет 1111 или 1010. Для внешнего низкочастотного кристалла это 1001, а для внешнего RC-генератора — 1000 или 0101.Откалиброванный внутренний RC-генератор 0100 или 0001, а для внешних часов — 0000. Бит «1» означает незапрограммированный, а «0» означает запрограммированный.

Модуль USART микроконтроллера

Основной функцией микроконтроллера является USART, используемый для последовательной связи между контроллером и модемом GSM. Универсальный синхронный и асинхронный последовательный приемник и передатчик (USART) представляет собой очень гибкое устройство последовательной связи. Поддерживаются общие скорости передачи данных: 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 38400, 57600, 115200.В нашем проекте мы используем 9600. Аппаратные элементы последовательного USART включают:

  • Генератор тактовых импульсов USART для обеспечения источника тактовых импульсов и установки скорости передачи данных с помощью UBRR
  • Передатчик USART для отправки символа через вывод TxD и обработки кадра старт / стоп бит, бит четности, сдвиг
  • Приемник
  • USART для приема символа через вывод RxD и выполняет операцию, обратную
  • Регистры
  • USART для настройки управления и мониторинга последовательного порта

Регистры скорости передачи данных USART состоят из двух регистров, UBRRH и UBRRL, т.е.е. всего 16 бит. Регистр UBRRH имеет то же расположение ввода-вывода, что и регистр UCSRC. Для обслуживания этого бита используется 15-й бит (URSEL), т.е. выбор регистра. Этот бит выбирает между доступом к UBRRH или к регистру UCSRC. При чтении UBRRH он читается как ноль. URSEL должен быть равен нулю при записи UBRRH. Бит 14:12 — зарезервированные биты для использования в будущем. Для совместимости с будущими устройствами эти биты должны быть записаны в ноль при записи UBRRH. Биты 11-0 содержат скорость передачи USART. UBRRH содержит четыре старших бита, а UBRRL содержит 8 младших битов скорости передачи USART.Текущие передачи передатчика и приемника будут повреждены, если скорость передачи будет изменена. Запись UBRRL вызовет немедленное обновление предделителя скорости передачи.

Регистры управления и состояния USART состоит из трех регистров; UCSRA, UCSRB и UCSRC; и удерживать флаги и биты управления для USART. UCSRA содержит следующие флаги: RXC (завершение приема USART), TXC (завершение передачи USART), UDRE (пустой регистр данных USART), FE (ошибка кадра), DOR (переполнение данных), PE (ошибка четности), MPCM (многопроцессорность). Режим связи) и управляющий бит U2X (удвоение скорости передачи USART).UCSRB содержит следующие управляющие биты: RXCIE (разрешение прерывания при завершении приема), TXCIE (разрешение прерывания при завершении передачи), UDRIE (разрешение прерывания при пустом регистре данных USART), RXEN (включение приемника), TXEN (включение передатчика), UCSZ2 (размер символа), RXB8 (бит данных приема 8) и TXB8 (бит данных передачи 8). UCSRC содержит следующие управляющие биты: URSEL (выбор регистра), UPM1: 0 (режим четности), USBS (выбор стопового бита), UCSZ1: 0 (размер символа) и UCPOL (тактовая полярность).

Регистр данных USART — это буфер для символов, отправленных или полученных через последовательный порт.Чтобы начать отправку символа, запишите его в UDR. Затем, чтобы проверить полученный символ, прочтите его из UDR. Основными задачами последовательного USART являются инициализация последовательного порта, отправка символа, получение символа и отправка / получение форматированных строк. Инициализация последовательного порта включает в себя настройку параметров связи USART (бит данных, стоповый бит и бит четности), включение передатчика и приемника, настройку USART для асинхронного режима и установку скорости передачи. Для отправки символа флаг UDRE был установлен в 1, а затем записать символ в регистр UDR для передачи.Для приема символа флаг RXC был установлен в 1 и затем считывался принятый символ из регистра UDR.

Блок-схема ATMega16

Блок-схема ATMega16 приведена ниже:

Приложения
  • Микроконтроллер, используемый в коммерческих продуктах.
  • Он совместим с мультисенсорными устройствами, поскольку большинство контактов выполняет только одну операцию.
  • Интеллектуальные промышленные машины также используют ATMega16 из-за его дешевизны и функциональности.
  • Для расчета частоты и рабочего цикла внешнего устройства используется ATMega16.

2D Габаритная диаграмма

Это двухмерная диаграмма физических размеров для DIP-пакета.

ATMega16 AVR Development Board для студентов и любителей — Поделиться проектом

ATMega16 AVR Development Board для студентов и любителей

Overview

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

Features

Я разместил много блоков, содержащих множество компонентов, что упростило создание прототипов.

  1. Источник питания
  2. Основные части MCU
  3. RS-232
  4. Цифровой вход и выход
  5. Внешние прерывания
  6. Светодиодный дисплей
  7. ЖК-дисплей
  8. ЖК-дисплей
  9. Аналоговые входы Два
  10. Периферийный интерфейс
  11. Проводной интерфейс

Блок питания

Блок питания питается от преобразователя постоянного тока в постоянный ток напряжением +12 В.Это входное напряжение будет преобразовано в выходы +5 В и + 3,3 В. Выход + 5V питает микроконтроллер и другие бортовые устройства. По желанию, выход + 3,3 В подается на другие устройства + 3,3 В за пределами платы.

Основные части MCU

Тактовая частота с тактовой частотой 16 МГц припаяна к MCU, что обеспечивает скорость выполнения 16MIPS. Схема сброса уже включена. Кнопка сброса запускает сигнал сброса всякий раз, когда ее нажимает пользователь. Разъем ISP позволяет загружать программу в микроконтроллер.Это 10-контактный разъем IDC, совместимый с USBasp.

RS-232

Традиционный порт связи RS-232 сегодня может стать очень классическим. Однако я все еще использую его из-за большого количества микросхем драйвера MAX232 на моем складе.

Цифровой вход и выход

PORTA выбран как порт цифрового входа. Вход изменяется путем включения и выключения подключенного DIP-переключателя на плате. PORTB передает свои цифровые данные на светоизлучающие диоды, пересекая DIP-переключатель.

Внешние прерывания

Внешние прерывания ATMega16 — это INT0, INT1 и INT2. Три кнопки ввода вызывают прерывание соответственно.

Светодиодный дисплей

Светодиодный дисплей представляет собой шестиразрядный мультиплексированный дисплей. Цифры являются обычным катодным типом, зеленого цвета и размером 0,4 дюйма. PORTB отображает сегменты, а PORTC управляет цифрами.

ЖК-дисплей

ЖК-дисплей 16×2 HD44780, смонтированный на этой плате.Он управляется PORTC в режиме 4-битных данных.

Аналоговые входы

Аналоговый вход подается от двух аналоговых входных устройств, POT и аналогового датчика температуры LM35DZ.

Последовательный периферийный интерфейс

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

Двухпроводной интерфейс

Двухпроводной интерфейс (TWI) Протокол связи позволяет осуществлять обмен данными между главным MCU и его ведомым устройством по двум проводам на одной шине.Подчиненными устройствами TWI здесь являются DS1307 RTC и AT24C16 EEPROM.

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

Atmega 16/32 Совет по развитию v1.0

Введение

Этот проект направлен на создание нашей собственной платы разработки Atmega 16/32, которую можно использовать в наших учебных и других проектах. Этот проект / Dev Board совместим с Professional Atmel Studio. Основное внимание в проекте уделяется использованию дешевых и легкодоступных компонентов для создания и запуска платы разработки с микроконтроллером.

Схема печатной платы платы разработки Atmega 16-32

Необходимое условие

Для этого проекта хорошо иметь базовые знания в области проектирования печатных плат и пайки компонентов. Это не очень сложный проект. Базовое понимание электроники также полезно для идентификации компонентов и их правильной сборки.

Спецификация оборудования

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

Спецификация программного обеспечения

Описание оборудования

AVR USBasp

USBasp — это встроенный USB-программатор для контроллеров Atmel AVR. Он просто состоит из ATmega88 или ATmega8 и пары пассивных компонентов. Программатор использует USB-драйвер только для прошивки, специальный USB-контроллер не используется. USBasp — один из самых дешевых и лучших программаторов для программирования 8-битных устройств AVR. Это также сэкономит байты флэш-памяти, которую использует загрузчик.

Атмега 16/32

Atmega 16 — это 40-контактный 8-разрядный микроконтроллер 16MIPS. Первоначально он был разработан и изготовлен компанией Atmel, но теперь он производится Microchip. Atmega 16 имеет 16 Кбайт памяти, тогда как Atmega 32 имеет 32 Кбайт памяти. Это очень низкая стоимость и высокая производительность, поэтому он подходит как для хобби, так и для профессионального использования.

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

Орел
канадских долларов

EAGLE — это приложение для автоматизации проектирования электроники (EDA) с функциями схематического вывода, разводки печатных плат (PCB), автоматического маршрутизатора и автоматизированного производства (CAM).EAGLE и разработан CadSoft Computer GmbH, позже в 2016 году он был приобретен Autodesk Inc.

KiCad

KiCad (произносится «Key-CAD») — это бесплатный программный пакет для автоматизации электронного проектирования (EDA). Это облегчает разработку схем электронных схем и их преобразование в конструкции печатных плат. Он имеет интегрированную среду для создания схем и проектирования компоновки печатной платы, а также содержит инструменты в пакете для создания ведомости материалов, иллюстраций, файлов Gerber и трехмерных видов печатной платы и ее компонентов.

Атмель Студия

Atmel Studio 7 — это интегрированная платформа разработки (IDP) для разработки и отладки всех приложений микроконтроллеров AVR®. Простая в использовании среда Atmel Studio 7 IDP для написания, сборки и отладки встроенных приложений, написанных на C / C ++ или ассемблерном коде. Он также подключает и поддерживает Arduino, USBasp и многие другие программаторы и отладчики. Более того, это официальная платформа разработки от Atmel / Microchip, которая используется профессионалами, поэтому мы будем использовать этот IDP.

Схема

Приведенная ниже схема проста и не содержит каких-либо сложных схем. Сначала схема была разработана в Eagle CAD, а затем была импортирована в KiCad. Оба файла доступны для скачивания в конце страницы. Схема разделена на два основных раздела, один с питанием, а другой с микроконтроллером.

В силовой части используется стабилизатор напряжения LDO 7805. Он обеспечивает стабильное напряжение 5 В для микроконтроллера. Рекомендуемый вход от 7 до 9 В.

Секция микроконтроллера включает Atmega 16 или Atmega 32 со всеми подключениями портов и другой необходимой пассивной электроникой.

  • Блок питания платы разработки Atmega 16-32
  • Секция микроконтроллера платы разработки Atmega 16-32
Схема платы разработки Atmega 16/32

Схема расположения печатной платы

Аналогичные шаги выполняются для компоновки печатной платы, как и для схематического изображения. Первоначально использовался Eagle CAD, а затем файл был импортирован в KiCad.3D-вид / рендеринг печатной платы также доступен в KiCad.

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

Заключение

Этот конкретный проект позволяет узнать о конструкции печатной платы, выборе компонентов, планировании затрат на продукт и многом другом. Лучшее в этом проекте — то, что он поощряет культуру DIY и Maker, что само по себе удивительно.Я призываю всех заняться этим проектом и создать свои собственные Доски развития для своих проектов.

Объем улучшений

Я упомянул этот проект как v1.0, так как в нем есть много вещей, которые нужно улучшить. Такие вещи, как улучшение форм-фактора для поддержки популярных модулей, поддержка USB, дизайн SMD и т. Д.

Скачать

Спасибо, что прочитали этот проект, я высоко ценю ваше время и усилия.

Дизайн программы о светодиодных цифровых часах на базе микроконтроллера Atmega16 и DS1302

[1] Atmega16 / Atmega16L Datasheet: 8-битный AVR с 8 Кбайт внутрисистемной программируемой флеш-памятью [M / OL].[2010-06-28]. http: / www. icpdf. com / Pdfview. asp? id = 1969759_548476.

[2] Корпорация Атмель. Продукт Atmega16 [EB / OL]. [2013-11-10].http: / www. Атмель. com / products.

[3] DS1302 Лист данных: DS1302 Микросхема хронометража постоянной подзарядки [M / OL]. [2013-10-10] http: / www.icpdf. com / PdfView. asp? id = 5727106_661912.

[4] ChaoMa. Системы со встроенными микросхемами, основанные на принципах и практическом применении AVR [M].Издательство Университета Цинхуа, 2007. 10.

[5] Ричард Барнетт, Ларри Окулл, Сара Кокс. Перевод JunJiezhou. Встроенное программирование на C и Atmel AVR.[M]. Издательство Университета Цинхуа, 2003. 9.

[6] RunJingzhou, LiNazhang. Проектирование и моделирование схем и микроконтроллеров PROTEUS [M].Пекинский университет аэронавтики и астронавтики, 2006. 5.

.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *