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

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

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

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

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

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

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

(далее…)

Read More »

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

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

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

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

(далее…)

Read More »

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

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

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

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

(далее…)

Read More »

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

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

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

(далее…)

Read More »

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

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

(далее…)

Read More »

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

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

Предыстория
Разводил я плату, того самого универсального пульта. И была у меня там обычная матричная клавиатура — строки и столбцы. По столбцам сканируется, по строкам считывается. Элементарно. Собрал, запрограммировал опрос клавиатуры и выдачу символов на экран.
 

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

(далее…)

Read More »

Свершилось!

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

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

Read More »

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

Камрад 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 их спокойно тянет. При этом они отличаются вполне сносным моментом и оборотами.

(далее…)

Read More »

AVR. Учебный Курс. Отладка программ. Часть 4

Продолжаем трактат об отладке программ. На этот раз в бой идут одни старики.
 

Осциллограф
Очень часто хочется в динамике поглядеть как работает программа. Особенно если ее структура сложней чем просто суперцикл. Если там конечные автоматы на прерываниях или разделение задач на флаговом автомате/очередном диспетчере, то аналитическое тупление в код и прогоны в отладчике мало что дадут — наслоение прерываний, процессов в очереди, стадии и взаимодействие разных конечных автоматов взорвут мозг кому угодно. А если еще программа не написана с нуля, а собрана из кучи чужих исходников, да даже если из своих, но древних и уже забытых.
 

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

Для примера возьму ту программу, что идет в доке к демоплате Pinboard. Там стоит мой диспетчер очереди, а также немного автоматики на прерываниях. Плюс старая библиотека для HD44780
 

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

Read More »

AVR. Учебный Курс. Отладка программ. Часть 3

Метод 3. USART (Работа с последовательными интерфейсами)
Пожалуй самым популярным отладочным интерфейсом является все же USART. Во-первых, он поддерживается аппаратно почти всеми микроконтроллерами. Во-вторых, он прост в использовании и требует всего один/два сигнальных провода, а в третьих, для связи с компом не надо городить никаких специфичных девайсов. В худшем случае UART-USB или UART-RS232 конвертер на FT232RL или MAX232.
 

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

1
2
3
4
5
6
7
8
9
10
11
12
; Usart INIT
		.equ 	XTAL = 8000000 	
		.equ 	baudrate = 9600  
		.equ 	bauddivider = XTAL/(16*baudrate)-1
 
uart_init:	LDI 	R16, low(bauddivider)
		OUT 	UBRRL,R16
		LDI 	R16, high(bauddivider)
		OUT 	UBRRH,R16
 
		LDI 	R16,0
		OUT 	UCSRA, R16

 

1
2
3
; Прерывания запрещены, прием-передача разрешен.
	LDI 	R16, (1< <RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
	OUT 	UCSRB, R16

 

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

Read More »

AVR. Учебный Курс. Отладка программ. Часть 2

Метод 2. Моргалки (Работа портами Ввода-вывода)

Трассировка и аналитика это все замечательно, но когда мы начинаем отлаживать что то внешнее, то тут трассировка нам поможет мало. Т.к. глючить может не внутри, а снаружи.
 

Либо у нас будет не глюк, а банальное непонимание ситуации. Фразу из даташита, например, неправильно перевел или глаз замылился. Что то забыл или не туда припаял. Да мало ли как можно накосячить.
 

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

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

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

А у вывода может быть три состояния — Hi, Lo и Hi-Z. Так что рекомендую скреативить такой вот пробничек:
 

 

Тогда если у нас Hi-Z то будут тускленько гореть оба диода. Ну, а на соответствующий уровень свой диод в гордом одиночестве.
 

А в код пихаем дебажные секции вида:
 

1
2
3
;Set Hi
	SBI	DEBUGDDR,DEBUG
	SBI	DEBUGPORT,DEBUG
1
2
3
;Set Lo
	SBI	DEBUGDDR,DEBUG
	CBI	DEBUGPORT,DEBUG
1
2
3
;Set Hi-Z
	CBI	DEBUGDDR,DEBUG
	CBI	DEBUGPORT,DEBUG

 

Можно их в макросы завернуть. Удобней будет.
 

По состоянию дебаг вывода мы можем увидеть в каком месте программа прошла. А комбинируя нашу троичную систему получим целых 9 возможных комбинаций на 2 вывода.
 

Однако если у нас надо отследить последовательность, то мы можем и не успеть разглядеть переимгивание светиков. Но никто не мешает воткнуть в код после смены состояния дебагвывода тупую задержку вида:
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
	PUSHF			; Макрос сохранения флагов
	PUSH 	R16
	PUSH	R17
	PUSH	R18
 
	LDI	R16,255	; Грузим три байта
	LDI	R17,255	; Нашей выдержки
	LDI	R18,255
 
Dloop:	SUBI	R16,1		; Вычитаем 1
	SBCI	R17,0		; Вычитаем только С
	SBCI	R18,0		; Вычитаем только С
 
	BRCC	DLoop 		; Если нет переноса - переход
 
	POP	R18
	POP	R17
	POP	R16
	POPF			; Макрос восстановления флагов

 

Оформляется как прерывание для того, чтобы иметь минимальное влияние на код. Можно тоже оформить в виде макроса и втыкать его одной строчкой. Запрет прерываний опционально.
 

Либо вставлять затуп:

1
	RJMP 	PC

 

Контроллер на этой команде встанет и дальше никуда не пойдет (правда если включен вачдог, то он ребутнется по вачдогу).
 

А можно же сразу после задержки перевести отладочный вывод в режим входа PullUp и просить кнопку пробника. Если нажата, можно идти дальше. Можно и без задержки, сделать, но надо смотреть, чтобы дребезг не помешал.
 

1
2
3
4
5
6
;STOP DB_BTN
	CBI	DEBUGDDR,DEBUG
	SBI	DEBUGPORT,DEBUG	
 
	SBIC	DEBUGPIN,DEBUG
	RJMP	PC-1

 

Можно просто наставить таких кнопочных чекпоинтов. И пускать программу по ним своей могучей волевой рукой. А пока программа тупит на задержках или ожиданиях кнопок, можно спокойно замерить напряжения/пощупать лог уровни, состояние других выводов, да просто подумать.
 

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

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

Read More »

AVR. Учебный Курс. Отладка программ. Часть 1

У каждого случалась такая ситуация — программа вроде бы написана, даже компилится, но не работает. Почему не работает? Дак все же просто — в ней есть лажа!
 

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

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

Метод 0. Тупление в код (Аналитический)
К моему великому удивлению, данный метод является наиболее популярным в народе и, а у начинающих порой единственным.
Видимо сказывается засилье всяких высокоуровневых языков вроде ПОХАПЭ или Си, где такое вполне может и проканать. Там да, можно пофтыкать несколько минут в исходник, глядишь да найдешь где накосячил.
 

И по наивности, не иначе, новички пытаются этот метод применить к своим ассемблерным программам.
 

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

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

Хотя я, в свое время, изучал ассемблер вообще без компа — не было его у меня. Тетрадка в клеточку, команды i8008 в столбик. А потом и Z80 с его божественным ассемблером. И опять без отладчиков, аналитически. Ляпота! Но вот когда я сел за ассемблер 80С51, в первую же очередь я нашел нормальную IDE с эмуляцией — Keil uVision. А эра х86 прошла под знаменем Borland Turbo Debugger и TASM. Когда моя первая 128 байтная интруха полыхнула по экрану пиксельным пламенем клеточного автомата… да ощущения были еще те. Где то ее сорцы валяются, надо поискать.

 

В написании может быть, но вот в отладке нифига подобного. Так как нечего тут думать. Ассемблер это как лопата — берешь и копаешь, а не думаешь как там поршни и трансмиссия в экскаваторе крутится.
 

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

Под каждый стиль написания кода свои инструменты отладки. Поэтому переходим к другому методу. (далее…)

Read More »

Работа с АЦП. Программные средства повышения точности

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

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

Берем и снимаем не одно измерение, а сразу кучу. А потом берем по ним среднее арифметическое. Так как полезный сигнал у нас константен, то его составляющая такой и останется, как ее не усредняй, а вот шум изрядно приглушит. И чем больше выборок мы сделаем, тем сильней задавит шумовую составляющую. Западло этого метода очевидно — резко снижается скорость обработки. Так как вместо одной выборки нам приходится делать серию и объявлять ее как одну, но это неизбежное зло.

В качестве демонстрации метода я приведу пример усреднения. Программка простая, хватает 64 выборки, усредняет их и отправляет по UART. Сразу отмечу тот факт, что для эффективного подавления шума нужно чтобы частота выборок была ниже частоты всяких паразитных колебаний (вроде 50Гц наводок от сети) раза в два три, иначе у нас эти колебания благополучно пролезут как полезный сигнал. А еще число выборок нужно брать кратным двойке, чтобы можно было делить простым сдвигом. Впрочем, смотрите на код, там будет более понятно. Весь код я выкладывать не буду, только главный файл. Все инициализации АЦП и UART, а также ряд служебных процедурок я оставлю за кадром. Если интересно, то вы всегда можете скачать проект и посмотреть сами. Сбор числа у меня идет в прерывании от АЦП, а деление в прерывании по передаче. Так минимизируется число действий выполняемых процом. Хотя растягивание прерываний это не есть гуд. Но городить флаговую операционную систему мне тут впадлу, впрочем, дойдет и до нее время. (далее…)

Read More »

Работа с АЦП. Аппаратные средства повышения точности

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

АЦП = (Vin * 2n)/Vref

Где, n — разрядность АЦП.
Поэтому желательно использовать специальную микросхему — Источник Опорного Напряжения, например, ADR420 или REF195. Стоить они могут недешево — сотни рублей, но зачастую оно стоит того. Прецизионная аналоговая электроника в принципе не дешевая. По началу я тоже пугался ценам в 500-600 рублей за какой то там усилитель. А сейчас ничего, привык :) Впрочем, в фанатизм впадать не стоит. На худой конец, если используется AVR, точность которой 2МЗР (младший значащий разряд, если забыл) на десяти битах, то можно не заморачиваться с дорогущими ИОН и городить что попроще, например на LM336Z-5.0, включаемых подобно стабилитрону, только куда более точному. (далее…)

Read More »

AVR. Учебный Курс. Выдача данных с АЦП на UART. Мультиплексирование каналов АЦП

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

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

Теоретическую часть я уже разобрал, осталось поставить эксперимент в реальном железе.

Собираем схему на демоплате Pinboard.
Нам нужны три разных напряжения. Их проще всего получить с переменных резисторов, включенных потенциометрами. При этом средняя точка переменного резистора подключается к каналу АЦП, а крайние точки к +5 и GND питания. При этом при вращении рукоятки резистора напряжение на его средней точке будет меняться от нуля до +5 вольт. Резистор, подключенный к каналу ADC0 уже так включен и никаких лишних движений не требует. А вот два других надо будет подключить. На видео и на фотках хорошо видно что и куда идет.

Поглядеть крупнее

(далее…)

Read More »

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

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

Read More »

AVR. Учебный курс. Использование АЦП

Многие AVR имеют на борту АЦП последовательного приближения.
АЦП это десятиразрядное, но при точности +/- 2 минимально значащих разрядов его можно смело считать восьмиразрядным :) Так как в младших двух разрядах всегда мусор какой то, не похожий на полезный сигнал. Тем не менее это неплохой инструмент для контроля напряжения, в восьмиразрядном режиме имеющий 256 отсчетов и выдающее частоту дискретизации до 15кГц (15 тысяч выборок в секунду).
 

Конфигурация источника
Сигнал в АЦП подается через мультиплексор, с одного из восьми (в лучшем случае, часто бывает меньше) входов. Выбор входа осуществляется регистром ADMUX, а точнее его битами MUX3…MUX0. Записанное туда число определяет выбраный вход. Например, если MUX3..0 = 0100, то подключен вывод ADC4.
 

Кроме того, существует несколько служебных комбинаций битов MUX, использующихся для калибровки.
Например, 1110 подключает к АЦП внутренний источник опорного напряжения на 1.22 вольта. А если записать в MUX3..0 все единицы, то АЦП будет изнутри посажено на землю. Это полезно для выявления разных шумов и помех.
 
(далее…)

Read More »

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 ATMega16
Для других моделей AVR все очень и очень похоже, просто мне так удобней. Если будет затруднение спросишь в комментах.
Мега16 имеет на борту компаратор, со входами AIN0(прямой вход) и AIN1(инверсный вход) (далее…)

Read More »

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

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

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

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

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

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

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

Read More »