AVR. Учебный курс. Важные мелочи #1
Автор DI HALT
Опубликовано 30 Сен 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, Мелочи, Программирование
Инициализация памяти.
Мало кто подозревает о том, что при включении в оперативке далеко не всегда все байты равны 0xFF. Они могут, но не обязаны. Равно как и регистры РОН не всегда равны нулю при запуске. Обычно да, все обнулено, но я несколько раз сталкивался со случаями когда после перезапуска и/или включения-выключения питания, микроконтроллер начинал творить не пойми что. Особнно часто возникает когда питание выключаешь, а потом, спустя некоторое время, пара минут, не больше, включаешь. А всему виной остаточные значения в регистрах. Вот и недавно при отладке одного заказа вылез такой глюк. Надо бы задокументировать :)
Итак, возьмите себе за правило после каждого включения, в разделе инициализации, еще даже до инициализации стека, делать зануление памяти и очистку всех регистров. Разумеется делается это все в цикле. Вот примерный вариант кода:
1 2 3 4 5 6 7 8 9 10 11 12 | RAM_Flush: LDI ZL,Low(SRAM_START) ; Адрес начала ОЗУ в индекс LDI ZH,High(SRAM_START) CLR R16 ; Очищаем R16 Flush: ST Z+,R16 ; Сохраняем 0 в ячейку памяти CPI ZH,High(RAMEND) ; Достигли конца оперативки? BRNE Flush ; Нет? Крутимся дальше! CPI ZL,Low(RAMEND) ; А младший байт достиг конца? BRNE Flush CLR ZL ; Очищаем индекс CLR ZH |
Поскольку адрес оперативки у нас двубайтный, то мы вначале смотрим, чтобы старший байт совпал с концом, а потом добиваем оставшиеся 255 байт в младшем байте адреса.
Далее убиваем все регистры командой CLR Rn от первого до последнего. Все, контроллер готов к работе.
Рекурсивные прерывания.
Точнее на самом деле это не совсем рекурсия, но выглядит на нее очень похоже. Тоже столкнулся на днях при отладке. Итак, представим себе ситуацию - у нас есть прерывание, скажем по изменению на входе INT0. На INT0 висит кнопка. Нажали кнопку - попали в прерывание.
Тут может быть засада которая всплывает далеко не сразу. Что было у меня:
При заходе в прерывание автоматически сбрасывается бит I в регистре SREG, запрещая тем самым обработку других прерываний. НО! Мне нужен был в этом обработчике еще и таймер, а таймер использует прерывания. Поэтому я, барским жестом, разрешил прерывания — SEI!
И тут начались приколы, причем всплыли они далеко не сразу, а после проверки независимым тестером :) Что происходит при нажатии кнопки? А при нажатии кнопки присутствует такое явление как дребезг контактов!
А что случится если будет дребезжать вход на прерывание? Да если прерывания при этом будут разрешены, как у меня? А у нас произойдет множественный вызов прерывания. Чреватый срывом стека изза переполнения или не пойми какой логикой работы. Так что если уж решился разрешить глобальные прерывания в обработчике прерывания, то не забудь запретить то прерывание, в котором ты сейчас находишься, а по выходу из обработчика разрешить его снова.
Источники питания. Часть 2 - Импульсные преобразователи
Автор DI HALT
Опубликовано 29 Сен 2008
Рубрики: Готовые устройства, Начинающим
Метки: DC-DC, MC34063, MC34068, PWM, БП, ШИМ
Для изменения напряжения постоянного тока с минимальными потерями используются DC-DC преобразователи, работающие по принципу Широтно-Импульсной Модуляции (ШИМ, она же PWM по басурмански). Если не читал мои прошлые статьи, где я подробно разжевал принцип работы ШИМ, то я кратенько тебе напомню. Основной принцип тут в том, что напряжение подается не сплошным потоком, как в линейных стабилизаторах, а краткими импульсами и с большой частотой.
|
| Готовый девайс |
То есть у тебя на выходе ШИМ контроллера, например, сначала в течении десяти микросекунд напряжение, к примеру, двенадцать вольт, потом идет пауза. Скажем, те же десять микросекунд, когда на выходе напряжения вообще нет. Затем все повторяется, словно мы быстро-быстро включаем и выключаем рубильник.
Таким образом у нас получаются прямоугольные импульсы. Если вспомнить матан, а конкретно интегрирование, то после интегрирования этих импульсов мы получим площадь под фигурой очерченной импульсами. Таким образом, меняя ширину импульсов и пропуская их через интегратор, можно плавно менять напряжения от нуля до максимума с любым шагом и практически без потерь.
В качестве интегратора служит конденсатор, он заряжается на пике, а на паузах будет отдавать энергию в цепь. Также туда всегда последовательно ставят дроссель, который тоже служит источником энергии, только он запасает и отдает ток. Поэтому такие преобразователи при небольших габаритах легко питают мощную нагрузку и при этом почти не расходуют энергию на лишний нагрев.
Если не догнал, то я для простоты переложил это в понятное «канализационное русло». Смотри на картинку, где ключевой транзистор ШИМ контроллера похож на вентиль, он открывает и закрывает канал. Конденсатор это банка, накапливающая энергию. Дроссель это массивная турбина, которая, будучи разогнанной потоком, при открытом вентиле, за счет своей инерции прогоняет воду по трубам и после закрытия вентиля.
Конечно, самостоятельно разработать такой источник питания сложно, требуется неслабое образование в области электроники, но не стоит напрягаться по этому поводу. Умные дядьки из Motorola, STM, Dallas и прочих Philips’ов придумали все за нас и выпустили уже готовые микросхемы содержащие в себе ШИМ контроллер. Тебе остается его лишь припаять и добавить обвески, которая задает параметры работы, причем изобретать самому ничего не надо, в datasheet’ах подробно расписано что и как подключать, какие номиналы выбирать, а иногда даже дают готовый рисунок печатной платы. Надо лишь немного знать английский :)
Источники питания. Часть 1 - Батарейное и сетевое питание
Автор DI HALT
Опубликовано 26 Сен 2008
Рубрики: Начинающим
Метки: Аккумуляторы, БП, Диод, Конденсатор, Схемотехника
Если ты разрабатываешь подслушивающее устройство или же что-либо мобильное, что нельзя воткнуть в розетку на постоянную основу, то тебе только одна дорога – батарейное питание. Существует множество видов аккумуляторов или батареек, подходящих на все случаи жизни.
С батарейками тут все просто, если соединить их последовательно, цепочкой от плюса к минусу, то напряжение складывается. А если связать параллельно, объединив все плюсы и все минусы, то получим увеличение емкости батареи. Главное тут, чтобы все батареи имели равную свежесть. А то если в такой связке попадется одна полудохлая, с более низким напряжением, то остальные через нее тут же подсядут до ее уровня.
Особой любовью у меня пользуются батарейки от материнских плат. Так как они выдают 3 вольта, что в подавляющем большинстве случаев достаточно для запитки микроконтроллера (Tiny или Mega с индексом L) или еще какой мелкой электроники. Кстати, мелкие батарейки на девять-двенадцать вольт (такие обычно стоят в брелках авто сигнализаций) внутри содержат стопку обычных таблеточных батареек для часов. Так что в следующий раз лучше не тратить бабло на дорогующую двенадцати вольтовую батарейку, а купить матрас китайских таблеток по рублю за штуку и смотать их скотчем.
Еще классными батарейками снабжались кассеты от фотоаппаратов Polaroid. Она была плоской, выдавала девять вольт и обладала чумовой энергоемкостью, их особенно любили фрикеры, изготовлявшие подслушивающие устройства. Так как такую батарейку, вместе с жучком было легко сделать в виде картонки, которая закидывалась куда-нибудь за шкаф и работала порой до двух трех месяцев.
Ремонт промышленного оборудования
Автор DI HALT
Опубликовано 24 Сен 2008
Рубрики: Новости
Метки: Описание, От Автора
Как всегда, в условиях тотального дефицита комплектующих в условиях Российской глубинки. Когда даже MAX232 в широком корпусе не найдешь ближе чем за 400км. Приходится колхозить :)
![]() |
З.Ы.
Это фотка платы от промышленного компьютера, который мне притащили на ремонт. Под катом еще пара фоток.
AVR. Учебный курс. Подключение к AVR LCD дисплея HD44780
Автор DI HALT
Опубликовано 23 Сен 2008
Рубрики: AVR. Учебный курс
Метки: HD44780, LCD, Алгоритм, Программирование
|
| Сегодня разменял четверть века! |
Для начала оговорюсь сразу, что речь тут пойдет о LCD индикаторах на контроллере HD44780, который стал промышленным стандартом де-факто на рынке цифро-буквенных дисплеев. Продается везде где только можно, стоит недорого (8х2 мне обошелся порядка 150 рублей), а также под него написана куча кода. Я же, как обычно, решил изобрести велосипед и сварганить свою собственную тру-библиотеку для работы с этим типом индикаторов. Разумеется на ассемблере, а на чем же еще? ;)
AVR. Учебный курс. Процедура сканирования клавиатуры
Автор DI HALT
Опубликовано 21 Сен 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Алгоритм, Клавиатура, Программирование
Коварные ВЧ цепи
Автор DI HALT
Опубликовано 20 Сен 2008
Рубрики: Начинающим
Метки: ВЧ, Индуктивность, Наводка, Печатная плата, Схемотехника
Предыстория
Разводил я плату, того самого универсального пульта. И была у меня там обычная матричная клавиатура - строки и столбцы. По столбцам сканируется, по строкам считывается. Элементарно. Собрал, запрограммировал опрос клавиатуры и выдачу символов на экран.
Включаю и тут же вылазит нажатие. Проверил программу - все как и должно, а кнопка сама почему то нажимается. Выключаю. Включаю - то же самое. Косяк, видать либо кнопка коротит, либо развел неправильно. Было поздно лег спать. Проснулся, включаю - не вылазит буква. Потыкал кнопочки, все работает как и должно. Что это было? Непонятно, может приглючилось? Тут раз - выскочила. Опа. Стал проверять. Вскрылось шаманство. После сброса кнопка не срабатывала, но стоило поднести к пульту руку, справа, под определенным углом - самопроизвольное нажатие. Мда… Но хоть что то стало ясно.
Свершилось!
Автор DI HALT
Опубликовано 19 Сен 2008
Рубрики: Новости
Метки: От Автора
По многочисленным просьбам прикрутили таки к сайту редактирование комментариев. Чтобы эта фича была доступна нужнозарегистрироваться и залогиниться на сайте. Пользуйтесь.
UPD от 18.07.09
Как прикрутили так и открутили. Жутко тормозная фича :(
Робот на контроллере PIC от SWG
Автор DI HALT
Опубликовано 17 Сен 2008
Рубрики: Робототехника
Метки: PIC, Печатная плата, Робот, Электропривод
…
Потребление от 12v: 33 мА при выкл. двигателях, при макс. скорости без нагрузки (колеса не касаются пола) = 103 мА вперед, 115 мА назад. При одном заклиненном колесе - 300 мА, при обоих заклиненных колесах = 500 мА.
L293DN чуть теплая. Будет греться - приклею радиатор. Да, частоту ШИМ взял пока 500 Гц. (период 2 мс). Померяю скорость нарастания тока в двигателях - определю более оптимальную (За самый короткий импульс ток в двигателе должен успеть достигнуть максимума).
Максимальная скорость движения по полу сейчас 15-20 см/сек. Больше мне пока ни к чему, слишком быстро будет комнату пробегать. Диаметр колес = 80мм (резиновые “бублики” вроде от какой-то сантехники, полно на базаре).
Честно говоря, я был сильно удивлен когда нагуглил характеристики движка ДПМ. Почти все они, несмотря на весьма брутальную конструкцию, жрут довольно мало. Так что даже L293 их спокойно тянет. При этом они отличаются вполне сносным моментом и оборотами.
Пара слов о оптимизации кода.
Автор DI HALT
Опубликовано 17 Сен 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, Макро язык, Начинающим, Оптимизация, Трюки
Это не наезд на Си, это камень в огород тех, кто считает что изучать микроконтроллеры проще на Си. Может кому то и проще, но для этого надо очень даже неплохо знать Си. Если не знаешь ни Си, ни Ассемблера, то писать на МК на асме проще в разы.
Изготовление лицевой панели
Автор DI HALT
Опубликовано 15 Сен 2008
Рубрики: Радиолюбительские Технологии
Метки: Клавиатура, Корпус
|
Нравится коробочка? Хочешь научу делать такие же? Тык под кат! Читать полностью
Лужение платы
Автор DI HALT
Опубликовано 14 Сен 2008
Рубрики: Радиолюбительские Технологии
Метки: Видео, Лужение, Печатная плата
Вот решил попробовать показать процесс лужения платы как это делаю я. Фотик, падла, постоянно теряет фокус, поэтому качество стремное. Да еще на улице темно и освещения нехватает. Так что принимайте как есть :) Читать полностью
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 . Кстати, обратите внимание как легко матрицировать обычные тактовые кнопки. А все благодаря тому, что у них четыре попарно соединенных вывода.
Пока же, раз все еще в виде чертежа, набрасывайте в комменты свои идеи по поводу фич будущего девайса.
Управление шаговым двигателем
Автор DI HALT
Опубликовано 10 Сен 2008
Рубрики: Робототехника
Метки: Шаговый двигатель, Электропривод
|
| Первая модификация силового блока. L293 вытащена. |
|
| Вид снизу |
Шаговый двигатель это, как понятно из его названия, двигатель который вращается дискретными перемещениями. Достигается это за счет хитрой формы ротора и двух (реже четырех) обмоток. В результате чего, путем чередования направления напряжения в обмотках можно добиться того, что ротор будет по очереди занимать фиксированные значения.
В среднем, у шагового двигателя на один оборот вала, приходится около ста шагов. Но это сильно зависит от модели двигателя, а также от его конструкции. Кроме того, существуют полушаговый и микрошаговый режим, когда на обмотки двигателя подают ШИМованное напряжение, заставляющее ротор встать между шагами в равновесном состоянии, которое поддерживается разным уровнем напряжения на обмотках. Эти ухищрения резко улучшают точность, скорость и бесшумность работы, но снижается момент и сильно увеличивается сложность управляющей программы - надо ведь расчитывать напряжения для каждого шага.
Один из недостатков шаговиков, по крайней мере для меня, это довольно большой ток. Так как на обмотки напруга подается все время, а такого явления как противоЭДС в нем, в отличии от коллекторных двигателей, не наблюдается, то, по сути дела, мы нагружаемся на активное сопротивление обмоток, а оно невелико. Так что будь готов к тому, что придется городить мощный драйвер на MOSFET транзисторах или затариваться спец микросхемами.
Типы шаговых двигателей
Если не углубляться во внутреннюю конструкцию, число шагов и прочие тонкости, то с пользовательской точки зрения существует три типа:
- Биполярный - имеет четыре выхода, содержит в себе две обмотки.
- Униполярный - имеет шесть выходов. Содержит в себе две обмотки, но каждая обмотка имеет отвод из середины.
- Четырехобмоточный - имеет четыре независимые обмотки. По сути дела представляет собой тот же униполярник, только обмотки его разделены. Вживую не встречал, только в книжках.
Где взять шаговый двигатель.
Вообще шаговики встречаются много где. Самое хлебное место - пятидюймовые дисководы и старые матричные принтеры. Еще ими можно поживиться в древних винчестерах на 40Мб, если, конечно, рука поднимется покалечить такой антиквариат.
А вот в трехдюймовых флопарях нас ждет облом - дело в том, что там шаговик весьма ущербной конструкции — у него только один задний подшипник, а передним концом вал упирается в подшипник закрепленный на раме дисковода. Так что юзать его можно только в родном креплении. Либо городить высокоточную крепежную конструкцию. Впрочем, тебе может повезет и ты найдешь нетипичный флопарь с полноценным движком.
Схема управления шаговым двигателем
Я разжился контроллерами шаговиков L297 и мощным сдвоенным мостом L298N.
Матричная клавиатура
Автор DI HALT
Опубликовано 08 Сен 2008
Рубрики: Начинающим
Метки: Алгоритм, Клавиатура, Начинающим, Программирование, Схемотехника
Клавиатурная матрица.
Я ее нарисовал тебе на первой картинке. Как видишь, там есть строки и столбцы. Кружочками обозначены кнопки. Включены они так, что при нажатии кнопка замыкает строку на столбец.
Считывающий порт включается в режиме Pull-up входа, то есть вход с подтягивающими резисторами. Если контроллер это не поддерживает, то эти резисторы надо повесить снаружи.
Сканирующий порт работает в режиме выхода, он подключен к столбцам. Столбцы должны быть подтянуты резисторами к питанию. Впрочем, если используется полноценный Push-Pull то подтяжка не нужна - выход сам поднимет ногу на нужный уровень.
Система моделирования ISIS Proteus. Быстрый старт.
Автор DI HALT
Опубликовано 07 Сен 2008
Рубрики: Начинающим
Метки: Assembler, ISIS Proteus, MSC-51, Отладка, Софт
|
| Собранная виртуальная схема |
Вообще существует масса систем моделирования электронных схем. Из всех, что я видел мне наиболее понравились Multisim и ISIS Proteus. Multisim обладает очень удобным интерфейсом, и в нем удобно отлаживать аналоговые девайсы, т.к. он позволяет использовать виртуальные (т.е. параметры ты указываешь сам) транзисторы и усилители, но совершенно не поддерживает сложные системы, вроде микроконтроллеров или разного рода драйверов. Точнее поддерживает, но крайне вяло. Только недавно в нем появилась поддержка древних АТ89C2051 и нескольких PIC‘ов
Напротив, Proteus умеет замечательно работать с контроллерами, но ограничен своей библиотекой реальных элементов, поэтому без знания какая тебе именно деталь нужна ты там мало что сделаешь, а ещё обладает ну просто убожеским интерфейсом, однако это лучшая система моделирования, что я когда либо видел. А потому буду описывать именно её.
Извращенский ШИМ из 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
Да и частоты там можно получить нефиговые!
Красота!=)))))
AVR. Учебный курс. Передача данных через UART
Автор DI HALT
Опубликовано 07 Сен 2008
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, RS232, UART, Интерфейс
Протокол
Вначале передатчик бросает линию в низкий уровень - это старт бит. Почуяв что линия просела, приемник выжидает интервал Т1 и считывает первый бит, потом через интервалы Т2 выковыриваются остальные биты. Последний бит это стоп бит. Говорящий о том, что передача этого байта завершена. Это в самом простом случае.
В конце байта, перед стоп битом, может быть и бит четности. Который получается если поксорить между собой все биты, для контроля качества передачи. Также может быть два стопа, опять же для надежности. Битов может быть не 8, а 9. О всех этих параметрах договариваются на берегу, до начала передачи. Самым же популярным является 8 бит, один старт один стоп, без четности.
Причем с самим протоколом можно не заморачиваться - все реализованно аппаратно. Разве что захочется завести второй UART, тогда придется делать его программно.
По такому же протоколу работает COM порт компьютера, разница лишь в разнице напряжений, поэтому именно этот протокол я буду использовать для связи микроконтроллера с компом. Для преобразования напряжений используется RS232-TTL конвертер.
Колхозные технологии.
Автор DI HALT
Опубликовано 02 Сен 2008
Рубрики: Новости
Метки: От Автора
|
| Колхозим плату |
З.Ы.
Плохая новость: у меня сейчас дикие запарки, поэтому новых статей на сайте не будет еще дня два три.
Хорошая новость: появился более менее нормальная мыльница которая умеет снимать относительно светлое видео. Так что будет видео! Но опять же дня через два три.



