AVR. Учебный Курс. Архитектура Программ

Автор DI HALT
Опубликовано 14 Янв 2010 
Рубрики: AVR. Учебный курс
Метки: , ,

Все учебные курсы по микроконтроллерам которые я встречал (в том числе, к сожалению, и мой ассемблерный, но я надеюсь это постепенно поправить) страдают одной и той же проблемой.
В курсе бросаются строить дом не заложив фундамент. Только показав на примере как мигнуть светодиодом, сразу же кидаются в периферию. Начинают осваивать ШИМ-ы, таймеры, подключать дисплеи и всякие термодатчики.
С одной стороны это понятно — хочется действа и результата мгновенно. С другой — рано или поздно такой подход упрется в тот факт, что программа, надстраиваемая без четкой идеологии, просто обрушится под своей сложностью. Сделав невозможным дальнейшее развитие.
Итогом становится либо рождение жутких программных уродцев, либо миллионы вопросов на форуме вида “а как бы мне все сделать одновременно, а то частоты контроллера уже на все не хватает”.

Самое интересное, что правильной организации программы учат программистов в ВУЗах, но вот только к микроконтроллеру народ обычно идет не от программирования, а от железа. А, как показала практика обучения в ВУЗе, электронщиков толковому программингу практически не обучают :( Приходится все додумывать самостоятельно.

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

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

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

А теперь подробно по каждому пункту: Читать полностью

Комментариев (103)

Робоконструктор Robo-PICA

Автор DI HALT
Опубликовано 10 июня 2009 
Рубрики: Робототехника
Метки: , ,

В Челябинском Элементе появилась прикольная вещь — робоконструктор Robo-PICA. Пользуясь моментом, пришел туда с фотиком и зафоткал все содержимое коробки, а потом выложил на всеобщее обозрение.

кликабельно — больший размер

Дальше будут в основном фотки с моим кратким описанием.
Читать полностью

Комментариев (42)

Параллельный Цифро Аналоговый Преобразователь по схеме R-2R

Автор DI HALT
Опубликовано 19 марта 2009 
Рубрики: Начинающим
Метки: , , ,

Порой надо выдать точный аналоговый сигнал, да еще с быстро менющийся. Например, функцию. Раньше я рассматривал как это можно сделать с помощью ШИМ, но у этого метода есть проблема — он очень медленный. В самом деле, чтобы получить один уровнь на ШИМ, нужно, по меньшей мере, 256 тиков таймера. А если надо развернуть функцию в которой 256 отсчетов? Да еще на каждый отсчет по 256 тиков? Это какая же должна быть частота процессора? Да еще надо учесть, что ШИМ требует интегрирующей цепочки с конденсатором. А значит для четкого установления уровня должно пройти еще несколько импульсов, что снижает скорость еще раза в три. Короче, получить что либо быстрей чем 50 ГЦ на ШИМ очень сложно. Я не говорю даже о том, что у ШИМ изза свойств емкостного заряда сильно плывет линейность, так что это приходится учитывать.
Читать полностью

Комментариев (65)

Третья программа. Выдача данных с АЦП на UART

Автор DI HALT
Опубликовано 14 Дек 2008 
Рубрики: AVR. Учебный курс
Метки: , , , , ,

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

Задача:
Получить напряжение с АЦП и отправить его по последовательному порту в комп. В компе полученный поток байт представить в виде графика.

Теоретическую часть я уже разобрал, осталось поставить эксперимент в реальном железе. Эксперимент будем ставить на ранее собранной отладочной плате. Хоть она и больше заточена на обкатку силового блока моего робота, но под наши задачи сгодится — на штыри выведены каналы ADC4 и ADC5, так что заюзаем их. Читать полностью

Комментариев (21)

AVR. Учебный Курс. Библиотека для LCD на базе HD44780

Автор DI HALT
Опубликовано 10 Окт 2008 
Рубрики: AVR. Учебный курс
Метки: , , , ,

Сел я и дописал свою библиотеку для LCD на базе HD44780.

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

Состав
Библиотека состоит из двух файлов LCD.asm и LCD_macro.inc для подключения по 8ми битной шине и LCD4.asm и LCD4_macro.inc для подключения по четырех битной шине данных. Используете тот вариант, по которому у вас подключен дисплей.

Подключение LCD к микроконтроллеру.
Порт данных использует биты 7…4 любого порта на 4 битном подключении, или весь порт целиком на 8ми разрядном
Порт управления использует 3 любых бита любого порта. Главное, чтобы они были на одном порту. Впрочем код можно и чуток подправить :)

Читать полностью

Комментариев (129)

Робот на контроллере PIC от SWG. Часть 2

Автор DI HALT
Опубликовано 01 Окт 2008 
Рубрики: Робототехника
Метки: , , ,

Предварительная версия схемы
Предварительная версия схемы
Тем временем, SWG продолжает совершенствовать своего робота. Структурно его конструкции похожа на моего робота — тоже раздельные специализированные контроллеры. Недавно он прислал мне схему контроллера датчиков/ИК буфферов. Короче глаза и прочие сенсоры. А также наброски кода для управления всем этим добром. Респект!

Хы, надо сказать я несколько отстаю в разработке :) Он уже за датчики взялся, а у меня пока только ходовая отлаживается… ничо ничо, вот щас с заказами разберусь и закажу себе УЗ сонары :)))) А там еще посмотрим кто первый в космос полетит :)

SWG:
Оперативную связь с ходовым контроллером планирую с использованием в обоих контроллерах линий портов B0, B1, с задействованием внешнего прерывания по B0. Кроме того, у контроллера буферов будет также выход на межмодульную шину I2C, для связи с центральным процессором, а иногда и с ходовым контроллером, (для несрочных операций, типа уточнения местоположения препятствия, диагностики исправности датчиков и т.д.) На всякий случай вывожу на разьем также неиспользуемые линии портов, в т.ч. и USART (на всякий случай, в первую очередь для отладки). В качестве датчиков столкновений пока нарисовал микрики, но ставить скорее всего буду все же оптопары, что лучше будет отрабатывать толчки с разных направлений, но потребует дополнительных резисторов для CD подсветки, и желательно управление ей. Свободные линии портов для этого еще есть. На всякий случай (для отладки, а также наглядности работы буфера, и облегчения настройки локаторов, на A4 хочу поставить сигнальный светодиод. (при подачи тока на него он светится разными цветами, переключая их по очереди).

Бонусом в архиве идет доработанная программа ходового контроллера:

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

Комментариев (41)

AVR. Учебный курс. Использование аналогового компаратора

Автор DI HALT
Опубликовано 13 Сен 2008 
Рубрики: AVR. Учебный курс
Метки: , , , , ,

Схема контроля напряжения
Схема контроля напряжения

Есть почти в каждой AVRке, такая полезная приблуда как аналоговый компаратор. Это уже почти стандартное устройство и встречается очень часто во множестве разных контроллеров. Даже в древнем, как говно мамонта, АТ89С2051 он уже есть. Штучка прикольная, позволяет сравнивать два аналоговых сигнала и выносить свой вердикт 0 первый больше второго, 1 второй больше первого.

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

Например, на входе у нас 8 вольт. Со стабилитрона, рассчитанного на 3.3 вольта, выходит всегда одно и то же напряжение — 3.3 вольта. А с симметричного резистивного делителя выходит половина напряжения то есть 4 вольта. 4 это больше чем 3.3, (3.3 - 4 = -0.7 результат меньше нуля) с компаратора выходит 0

Теперь если просядет батарейка и напряжение снизится до 6 вольт, то с делителя будет уже 3 вольта, а с опорного как было 3.3 так и осталось. Зато теперь на компараторе ситуация в корне поменялась - 3 меньше чем 3.3 (3.3 - 3 = 0.3 результат больше нуля) , а значит на выходе у него будет 1

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

Настройка компаратора в контроллере AVR ATMega8
Для других моделей AVR все очень и очень похоже, просто мне так удобней. Если будет затруднение спросишь в комментах.
Мега 8 имеет на борту компаратор, со входами AIN0(прямой вход) и AIN1(инверсный вход) Читать полностью

Комментариев (43)

Отладочный пульт

Автор DI HALT
Опубликовано 12 Сен 2008 
Рубрики: Новости
Метки: , , , , , , ,

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

Ну а чо, сказано сделано. Воткнул ATMega8535 — первая которая под руку подвернулась из многоногих. Вывел все что только можно наружу, присобачил небольшую клавиатурную матрицу 4х4 и LCD экранчик. Экранчик мелкий WH0802A 8х2 символа, но уж какой был. Других у нас в продаже не встречал, а под заказ везти лень. Да и, думаю, там и не надо больше.

А раз уж пошла такая пьянка, то до кучи вывел наружу пару каналов ШИМ, да пару входов АЦП. Ну и SPI заодно — гулять так гулять. Там же можно и Dallas 1-wire проткол организовать, приделать частотомер, индикатор сигнала, вольтмер и вообще можно много чего наворотить, было бы желание. Опять же, линий на вход/выход получается дофига, так что из нее можно сделать головной блок умного дома или контроллер чего нибудь.

Корпус взял халявный, PAC-TEC‘овский который намутил года два назад. Вот и пригодится коробочка :) Надо сказать, PAC-TEC делает просто изумительные коробки. Не чета тому говну, что продается в наших радиомагазинах. Не скрипят, не люфтят, крепко сбиты, ладно скроены и выглядят круто. Где бы их еще продавали у нас.

