Tag Archives: AVR

Микросхемы из Китая

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

Очень часто можно нарваться на перемаркировку, как, например, я в посте про поиск глюков NC и ПИЛУ. Там я вместо NCP551SN30 купил перемаркированные под него LP2985-30 в результате получил веселые эффекты.

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

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

Но это все фигня, проблема решается еще на этапе конструирования и не ведет к каким-либо проблемам. Хуже когда нарываешься на глючные микроконтроллеры или другую сложную логику. Ниже будет несколько случаев на которые я лично напоролся покупая комплектуху в Китае.

(далее…)

Read More »

Работа с графическим дисплеем WG12864 на базе контроллера KS0107

Обычно для вывода информации сигнального дисплея на HD44780 более чем достаточно. Но иногда нужно нарисовать картинку, график или хочется сделать красиво, с модными менюшками. Тут на помощь приходят графические дисплеи. Одним из самых простых и доступных является дисплей на контроллере KS0107 или аналоге. Например, WG12864A от Winstar. Сам дисплей вполне свободно достается, имеет довольно большой размер (диагональ около 80мм) и разрешение 128х64 пикселя. Монохромный. Цена вопроса 400-500р.
 

Вот такой вот:

(далее…)

Read More »

Работа с резистивным сенсорным экраном

Хоть резистивный touchscreen и является устаревшим и активно вытесняется емкостными сенсорами, но тем не менее он еще не скоро канет в Лету. Во первых из-за простоты и дешевизны, а во вторых из-за элементарной работы с ним.

Конструктив
Итак, как он устроен. Там все очень и очень просто. Есть две пленки, сделанные из проводящего материала, а между ними гранулы диэлектрика. Когда касаемся пальцем, то продавливаем зазор между пленками и контачим верхнюю на нижнюю. Ну, а определить координаты касания уже дело несложное.

Для этого на каждую пленку нанесено по два электрода. Слева-справа на одной и сверху-снизу на другой. Крест на крест, в общем. Поскольку сопротивление пленки довольно большое, под сотни ом, то образуются как бы два перпендикулярных резистора, висящие друг над другом.
(далее…)

Read More »

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

Иногда полезно иметь в системе часы отсчитывающие время в секундах, да еще с высокой точностью. Часто для этих целей применяют специальные микросехмы RTC (Real Time Clock) вроде PCF8583. Вот только это дополнительный корпус, да и стоит она порой как сам МК, хотя можно обойтись и без нее. Тем более, что многие МК имеют встроенный блок RTC. В AVR его правда нет, но там есть асинхронный таймер, служащий полуфабрикатом для изготовления часиков.

Первым делом нам нужен часовой кварц на 32768Герц.

Почему кварц именно 32768Гц и почему его зовут часовым? Да все очень просто — 32768 является степенью двойки. Два в пятнадцатой степени. Поэтому пятнадцати разрядный счетчик, тикающий с частотой 32768 Гц, будет переполняться раз в секунду. Это дает возможность строить часы на обычной логической рассыпухе без каких либо заморочек. А в микроконтроллере AVR организовать часы с секундами можно почти без использования мозга, на рефлексах периферии.

Асинхронный режим таймера
Помните как работают таймеры? Тактовая частота с основного тактового генератора (RC внешняя или внутренняя, внешний кварц или внешний генератор) поступает на предделители, а с выхода предделителей уже щелкает значениями регистра TCNT. Либо сигнал на вход идет с счетного входа Тn и также щелкает регистром TCNT

Структура же Timer/Counter2 немного отличается от остальных — у него нет счетного входа, зато есть возможность задействовать собственный тактовый генератор.

Для этого на выводы TOSC2 и TOSC1 вешается кварцевый резонатор. Низкочастотный, обычно это часовой кварц на 32768Гц. На Pinboard он смонтирован справа от контроллера и подключается перемычками. Причем тактовая частота процессора должна быть выше как минимум в четыре раза. У нас тактовая от внутреннего генератора 8Мгц, так что нас это условие вообще не парит :)

Часовой кварц вешается просто на выводы. Без конденсаторов и каких либо заморочек.
(далее…)

Read More »

Ключ от всех дверей 2

В последнее время часто приходится таскать с собой несколько домофонных ключей (aka iButton).

По-началу их было всего два и меня это не сильно напрягало, но вскоре в связку добавилась ещё пара таблеток.
И как на зло, они все были одинаковые на вид/цвет/вкус, поэтому приходилось подбирать ключ методом тыка, тупя у двери.
И вот, в один прекрасный день, я решил, что с этим надо что-то делать. Либо подписывать все ключи, но от связки это не избавляет, либо — искать альтернативу.

Эмулятор
К счастью альтернатива оказалась, в буквальном смысле, под рукой.
Маленький эмулятор ключей на базе ATTiny13V-10SSU. Сделан он был в начале лета, эксперимента ради.
После пары испытаний, валялся без дела у меня в ящике, как инопланетное оружие в зоне 51. Главное его достоинство заключается в том, что ему не нужно внешнее питание. При работе эмулятор питается от домофона, что избавляет от возни с батарейками.
(далее…)

Read More »

Пульт дистанционного управления для фотоаппаратов Canon и Nikon

Сильмаллирион
Случилось так, что примерно в одно и то же время у одних знакомых появился фотоаппарат Nikon, у другой знакомой — Canon, а в интернете я наткнулся на замечательную статью про пульт ДУ к ним.

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

Братство Кольца
Немного теории, найденной на просторах интернета:
для фотоаппаратов марки Canon собирается пульт RC-1 (RC-5 это такой же пульт, только без «моментального спуска»)

-Несущая частота 33 кГц:
-команда «Спуск»: посылка 480 мкс, пауза 7324 мкс, посылка 480 мкс
-команда «Спуск с 2 сек. задержкой»: посылка 480 мкс, пауза 5371 мкс, посылка 480 мкс

Важно!
Не у всех фотоаппаратов Canon есть ИК приёмник (обычно расположен на ручке, под спусковой кнопкой). Смотрите инструкцию к своему фотоаппарату!

Nikon выбрал себе алгоритм похитрее, но всё равно мы и его скопируем:

-Несущая частота 40 кГц:
-команда «Спуск»: посылка 2250 мкс, пауза 27600 мкс, посылка 650 мкс, пауза 1375 мкс, посылка 575 мкс, пауза 3350 мкс, посылка 650 мкс. Потом пауза в 63 мс (милли- не микро-!!!) и повтор всей последовательности еще один раз

(далее…)

Read More »

Создание Bootloader’a

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

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

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

Конечно можно взять один из OVER чем 9000 готовых бутлоадеров на Сях и доработать напильником, переделать под задачу, но мне давно было интересно разобраться в теме самопрошивки МК. И, думаю, не только мне, поэтому вооружившись даташитом и найдя скудную документацию на утилиту AVRprog я сел за AVR Studio изобетать велосипед — писать свой загрузчик. Естественно на асме (под 8ми битки только на асме пишу).

Так, для разгрева, разработаем проект бутлоадера с прошивкой по RS232 и поддержкой протокола AVRprog v1.4, а дальше можно его заточить хоть под I2C или SPI, RS485 и т. д.
(далее…)

Read More »

AVR. Учебный Курс. Использование AVR TWI для работы с шиной IIC (i2c)

Про шину IIC я писал уже неоднократно. Вначале было описание протокола, потом пример работы в лоб, а недавно камрад Ultrin выложил пример работы с i2c на базе блока USI. Да и в интернете полно статей по использованию этой шины в своих целях. Одно плохо — все они какие то однобокие. В подавляющем большинстве случаев используется конфигурация «Контроллер-Master & EEPROM-Slave». Да еще и на программном мастере. И ни разу я не встречал материала, чтобы кто то сделал Контроллер-Slave или описал многомастерную систему, когда несколько контроллеров сидят на шине и решают арбитражем конфликты передачи. Пустоту пора заполнять, решил я и завязал узелок на память… Да только веревочку пролюбил :)

Обещаного три года ждут, вот я таки пересилил лень, выкроил время и сообразил полноценную библиотеку для работы с аппаратным модулем TWI, встроенным во все контроллеры серии MegaAVR. Давно грозился.

Кошмар на крыльях ночи
Во-первых, я сразу же отказался от концепции тупого последовательного кода. Когда у нас есть некоторая функция SendByte(Address,Byte) которая шлет данные по шине, а потом возвращает 1 или 0 в зависимости от успешности или неуспешности операции. Метод прост, дубов, но медленный. Т.е. пока мы байт не пошлем мы не узнаем ушло ли оно, а значит будем вынуждены тупить и ждать. Да, шина i2c может быть очень быстрой. До 100кбит ЕМНИП, но даже это время, а я все же за высокоскоростное выполнение кода, без тормозных выдержек. Наш выбор — диспетчеризация и работа на прерываниях.

Суть в том, что мы подготавливаем данные которые нужно отослать. Дальше запускаем аппаратуру передачи и возвращаемся к своим делам. А зверский конечный автомат, что висит на прерывании TWI передатчика сам передает данные, отвлекая основную программу только тогда, когда нужен какой-либо экшн (например сунуть очередной байт в буфер передачи). Когда же все будет передано, то он генерит событие, которое оповещает головную программу, что мол задание выполнено.
Как? Ну это уже от конкретной реализации событий программы зависит. Может флажок выставить или байт состояния конечного автомата подправить, а может и задачу на конвейер диспетчера набросить или Event в почтовый ящик задачи скинуть. Если юзается RTOS.
(далее…)

Read More »

Датчик Холла

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

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

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

Read More »

AVR toolchain своими руками

DI HALT:
В догонку к прошлому посту про AVR Studio в Linux досылаю и про сборку avr-libc там же. Вынесено из комментов к предыдущему посту. Спасибо Dark SavanT

Если есть возможность поставить готовый тулчейн из пакета, лучше воспользоваться ей.
преимущество самосборного в том, что все что надо, лежит там где сказано и не засоряет /usr/*. Но тут мы теряем автоматические обновления из пакетов. Короче, думайте сами, решайте сами.

Поехали!
В минимальной комплектации нам понадобятся:

  • binutils — это ассемблер, линкер, objdump и еще куча необходимых для сборки бинарника вещей
  • gcc — собственно сам компилятор.
  • avr-libc — стандартная библиотека С для AVR архитектуры.
  • avrdude — программа для прошивки. Хальт про нее не раз писал.

для того, чтобы это все безобразие собралось, нужен установленный в системе gcc, bash, awk, binutils, libc, может что-то еще забыл.
(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Работа с памятью, адреса и указатели

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

Итак, начну по порядку.
Инфа, любая инфа (команды, данные) лежит в памяти по ячейкам. У каждой ячейки есть порядковый номер — адрес.

Мы можем напрямую сказать процессору — возьми данные из ячейки с адресом 0xA0 и положи его в ячейку с адресом 0x11. Это будет прямая адресация. Здесь адреса 0xA0 и 0x11 содержатся напрямую в машинном коде. Это очень быстро, просто и не требует никаких дополнительных телодвижений. Один минус — адреса 0xA0 и 0x11 нельзя изменить, как мы их впишем в код, так они там и останутся.

Но может быть и другой способ. Когда у нас есть еще две ячейки памяти. Например, А и Б в которые мы предварительно положим числа 0xA0 и 0x11 соответственно. И тогда предыдущая операция будет выглядеть так.

Возьми число из ячейки адрес который лежит в А и положи в ячейку адрес которой узнаешь из Б.

Результат тот же, но возникло множество дополнительных телодвижений. Во первых положить первоначальные адреса 0xA0 и 0x11 в ячейки А и Б. Потом, при совершеннии операции, используая данные ячеек А и Б как адреса, взять уже оттуда нужные нам данные и совершить обмен.

Но прелесть вся в том, что при этом мы можем как угодно менять А и Б (ведь это такие же переменные как и любые другие) и они будут указывать на разные данные.

А один и тот же кусок кода становится универсальным. Он может работать с любыми данными адреса которых нам укажут переменные А и Б.

А сами эти переменные и будут указателями.
(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Атомарные операции.

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

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

Итак, есть у нас такой код (не ищите в нем практического смысла, я его просто как пример работы с разными операндами написал):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
volatile char flag_byte; 	
/*Просто флаговая переменная, на разные случаи жизни. Разные события там 
выставляют флажки, опираясь на которые потом работает логика программы. 
Один из способов организации псевдомногозадачности. Когда у нас главный цикл 
анализирует флажки и делает переходы на подпрограммы, а вызов подпрограмм 
осуществляется не напрямую, а установкой соответствющих флажков. Своего 
рода диспетчер переходов. О такой архитектуре я скоро расскажу)*/
 
ISR (USART_RXC_vect)	// Обработчик прерывания, самый обычный.
{
flag_byte|=1< <rcv_buff;
...
...
}
 
int main (void)		// Главная программа
{
INIT_ALL();
SEI();
...
...
...
TCCR0A  	|=1<<WGM01;
...
flag_byte 	|=1<<options;
...
PORTB 	&=~(2<&lt;1);
...
}

(далее…)

Read More »

Скоростной AVR USB программатор на FT232RL без вспомогательного контроллера

При работе с микроконтроллерами важнейшим девайсом являетя программатор, именно он может залить в МК нашу программу. Он же часто становится камнем преткновения на пути освоения AVR.
 

Дело в том, что для работы простейшего программатора, не требующего в своем составе микроконтроллера, нужен компьютер с COM или LPT портом, причем желательно с частотой процессора не выше гигагерца-двух. Да операционную систему подревней — WinXP или Win2K. А это ныне редкость.
 

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

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

Bitbang, что это такое и с чем его едят
Это не что иное как прямое управление выводами какого либо порта. В COM порт можно отправить байт через какой либо высокоупровневый API и он просто выйдет через линию TX потоком стандартого RS232 сигнала.
А можно достучаться напрямую до регистров отвечающих за состоянием каждого пина порта и дрыгая их как нам угодно сэмулировать через тот же COM порт не только RS232, но и SPI, I2C или Dallas 1-wire, HD44780 протокол, применив простейший тупой обвяз. Это и будет битбанг.
 

В старых программаторах вроде SiProg (PonyProg) или в схеме Громова так и было сделано с COM портом. И работало надежно и стабильно. Но, увы, СОМ порт ушел в небытье, а при попытке сделать то же самое с виртуальным COM портом на конвертере USB-RS232 ничего не получалось. Т.к. заточен он был все же на работу нормального COM порта, а для битбанга приходилось извращаться. В результате такие схемы либо не работали вовсе, либо работали ОЧЕНЬ медленно, прошивая контроллер за час-полтора, что ни в какие ворота не лезет.
 

Все изменилось с появлением микросхемы конвертера USB-UART FT232R у которой стал доступен битбанг режим не через виртуальный COM порт, а напрямую через драйвер FTDI. И вот тут наступила нирвана.
 

За битбанг там отвечает 8 выводов. Вот их раскладка.

 
В даташите ее нет, но она есть в аппликухе Application Note AN_232R-01 for the FT232R and FT245R Bit Bang Modes
 

В результате, из одной только FTDI получается первоклассный скоростной программатор, прошивающий 16кб прошивки за 10-12 секунд и это вместе с верификацией!!!
 

А из деталей надо ТОЛЬКО микросхему FT232RL, два конденсатора на 0.1uF и гнездо USB. ВСЕ! Ну и проводочки естественно.
 

Схема включения получается следующей:

(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Часть 4

Теперь глянем на нашу программу, скомпилим, прошьем, поглядим как выполняется.

Зашиваю все через AVR Prog в Pinboard и смотрю на поведение LED1 и LED2.

LED1 мигает как и задумано, но стоит мне попытаться зажечь LED2 отправкой с терминала «1», как первый диод гаснет. И наоборот — зажженый диод LED2 гаснет вместе с первым. Бага! Причем жирная такая. Рассмотрим откуда она взялась.

Вот код мигания первым диодом:

1
2
3
4
LED_PORT=1< <LED1;
_delay_ms(1000);
LED_PORT=0<<LED1; 
_delay_ms(1000);

А вот код работы с вторым диодом:

1
2
3
4
5
6
switch(UDR)
	{
	case '1': LED_PORT = 1< <LED2; break;
	case '0': LED_PORT = 0<<LED2; break;
	default: break;
	}

Как видишь, тут мы пишем в один и тот же порт, но вот только биты разные. Но нельзя вот так просто через операцию «=» изменить один бит! (только если мы используем битовые поля, о них я расскажу позже). Так что операция идет с целым байтом, и в LED_PORT поочередно записывается число 00100000 (1<<LED2) и 00010000 (1<<LED1), перезаписывая друг друга. Поэтому когда происходит запись одного значения мы теряем прердыдущее. А 0<<LED2 это по факту просто 0, потому что как ноль по байту не двигай нулем он и останется .

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

Как быть? Тут нам помогут битовые маски. Помнишь логические операции AND/OR/NOT/XOR?
(далее…)

Read More »

AVR. Учебный Курс. Программирование на Си. Часть 3

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

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

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

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

Поскольку прерывание приходит ВНЕЗАПНО, а у нас могут быть несохраненные данные, то обработчик их должен сохранить и при выходе в фоновую программу вернуть все как было.

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

Read More »

AVR. Учебный Курс. Программирование на Си. Часть 1

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

К сожалению все хотят результат немедленно. Поэтому я решил пойти с другой стороны — сделать обучалку по Си, но с показом его нижнего белья. Хороший программист-эмбеддер всегда крепко держит свою железку за шкварник, не давая ей ни шагу ступить без разрешения. Так что будет вначале Си код, потом то что родил компилятор и как все это работает на самом деле :)

С другой стороны у Си сильная сторона это переносимость кода. Если, конечно, писать все правильно. Разделяя алгоритмы работы и их железные реализации в разные части проекта. Тогда для переноса алгоритма в другой МК достаточно будет переписать только интерфейсный слой, где прописано все обращение к железу, а весь рабочий код оставить как есть. И, конечно же, читаемость. Сишный исходник проще понять с первого взгляда (хотя.. мне, например, уже пофигу на что фтыкать — хоть си, хоть асм :) ), но, опять же, если правильно все написать. Этим моментам я тоже буду уделять внимание.

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

Дальше все будет разжевано буквально по шагам для старта с полного нуля. (далее…)

Read More »

Оболочки для USBASP

Вот уже почти два года активно использую USBasp в качестве основного программатора. Все мне в нем нравится, кроме прошивающей программы — avrdude консольная, а мне под каждую прошивку писать свой батник лениво.
Да и начинающим порой разобраться в прорве его ключей бывает сложно. Так что будем натягивать на него ГУЙ ака Графически Удобный Йнтерфейс. Их существует с пол десятка я же отобрал наиболее удачные, на мой взгляд, оболочки.
(далее…)

Read More »

Робоконструктор MicroCamp

В Элементе появилась очередная игрушка, так что я не устоял и подорвался туда с фотиком.
Итак, это робоконструктор, подобный RoboPICA, но на этот раз на ATmega8 и колесном шасси. Этакая вертлявая каракатица на двух колесах и двух шариках, поворачивает по тракторному — реверсом колес. Проходимость у ней, конечно, не танковая, но зато по маневрености она гусеничному шасси огромную фору даст. (далее…)

Read More »

Программатор STK200/300 для микроконтроллеров AVR

DI HALT:
Признаюсь, что я этот программатор никогда не собирал, т.к. у меня с первого раза заработала и никогда не подводила схема Громова. Однако, судя по многочисленным комментариям, эта схема работает далеко не у всех и тут не все гладко. Даже если есть COM порт, то не факт что он захочет правильно работать в таком режиме. Многое зависит и от операционки, и от тактовой частоты проца. В общем, грабель там закопано много. Но есть еще варианты относительно простой прошивки микроконтроллеров AVR — это программатор на LPT, аналог STK500/300. В своей простейшей модификации «пять проводков» не требует вообще ничего, даже резисторов. Соединяешь все напрямую и шьешь. Правда пожечь LPT порт тут проще простого. C токоограничитльными резисторами все безопасней, однако и это не спасает. Помогает установка буфферной микросхемы 74HC244.
И получаем STK200! Достоинства этой схемы в том, что это классика жанра. Ее поддерживают по моему вообще все прошивающие программы и оболочки. В том числе и разные среды разработки вроде CVAVR. Надежная и простая, как кувалда, схема. Недостаток один — нужен LPT порт, который ныне редкость.
Но что мешает под свои радиоопыты завести древнюю машинку уровня PIII-500 которую можно собрать из хлама за пиво? И работать будет все отлично и пожечь не жалко. Ну, а вдоволь наигравшись с STK и поняв премудрости процесса прошивки в деталях, можно собрать и USB программатор. А тут Михаил (Code007) написал отличную статью по сборке этого девайса. Грех не выложить.

В настоящее время микроконтроллеры AVR фирмы ATMEL получили весьма широкое распространение. Это обусловлено небольшой стоимостью, развитой периферией, доступностью и удобством средств разработки. Несомненным достоинством процессоров этой серии является возможность внутрисхемного программирования с использованием интерфейса SPI.
Для начала работы с этими микроконтроллерами необходимо обзавестись какими либо средствами осуществляющими внутрисхемное программирование. Существует достаточно большое количество различных конструкций программаторов, но на первоначальном этапе вполне подойдет адаптер STK200/300. В данной статье я попытаюсь подробно описать процесс сборки этого адаптера. Причем настоятельно рекомендую повторить конструкцию именно так, как описано, а не на куске макетной платы. Рекомендация вытекает из шести летнего использования адаптера собранного на чем попало.
Адаптер получил свое название от комплектующихся им отладочных плат фирмы ATMEL для быстрого начала работы с микроконтроллерами AT90S8515 и ATmega103 соответственно. На самом деле приведенная схема соответствует одновременно обоим адаптерам, в ней присутствуют перемычки для определения наличия как адаптера STK200 (выводы 2-12 разъема X1), так и STK300 (выводы 3-11).

Рисунок 1. Электрическая принципиальная схема адаптера STK200/300

(далее…)

Read More »