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

25.07.2013

Freeduino One c microUSB

Однажды, в комментах мне попеняли на "любовь к большим разъемам USB". В другой раз услышал в личной беседе пожелание использовать microUSB, потому что "к нему проще найти кабель".

"Ну что же..." - подумал я, и:


Старшие товарищи тут же меня обсмеяли, заметив, что microUSB - крайне ненадежный и хлипкий разъем, который обязательно сломается или сгорит. То ли дело, например, такой:


Но если серьезно, меня сильно порадовало высвободившееся на плате место, это дает определенный простор для творчества (в прямом и переносном смысле).

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.

07.04.2011

Freeduino ONE

С самого начала, Arduino Uno восхищал меня возможностью переделки в любое USB-устройство при помощи смены прошивки ATmega8u2. Но экспериментировать с оригинальной итальянской платой было откровенно жалко, и как-то постепенно я пришел к идее сделать свою собственную модификацию - Freeduino One. В итоге получился полный аналог Arduino Uno:


Я честно исходил из того, что использованные компоненты должны быть доступны - иначе, какой смысл? Именно поэтому вы и наблюдаете на фото:

  • ATmega8u2 в TQFP-корпусе - по крайней мере он без труда поддается пайке;
  • Оба резонатора - кварцевые, не ловлю кайф на миниатюризации, тем более с потерей точности;
  • Миниатюрные сборки резисторов мощностью 0,065 Вт заменены на резисторы типоразмера 0603 - кроме той, что у разъема USB - уж больно красиво смотрится;
  • У регулятора 3,3В появился шунтирующий конденсатор (как и положено по datasheet-у) - собственно, это самое серьезное изменение в схеме.
В целом - получилось вполне симпатично. И, конечно же - без пижонства я не смог. Не в свою сторону, просто за державу теперь уже не обидно: 



Всвязи с вышеперечисленным, обещаю несколько статей, посвященных эксперименам над прошивкой ATmega8u2. 

Схема (кликабельно для увеличения, как и все фотки в этой статье):