Поиск по этому блогу

11 февр. 2014 г.

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

Вот с чего собственно и нужно начинать — мигание светодиодом! Собрав программатор его конечноже хочется сразу опробовать! Предлагаю поморгать светодиодом.

Что нужно?
Микроконтроллер Atmega8
Программа (компилятор) Bascom AVR
Программатор PonyProg
Программа PonyProg
светодиод
резистор на 200 Ом
Паяльник
Com порт на компьютере
Стабилизированный источник питания на 5 Вольт!!
Собираем следующую схему 
и подключаем к ней программатор PonyProg
В Bascom AVR пишем следующий код
$regfile = «m8def.dat» 'говорим компилятору что у нас мега8
$crystal = 1000000
Config Portb.1 = Output ' конфигурируем порт B.1 как выход
Do ' начало бесконечного цикла
Set Portb.1 'подключаем Portb.1 к положительному выводу источника питания
Waitms 500 'ждем пол секунды
Reset Portb.1 'подключаем Portb.1 к отрицательному выводу источника питания
Waitms 500 'ждем пол секунды
Loop ' конец бесконечного цикла
и нажимаем на кнопку (как показано на рисунке)

После чего возникнет вопрос куда сохранить проект. Выберем какуюнибудь папку и все сохраним туда. К примеру «С:\AVR\Светодиод\»

открываем PonyProg и в нем открываем скомпилированный файл (из той папки, куда сохранили проект «С:\AVR\Светодиод\», если файл не отображается то выбираем тип файла *.hex)
(при первом запуске понипрог просит калибровки. Для этого заходим в Setup — Calibration и нажимаем Yes)

Если все сделано правильно то нужно выброть тип микроконтроллера AVRmicro и Atmega8
После чего нажать кнопку 
Через пол минуты программа будет в процессоре и светодиод радостно заморгает!!!

9 февр. 2014 г.

Россияне нашли способ пить водку по Сети


Иллюстрация с сайта e-generator.ru
Россиянин Сергей Михеев, эксперт компании E-Generator, изобрел способ распития алкогольных напитков по интернету. Превращение одиночного употребления, например водки, в настоящее застолье с большим количеством участников станет возможно благодаря придуманной Михеевым специальной USB-рюмке.
Суть ноу-хау Михеева заключается в том, что революционная USB-рюмка будет определять, сколько алкоголя в ней находится и будет сообщать об этом другим участникам процесса поглощения спиртных напитков он-лайн. По мнению изобретателя, реализация этой идеи позволит любому пользователю Сети, которому не удалось найти реальных собутыльников, устроить пьянку в интернете.
В случае, если разработчик согласится предоставить Ленте.ру образцы рюмок для испытаний, наше издание обязательно оповестит читателей о его результатах.

5 февр. 2014 г.

Превращаем китайский программатор USBISP в USBASP

Всё началось с того, что купил себе на tixer.ru вот такой, якобы usbasp программатор:

 
Но тут всплыла одна особенность этого девайса, он работает как HID устройство, что есть не совсем хорошо.

2 февр. 2014 г.

Работа с дисплеем 16x2 на контроллере HD44780 в Bascom-AVR

Жидкокристаллические дисплеи на контроллере HD44780 (а также совместимом с ним KS0066) очень распространены благодаря простому методу работы с ними, а так же небольшой цене. В зависимости от исполнения дисплея, они позволяют выводить от 8-и до 40-ка символов в каждой строке, строк может быть одна, две или четыре. Чаще всего встречаются 8*2 (восемь символов*две строки), 16*2 и 20*4.  


 Для примера рассмотрим распиновку индикатора 16*2 (у всех дисплеев на контроллере HD44780 она похожа)

 
У каждого дисплея на контроллере HD44780 для подключения имеется 14 выводов + 2 вывода для подсветки (если она имеется):

  1. Земля, GND
  2. Напряжение питания, Vcc (+5V)
  3. Настройка контрастности, Vo
  4. Выбор регистра, R/S
  5. Чтение/запись, R/W
  6. Сигнал разрешения чтения/записи, E
  7. Bit 0, D0 
  8. Bit 1, D1
  9. Bit 2, D2
  10. Bit 3, D3
  11. Bit 4, D4 
  12. Bit 5, D5
  13. Bit 6, D6
  14. Bit 7, D7 
  15. Питание подсветки для дисплеев с подсветкой, LED +
  16. Питание подсветки для дисплеев с подсветкой, LED -

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

В качестве примера будем использовать дисплей 20х4, подключенный к микроконтроллеру ATmega8 по 4х битному интерфейсу по схеме ниже


 Дисплей требует для питания 5 вольт, делителем на резисторе R1 настраивается контрастность отображаемых символов, вывод R/W подключается к земле (т.е. выбрана постоянная запись в дисплей). Подключать оставшиеся выводы можно к любым свободным ножкам микроконтроллера. Конфигурация ножек для подключения дисплея у микроконтроллера ATmega8 будет выглядеть следующим образом:

$regfile = "m8def.dat"                        'выбранный тип микроконтроллера
$crystal = 1000000                            'частота работы 1 МГц
Config Lcd = 20 * 4                           'указываем какой у нас дисплей

'и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=PortB.3, Db5=PortB.2, Db6=PortB.1, Db7=PortB.0,E=PortB.4,Rs=PortB.5


А дальше уже можно выводить информацию на дисплей: буквы, цифры, специальные символы, а если извернуться и псевдографику. Для вывода данных на дисплей нужно знать несколько команд: 
CLS - очистка дисплея
LCD - вывести данные на дисплей (пример: Lcd "Hello world" выведет надпись Hello world)
Locate - установка места на индикаторе с которого начнется выводится текст (пример: Locate 1,5 установит курсор на 5-е знакоместо первой строчки и текст выводимый командой LCD будет начинаться отсюда)
CURSOR ON / OFF / BLINK / NOBLINK - включает или отключает отображение и мигание курсора, по умолчанию он включен (пример: отключим курсор командой Cursor Off)

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

$regfile = "m8def.dat"      'выбранный тип микроконтроллера
$crystal = 1000000          'частота работы 1 МГц
Config Lcd = 20 * 4         'указываем какой у нас дисплей
'и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5

Cursor Off                  'выключим отображение курсора
Cls                         'очистим дисплей

Lcd "LCD 20*4 HD44780"      'выводим текст в первой строке
Locate 2 , 8                'переводим курсор на вторую строку, восьмое знакоместо
Lcd "AVRproject.ru"         'выводим текст

End


в результате на дисплее получим следующее:





 Также в Bascom-AVR есть еще несколько дополнительных команд для работы с дисплеями:

UPPERLINE - возвращает курсор на самую верхнюю строчку дисплея.
LOWERLINE - перевод курсора на вторую строку
THIRDLINE - перевод курсора на третью строку
FOURTHLINE - перевод курсора на четвертую строку 
HOME - также возвращает курсор на верхнюю строчку, но в отличии от команды UPPERLINE эта команда может принимать дополнительные значения: если после нее поставить букву L, T или F то курсор переместится в начало строчки, название которой начинается с соответствующей буквы (пример:  для того чтобы переместить курсор в начало третьей строки, нужно написать команду HOME T )


пример кода для вывода информации на дисплей с использованием этих команд:

$regfile = "m8def.dat"      'выбранный тип микроконтроллера
$crystal = 1000000          'частота работы 1 МГц

Config Lcd = 20 * 4         'указываем какой у нас дисплей
'и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5

Cursor Off                  'выключим отображение курсора
Cls                         'очистим дисплей

Lcd "*** HD44780  LCD ***"  'выводим текст в первой строке
Lowerline                   'переходим на вторую строку
Lcd "Line number 2"         'выводим текст
Thirdline                   'переходим на третью строку
Lcd "AaBbCcDdEeFfGgHfIiJj"  'выводим на третьей строке
Fourthline                  'переходим на четвертую строку
Lcd "1234567890"            'печатаем на четвертой строчке

End                         'конец программы







SHIFTLCD LEFT / RIGHT - сдвигает текст в строке на которой находится курсор на одну позицию влево или вправо. 
SHIFTCURSOR LEFT / RIGHT - сдвигает курсор на одну позицию влево или вправо 

и пример того как использовать сдвиг текста:

$regfile = "m8def.dat"    'выбранный тип микроконтроллера
$crystal = 1000000        'частота работы 1 МГц

Dim A As Byte             'переменная для организации цикла

Config Lcd = 20 * 4       'указываем какой у нас дисплей
'и конфигурируем ножки для подключения
Config Lcdpin=Pin,Db4=Portb.3, Db5=Portb.2, Db6=Portb.1, Db7=Portb.0,E=Portb.4,Rs=Portb.5

Cursor Off                'выключим отображение курсора
Cls                       'очистим дисплей

Locate 1 , 11             'устанавливаем курсор на первой строке, десятом знакоместе
Lcd "Bascom-AVR"          'выведем текст

'цикл сдвига влево
For A = 1 To 10           'повторяем этот цикл пока переменная А не достигнет значения 10
 Shiftlcd Left            'сдвинем текст влево
 Waitms 300               'задержка 300 миллисекунд
Next A                    'увеличиваем значение переменной А на 1

'цикл сдвига вправо
For A = 1 To 10           'повторяем цикл пока переменная А не достигнет значения 10
 Shiftlcd Right           'теперь сдвинем текст вправо
 Waitms 300               'задержка 300 миллисекунд
Next A                    'увеличиваем значение переменной А на 1

'продолжаем выполнение  программы
Wait 1                    'задержка 1 секунда

Home F                    'устанавливаем курсор на нижнюю строчку

Lcd "END PROGRAM"         'и выводим надпись

End                       'конец программы




1 февр. 2014 г.

AVR отладочный конструктор

Эмбеддерством я «случайно заразился» благодаря моему увлечению авиасимуляторами. Первым собранным мною микроконтроллерным устройством был контроллер для самодельного джойстика. Спаять и прошить его было не сложно, так как особых знаний это не требовало. И возможно, на этом мое эмбеддерство и закончилось бы, но людьми движут желания. Со временем я пожелал изменить конфигурацию моего изделия и без модификации прошивки было уже не обойтись. Вот с этого все и началось. Совершенствуя свой джойстик я постепенно накапливал необходимые знания по AVR контроллерам и на определенном этапе понял, что это не так уж сложно и чертовки интересно. После родилось несколько замечательных идей, для реализации которых потребовался уже более капитальный подход. Одним из результатов такого подхода является отладочный конструктор, которому и посвящена эта статья.
Необходимость использования отладочных плат рано или поздно настигает каждого эмбеддера. Как бы не был хорош Протеус, но все нюансы реальных схем ему не повторить. Поэтому отладка в «железе» вполне обоснованная мера. Найти подходящую готовую плату не проблема, но все же я пошел по пути самостоятельной сборки подобного устройства. Кроме платы хотелось получить еще опыт разработки и сборки.
Сеть полна информацией о различных реализациях отладочных плат. Существует очень много готовых промышленных решений. Любительских хотя и меньше, но они не менее интересны. Анализируя каждое найденное мною решение, я пытался выделить из них все то, что было бы легко повторить. Вероятно, самым насыщенным источником информации для меня послужили отладочные платы и аксессуары от MikroElektronika  (http://www.mikroe.com). На сайте этого производителя есть возможность скачать описание и схему для каждого производимого ими отладочного компонента. Эти схемы мне очень помогли. Также мне очень понравилась их концепция применения плат аксессуаров (http://www.mikroe.com/eng/categories/view/11/accessory-boards). Так формировалось видение того, что хочу получить в результате.

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

Следующий шаг — плата питания. Я предполагал, что источники напряжения питания моего отладочного стенда могут быть различными, и поэтому была реализована плата, задача которой получать на вход либо постоянное, либо переменное напряжение то 7 до 18 вольт, а на выходе выдавать стабилизированные 5 вольт. Клемники и разъемы были использованы для различных способов подключения к плате. Схема платы проста и основана на стабилизаторе 7805. На случай легких перегревов стабилизатора предусмотрел небольшой радиатор.

Плата контроллера. Возможно самый сложный этап работ. Я тщательно выбирал контроллер, который бы позволил мне выполнить успешный старт в эмбеддерстве. По параметрам цена-доступность-возможности победу одержала ATmega8. Именно благодаря ей я и реализовал первую плату контроллера под корпус DIP28. Чтобы не усложнять плату двухсторонней печатью и не увеличивать количество монтажных перемычек, я разъемы портов вместе с цепями подтяжки выполнил на отдельных платках. Это очень мне облегчило разводку платы контроллера и для плат под другие типы корпусов я опять применю этот же подход. Распиновка разъемов портов аналогична той, что используется в платах от MikroElektronika, т.е. при желании я смогу использовать их аксессуары. Эти разъемы имеют 10 выводов (8 линий порта, питание, земля). Цепь подтяжки позволяет подтягивать выводы порта как к земле, так и к питанию. Часть схемы платы обеспечивает различные режимы работы тактового генератора. Возможно подключение кварцевого резонатора на оба вывода XTAL, либо только на один вывод XTAL от отдельного генератора на инверторах, либо без внешнего кварца, тогда выводы XTAL используются уже как выводы порта B. Каждый из этих режимов настраивается подключением платы резонатора в соответствующий разъем и комбинацией перемычек. Также схемой предусмотрены различные способы подачи опорного напряжения на АЦП контроллера. Разъем подключения для SPI-программатора имеет стандартную распиновку. Групповой джампер позволяет коммутировать SPI-выводы контроллера с разъемом порта. Порой это необходимо, если подключенная к порту схема мешает программированию. На плате присутствует выключатель и индикатор питания.


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


Соединительные провода. По типу разъемов они делятся на три вида: питание, UART, порты ввода-вывода. Принятый мною стандарт разъемов и их распиновка будет поддерживаться во всех платах конструктора.

Первая плата-аксессуар. Светодиодный индикатор состояния порта. Вот и сбылась мечта идиота, теперь можно светодиодиком помигать. Даже не одним.

Далее была клавиатура на 8 кнопок. Логичный ход работ. Хотелось быстро освоить не только элементарный вывод, но и элементарный ввод данных в контроллер. Переключателем выбираются активные кнопки. Джампером можно определить уровень для нажатой кнопки, либо 0, либо 1.

Матричная клавиатура на 16 кнопок. Ее я делал «за компанию» с 8-ми кнопочной. На тот момент в ней острой необходимости не было, но рано или поздно она потребовалась бы.

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

Далее очень захотелось «подружить» контроллер с ПК. Следующей была плата преобразователя UART — RS232. Схема типовая, на преобразователе уровней от фирмы MAXIM — MAX232CPE. Подключение контроллера к COM-порту очень расширяет круг прикладных задач.

Так как RS232 постепенно исчезает уступая место USB, то вполне логичным было изготовление платы преобразователя UART — USB. Схема также типовая, на микросхеме FT232RL.

Еще один простой адаптер я собрал, чтобы реализовать на контроллере полноценное USB устройство. Существует свободная библиотека V-USB, которая позволяет программно обеспечить USB-интерфейс для контроллеров без аппаратной поддержки USB. Хотя эта библиотека реализует только низкоскоростной режим USB, но и этого вполне достаточно для многих прикладных задач. Адаптер выполняет приведение уровней ТТЛ к уровням USB. Схема адаптера соответствует одной из рекомендуемых для V-USB.

Символьный LCD индикатор. Нет смысла комментировать необходимость данного аксессуара. Частота использования подобного индикатора в микроконтроллерных схемах говорит сама за себя.

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

Часы реального времени. Аксессуар собран на основе микросхемы DS1307. Обмен данными ведется по шине I2C. Эта шина очень популярна и сборка данной платы стимулировала меня к изучению протокола I2C. Кроме тривиальных часов с календарем, применить этот узел можно в схемах работающих в привязке ко времени или дате. Плата разведена в соответствии с требованиями по помехозащищенности для соблюдения точности хода часов.

Датчик температуры. Я использовал цифровой датчик DS18B20. Отличный стимул для изучения еще одной популярной шины — 1-Wire.

ИК-приемник. Дистанционный контроль своих устройств — это очень распространенное требование среди эмбеддеров. ИК-управление самый доступный механизм.

Аналоговая часть считывателя RFID 125 кГц. Эта плата появилась в результате реализации одного из моих проектов. На ее основе я изучал и отрабатывал механизмы радиочастотной идентификации.


Если к одному порту необходимо подключить несколько плат аксессуаров, то для этого применяется плата расширения порта. Кроме двух стандартных разъемов эта плата имеет два штыревых разъема для произвольных подключений.
Плата расширения порта
Подключение платы расширения порта
В одном из моих проектов мне потребовалась клавиатура, которая бы работала по прерыванию. Для отладки данного проекта я изготовил еще одну клавиатуру-аксессуар. Эта клавиатура имеет вывод сигнала для внешнего прерывания контроллера. Для произвольного подключения этой клавиатуры используется не разъем, а цанговые контакты.
Расширенная клавиатура 8х1

На сегодняшний момент это вся комплектация моего конструктора. Но даже это позволяет успешно вести разработку многих интересных устройств. Развитие конструктора на этом не завершится. У меня готов список аксессуаров, которые следует еще дособрать: графический LCD индикатор, сенсорная панель, цифровой потенциометр, флеш-карта, Ethernet-адаптер, платы под другие модели контроллеров.


Мой способ реализации конструктора кому-то может показаться избыточным . Изготовление целой кучи плат требует больше времени и сил, чем изготовление одной большой отладочной платы, которая включала бы в себя всю вышеперечисленную периферию. Но подобное разделение помогло мне не увязнуть в процессе разработки и сборки конструктора. Реализуя небольшие по трудоемкости части, я на каждом шаге получал результат, который позволял мне далее продвинуться в изучении контроллеров и это очень стимулировало. Возможно, только благодаря такому итерационному подходу, мне, начинающему ембеддеру, удалось получить хороший опыт, знания и …….. отладочный конструктор для AVR.
На этом пока все ….
Архив с разводкой плат в Sprint Layout 5