AVR. Учебный курс. Важные мелочи #1

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

Инициализация памяти.
Мало кто подозревает о том, что при включении в оперативке далеко не всегда все байты равны 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!

И тут начались приколы, причем всплыли они далеко не сразу, а после проверки независимым тестером :) Что происходит при нажатии кнопки? А при нажатии кнопки присутствует такое явление как дребезг контактов!

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

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

З.Ы.
Кстати, о оперативке. Нашел я недавно планку оперативной памяти на 1килобайт, древнюю как говно мамонта, еще на ферромагнитных кольцах.

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

Источники питания. Часть 2 - Импульсные преобразователи

Автор DI HALT
Опубликовано 29 Сен 2008 
Рубрики: Готовые устройства, Начинающим
Метки: , , , , ,

Первая часть статьи, посвященная батареям и аккумуляторам.

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

Готовый девайс
Готовый девайс

То есть у тебя на выходе ШИМ контроллера, например, сначала в течении десяти микросекунд напряжение, к примеру, двенадцать вольт, потом идет пауза. Скажем, те же десять микросекунд, когда на выходе напряжения вообще нет. Затем все повторяется, словно мы быстро-быстро включаем и выключаем рубильник.

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

Если не догнал, то я для простоты переложил это в понятное «канализационное русло». Смотри на картинку, где ключевой транзистор ШИМ контроллера похож на вентиль, он открывает и закрывает канал. Конденсатор это банка, накапливающая энергию. Дроссель это массивная турбина, которая, будучи разогнанной потоком, при открытом вентиле, за счет своей инерции прогоняет воду по трубам и после закрытия вентиля.

Конечно, самостоятельно разработать такой источник питания сложно, требуется неслабое образование в области электроники, но не стоит напрягаться по этому поводу. Умные дядьки из Motorola, STM, Dallas и прочих Philips’ов придумали все за нас и выпустили уже готовые микросхемы содержащие в себе ШИМ контроллер. Тебе остается его лишь припаять и добавить обвески, которая задает параметры работы, причем изобретать самому ничего не надо, в datasheet’ах подробно расписано что и как подключать, какие номиналы выбирать, а иногда даже дают готовый рисунок печатной платы. Надо лишь немного знать английский :)

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

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

Источники питания. Часть 1 - Батарейное и сетевое питание

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

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

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

Особой любовью у меня пользуются батарейки от материнских плат. Так как они выдают 3 вольта, что в подавляющем большинстве случаев достаточно для запитки микроконтроллера (Tiny или Mega с индексом L) или еще какой мелкой электроники. Кстати, мелкие батарейки на девять-двенадцать вольт (такие обычно стоят в брелках авто сигнализаций) внутри содержат стопку обычных таблеточных батареек для часов. Так что в следующий раз лучше не тратить бабло на дорогующую двенадцати вольтовую батарейку, а купить матрас китайских таблеток по рублю за штуку и смотать их скотчем.
Еще классными батарейками снабжались кассеты от фотоаппаратов Polaroid. Она была плоской, выдавала девять вольт и обладала чумовой энергоемкостью, их особенно любили фрикеры, изготовлявшие подслушивающие устройства. Так как такую батарейку, вместе с жучком было легко сделать в виде картонки, которая закидывалась куда-нибудь за шкаф и работала порой до двух трех месяцев.

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

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

Ремонт промышленного оборудования

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

Как всегда, в условиях тотального дефицита комплектующих в условиях Российской глубинки. Когда даже MAX232 в широком корпусе не найдешь ближе чем за 400км. Приходится колхозить :)

Впрочем, тут хорошо еще MAX232 был, не пришлось городить его на транзисторах :)))) Хотя фигня, бывали случаи и похуже, когда я на радио заводе для починки станка в пол лимона евро не мог стабилитроны найти, а резисторы пришлось делать из грифеля от карандаша.

З.Ы.
Это фотка платы от промышленного компьютера, который мне притащили на ремонт. Под катом еще пара фоток.

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

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

AVR. Учебный курс. Подключение к AVR LCD дисплея HD44780

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