Пока только плату развел, еще некоторых деталей не хватает. На днях вытравлю плату, соберу и буду программировать. Вот тогда будет вам и примеры живого кода и подробное описание SPI, i2c, UART, клавиатура и LCD . Кстати, обратите внимание как легко матрицировать обычные тактовые кнопки. А все благодаря тому, что у них четыре попарно соединенных вывода.

Пока же, раз все еще в виде чертежа, набрасывайте в комменты свои идеи по поводу фич будущего девайса.

Комментариев (30)

Извращенский ШИМ из UART

Автор DI HALT
Опубликовано 07 Сен 2008 
Рубрики: AVR. Учебный курс
Метки: , , , ,

Пока писал статью про UART пришла в голову одна извращенная идея - на базе UART же можно организовать самый натуральный низкодискретный ШИМ!

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

Для тех кто не понял как, приведу числа которые надо будет непрерывно слать через UART:
два дополнительных значения мы получим за счет старт и стоп битов.

00000000 - 1/10
00000001 - 2/10
00000011 - 3/10
00000111 - 4/10
00001111 - 5/10
00011111 - 6/10
00111111 - 7/10
01111111 - 8/10
11111111 - 9/10

Да и частоты там можно получить нефиговые!
Красота!=)))))

Комментариев (18)

Связь микроконтроллера с компьютером через RS232

Автор DI HALT
Опубликовано 31 Авг 2008 
Рубрики: Готовые устройства
Метки: , , ,

Схема
Схема
Плата сверху
Плата сверху
Плата снизу
Плата снизу
В собранном виде
В собранном виде
Печатная плата. Тонер не смыт.
Печатная плата. Тонер не смыт.
Почти все микроконтроллеры имеют на борту последовательный порт - UART. Работает он по стандартному последовательному протоколу, а значит его можно без проблем подключить к компу на COM порт. Но есть тут одна проблема — дело в том, что комповый RS232 он за логические уровни принимает +/- 12 вольт, а UART работает на пятивольтовых уровнях. Как их совместить? Для этого существует несоколько вариантов схем преобразователей уровня, но самая популярная это все же на специальном преобразователе RS232-TTL. Это микросхема MAX232 и ее аналоги.
Практически каждая фирма делает свой преобразователь, так что тут сгодится и ST232, и ADM232, и HIN232. Схемка простая как три копейки - вход, выход, питание и обвязка из пяти конденсаторов. Конденсаторы обычно ставятся 1uF электролиты, но в некоторых модификациях ставится 0.1uF керамика. Я везде впаивал 0.1uF керамику и не парился :) Работает как часы.

Кстати, существует еще и MAX3232 это то же самое, но на выходе у него не 5вольт TTL, а 3.3 вольта TTL. Её используют для низковольтных контроллеров.

Я себе сделал один такой универсальный шнурочек, чтобы к контроллерам цепляться было удобно по UART. Для общей компактности всю схему запихал прям в разъем, благо у меня были ST232 в soic корпусе. Получилась платка не больше рублевой монеты. Так как под рукой не было мелких SMD конденсаторов, то пришлось напаять кондеры сверху, кто во что горазд. Главное работает, хоть и не очень красиво вышло.

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

После сборки проверяется просто:
Втыкается в разъем COM порта. Подается 5 вольт питания на схему, а затем замыкаешь Rx на Tx (у меня это зеленый и желтый провода).
Дальше открваешь любую терминалку, хоть Hyper Terminal, цепляешься к порту и начинаешь посылать байты, они должны тотчас возвращаться обратно. Если этого не произошло — проверяй схему, где то косяк.

Если работает, то дальше все просто. Тот провод который идет от ножки 9 микросхемы MAX232 это передающий вывод, его заводи на ногу RxD контроллера. А тот который с ножки 10 — принимающий, его смело сажай на вывод TxD контроллера.

Плата сделана была методом ЛУТ, в одном месте по моему недосмотру толщина просвета оказалась 0.05мм, протравилась, но со спайками, пришлось процарапывать. А в целом с первого раза ать и никаких проблем. Аж сразу захотелось сделать что нибудь маленькое маленькое, нафаршированное нафаршированное :)

Все, аппаратная часть для связи микроконтроллера с компом готова. Ждите следующего поста в котором я расскажу как конфигурировать и использовать UART в микроконтроллерах AVR. В будущем я буду через UART осуществлять отладочную связь с компом. Может быть даже ради этого соберу отдельный модуль с LCD экранчиком. Для отладки в железе. Посмотрим как попрет.

