AVR. Учебный Курс. Архитектура Программ
Автор DI HALT
Опубликовано 14 Янв 2010
Рубрики: AVR. Учебный курс
Метки: Алгоритм, Микроконтроллер, Программатор
Все учебные курсы по микроконтроллерам которые я встречал (в том числе, к сожалению, и мой ассемблерный, но я надеюсь это постепенно поправить) страдают одной и той же проблемой.
В курсе бросаются строить дом не заложив фундамент. Только показав на примере как мигнуть светодиодом, сразу же кидаются в периферию. Начинают осваивать ШИМ-ы, таймеры, подключать дисплеи и всякие термодатчики.
С одной стороны это понятно — хочется действа и результата мгновенно. С другой — рано или поздно такой подход упрется в тот факт, что программа, надстраиваемая без четкой идеологии, просто обрушится под своей сложностью. Сделав невозможным дальнейшее развитие.
Итогом становится либо рождение жутких программных уродцев, либо миллионы вопросов на форуме вида “а как бы мне все сделать одновременно, а то частоты контроллера уже на все не хватает”.
Самое интересное, что правильной организации программы учат программистов в ВУЗах, но вот только к микроконтроллеру народ обычно идет не от программирования, а от железа. А, как показала практика обучения в ВУЗе, электронщиков толковому программингу практически не обучают :( Приходится все додумывать самостоятельно.
Итак, что такое структура программы. Это, прежде всего, ее скелет. То какими путями движется код. Как организованы переходы между задачами прошивки. То как распределяется процессорное время. Без краткого ликбеза по общим принципам построения прошивки дальше двигаться нет смысла.
Все ниже написанное это лишь продукт моих умозаключений, поэтому терминология может отличаться от общепринятой. Если это сильно кому то будет резать глаз — поправляйте в комментах.
Итак, я для себя выделяю следующие структуры, по порядку возростания сложности конструкции и количеству управляющего кода:
- Суперцикл
- Суперцикл+прерывания
- Флаговый автомат
- Диспетчер
- Приоритетный диспетчер
- Кооперативная RTOS
- Вытесняющая RTOS
А теперь подробно по каждому пункту: Читать полностью
Робоконструктор Robo-PICA
Автор DI HALT
Опубликовано 10 июня 2009
Рубрики: Робототехника
Метки: PIC, Микроконтроллер, Робот
В Челябинском Элементе появилась прикольная вещь — робоконструктор Robo-PICA. Пользуясь моментом, пришел туда с фотиком и зафоткал все содержимое коробки, а потом выложил на всеобщее обозрение.
![]() |
| кликабельно — больший размер |
Дальше будут в основном фотки с моим кратким описанием.
Читать полностью
Параллельный Цифро Аналоговый Преобразователь по схеме R-2R
Автор DI HALT
Опубликовано 19 марта 2009
Рубрики: Начинающим
Метки: Аналог, Микроконтроллер, ЦАП, Цифра
Порой надо выдать точный аналоговый сигнал, да еще с быстро менющийся. Например, функцию. Раньше я рассматривал как это можно сделать с помощью ШИМ, но у этого метода есть проблема — он очень медленный. В самом деле, чтобы получить один уровнь на ШИМ, нужно, по меньшей мере, 256 тиков таймера. А если надо развернуть функцию в которой 256 отсчетов? Да еще на каждый отсчет по 256 тиков? Это какая же должна быть частота процессора? Да еще надо учесть, что ШИМ требует интегрирующей цепочки с конденсатором. А значит для четкого установления уровня должно пройти еще несколько импульсов, что снижает скорость еще раза в три. Короче, получить что либо быстрей чем 50 ГЦ на ШИМ очень сложно. Я не говорю даже о том, что у ШИМ изза свойств емкостного заряда сильно плывет линейность, так что это приходится учитывать.
Читать полностью
Третья программа. Выдача данных с АЦП на UART
Автор DI HALT
Опубликовано 14 Дек 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, АЦП, Конфигурация, Микроконтроллер, Программирование
Несколько постов назад я заикнулся о том, что выдам на гора программу-пример для работы с АЦП. Пора за базар отвечать :) Делать мы будем простенький цифровой осциллограф. Точнее осциллографом это можно назвать с большой натяжкой, скорей самописец. Так, побаловаться. Но, если нет осциллографа, то и эта приблуда может быть полезной.
Задача:
Получить напряжение с АЦП и отправить его по последовательному порту в комп. В компе полученный поток байт представить в виде графика.
Теоретическую часть я уже разобрал, осталось поставить эксперимент в реальном железе. Эксперимент будем ставить на ранее собранной отладочной плате. Хоть она и больше заточена на обкатку силового блока моего робота, но под наши задачи сгодится — на штыри выведены каналы ADC4 и ADC5, так что заюзаем их. Читать полностью
AVR. Учебный Курс. Библиотека для LCD на базе HD44780
Автор DI HALT
Опубликовано 10 Окт 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, HD44780, LCD, Микроконтроллер
Сел я и дописал свою библиотеку для LCD на базе HD44780.
Как она работает я тут расписывать не буду - код весьма плотно фарширован комментариями. Тем более я уже рассказывал как работать с этим дисплеем Поэтому, думаю, разберетесь. Если будут вопросы, то обращайтесь. Тут же я расскажу как ей пользоваться.
Состав
Библиотека состоит из двух файлов LCD.asm и LCD_macro.inc для подключения по 8ми битной шине и LCD4.asm и LCD4_macro.inc для подключения по четырех битной шине данных. Используете тот вариант, по которому у вас подключен дисплей.
- Файл LCD.asm содержит все основные настройки портов и, собственно, код.
- LCD_macro.inc содержит макросы для работы с дисплеем. И используется для работы с библиотекой.
Порт данных использует биты 7…4 любого порта на 4 битном подключении, или весь порт целиком на 8ми разрядном
Порт управления использует 3 любых бита любого порта. Главное, чтобы они были на одном порту. Впрочем код можно и чуток подправить :)
Робот на контроллере PIC от SWG. Часть 2
Автор DI HALT
Опубликовано 01 Окт 2008
Рубрики: Робототехника
Метки: Pascal, PIC, Микроконтроллер, Программирование
|
| Предварительная версия схемы |
Хы, надо сказать я несколько отстаю в разработке :) Он уже за датчики взялся, а у меня пока только ходовая отлаживается… ничо ничо, вот щас с заказами разберусь и закажу себе УЗ сонары :)))) А там еще посмотрим кто первый в космос полетит :)
Бонусом в архиве идет доработанная программа ходового контроллера:
- Исходник на Pascal
- Cкомпилированные им ассемблерный листинг и HEX - код, а также
- Дизассемблерный из HEX-кода листинг. Получен программой из комплекта IC-Prog, которой я прошиваю PIC16F876).
AVR. Учебный курс. Использование аналогового компаратора
Автор DI HALT
Опубликовано 13 Сен 2008
Рубрики: AVR. Учебный курс
Метки: 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(инверсный вход) Читать полностью
Отладочный пульт
Автор DI HALT
Опубликовано 12 Сен 2008
Рубрики: Новости
Метки: i2c, RS232, UART, Клавиатура, Микроконтроллер, Отладка, Печатная плата, Умный дом
|
| Печатная плата |
Ну а чо, сказано сделано. Воткнул ATMega8535 — первая которая под руку подвернулась из многоногих. Вывел все что только можно наружу, присобачил небольшую клавиатурную матрицу 4х4 и LCD экранчик. Экранчик мелкий WH0802A 8х2 символа, но уж какой был. Других у нас в продаже не встречал, а под заказ везти лень. Да и, думаю, там и не надо больше.
А раз уж пошла такая пьянка, то до кучи вывел наружу пару каналов ШИМ, да пару входов АЦП. Ну и SPI заодно — гулять так гулять. Там же можно и Dallas 1-wire проткол организовать, приделать частотомер, индикатор сигнала, вольтмер и вообще можно много чего наворотить, было бы желание. Опять же, линий на вход/выход получается дофига, так что из нее можно сделать головной блок умного дома или контроллер чего нибудь.
Корпус взял халявный, PAC-TEC‘овский который намутил года два назад. Вот и пригодится коробочка :) Надо сказать, PAC-TEC делает просто изумительные коробки. Не чета тому говну, что продается в наших радиомагазинах. Не скрипят, не люфтят, крепко сбиты, ладно скроены и выглядят круто. Где бы их еще продавали у нас.
Пока только плату развел, еще некоторых деталей не хватает. На днях вытравлю плату, соберу и буду программировать. Вот тогда будет вам и примеры живого кода и подробное описание SPI, i2c, UART, клавиатура и LCD . Кстати, обратите внимание как легко матрицировать обычные тактовые кнопки. А все благодаря тому, что у них четыре попарно соединенных вывода.
Пока же, раз все еще в виде чертежа, набрасывайте в комменты свои идеи по поводу фич будущего девайса.
Извращенский ШИМ из UART
Автор DI HALT
Опубликовано 07 Сен 2008
Рубрики: AVR. Учебный курс
Метки: PWM, 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
Да и частоты там можно получить нефиговые!
Красота!=)))))
Связь микроконтроллера с компьютером через RS232
Автор DI HALT
Опубликовано 31 Авг 2008
Рубрики: Готовые устройства
Метки: RS232, UART, Интерфейс, Микроконтроллер
|
| Схема |
|
| Плата сверху |
|
| Плата снизу |
|
| В собранном виде |
|
| Печатная плата. Тонер не смыт. |
Практически каждая фирма делает свой преобразователь, так что тут сгодится и 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
It’s a live!!! It’s a live!!!
Автор DI HALT
Опубликовано 22 Авг 2008
Рубрики: Робототехника
Метки: Видео, Микроконтроллер, Робот, Шасси
Пока же можете полюбоваться на работу монстра в деле. Прога из второго примера - едем до касания передними датчиками, потом сдаем назад на 30 оборотов редуктора. Правда не работает одометр поэтому спустя 30 оборотов колеса он не останавливается. Но это мелочи, поправлю. Заранее извиняюсь за отвратное качество видео. В таком формате пишет моя говномыльница.
Может кто посоветует еще прогу которой можно пережать видео в два клика? Просто сделать размер поменьше, может формат сменить. Что нибудь тупое и простое, разбираться в тонкостях мега софта мне сейчас совершенно некогда.
C vs Assembler
Автор DI HALT
Опубликовано 13 июля 2008
Рубрики: Начинающим
Метки: Assembler, C, Микроконтроллер, Программирование
Но, истинна как всегда находится посредине. Каждый уважающий себя программер должен знать ассемблер, а вот писать должен на том, что более подходит под масштаб задачи. Особенно это касается микроконтроллеров.
Программатор Громова
Автор DI HALT
Опубликовано 13 июля 2008
Рубрики: Готовые устройства
Метки: AVR, Микроконтроллер, Описание, Программатор
Самый простой вариант программатора для AVR это пять проводков, припаиваемых к порту контроллера и втыкаемых в LPT порт. Не спорю, можно и так. Но я все же не рекомендую этот способ. Даже схему подключения давать не буду — если надо будет сам найдешь. Так как данный метод не очень стабилен, возможны сбои при прошивке, длина проводков ограничена двадцатью сантиметрами (если больше, то будет глючить), поэтому придется шариться в комповой заднице. Да и LPT порт спалить проще простого. В общем не рулез.
Шарясь по инету, я нашел отличный программатор, работающий через RS232 он же COM порт. А также удобную программу для прошивки контроллера от Николаева. Схему программатора придумал Громов, создатель Algorithm Builder.
![]() |
Саму программу UniProf можно скачать у меня, но лучше взять с . Возможно там будет версия посвежее.
Читать полностью
AVR. Учебный курс. Архитектура.
Автор DI HALT
Опубликовано 10 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, Микроконтроллер
Итак, камрад, прежде чем ты начнешь работать с контроллером, то неплохо бы тебе узнать что у него внутри.
Поэтому дам тебе краткий ликбез по архитектуре контроллера AVR.
| Архитектура AVR |
А теперь чуть подробней о каждом.
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), служащие для адресации памяти в некоторых командах. Читать полностью
Вводная, или что такое микроконтроллер.
Автор DI HALT
Опубликовано 30 июня 2008
Рубрики: Начинающим
Метки: AVR, MSC-51, PIC, Микроконтроллер, Описание
Но, если сильно все упростить, то основной функцией микроконтроллера является “дрыганье ножками”. Т.е. у него есть несколько выводов (от 6 до нескольких десятков в зависимости от модели) и на этих выводах он может выставить либо 1 (высокий уровень напряжения, например +5вольт), либо 0 (низкий уровень напряжения, около 0.1 вольта) в зависимости от программного алгоритма зашитого в его память. Также микроконтроллер может определять состояние сигнала на своих ножках (для этого они должны быть настроены на вход) — высокое там напряжение или низкое (ноль или единица). Современные микроконтроллеры также почти поголовно имеют на борту Аналогово Цифровой Преобразователь — это штука подобная вольтметру, позволяет не просто отследить 0 или 1 на входе, а полноценно замерить напряжение от 0 до опорного (обычно опорное равно напряжению питания) и представить его в виде числа от 0 до 1024 (или 255, в зависимости от разрядности АЦП)
Из него можно сделать и умный дом, и мозги для домашнего робота, систему интеллектуального управления аквариумом или просто красивое светодиодное табло с бегущим текстом. Среди электронных компонентов МК это один из самых универсальных устройств. Я, например, при разработке очередного устройства предпочитаю не заморачиваться на различного рода схемотехнические извраты, а подключить все входы и выходы к микроконтроллеру, а всю логику работы сделать программно. Резко экономит и время и деньги, а значит деньги в квадрате.