Сегодня разменял четверть века
Сегодня разменял четверть века!
Так случилось, что прикупил я тут себе поприколу LCD дисплейчик две строки по восемь символов. Валялся он в ящике валялся, да чегото поперло меня и решил я его заюзать, попутно вкурив в его работу. О том как подключить к AVR LCD дисплей я вам сейчас и поведаю.

Для начала оговорюсь сразу, что речь тут пойдет о LCD индикаторах на контроллере HD44780, который стал промышленным стандартом де-факто на рынке цифро-буквенных дисплеев. Продается везде где только можно, стоит недорого (8х2 мне обошелся порядка 150 рублей), а также под него написана куча кода. Я же, как обычно, решил изобрести велосипед и сварганить свою собственную тру-библиотеку для работы с этим типом индикаторов. Разумеется на ассемблере, а на чем же еще? ;)

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

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

AVR. Учебный курс. Процедура сканирования клавиатуры

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

Итак, клавиатуру я сделал и написал процедуру сканирующую клавиатурную матрицу 4х4 кнопки. Пора бы рассказать как организовать опрос такой клавы. Напомню, что клава представляет из себя строки, висящие на портах и столбцы, которые сканируются другим портом. Код написан для контроллера ATMega8535, но благодаря тому, что все там указано в виде макросов его можно быстро портировать под любой другой контроллер класса Mega, а также под большую часть современных Tiny. Хотя в случае с Tiny может быть некоторый затык ввиду неполного набора команд у них. Придется чуток дорабатывать напильником.

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

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

Коварные ВЧ цепи

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

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

Предыстория
Разводил я плату, того самого универсального пульта. И была у меня там обычная матричная клавиатура - строки и столбцы. По столбцам сканируется, по строкам считывается. Элементарно. Собрал, запрограммировал опрос клавиатуры и выдачу символов на экран.
Включаю и тут же вылазит нажатие. Проверил программу - все как и должно, а кнопка сама почему то нажимается. Выключаю. Включаю - то же самое. Косяк, видать либо кнопка коротит, либо развел неправильно. Было поздно лег спать. Проснулся, включаю - не вылазит буква. Потыкал кнопочки, все работает как и должно. Что это было? Непонятно, может приглючилось? Тут раз - выскочила. Опа. Стал проверять. Вскрылось шаманство. После сброса кнопка не срабатывала, но стоило поднести к пульту руку, справа, под определенным углом - самопроизвольное нажатие. Мда… Но хоть что то стало ясно.

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

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

Свершилось!

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

По многочисленным просьбам прикрутили таки к сайту редактирование комментариев. Чтобы эта фича была доступна нужнозарегистрироваться и залогиниться на сайте. Пользуйтесь.