Печатная плата в формате Sprint Layout. Два варианта маленький и большой

Та же бодяга, но для работы через USB

Комментариев (116)

It’s a live!!! It’s a live!!!

Автор DI HALT
Опубликовано 22 Авг 2008 
Рубрики: Робототехника
Метки: , , ,

Так камрады, сварганил таки контроллер шасси. Пока он практически на 100% повторяет макетную плату. Оно и понятно, макетка делалась для отладки шасси. Теперь вместо унылых лампочек драйвер L293, питание от аккумулятора с DC-DC преобразователем 12->5 вольт. Вроде бы все работает, кроме одометров. Буду разбираться где косяк, когда все отлажу выложу схему, печатную плату и подробнейшее описание каждого элемента схемы. Ориентировочно, это будет сегодня вечером или завтра днем.

Пока же можете полюбоваться на работу монстра в деле. Прога из второго примера - едем до касания передними датчиками, потом сдаем назад на 30 оборотов редуктора. Правда не работает одометр поэтому спустя 30 оборотов колеса он не останавливается. Но это мелочи, поправлю. Заранее извиняюсь за отвратное качество видео. В таком формате пишет моя говномыльница.

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

Комментариев (13)

C vs Assembler

Автор DI HALT
Опубликовано 13 июля 2008 
Рубрики: Начинающим
Метки: , , ,

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

Читать полностью

Комментариев (38)

Программатор Громова

Автор DI HALT
Опубликовано 13 июля 2008 
Рубрики: Готовые устройства
Метки: , , ,

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

Шарясь по инету, я нашел отличный программатор, работающий через RS232 он же COM порт. А также удобную программу для прошивки контроллера UniProf от Николаева. Схему программатора придумал Громов, создатель Algorithm Builder.

Саму программу UniProf можно скачать у меня, но лучше взять с сайта автора. Возможно там будет версия посвежее.
Читать полностью

Комментариев (683)

AVR. Учебный курс. Архитектура.

Автор DI HALT
Опубликовано 10 июля 2008 
Рубрики: AVR. Учебный курс
Метки: ,

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

Архитектура AVR
Архитектура AVR
Внутри контроллера находится система из вычислительного блока (ALU), регистров, оперативной памяти, памяти программ и периферийных устройств. Во многих современных контроллерах до кучи также есть EEPROM это энергонезависимая память, что то вроде flash памяти, только допускает куда больше циклов перезаписи. Все это витиевато завязано общей шиной, собрано на одном кристалле и залито компаундом.

А теперь чуть подробней о каждом.

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

Блок регистров (РОН), он же регистровый файл. Это пачка из 32 ячеек памяти по 8 бит каждая. Отличаются самой быстрой скоростью работы, а также с ними производятся почти все процессорные операции. В AVR регистры нумеруются от 0 до 31, причем первая половина регистров (R0-R15) весьма кастрированная от природы и ряд очень нужных и удобных команд (например засылка непосредственных данных в регистр командой LDI) не хочет работать. Вторая половина регистров полнофункциональна, но надо помнить, что регистры с R26 по R31 являются так называемыми индексными регистрами. Это 16ти разрядные X,Y,Z регистровые пары (X=R26:R27, Y=R28:R29, Z=R30:R31), служащие для адресации памяти в некоторых командах. Читать полностью

Комментариев (59)

Вводная, или что такое микроконтроллер.

Автор DI HALT
Опубликовано 30 июня 2008 
Рубрики: Начинающим
Метки: , , , ,

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

Но, если сильно все упростить, то основной функцией микроконтроллера является “дрыганье ножками”. Т.е. у него есть несколько выводов (от 6 до нескольких десятков в зависимости от модели) и на этих выводах он может выставить либо 1 (высокий уровень напряжения, например +5вольт), либо 0 (низкий уровень напряжения, около 0.1 вольта) в зависимости от программного алгоритма зашитого в его память. Также микроконтроллер может определять состояние сигнала на своих ножках (для этого они должны быть настроены на вход) — высокое там напряжение или низкое (ноль или единица). Современные микроконтроллеры также почти поголовно имеют на борту Аналогово Цифровой Преобразователь — это штука подобная вольтметру, позволяет не просто отследить 0 или 1 на входе, а полноценно замерить напряжение от 0 до опорного (обычно опорное равно напряжению питания) и представить его в виде числа от 0 до 1024 (или 255, в зависимости от разрядности АЦП)

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

Читать полностью

Комментариев (43)


Материалы сайта являются авторскими. Копирование и публикация материалов без активной ссылки на первоисточник запрещено.

Реклама: