Показаны сообщения с ярлыком Arduino Uno. Показать все сообщения
Показаны сообщения с ярлыком Arduino Uno. Показать все сообщения

25.02.2012

ATmegaU breakout

По многочисленным  просьбам телезрителей знакомых, выпустил микроплатку (в народе - "брикаут") с ATmega8U2:


Идея создания была навеяна платами USB-Serial Light Adapter от Arduino и ATmega8U2 Breakout от Sparkfun (в итоге за основу был выбран второй вариант). 

С одной стороны - этот девайс с успехом заменяет FTDI friend, исполняя роль USB-TTL конвертера для связи с целевым MCU через UART или программирования в среде ArduinoIDE. С другой -  вполне себе самостоятельная отладочная плата для ATmega8U2, на которой разведены все его пины, а прошивку можно заливать через ISP6 или вообще по USB через DFU (т.е. без использования программатора). 

Некоторые моменты, на которые хотелось бы обратить внимание:

1. Джампер выбора напряжения питания - по умолчанию установлен в +5В. Если есть желание  поработать на +3.3В, можно перепаять - однако в этом случае предельная тактовая частота по паспорту будет ограничена 8 МГц, в результате может потребоваться переключиться  на внутреннюю калиброванную цепочку (надо менять фьюзы,  программатором);

2. Регулятор +3.3В. Он нужен для питания MCU от +3.3В (см. выше) и дополнительно может выдавать его наружу через соответствующий пин - всего до 150мА. Не путайте его с внутренним регулятором ATmega8U2, который служит для формирования правильного напряжения на линиях D+/D-, когда сам MCU питается от +5В. Кстати, если уж выставили Vсс = +3.3В, этот внутренний регулятор обычно отключают - через регистр REGCR,  экономя таким образом немного на энергопотреблении;

3. Предохранитель 500 мА, выручит вашу схему в случае короткого замыкания по питанию, а специальные диоды - уберегут линии D+/D- ATmega от статического разряда.

4. Гребенка выводов совместима с FTDI friend и вообще с кабелями FTDI. Можно особо не задумываясь использовать, например, с Angelino.

5. Кнопка сброса - с одной стороны - как обычно, замыкает RESET на GND. Однако, если в момент сброса линия DTR (она же пин PD7) была подтянута к земле - активизируется DFU. По крайней мере именно так ведет себя DFU в платах Freeduino ONE и Arduino UNO - но при помощи программатора и собственной прошивки это, конечно же, можно изменить.

6. Светодиод STATUS, в чем-то по функциям похожий на светодиод L в Arduino-совместимых платах Arduino - подключен к линии PB4.

Вот так рекомендуется подключать ATmega8/168/328 к этой плате по первому варианту (в режиме конвертера USB-TTL):



R2 (подтягивает DTR к GND) - необязателен при условии, что вы не прикасаетесь к кнопке сброса на ATmegaU (и действительно - зачем прерывать работу вечного двигателя прошивки конвертера USB-TTL?). Небольшой резистор R3, включенный последовательно в линию TX, защищает пин от перегрузки по току в случае, если его ошибочно посадили на VCC или GND с другой стороны (не забывайте - если на встречной стороне другая ATmega - такое можно сотворить и программно).

Если в MCU уже прошит бутлоадер, схему можно соорудить хоть на беспаечной макетке, например так:



В настройках ArduinoIDE надо выставить правильный порт и тип платы - "Arduino Uno"  (пользователи Windows дополнительно устанавливают .inf-файл от Freeduino ONE).

Программирование через DFU можно осуществлять через FLIP или dfu-profgrammer, указывая тип MCU at90usb82 - именно его и заменил (с более, чем скромными усовершенствованиями) ATmega8U2.

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

Схема:



Репозиторий на github, где можно получить исходники прошивки: https://github.com/a1ronzo/SparkFun-USBtoSerial

01.01.2012

Freeduino ONE smd

Вслед за другими производителями Arduino-совместимых плат, вынужден констатировать: ATmega328 в DIP-корпусе и дороже, и сложнее доставаем. Именно это и стало одной из причин появления платы Freeduino ONE smd
Попутно внесены мелкие изменения, соответствующие Arduino UNO R2:
  • линия HWB притянута резистором к GND - джампер UBOOT пропал с тыльной стороны платы. Это позволяет упростить загрузку новой прошивки через DFU, более подробно см. в статье DFU. В отличие от оригинального итальянского решения с номиналом подтяжки 1К, в нашем варианте выбрано более правильное 10К. 
  • Добавлено посадочное место четырехконтактной вилки bit-bang (пины PB4,PB5,PB6 и PB7). Правда, каких-либо вменяемых примеров альтернативного firmware для ATmega8u2, которые бы их использовали, я пока не встречал:

По-прежнему сохраняются отличия от оригинала в тактовой схеме - не используется керамический резонатор для основного MCU (хоть он меньше и легче, но менее точный) - оба резонатора кварцевые; резистор 1М параллельно кварцу не устанавливается (все отличия версии R1 уже обсуждались в статье Новости Arduinoстроения). 

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


24.06.2011

DFU

С момента выпуска первой версии Arduino Uno произошло небольшое изменение, связанное с процессом загрузки ATmega8u2 через DFU-бутлоадер. Если раньше надо было сначала замкнуть перемычку DFU и, удерживая ее, замкнуть замкнуть RESET и GND, то теперь надо только замкнуть сброс (ура! ;). На английском языке об этом можно почитать подробнее здесь.

А всего-то надо было добавить резистор-подтяжку 10К к земле:


Работать так действительно удобнее, поэтому на оставшиеся платы Freeduino One тут же были напаяны резисторы 10К 0805 - выглядит это гораздо надежнее и аккуратнее:



Ну и напоследок - немного о том, как изменить прошивку в ATmega8u2.

Для начала потребуется программное обеспечение, способное договориться с DFU-бутоладером о заливании новой прошивки:
При наличии готового .hex-файла, дальнейшие действия сводятся к переводу ATmega8u2 в режим DFU и заливке результата.



При подключенной шине USB аккуратно замыкаем (буквально на секунду) RESET и GND на посадочном месте гребенки программирования ATmega8u2. Далее в syslog наблюдаем отключение устройства /dev/ACM и подключение нового девайса, а Диспетчере Устройств Windows просто можете обратить внимание, что олицетворявший раньше плату Arduino / Freeduino послеодовательный порт пропал.

VID и PID этого устройства одинаковые и для Arduino Uno, и для Freeduino ONE - в противном случае не будет работать FLIP. VID будет ATMEL/0x03EB, а PID соответствует типу МК - для ATmega8u2 это будет 0x2FF7.

Теперь берете hex-файлы (в дистрибутиве ArduinoIDE они обитают в каталоге hardware/arduino/firmwares или берите из github). Дальше - в зависимости от того, чем прошиваете:

Linux

sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash Arduino-usbserial-uno.hex
sudo dfu-programmer at90usb82 reset

Windows

Тут, как всегда - всё тоже самое, но визуально. Выглядит FLIP приблизительно так:


Если на какой-то фазе что-то пойдет не так - всегда можно проделать это повторно: сам бутлоадер, естественно, никуда не денется. Но настоятельно рекомендую обратить внимание на такую деталь (особенно это касается Windows-пользователей, которым требуется установка .inf-файла с явно пробитыми VID и PID): после заливки hex-файлов из дистрибутива ArduinoIDE, вы получите пару значений VID=0x03EB и PID=0x204B, которые ATMEL от щедрот презентовал LUFA под проект USBtoSerial. Фшика в том, что на этой паре VID/PID могут сидеть разные устройства - для того, чтобы их отличать, используется поле 'release number' (это чем-то напоминает ситуацию с V-USB). И если это по какой-то причине вас не устраивает, рекомендую перед началом экспериментов сохранить оригинальную прошивку командой dump.

Альтернативный вариант - научиться самостоятельно компилировать прошивки ATmega8u2. В принципе - это тоже несложно, скачайте и распакуйте LUFA в каталог с прошивкой, например в  hardware/arduino/firmwares/arduino-usbserial. Найдите и отредактируйте в makefile путь к LUFA таким образом, чтобы он указывал на актуальное местоположение распакованного архива библиотеки, например:

# Path to the LUFA library
LUFA_PATH = ./LUFA

Убедитесь, что библиотека и исходники собираются правильно по make all. Только после этого рекомендую приступать к модификациям - например, VID/PID описаны в файле Descriptors.c.

20.05.2011

Новости Arduinoстроения

В комментах к статье о Freeduino One пользователь Сергей справедливо обращает внимание на лишние элементы в схемах тактирования, добавленные в Uno и Mega 2560:


Речь про R1 1М и R3 27Ом. Дело в том, что согласно родному ATMEL-овскому даташиту "AVR042: AVR Hardware Design Considerations", эти элементы и так уже есть внутри МК, причем R3 нужен для отдельно взятого случая - если используется резонатор 32758 кГц:



Почему итальянские модельеры авторы так сделали - остается только гадать, и меньше всего верю в то, что они не изучали этот даташит (желающие могут принять участие в народном гадании в комментах ;) По одной из версий очередная партия МК ATMEGA и резонаторов 16 МГц не захотела жить вместе, в результате чего доблестная итальянская фирма tinkerIt была вынуждена заниматься подбором дополнительной внешней обвязки. 

Замечу, что именно начиная с Arduino Uno был применен ATmega8u2 и миниатюрный керамический резонатор 16МГц - раньше такого у итальянцев не было (только в Nano v.3, но ее выпускала американская Gravitech).

Что же в итоге? Один из побочных эффектов такого решения - надежное, но зато несколько замедленное возбуждение резонатора после подачи питания, что для домашних Arduino-поделок вроде как вполне приемлемо. Я вот, например, вообще не заметил никаких побочных эффектов - Freeduino ONE работает безупречно.

Но, как говорится, время шло. Вслед за появлением знаменитой Arduino UNO на ATmega328 в DIP, появилась версия на SMD:


Объяснили это очень просто: производство ATMEL не справляется, возник дефицит чипов в DIP-корпусе. Охотно верю - в России SMD-версию достать проще и дешевле. Но если уж на то пошло - в корпусе TQFP32 ножек больше, и появляется целых два лишних входа (digital I/O или АЦП), что является просто находкой для тех, кому надо иметь чуть больше пинов и из-за этого приходится использовать MEGA. Но, увы - идея вывести их на какие-нибудь дополнительные контактные площадки или дырки авторов не посетила :(

Спустя некоторое время появилась и вторая версия Arduino UNO, схему в PDF можно скачать на все той же страничке.

Что изменилось в UNO rev.2

  • теперь уже окончательно керамический резонатор закреплен за основным МК, а нормальный кварц - за ATmega8U2 (альтернативных посадочных мест для вариантов нет);
  • токоограничительный резистор 27 Ом в схеме тактирования - убрали! Зато параллельный 1М - оставили. Видимо, эксперименты продолжаются;
  • линия сброса DTR притянута к земле резистором 1K, который "оторвали" от светодиода L (там было два и один явно лишний - поскольку он является частью микросборки из четырех штук - авторы просто решили пристроить его к делу ;) Получился как бы классический фильтр высоких частот, и смысл этого решения человечеству еще предстоит осознать ;) 
  • четыре ранее неиспользованных вывода ATmega8u2 - PB7, PB6, PB5 и PB4 выведены под вилку 2x2, что-то мне это напомнило о пропавшей X3 для bitbang-а - возможно, скоро нас ждет новая прошивка, которая будет уметь изображать что-то подобное;
  • операционный усилитель LM358 теперь может быть установлен не только в классическом корпусе SO-8, но и в SSOP - миниатюризация продолжается!
Изменения коснулись и EthernetSD shield, появилась rev.06 - и одно изменение там, прямо скажем - революционное: плата подготавливается к поддержке PoE (стандарт IEEE 802.3af). Это такая технология, которая позволяет дистанционно питать устройство по линии Ethernet, для чего в природе существуют специальные PoE-инжекторы и "питающие" коммутаторы. Поддержка требуется также и на стороне самого устройства - для Ethernet Shield это будет специальный PoE-модуль, отделяющий питающее напряжение (+48В DC) от сигнала витой пары перед тем, как подать его на интерфейсную микросхему W5100. 