UPD от 18.07.09
Как прикрутили так и открутили. Жутко тормозная фича :(

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

Робот на контроллере PIC от SWG

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

Камрад SWG решил тоже побаловаться самобеглыми тачанками. И достал с антресоли давнюю разработку.

SWG:
Глядя на вашу бурную активность, я тоже решил шевельнуть ластами. Достал со шкафа сделанную еще в 2006г простенькую тележку (к коробке от CD-ROMа прикручены 2 самодельных колеса, 2 движка ДПМ-25-Н1-7Т с редукторами (27v, но неплохо тянут уже при 12, надо будет больше - сделаю преобразователь 12->27), и самодельный поворотный узел с роликом (третье колесо).

Потребление от 12v: 33 мА при выкл. двигателях, при макс. скорости без нагрузки (колеса не касаются пола) = 103 мА вперед, 115 мА назад. При одном заклиненном колесе - 300 мА, при обоих заклиненных колесах = 500 мА.
L293DN чуть теплая. Будет греться - приклею радиатор. Да, частоту ШИМ взял пока 500 Гц. (период 2 мс). Померяю скорость нарастания тока в двигателях - определю более оптимальную (За самый короткий импульс ток в двигателе должен успеть достигнуть максимума).
Максимальная скорость движения по полу сейчас 15-20 см/сек. Больше мне пока ни к чему, слишком быстро будет комнату пробегать. Диаметр колес = 80мм (резиновые “бублики” вроде от какой-то сантехники, полно на базаре).

Честно говоря, я был сильно удивлен когда нагуглил характеристики движка ДПМ. Почти все они, несмотря на весьма брутальную конструкцию, жрут довольно мало. Так что даже L293 их спокойно тянет. При этом они отличаются вполне сносным моментом и оборотами.
Читать полностью

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

Пара слов о оптимизации кода.

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

Пишу я тут библиотечку для подключения LCD дисплея к AVR. Пока только основные функции сделал. А чтобы не вкуривать в команды контроллера дисплея я распотрошил Сишный код, дабы подглядеть какими байтами и в каком порядке надо кормить контроллер, чтобы он вышел на нужный режим. Попутно сварганил один прикольный трюк, который я называю Горыныч. Это когда мы несколько функций объединяем в одну многоголовую - с несколькими точками входа и одной точкой выхода. Итак, мы имеем две функции обращения к LCD - запись данных и запись команд.

Техническое отступление, при желании можно его пропустить
В процессе подключения LCD мне нужно было по быстрому набросать программку, которая бы выводила что нибудь на экран. Просто проверить правильность подключения. Ну взял запустил студию, на Си на AVR Lib C тут же за пять минут сфигачил простейшую программу. На готовых библиотеках. Все хорошо, но вот только программа которая ничего не делает, а только пишет мой ник на экране заняла ШЕСТЬ(sic!) килобайт памяти!!! ШЕСТЬ!!! 80% памяти кристалла. Нет, я прекрасно понимаю, что вместе с драйвером LCD туда, до кучи, по дефолту, отправился еще полк всяких левых функций с блекджеком и шлюхами. Но вот только половина из них зачастую нафиг не нужны, а все равно сидят в ПЗУ. Я прекрасно понимаю, что их оттуда можно выкинуть, но это надо перекапывать весь исходник, выбрасывая все лишнее. Мало того, не запороть там ничего. Либо писать все на Си с нуля, забив лишь те функции что нужно. Но это вырождается во все то же толкание байтов по портам, что мало отличается от ассемблерного кода, а с макроассемблерными связками так даже менее удобно.
Это не наезд на Си, это камень в огород тех, кто считает что изучать микроконтроллеры проще на Си. Может кому то и проще, но для этого надо очень даже неплохо знать Си. Если не знаешь ни Си, ни Ассемблера, то писать на МК на асме проще в разы.

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

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

Изготовление лицевой панели

Автор DI HALT
Опубликовано 15 Сен 2008 
Рубрики: Радиолюбительские Технологии
Метки: ,

Мой корпус

Нравится коробочка? Хочешь научу делать такие же? Тык под кат! Читать полностью

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

Лужение платы

Автор DI HALT
Опубликовано 14 Сен 2008 
Рубрики: Радиолюбительские Технологии
Метки: , ,

Вот решил попробовать показать процесс лужения платы как это делаю я. Фотик, падла, постоянно теряет фокус, поэтому качество стремное. Да еще на улице темно и освещения нехватает. Так что принимайте как есть :) Читать полностью

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

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)

Управление шаговым двигателем

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

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

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

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

Типы шаговых двигателей
Если не углубляться во внутреннюю конструкцию, число шагов и прочие тонкости, то с пользовательской точки зрения существует три типа:

  • Биполярный - имеет четыре выхода, содержит в себе две обмотки.
  • Униполярный - имеет шесть выходов. Содержит в себе две обмотки, но каждая обмотка имеет отвод из середины.
  • Четырехобмоточный - имеет четыре независимые обмотки. По сути дела представляет собой тот же униполярник, только обмотки его разделены. Вживую не встречал, только в книжках.
Униполярный отличается от биполярного только тем, что ему нужна куда более простая схема управления, а еще у него значительно слабее момент. Так как работает он только половинами обмоток. НО! Если оторвать нафиг средний вывод униполярника, то мы получим обычный биполярный. Определить какой из выводов средний не сложно, достаточно прозвонить сопротивление тестером. От среднего до крайних сопротивление будет равно ровно половине сопротивления между крайних выводов. Так что если тебе достался униполярник, а схема подключения для биполярного, то не парься и отрывай средний провод.

