18.02.2010

USB-TTL v.3

На днях разбирался с неким устройством на ATmega128, с целью превращения в Arduino-совместимую платформу.

Но поскольку на нем нет ни COM, ни, тем более, USB-портов, решил использовать свой же собственный USB-TTL конвертер. И все бы хорошо, если бы не пару но:

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

2. Нет резисторов 1К, которые включены последовательно в линии Rx и Tx. Так надежнее, особенно если в скетче есть вероятность манипулирования этими пинами.

Родилась идея создать новую версию переходника с исправлением этих мелких недостатков:



По-прежнему получилось обойтись лишь одной SMD-перемычкой 1206, удлиннив корпус на несколько миллиметров:







Part     Value          Device     Package   

C1       100n           C-EUC0805  C0805    
C2       100n           C-EUC0805  C0805    
C3       100n           C-EUC0805  C0805    
FUSE     500mA          L-EUL1812  L1812    
IC1      FT232RL        FT232RL    SSOP28   
JP1      PWR            JP1E       JP1      
JP2                     PINHD-1X5  1X05     
LED1     TX             LED3MM     LED3MM   
LED2     RX             LED3MM     LED3MM   
R1       330            R-EU_R0805 R0805    
R2       330            R-EU_R0805 R0805    
R3       0              R-EU_M1206 M1206    
R4       1K             R-EU_M0805 M0805    
R5       1K             R-EU_M1206 M1206   
X1       USB            PN61729-S  PN61729-S

Попутно поправил размер контактных площадок - если кто-то уже пробовал изготавливать эту плату, наверняка заклеймил меня нехорошим словом при сверлении отверстий под светодиоды и разъем USB. Хочу принести им свои заочные извинения ;)



Испытания нового экземпляра прошли успешно.

Скачать файл проекта USB-TTL v.3 (лицензия CC-SA).

Внутри вы найдете файлы:
  • со схемой и печатной платой в формате CAD Eagle;
  • для изготовления одной платы по ЛУТ-технологии, в формате EPS;
  • для печати сразу нескольких заготовок на одном листе (для экономии бумаги) - в формате GIMP.
(не хватает gerber274X, разве что ;)

UPD: по поводу "моей любви к огромному USB-разъему"

09.02.2010

Проводник в Seeedстудию

Название: Seeeduino Stalker
Совместимость с ArduinoIDE: да
Совместимость с Shield-платами: да
Домашняя страница проекта: www.seeedstudio.com/depot/seeeduino-stalker-p-600.html?cPath=27
Дата первого упоминания: 22.01.2010

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



Итак, Seeedstudio представило нам Seeeduino Stalker. С первого взгляда, это еще одна Arduino-совместимая плата на основе ATmega168 в TQFP-корпусе, но взглянем повнимательнее на начинку:
  • разъем для подключения XBee (тип B" - два ряда по пин с шагом 2 мм);
  • микросхема RTC с батарейкой и кварцем;
  • разъем microSD;
  • I2C-хаб с возможностью питания 3.3/5В;
  • возможность менять роль: Shield-плата или Arduino;
  • пользовательская кнопка и светодиод;
  • гребенки USART, ISP, I2C, кнопка сброса.

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



(сверху - режим Shield, внизу - режим Arduino).

В режиме Shield общение с основной Arduino-платой идет по интерфейсу I2C, с помощью библиотеки Wire. Таким образом, можно подключить сразу несколько "сталкеров" к Arduino одновременно.

Плата претендует на самую универсальную Arduino-совместимую плату из мне известных. С одной стороны, в формат 5 x 7 см особенно много не поместишь, но с другой - свободное место на Arduino есть, и иногда с сожалением понимаешь, что для счастья не хватает хотя бы небольшой I2C-флешки для хранения данных.

К Stalker-у можно подцепить сеть i2c-датчиков и транслировать их показания через XBee-модуль. А можно установить GPS Bee и записывать на microSD-карту координаты перемещений. В любом случае - простор для фантазии есть, и немаленький.



Стоит это чудо 35 USD, что для такой универсальности не выглядит слишком дорого. Единственный минус - если вы настроены использовать "Сталкера" в качестве ArduinoCompatible-платы, придется обзавестись переходником USB-to-TTL, потому что портов USB и COM на ней, увы, нет.

Документация

05.02.2010

JTAG на макетке

Микроконтроллеры ATmega можно условно разделить на две категории: те, что программируются только через ISP (шина из проводов MISO, MOSI, SCK + управление сбросом) и те, что имеют в дополнении к этому интерфейс JTAG.

Из набора "горячо любимых" Arduino-контроллеров к первой категории относятся ATmega8, ATmega168, ATmega328P. Но и во второй категории тоже присутствует один экземпляр: ATmega2560, используемый в Arduino/Freeduino MEGA 2560.

JTAG - это механизм, позволяющий автоматически контролировать качество монтажа печатных плат: не закоротилось ли чего или, наоборот, плохо припаялось. Очень полезная вещь в промышленном масштабе, особенно когда на одной плате "счастливо" уживаются микросхемы разных фирм (стандарт IEEE 1149.1, на котором базируется JTAG - открытый). Тем более логично, что многие производители микросхем добавили возможность программирования и отладки своих чипов через все тот же JTAG.

Для чего может потребоваться JTAG в повседневной жизни?

В моем случае - вдруг потребовалось читать и писать содержимое flash ATmega128, а вместо привычной вилочки ISP наружу торчит только JTAG. В этом случае уже простой программатор типа USBasp, увы, не поможет.

Фирменное устройство от ATMEL стоит немало (а я и так уже прикупил нанопаяльник,   денег после этого осталось ноль отрицательное количество):

Что же делать? Я уже говорил, что стандарт - открытый, а процесс программирования через JTAG хорошо документирован - достаточно открыть любой даташит на микроконтроллер ATMEL с JTAG-интерфейсом.

Кстати, когда-то, на заре появления микроконтроллеров фирмы ATMEL, фирма-конкурент Microchip дразнила ATMEL показательно разобрала какой-то инструментальный девайс для разработчика программ микроконтроллеров ATMEL и демонстрировала, что он собран на микроконтроллерах её производства - то бишь, на PIC-ах. Впрочем, было это невероятно давно, мир теперь уже совсем другой (c).

В интернете есть масса вариантов самодельных копий фирменного AVR JTAG ICE. Одну из таких упрощенных до полного безобразия можно найти, например, здесь. Что самое забавное -  работает, хотя состоит практически из одного МК: ATmega16. Оригинальный программатор использует чип, полностью совместимый с ATmega16, что делает возможным заливание в самопальный программатор прошивок от фирменного (правда, новые навряд ли будут появляться, поскольку AVR JTAG ICE дано снят с производства).

Для начала надо достать основной компонент - микроконтроллер ATmega16-16PU и кварц 7.3728 МГц, после чего собрать на макетке минимальную схему для программирования:



Схема - классическая, необходима для запуска ATmega. Напомню, что обычно делают в таком случае:

  • подключают питание -  все GND и VCC (обычно выводов GND не менее двух);
  • ставят между GND и VCC поближе к ножкам ATmega фильтрующий помехи конденсатор 100 нФ (или 0.1 мкФ - кому как больше нравится);
  • подключают между XTAL1 и XTAL2 кварц и соединяют их через два одинаковых конденсатора на землю (разброс номинала указан в документации, не обязательно использовать 22 пФ, можно, например, и 33 пФ);
  • притягивают линию сброса к VCC через резистор 10К и вешают конденсатор 100 нФ на землю, чтобы обеспечить небольшую задержку линии сброса после подачи питания.

Выглядеть это будет приблизительно так (всё благополучно влезает на макетку 300+100):



Соединяем схему через вилку ISP с программатором и запитываем от него же, затем зашиваем прошивку и выставляем фьюз-биты:

avrdude -C avrdude.conf -c usbasp -p m16 -U hfuse:w:0x1f:m -U lfuse:w:0xcf:m

avrdude -C avrdude.conf -c usbasp -p m16 -U flash:w:miniICE.hex

Если операция прошла успешно, полдела сделано. Можно аккуратно удалить ISP-разъем и преобразовать схему к следующему виду:



На макетке это выглядит так:



Наверное, вы обратили внимание, что в схеме я использовал USB-чип последовательного порта - FT232RL. Это гораздо удобнее, чем COM-порт, по многим причинам. Но в макетку SSOP не воткнешь, поэтому я использую самостоятельно изготовленный переходник USB-TTL:



В классическом варианте линий JTAG чуть больше, чем на схеме:



Обязательные сигналы - TCK, TDO, TDI и TMS (тактовая, выход данных, вход данных и управление режимом теста).

NSRST и NTRST - это управление сбросом на шине JTAG. В нашем случае не обязательны, поскольку сброс МК можно инициировать командной последовательностью на линиях обязательных сигналов.

Теперь разберемся с питанием. Желательно, чтобы внутрисхемный программатор питался от программируемой схемы. Этим сразу решается проблема стыковки уровней программируемой схемы и программатора. С другой стороны, если в программаторе есть конвертер уровней сигналов, различие VCC программатора и target уже не является проблемой (не считая усложнение схемы программатора).

С обязательной линии VTref должно подаваться напряжение питания устройства. По идее, он нужен вышеуказанному чипу конвертера уровней, внутри программатора. Но если JTAG ICE планирует питаться от target-а, то используется линия Vsupply. Для простоты, их можно объединить, но это не обязательно.

В зависимости от положения джампера SV2 на схеме ATmega16 будет питаться либо от USB, либо от target-а. Я на макетку ставить переключающий джампер поленился, ибо предполагалось питание только от target. Зато перед включением три раза проверил, что питание с USB не подается. Для надежности, на плате USB-TTL разомкнул джампер подачи питания. Далее контакт M8RX соединяется с ножкой МК RX, M8TX - с TX.

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



(устройство справа я обязательно рассмотрю позже, пока что могу только повторить, что внутри у него ATmega128)

Единственный минус клона AVR JTAG ICE - сравнительно небольшой список поддерживаемых МК:

  • ATmega128
  • ATmega128A
  • ATmega16
  • ATmega162
  • ATmega165
  • ATmega169
  • ATmega16A
  • ATmega32
  • ATmega323
  • ATmega32A
  • ATmega64
  • ATmega64A
Еще, говорят, поддерживается AT90CAN128, но проверить это нет возможности :(