Arduino с таким шилдом и модулем PoE может питаться дистанционно - теоретически, можно отдалиться по кабелю от источника до 100 метров. Сразу оговорюсь - это решение промышленное (используем по работе в своих аппаратных решениях с 2001 года). Кроме того, Ethernet-shield на чипе W5100 с PoE давно уже существует - разработан компанией Freetronics.


Всё остальное - мелкие изменения:

  • микросхема-сборка триггеров Шмидта в схеме сброса W5100 заменена на один маленький триггер в корпусе SOT23-5 - логично, занимает меньше места, нет избыточности;
  • окончательно отказано в праве на монтаж полноразмерному SD-слоту - по сути, он всё это время просто занимал лишнее место; 
  • резистивные делители для коммуникации с SD-картой заменены на буферные микросхемы 74LVC1G125DBV, что тоже логично - работать они будут стабильнее, потреблять - меньше;
  • исключен из схемы светодиод COLL, который должен был показывать коллизии на интерфейсе Ethernet. В защиту такого решения говорит то, что зажигаться он может при подключении через хаб, но где теперь можно найти Ethernet-хаб?!
  • светодиод FULLD вынесен за пределы платы. То есть он как суслик из ДМБ - как бы есть, но на самом деле - его нет.
Последний пункт тем более загадочен тем, что на реальной плате на фото светодиода FULLD нет, а в CAD-файлах он "завис" ни к чему не подключенный. Да и сами brd-файлы с разводкой содержат две воздушные перемычки - недвусмысленный намек на незавершенность и наличие ошибок. В этой связи, конечно, напрашивается вопрос о том, не выйдет ли вскоре еще одна версия. Ну, поживем - увидим ;)

20.11.2010

Arduino Uno Unboxing


Глядя на многочисленные обзоры в формате "а вот так мы это достаем из коробки", я тоже решил попробовать - тем более, что новенький Arduino Uno и впрямь неожиданно приехал в коробке. Надо ли говорить, что коробка выглядит намного таинственнее и загадочнее, чем пакетик-гриппер (пусть даже и антистатический):

02.11.2010

Arduino Uno и 3.3В


Блог проекта Hifiduino обращает внимание на ошибки в конструкции Uno, относящиеся к подаче питания 3.3В.

Как известно, в Arduino Uno отказались от использования чипа FT232RL, поэтому для поддержки совместимости с использующими пин 3,3В Shield-платами, был добавлен регулятор LP2985.

Являясь низкошумящим регулятором с малым падением напряжения (по-английски говоря, low noise и low-drop :), он еще и обеспечивает ток в три раза больше - но в спецификациях Arduino Uno почему-то по-прежнему значится 50 мА.

К сожалению, ошибкой спецификацией дело не ограничивается. При изучении схемы Uno было замечено, что и включен LP2985 не совсем так, как рекомендуется в даташите - выходной конденсатор меньше, чем требуется для низкошумящих приложений (можно достичь 30 мкВ), а шунтирующий вообще отсутствует:


С одной стороны выглядит как придирки, но в целом вписывается в общую картину разработки Arduino Uno. Если говорит одним словом, то "спешили".

26.10.2010

Замена прошивки 8u2

Собственно, вот и первая попытка видоизменить прошивку ATmega8u2 на плате Arduino Uno - с картинками, подробно и по шагам:

http://arduino.cc/en/Hacking/DFUProgramming8U2

Добавить, пожалуй, даже и нечего - просто хочется обратить внимание, что Arduino превратили в джойстик при помощи проекта LUFA (Lightweight USB Framework for AVRs). Если внимательно присмотреться к списку демонстрационных приложений, то там есть практически всё - мышь, клавиатура, Mass Storgae, Ethernet Device/Host.

И только в списке демо-плат нет Arduino - но вот как раз этот пробел, надеюсь, вскоре будет восполнен в полной мере.