Где взять шаговый двигатель.
Вообще шаговики встречаются много где. Самое хлебное место - пятидюймовые дисководы и старые матричные принтеры. Еще ими можно поживиться в древних винчестерах на 40Мб, если, конечно, рука поднимется покалечить такой антиквариат.
А вот в трехдюймовых флопарях нас ждет облом - дело в том, что там шаговик весьма ущербной конструкции — у него только один задний подшипник, а передним концом вал упирается в подшипник закрепленный на раме дисковода. Так что юзать его можно только в родном креплении. Либо городить высокоточную крепежную конструкцию. Впрочем, тебе может повезет и ты найдешь нетипичный флопарь с полноценным движком.

Схема управления шаговым двигателем
Я разжился контроллерами шаговиков L297 и мощным сдвоенным мостом L298N.

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

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

Матричная клавиатура

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

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

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

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

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

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

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

Система моделирования ISIS Proteus. Быстрый старт.

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

Собранная виртуальная схема
Собранная виртуальная схема

Вообще существует масса систем моделирования электронных схем. Из всех, что я видел мне наиболее понравились Multisim и ISIS Proteus. Multisim обладает очень удобным интерфейсом, и в нем удобно отлаживать аналоговые девайсы, т.к. он позволяет использовать виртуальные (т.е. параметры ты указываешь сам) транзисторы и усилители, но совершенно не поддерживает сложные системы, вроде микроконтроллеров или разного рода драйверов. Точнее поддерживает, но крайне вяло. Только недавно в нем появилась поддержка древних АТ89C2051 и нескольких PIC‘ов

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

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

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

Извращенский ШИМ из 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)

AVR. Учебный курс. Передача данных через UART

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

Почти каждый микроконтроллер имеет на борту универсальный последовательный интрфейс - UART. AVR тут не исключение и поддерживает этот протокол в полном обьеме полностью аппаратно. По структуре это обычный асинхронный последовательный протокол, то есть передающая сторона по очереди выдает в линию 0 и 1, а принимающая отслеживает их и запоминает. Синхронизация идет по времени — приемник и передатчик заранее договариваются о том на какой частоте будет идти обмен.

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

В конце байта, перед стоп битом, может быть и бит четности. Который получается если поксорить между собой все биты, для контроля качества передачи. Также может быть два стопа, опять же для надежности. Битов может быть не 8, а 9. О всех этих параметрах договариваются на берегу, до начала передачи. Самым же популярным является 8 бит, один старт один стоп, без четности.

Причем с самим протоколом можно не заморачиваться - все реализованно аппаратно. Разве что захочется завести второй UART, тогда придется делать его программно.

По такому же протоколу работает COM порт компьютера, разница лишь в разнице напряжений, поэтому именно этот протокол я буду использовать для связи микроконтроллера с компом. Для преобразования напряжений используется RS232-TTL конвертер.

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

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

Колхозные технологии.

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

Колхозим плату
Колхозим плату
Давеча, в нашей дяревне завезли чудо иноземное - фоторызыст! Коий и был испробован. Результаты получились не впечатляющие. Да, то что хотелось получилось, но никакого восторга или удовольствия от процесса. Сплошной геморрой. Но было прикольно. Основная проблема — прижим фотошаблона. Как ни старался всегда где-нибудь да оставались пузыри, где шаблон хоть на пол миллиметра да отходил. Как результат — засветились дорожки. Будь они чуть тоньше их бы вообще не стало. Спасло то, что их ширина была почти 0.6мм. Прижимал листом оргстекла толщиной 10мм. Текстолит весь обычно кривой, оргстекло, даже такое толстое, гнется, поэтому центр вспучивает. Короче, проблема прижима больших фотошаблонов (не меньше чем А4) стоит остро как никогда. Ибо платы меньше чем А4 делать резистом западло — ЛУТом выходит дешевле и быстрей, а главное геморроя меньше в разы.

З.Ы.
Плохая новость: у меня сейчас дикие запарки, поэтому новых статей на сайте не будет еще дня два три.

Хорошая новость: появился более менее нормальная мыльница которая умеет снимать относительно светлое видео. Так что будет видео! Но опять же дня через два три.

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


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

Реклама: