Pinboard 1.1

Материал из Документации
Перейти к: навигация, поиск

Содержание

Краткое техническое руководство

Подсистема питания

Схема питания

Источники: Разберем как и откуда происходит запитка демоплаты. В качестве источника питания могут быть:

  • Внешний источник на 5 вольт (1). В клеммник зажимаем провода, например, от

батареек. Защиты от перенапряжения нет, поэтому следите за тем, чтобы напряжение подаваемое на эти клеммы было не выше 5вольт. Защита от неправильной полярности выполнена на диоде.

  • Сетевой адаптер на 9-12 вольт, например от роутера или модема или аналогичный.

Штекер адаптера втыкается в гнездо (2) и входное напряжение понижается на линейном стабилизаторе (3). Есть защита от неправильной полярности.

  • Питание от шины USB через гнезда USB-SOFT(4) или USB-HARD(5).
  • Питание от программатора (гнездо ISP).

Селектор питания:

С любого источника питание попадает на селектор (6). Обратите внимание на то, что сам селектор разделен на две части. Одна находится возле разъемов USB, вторая выше, над клеммником. Перемычка для этого селектора должна быть одна! (Впрочем, в некоторых случаях, можно и две одновременно, но для этого вы должны понимать что вы делаете и зачем)

Селектор позволяет выставить источник питания. Возможные положения это:

  • USBS – питание подается через гнездо (4)
  • USBH – питание подается через гнездо (5)
  • ADAPTER – питание подается через сетевой адаптер (2)
  • ISP – питание подается через программатор по разьему ISP
  • 5V – питание подается с клеммника.

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

Индикация питания:

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

Выключатель:

С селектора питание подается на главный выключатель (7), обесточивающий всю демоплату.

Селектор напряжения питания:

После выключателя идет селектор напряжения (8). Он позволяет задать общее напряжение главной силовой магистрали демоплаты. Можно выбирать 5вольт или 3.3 вольта. Максимальный ток в режиме 3.3 Вольта не должен превышать 500мА.

Селектор напряжения питания

Без установки перемычки соответствующего режима плата будет обесточена.

При установленном режиме 5V вывод опции 3.3 вольта можно опционально использовать как допольнительный источник напряжения на 3.3 вольта.

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

Главная магистраль питания.

С селектора напряжений питание подается на главную макистраль (9), а также на все питающие цепи микроконтроллеров. Также есть светодиод PWRON, показывающий, что плата включена.

Вторичная магистраль питания.

С главной магистрали питание подается на выключатель вторичной магистрали (10). А также светодиод работы вторичной магистрали и ее контакты (11).

Вторичная магистраль питания

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

Земляная петля.

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

Дополнительный преобразователь напряжения.

Если надо получить напряжение в 3.3 вольта при пятивольтовом питании платы, то в наличии есть дополнительный преобразователь на 500мА. Его вход это штырек Vin (13), а выход штырек 3.3Voutput (14).

Дополнительный преобразователь напряжения.

Для его включения достаточно надеть джампер между пинами Vcc и Vin. При этом должен загореться светодиод 3.3Von

Индикация

Индикация

Кроме индикаторов питания на плате также присутствует индикаторы передачи данных по последовательному каналу. Rx (идет прием) Tx(идет передача), а также светодиоды общего назначения (1,2,3,4) и светодиодная линейка (5).

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

Схема

Все светодиоды зажигаются высоким логическим уровнем (+5) и уже имеют токоограничительные резисторы.

Управление

Управление

На плате есть ряд органов управления – кнопок и потенциометров.

Кнопка сброса микроконтроллера (1).

Кнопка сброса микроконтроллера

Потенциометр общего назначения (2). Никуда не подключен, его выводы выведены на штыри. Номинал 10к, многооборотный.

Селектор канала АЦП (3). Позволяет подключить к каналу PA0 АЦП микроконтроллера либо потенциометр (4), либо RC фильтр из конденсатора на 150nF и переменного резистора (10). Меняя установку резистора (10) мы можем задавать разную частоту среза фильтра.

Потенциометр (11) общего назначения. Аналогичен (2)

Потенциометр (5) аналогичен (2) и (11), но не является многооборотным и снабжен ручкой.

Потенциометр

Управляемые подтяжки (6,7).

Управляемые подтяжки

Штыри между этими переключателями могут быть в трех положениях в зависимости от состояния переключателей (6) и (7):

  • (6)OFF и (7)OFF – вывод никуда не подключен.
  • (6)ON и (7)OFF – подтяжка к Vcc через резистор 10кОм
  • (6)OFF и (7)ON – вывод прижат к земле.
  • (6)ON и (7)ON – вывод прижат к земле.

Кнопки на землю(8) А,B,C,D имеют одноименные выводы. Могут быть подключены джамперами к порту С (через порт JTAG, но JTAG становится недоступен), либо куда угодно посредством проводных перемычек. При нажатии кнопки она коротит свой вывод на землю. Есть защитный резистор на 100ом.

Кнопки на землю

Кнопки A1,B1,C1,D1 (9) кнопки общего назначения. Имеют по два вывода слева и справа от кнопки. Выводы соответственно подписаны. Могут использоваться как угодно.

Кнопки общего назначения

Интерфейсы демоплаты

Интерфейсы демоплаты

Аппаратный USB-UART(1) собран на микросхеме FT232RL.

Аппаратный USB-UART

После установки драйверов в системе появляется виртуальный COM порт. Его выводы выведены на колодку (2). Также микросхема FT232 организовывает интерфейс ISP программирования (3), о нем в разделе программирования.

С колодки (2) сигнал попадает на селектор направления (4,5) посредством этих переключателей можно подсоединить микросхему FT232 либо к главному контроллеру (оба переключателя UART в положение ON, оба переключателя JTAG в положение OFF), либо к отладочному интерфейсу JTAG (оба переключателя UART в положение OFF, оба переключателя JTAG в положение ON).

Одновременное включение переключателей JTAG и UART ведет к неработоспособности интерфейса, но не грозит поломкой (т.к. есть защитные резисторы). Поэтому, если у вас вдруг не работает UART или JTAG то в первую очередь проверьте эти два переключателя.

Если их оба выключить, то сигналы с колодки RX/TX можно проводками подключить куда угодно.

???

Также на главном микроконтроллере выведен интерфейс UART и сгруппирован на штырях (10).

Интерфейс отладки JTAG

Позволяет отлаживать микроконтроллер в реальном времени. Для его использования нужно соответственно соединить выводы (6) и (7) с помощью шлейфа. Включить селектор (5) и подключиться к микроконтроллеру из AVR Studio. Подробней про это в разделе JTAG отладки.

Интерфейс отладки JTAG

Интерфейс IIC (I2C, он же TWI)

Универсальный последовательный интерфейс стандарта IIC, позволяющий адресовать до 127 устройств на шине. Выведен и подписан на штырях (11), а поскольку по стандарту требует подтяжки до Vcc то имеет отключаемую подтяжку. Для включения подтяжки достаточно поставить два джампера на колодке IIC PullUp (11).

Интерфейс IIC (I2C, он же TWI).

Программный USB

В некоторых проектах вам могут потребоваться программная поддержка протокола USB с драйверами от OBDEV или IgorPlug. Для этого на демоплате смонтирована необходимая обвязка (12). Нужно только завести ее на требуемые пины микроконтроллера.

Программный USB

Преобразователь напряжения интерфейса

Если возникает потребность подключить периферийное устройство с низким напряжением питания (3.3 вольта), то появляется проблема конвертации логических уровней. Эта проблема решается с помощью конвертера на резистивных делителях и обратном диоде. К вашим услугам шестиканальный конвертер. Пятивольтовая сторона (13) и 3.3 вольтовая сторона (14). Также можно запитать всю плату от 3.3 вольт через селектор выбора напряжения питания.

Преобразователь напряжения интерфейса

Интерфейс ISP/SPI

Для прошивки микроконтроллера, а также работы по интерфейсу SPI соответствующие выводы микроконтроллера сгруппированы и подписаны (9), а также выведена колодка стандартного 10пинового разъема ISP программирования.

Интерфейс ISP/SPI

Сменные кварцы

Изначально контроллер демоплаты настроен на работу от внутреннего генератора. Но это можно легко изменить программатором. Кварцевый генератор можно воткнуть в панельку ZQ, что слева от микроконтроллера, не забыв накинуть два джампера соединяющие выводы X2,X1 с выводами контроллера.

Сменные кварцы

Встроенный программатор FTBB

Демоплата может перешивать свои микроконтроллеры с помощью скоростного BITBANG программатора. Для этого надо соединить шлейфом разьемы(3) и (9) для прошивки главного контроллера или (3) и (6) для прошивки контроллера JTAG. Подробней про это в разделе программирования.

Встроенный программатор FTBB

Подсветка LCD дисплея

Подсветка LCD дисплея

Дисплей одевается на колодку. Выводы колодки подписаны согласно распиновки стандартного дисплея HD44780 1602 тип B.

Катод светодиодов подсветки заводится на землю через транзистор. На анод подсветки надо подать +5 вольт (от 3.3 подсветка не работает). Сделать это проще всего набросом джампера между выводами BLA (Back Light Anode) и Vcc. Вывод BLT (BackLight Transistor) управляющий. Если на него подать сигнал с микроконтроллера, то можно программно включать/выключать/менять яркость (через ШИМ) подсветку. Если же подсветка не нужна, то этот вывод можно не подключать. Либо накинуть джампер между BLT и Vcc – тогда подсветка будет светить постоянно.

Детали обвязки

Выводы ШИМ:

У Микроконтроллера ATmega16 есть 4ре независимых ШИМ вывода. Это OC0 (21), OC1A (22), OC1B (23), OC2 (24). На плате смонтированы четыре Гобразных комплекта штырьков подключенных к этим выводам по следующей схеме:

Выводы ШИМ
Выводы ШИМ

Они позволяют по быстрому организовать на соответствующей ножке светодиод для индикации чего либо, RC фильтр из конденсатора и резистора. (Постоянная времени RC фильтра зависит от установленных вами резисторов и считается так Т=R*C).

Аналоговый вход (АЦП)

Аналоговый вход (АЦП)
Аналоговый вход (АЦП) схема

Порой надо подать меняющееся постоянное напряжение на вход АЦП. Для этого смонтирован потенциометр.

Также есть блок перемычек , позволяющий параллельно подключить к входу ADC0 АЦП конденсатор, что сгладит измеряемое напряжение. Также можно отцепить потенциометр, а джампер выставить так, что на вход ADC0 АЦП будет подключен RC фильтр . из С3 и R9. Вход этого фильтра находится на пинах, куда можно подать измеряемое напряжение. Так как R9 является переменным, то постоянную времени фильтра мы можем гибко менять, причем можно не ограничиваться одним R9, а подключить ему на подмогу и R11, а также любой из резисторов на плате.

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

Инструкции по быстрому старту

Подача питания

Подключите питание на Pinboard. В начале будем питать плату от USB шины, так что воткните джампер выбора питания в положение USBH

Джампер питания

Теперь надо выбрать питающее напряжение. Для этого установите перемычку на селекторе питания в положение 5V:

Перемычка на селекторе питания

Кнопкой Main Power подайте питание на плату.

Кнопка питания

При этом должен загореться красный светодиод PowerON.

Подключение демполаты к компьютеру

Первым делом нужно проверить интерфейс. Он свяжет нашу демоплату с компьютером. Для этого поставь переключатель UART и JTAG (оба рычажка у каждого) в положение OFF тем самым мы отключим его от контроллера. Надо следить за тем, чтобы эти переключатели не были одновременно в положении ON. Ничего страшного не будет, но работать в этом случае интерфейс не будет – из-за конфликта источников. Либо UART, либо JTAG, либо оба OFF, иного не дано.

Одновременно в положении ON

Также потребуется кабель USB-AB его можно купить в любом магазине торгующем компьютерами и оргтехникой. Красная цена ему 100рублей. Кабель вот такого вида:

USB

C другой стороны у него стандартный USB штырь как у флешки обычной. У принтера обычно такой же кабель. Можно временно использовать его.

Подключаем кабель в компьютер и вставляем его в верхний (аппаратный) USB разъем платы PinBoard:

Верхний (аппаратный) USB разъем
Вставляем его в верхний (аппаратный) USB разъем

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

После установки драйвера снова воткните шнур и плату и на этот раз у вас в системе должно появиться устройство вида:

В системе должно появиться устройство

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

Выбор порта

Теперь надо проверить работу интерфейса. Возьмите один джампер и наденьте его на выводы RxD и TxD, что возле USB разъема (смотри фото):

Наденьте его на выводы RxD и TxD

Переключатели JTAG и UART поставьте (если еще не сделали это) в положение OFF.

Запустите терминальную программу, например Terminal v1.9b и подключитесь к нашему виртуальному COM порту.

Terminal v1.9b

В нижнем окне мы отправляем данные, в верхнем окне у нас принятые байты. Так как на плате TxD и RxD замкнуты джампером то уходящие байты должны возвращаться в точности. Что можно наблюдать на скриншоте:

Скриншот

Если этого не произошло, то возможно у вас неправильно установились драйвера на FTDI, либо вы неправильно установили перемычку. В любом случае, при правильной работе FTDI при передаче данных должны моргать светодиоды RX--TX возле коннектора FTDI.

должны моргать светодиоды RX--TX

Но светодиоды не будут моргать если драйвер установлен не правильно или не открыт COM порт в компьютере.

Подключение контроллера

Затем переключатель UART (который описан в самом начале) поставим в положение ON(JTAG пусть так и остается в OFF)

С самого начала микроконтроллер прошит демопрограммой которая шлет в компьютер показания с канала 0 АЦП

Подключите вход АЦП к переменному резистору, установив перемычку:

Установить перемычку

Также установите перемычку на индикаторный светодиод LED2, подключив тем самым вывод PD5 к светодиоду.

Установите перемычку

Снимите перемычку с RX-TX

Убрать перемычку

После нажмите кнопку RESET для сброса микроконтроллера. Она находится над главным микроконтроллером.

reset

C этого момента контроллер начинает выполнять зашитую в него демопрограмму:

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

Чтобы это увидеть снова запустите программу Terminal, выберите скорость порта 9600 и нажмите Connect.

Запустите программу Terminal

В окне терминала побегут символы. Теперь если нажать кнопку Graf то мы увидим представление этих символов в виде графика:

Представление этих символов в виде графика

Вращая в разные стороны вал потенциометра (который подключен к входу АЦП) мы меняем напряжение на входе АЦП, о чем нам тут же сигнализирует график в терминальной программе

Отлично. Все проверено, все работает как надо. Теперь покажу как менять программу посредством бутлоадера.

Загрузка собственной программы через bootloader

Запускайте AVR Studio (скачать ее нужно с сайта atmel.com заполнив регистрационную форму. Регистрация бесплатная, только для статистики. Пишите туда что хотите) и открывай файл со второй демопрограммой. Той что в части 3 документации на Pinboard v1.0 (разница между демоплатами тут уже не принципиальная). В окнах студии откроется код программы. Можно его скомпилировать нажав на F7.

AVR Studio

Закройте терминальную программу, предварительно нажав Disconnect, чтобы освободить доступ к порту.

Это важно! Иначе AVRProg не увидит бутлоадер.

Теперь найдите в AVR Studio программу AVRProg, она находится в меню Tools -- avrprog, но не запускайте ее.

Дальше действуйте быстро:

  • Нажмите RESET на плате (квадратная такая кнопочка возле микроконтроллера)
  • Пока горит зеленый светодиод LED2 (работа бутлоадера) нужно успеть вызвать AVRProg.

Должно получиться вот так:

AVR prog

Все, можете выбрать в первой строке hex файл для прошивки и залить его в память контроллера, нажав на кнопку «Program» в секции Flash. А загрузив Hex-файл содержимого EEPROM его можно прошить в EEPROM, нажав кнопку «Program» в секции EEPROM.

Таким образом, можно залить в память любую прошивку. Лишь бы она занимала не больше чем 16кб-512б памяти флеша (для контроллера АТМега16). 512байт занимает загрузчик.

На будущее -- я себе AVRProg забил на хоткей внутри системы, это обычный экзешник, лежит в дебрях AVR Studio.

Давайте зальем демопрошивку из третьей части документации.

Запусти снова AVRProg (Не забывайте, что запускать его надо сразу после сброса, пока горит зеленая лампочка загрузчика) и выбирайте Demo16-RTOS.hex из третьего архива.

Жмем Program -- пробежит парочка прогрессбаров и в конце AVRProg скажет, что все сделано.

Закройте AVRProg и нажмите на RESET и только после этого программа стартанет.

Загорится зеленый диод загрузчика, через две-три секунды он погаснет и свежезалитая программа приступит к работе.

Вот только что-то работы не видно? Оно и логично! Все действие только что залитой программы происходит на LCD дисплее, а его то мы и не подключили.

Выключим рубильник Main Power.

Берите дисплей и устанавливай его на линейку расширения. Цоколевка разъема совпадает с обозначениями дисплея. BLA это анод светодиодов подсветки. Накинув два джампера, как показано на рисунке, мы включим подсветку. Дисплей одевается на нижнюю линейку разъема. К верхней же подключаются проводки соединительные.

Дисплей одевается на нижнюю линейку разъема

Рекомендую сразу же переменный резистор контраста выставить почти в крайне левое положение.

Выставить почти в крайне левое положение

Крутить его удобно с обратной стороны тонкой отверткой. Для этого там есть отверстие в плате.

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

Многие при освоении этих дисплеев тратят прорву времени отлаживая код, а надо то было всего лишь отверточкой покрутить :)

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

Теперь потребуется проводок на семь жил.

Проводок на семь жил

В нем будет четыре линии данных и три линии управления. 10см длины вполне хватит. Подключается дисплей на PORTB (т.к. в данный момент он не занят ничем серьезным. Порт А обслуживает АЦП, нежелательно на него что-либо вешать в этот момент (снижается точность работы АЦП). Порт С загружен на JTAG, Порт D общается с терминалом. Вот и остается только PORT B в котором мы можем заюзать сразу много линий. Цоколевка дисплея простая.

Цоколевка дисплея

Если смотреть на него сверху, с лица, то нумерация слева направо. Первые три вывода - это питание и контраст. Они уже подключены в колодке. Последние два - питание подсветки. Все что между ними, штыри с 4 по 14 это наши управляющие сигналы. Подключаем шлейфиком с портами микроконтроллера в таком порядке (в скобках номер вывода дисплея):

PB0 - E (6)

PB1 - RW (5)

PB2 - RS (4)

PB4 - DB4 (11)

PB5 - DB5 (12)

PB6 - DB6 (13)

PB7 - DB7 (14)

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

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

Подключили! Теперь включаем плату. На дисплее вначале должны сразу зажечься темные квадраты, а потом, спустя пару секунд, пойти надписи.

Вначале будет что то вроде: "АЦП Канал 0", а спустя пару секунд приветствие "Pinboard v1.0".

Если так, то поздравляю. Дисплей уже подключен! Можете попробовать покрутить потенциометр, при этом на дисплее будут показания АЦП. А если сейчас запустить терминалку и подключишься к порту на скорости 9600 то в терминал также будут сыпаться показания с АЦП, но вот если самому туда написать, то это вылезет уже на экран демоплаты.

Осталось подключить кнопки. Делаем еще один шнурок. Вот такой:

Делаем еще один шнурок

И Соединяем линии PD3...PD6 с выводами кнопок ABCD. Аналогично мы делали для версии 1.0.

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

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

В следующей части документации я расскажу как пользоваться встроенным программатором FTBB и JTAG’ом.

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

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

FAQ

Почему подключаемся именно к этим портам? Это какие то специализированные порты?

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

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

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

Все подключил правильно, но на дисплее так ничего и не зажглось.

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

Не хочу подключать питание от USB. Как подключиться от сетевого адаптера?

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

А что с Fuse битами делать? Я слышал их надо зашивать программатором.

Сейчас прошивка ведется через бутлоадер. Им нельзя изменить Fuse биты. Но вы уверены, что вам сейчас это нужно? Если так сильно хочется, то можно подключить к контроллеру выводы FTBB и через программу avrdude выставить любое значение FUSE бит. Главное осторожней, т.к. можно заблокировать микроконтроллер.

Я прошил плату обычным ISP программатором, а потом попытался прошить через загрузчик, но у меня ничего не вышло.

При прошивке через ISP если не принять дополнительных мер (включение загрузчика в прошивку) то загрузчик затирается и его надо залить заново. Файл загрузчика есть во втором архиве документации.


Если возникнут вопросы, то пишите мне на dihalt@dihalt.ru

Инструкция по самопрошивке и программатору FTBB

Работа со встроенным FTBB программатором

В демоплату Pinboard интегрирован внутрисхемный bitbang программатор на базе микросхемы FT232RL.

Выводы этого программатора расположены возле гнезда USB-Hard:

Выводы программатора

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

Спец выводы, заранее подписанные
Спец выводы, заранее подписанные

У вспомогательного контроллера через этот же разъем подключается шнур JTAG адаптера, поэтому маркировка там не соответствует ISP, но прошивка ведется через этот разъем.

Перешивку основного контроллера покажу на примере заливки бутлоадера и прошивки программы JTAG адаптера.

С завода микроконтроллер Atmega16 поставляется настроенным на тактовую частоту в 1МГц и с пустым флешем.

Нас такая ситуация не устраивает, поэтому при проверке и конфигурации демоплаты в главный контроллер заливается программа Bootloader и меняется тактовая частота на 8МГц.

Делается это посредством встроенного программатора.

Пример самопрошивки.

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

  1. Подключите шнур USB к разъему USB-Hard.
  2. Выставьте перемычку селектора питания в положение USBH.
  3. Подайте питание на плату.
  4. Подождите несколько секунд. Пусть операционная система компьютера найдет и инициализирует новое устройство (Адаптер USB-COM)
  5. Подключите выводы FTBB к выводам программирования главного контроллера. Эти выводы специально подписаны и обведены в рамочку. Соединять нужно напрямую: RST-RST, MISO-MISO, MOSI-MOSI, SCK-SCK. Для этого вам нужен четырехжильный провод.
    Пример самопрошивки
  6. Распакуйте в папку С:\FTBB\ (или по иному простому пути без пробелов и русских символов) содержимое архива FTBB.zip. Это модернизированная программа avrdude с набором нужных конфигурационных файлов, прошивок и пакетных файлов.
  7. Запустите файл PBSelf16.cmd при этом должна открыться командная строка и будет сгенерирован лог прошивки такого вида:
 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -B 4800 -U hfuse:w:154:m -U lfuse:w:228:m -U lock:w:63:m
 avrdude.exe: BitBang OK
 avrdude.exe: pin assign miso 6 sck 5 mosi 3 reset 7
 avrdude.exe: drain OK
 ft245r: bitclk 4800 -> ft baud 2400
 avrdude.exe: AVR device initialized and ready to accept instructions
 Reading | ################################################## | 100% 0.00s
 avrdude.exe: Device signature = 0x1e9403
 avrdude.exe: reading input file "154"
 avrdude.exe: writing hfuse (1 bytes):
 Writing | ################################################## | 100% 0.08s
 avrdude.exe: 1 bytes of hfuse written
 avrdude.exe: verifying hfuse memory against 154:
 avrdude.exe: load data hfuse data from input file 154:
 avrdude.exe: input file 154 contains 1 bytes
 avrdude.exe: reading on-chip hfuse data:
 Reading | ################################################## | 100% 0.02s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of hfuse verified
 avrdude.exe: reading input file "228"
 avrdude.exe: writing lfuse (1 bytes):
 Writing | ################################################## | 100% 0.06s
 avrdude.exe: 1 bytes of lfuse written
 avrdude.exe: verifying lfuse memory against 228:
 avrdude.exe: load data lfuse data from input file 228:
 avrdude.exe: input file 228 contains 1 bytes
 avrdude.exe: reading on-chip lfuse data:
 Reading | ################################################## | 100% 0.03s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of lfuse verified
 avrdude.exe: reading input file "63"
 avrdude.exe: writing lock (1 bytes):
 Writing | ################################################## | 100% 0.02s
 avrdude.exe: 1 bytes of lock written
 avrdude.exe: verifying lock memory against 63:
 avrdude.exe: load data lock data from input file 63:
 avrdude.exe: input file 63 contains 1 bytes
 avrdude.exe: reading on-chip lock data:
 Reading | ################################################## | 100% 0.03s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of lock verified
 avrdude.exe: safemode: Fuses OK
 avrdude.exe done. Thank you.
 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -U flash:w:m16boot.hex:a
 avrdude.exe: BitBang OK
 avrdude.exe: pin assign miso 6 sck 5 mosi 3 reset 7
 avrdude.exe: drain OK
 ft245r: bitclk 230400 -> ft baud 115200
 avrdude.exe: AVR device initialized and ready to accept instructions
 Reading | ################################################## | 100% 0.00s
 avrdude.exe: Device signature = 0x1e9403
 avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option.
 avrdude.exe: erasing chip
 ft245r: bitclk 230400 -> ft baud 115200
 avrdude.exe: reading input file "m16boot.hex"
 avrdude.exe: input file m16boot.hex auto detected as Intel Hex
 avrdude.exe: writing flash (16310 bytes):
 Writing | ################################################## | 100% 8.67s
 avrdude.exe: 16310 bytes of flash written
 avrdude.exe: verifying flash memory against m16boot.hex:
 avrdude.exe: load data flash data from input file m16boot.hex:
 avrdude.exe: input file m16boot.hex auto detected as Intel Hex
 avrdude.exe: input file m16boot.hex contains 16310 bytes
 avrdude.exe: reading on-chip flash data:
 Reading | ################################################## | 100% 3.98s
 avrdude.exe: verifying ...
 avrdude.exe: 16310 bytes of flash verified
 avrdude.exe: safemode: Fuses OK
 avrdude.exe done. Thank you.
 d:\Work\Soft\dudebitbang>pause
 Для продолжения нажмите любую клавишу . . .

В котором будут указаны подробности процесса прошивки. При этом в кристалл заливается как прошивка, так и нужные fuse биты.

Настоятельно не рекомендую править содержимое пакетных файлов без четкого осознания того к чему приведу ваши действия. Можно наглухо заблокировать кристалл неправильной установкой FUSE бит

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

После перешивки главного МК можно прошить контроллер JTAG адаптера. Для этого подключите шнур к выводам JRST/TCK/TDO/TDI . Обратите внимание на то, что колодка как бы разделяется и вывод TMS остается висеть в воздухе между двумя блоками колодки. Так и должно быть, вывод TMS не участвует в прошивке.

можно прошить контроллер JTAG адаптера

Провод в этом случае подключается следующим образом

  • RST-JRST
  • SCK-TCK
  • MISO-TDO
  • MOSI-TDI

Далее аналогичным образом запускается пакетный файл PBSelfJT.cmd. Открывается консольное окно и в нем генерируется примерно такой лог:

 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -B 4800 -U hfuse:w:153:m -U lfuse:w:228:m -U lock:w:63:m
 avrdude.exe: BitBang OK
 avrdude.exe: pin assign miso 6 sck 5 mosi 3 reset 7
 avrdude.exe: drain OK
 ft245r: bitclk 4800 -> ft baud 2400
 avrdude.exe: AVR device initialized and ready to accept instructions
 Reading | ################################################## | 100% 0.00s
 avrdude.exe: Device signature = 0x1e9403
 avrdude.exe: reading input file "153"
 avrdude.exe: writing hfuse (1 bytes):
 Writing | ################################################## | 100% 0.03s
 avrdude.exe: 1 bytes of hfuse written
 avrdude.exe: verifying hfuse memory against 153:
 avrdude.exe: load data hfuse data from input file 153:
 avrdude.exe: input file 153 contains 1 bytes
 avrdude.exe: reading on-chip hfuse data:
 Reading | ################################################## | 100% 0.02s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of hfuse verified
 avrdude.exe: reading input file "228"
 avrdude.exe: writing lfuse (1 bytes):
 Writing | ################################################## | 100% 0.06s
 avrdude.exe: 1 bytes of lfuse written
 avrdude.exe: verifying lfuse memory against 228:
 avrdude.exe: load data lfuse data from input file 228:
 avrdude.exe: input file 228 contains 1 bytes
 avrdude.exe: reading on-chip lfuse data:
 Reading | ################################################## | 100% 0.03s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of lfuse verified
 avrdude.exe: reading input file "63"
 avrdude.exe: writing lock (1 bytes):
 Writing | ################################################## | 100% 0.02s
 avrdude.exe: 1 bytes of lock written
 avrdude.exe: verifying lock memory against 63:
 avrdude.exe: load data lock data from input file 63:
 avrdude.exe: input file 63 contains 1 bytes
 avrdude.exe: reading on-chip lock data:
 Reading | ################################################## | 100% 0.03s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of lock verified
 avrdude.exe: safemode: Fuses OK
 avrdude.exe done. Thank you.
 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -U flash:w:miniICE.hex:a
 avrdude.exe: BitBang OK
 avrdude.exe: pin assign miso 6 sck 5 mosi 3 reset 7
 avrdude.exe: drain OK
 ft245r: bitclk 230400 -> ft baud 115200
 avrdude.exe: AVR device initialized and ready to accept instructions
 Reading | ################################################## | 100% 0.00s
 avrdude.exe: Device signature = 0x1e9403
 avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option.
 avrdude.exe: erasing chip
 ft245r: bitclk 230400 -> ft baud 115200
 avrdude.exe: reading input file "miniICE.hex"
 avrdude.exe: input file miniICE.hex auto detected as Intel Hex
 avrdude.exe: writing flash (14806 bytes):
 Writing | ################################################## | 100% 7.92s
 avrdude.exe: 14806 bytes of flash written
 avrdude.exe: verifying flash memory against miniICE.hex:
 avrdude.exe: load data flash data from input file miniICE.hex:
 avrdude.exe: input file miniICE.hex auto detected as Intel Hex
 avrdude.exe: input file miniICE.hex contains 14806 bytes
 avrdude.exe: reading on-chip flash data:
 Reading | ################################################## | 100% 3.61s
 avrdude.exe: verifying ...
 avrdude.exe: 14806 bytes of flash verified
 avrdude.exe: safemode: Fuses OK
 avrdude.exe done. Thank you.
 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -B 4800 -U hfuse:w:25:m -U lfuse:w:207:m -U lock:w:63:m
 avrdude.exe: BitBang OK
 avrdude.exe: pin assign miso 6 sck 5 mosi 3 reset 7
 avrdude.exe: drain OK
 ft245r: bitclk 4800 -> ft baud 2400
 avrdude.exe: AVR device initialized and ready to accept instructions
 Reading | ################################################## | 100% 0.00s
 avrdude.exe: Device signature = 0x1e9403
 avrdude.exe: reading input file "25"
 avrdude.exe: writing hfuse (1 bytes):
 Writing | ################################################## | 100% 0.08s
 avrdude.exe: 1 bytes of hfuse written
 avrdude.exe: verifying hfuse memory against 25:
 avrdude.exe: load data hfuse data from input file 25:
 avrdude.exe: input file 25 contains 1 bytes 
 avrdude.exe: reading on-chip hfuse data:
 Reading | ################################################## | 100% 0.02s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of hfuse verified
 avrdude.exe: reading input file "207"
 avrdude.exe: writing lfuse (1 bytes):
 Writing | ################################################## | 100% 0.08s
 avrdude.exe: 1 bytes of lfuse written
 avrdude.exe: verifying lfuse memory against 207:
 avrdude.exe: load data lfuse data from input file 207:
 avrdude.exe: input file 207 contains 1 bytes
 avrdude.exe: reading on-chip lfuse data:
 Reading | ################################################## | 100% 0.02s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of lfuse verified
 avrdude.exe: reading input file "63"
 avrdude.exe: writing lock (1 bytes):
 Writing | ################################################## | 100% 0.02s
 avrdude.exe: 1 bytes of lock written
 avrdude.exe: verifying lock memory against 63:
 avrdude.exe: load data lock data from input file 63:
 avrdude.exe: input file 63 contains 1 bytes
 avrdude.exe: reading on-chip lock data:
 Reading | ################################################## | 100% 0.02s
 avrdude.exe: verifying ...
 avrdude.exe: 1 bytes of lock verified
 avrdude.exe: safemode: Fuses OK
 avrdude.exe done. Thank you.
 d:\Work\Soft\dudebitbang>pause
 Для продолжения нажмите любую клавишу . . .

После процесса прошивки и отключения кабеля должен загореться светодиод возле JTAG адаптера.

Светодиод возле JTAG адаптера

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

Содержимое архива FTBB.zip

Сам архив

  1. avrdude.exe – программа прошивальщик. Консольная утилита.
  2. avrdude-gui.exe – графическая оболочка для avrdude
  3. avrdude.conf – файл конфигурации, тут описаны все программаторы. Не стоить его менять без нужды.
  4. ftd2xx.dll – библиотека для работы с микросхемой FTDI
  5. PBSelf16.cmd – пакетный файл для прошивки бутлоадера на Мегу16 (и только на нее!)
  6. PBSelfJT.cmd – пакетный файл для прошивки JTAG на Мегу16 (и только на нее)
  7. m16boot.hex –файл с прошивкой бутлоадера для АТМега16.
  8. miniICE.hex – файл с прошивкой JTAG адаптера.

Содержимое пакетных файлов и формат команд avrdude

PBSelf16.cmd:

 avrdude.exe -p m16 -c pinb -P ft0 -B 4800 -U hfuse:w:154:m -U lfuse:w:228:m -U lock:w:63:m
 avrdude.exe -p m16 -c pinb -P ft0 -U flash:w:m16boot.hex:a
 pause

PBSelfJT.cmd:

 avrdude.exe -p m16 -c pinb -P ft0 -B 4800 -U hfuse:w:153:m -U lfuse:w:228:m -U lock:w:63:m
 avrdude.exe -p m16 -c pinb -P ft0 -U flash:w:miniICE.hex:a
 avrdude.exe -p m16 -c pinb -P ft0 -B 4800 -U hfuse:w:25:m -U lfuse:w:207:m -U lock:w:63:m
 pause

-p – ключ определяющий тип прошиваемого контроллера. m16 это, в данном случае, ATMega16, обозначения других контроллеров можно посмотреть в документации на программу avrdude (или запустить ее без параметров в командной строке).

-c – ключ после которого идет имя программатора. В данном случае это “pinb” Pinboard. Если покопаться в файле avrdude.conf то можно найти там секцию Pinboard в которой указано описание выводов микросхемы FTBB применительно к плате Pinboard

-P – имя порта на котором висит программатор. В данном случае это FTDI и порт ft0, но если в системе несколько микросхем ftdi то номер может быть другим. В этом случае номер порта определяется экспериментально.

-В скорость прошивки. Дело в том, что на медленных тактовых скоростях (1МГЦ, стоящий по умолчанию на АТМега16) микроконтроллер не успевает отвечать на сигналы программатора и процесс прошивки завершается ошибкой. Чтобы этого избежать мы принудительно занижаем скорость.

-U тип памяти куда мы будем записывать. Формат параметра этого ключа следующий

 тип памяти:тип операции:данные:тип данных.

Тип памяти бывает

  • hfuse,lfuse – это старший и младший байт FUSE
  • flash – это основная память программ,
  • eeprom – память EEPROM.
  • 1ock – байт защитных битов.
  • calibration – байты калибровки RC генератора.

Тип операции бывает

  • w - означает, что мы пишем в выбранную память.
  • r - читаем выбранную память. Чтение идет в файл (например в lfuse,h)

Данные:

Либо путь к файлу (если он в том же каталоге, то просто имя файла), либо непосредственные данные (в случае с одним байтом FUSE)

Тип данных:

  • m – ручной ввод данных (тот самый байт, записанный числом). Если число с 0-восьмеричная система, 0х… - шестнадцатеричная система. В ином случае – десятичная.
  • а – автоматическое определение (только для записи, при чтении надо указывать в какомвиде мы хотим получить данные)
  • i - Intel Hex формат.

Одновременно может быть несколько ключей –U с разными типами памяти.

Подробное описание ключей программы avrdude можно найти тут:

http://www.nongnu.org/avrdude/user-manual/avrdude_4.html

Если внимательно посмотреть пакетные файлы, то будет видно, что вначале я на медленной скорости меняю FUSE биты как мне нужно (переставляю на повышенную скорость), после чего на полной скорости заливаю FLASH.

А в JTAG все делается даже в три прохода:

  1. Переключаем на 8МГЦ (чтобы быстрей шить).
  2. Заливаем флеш
  3. Переключаем на внешний кварц.

Возможные ошибки

В консоли нет длинного лога, а сразу же пишется что то вроде:

 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -B 4800 -U hfuse:w:154:m -U lfuse:w:228:m -U lock:w:63:m
 avrdude.exe: ft0 open failed
 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -U flash:w:m16boot.hex:a
 avrdude.exe: ft0 open failed
 d:\Work\Soft\dudebitbang>pause
 Для продолжения нажмите любую клавишу . . .

Такая ошибка возникает если программатор не обнаружил ни одной микросхемы FTDI в системе.

Проверьте включено ли питание платы.

Проверьте правильно ли установился драйвер FTDI (в системе должен быть виртуальный COM порт)

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


При попытке прошить контроллер система выдает что то вроде:

 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -B 4800 -U hfuse:w:154:m -U lfuse:w:228:m -U lock:w:63:m
 avrdude.exe: BitBang OK
 avrdude.exe: pin assign miso 6 sck 5 mosi 3 reset 7
 avrdude.exe: drain OK
 ft245r: bitclk 4800 -> ft baud 2400
 avrdude.exe: ft245r_program_enable: failed
 avrdude.exe: initialization failed, rc=-1
 Double check connections and try again, or use -F to override this check.
 avrdude.exe done. Thank you.
 d:\Work\Soft\dudebitbang>avrdude.exe -p m16 -c pinb -P ft0 -U flash:w:m16boot.hex:a
 avrdude.exe: BitBang OK
 avrdude.exe: pin assign miso 6 sck 5 mosi 3 reset 7
 avrdude.exe: drain OK
 ft245r: bitclk 230400 -> ft baud 115200
 avrdude.exe: ft245r_program_enable: failed
 avrdude.exe: initialization failed, rc=-1
 Double check connections and try again, or use -F to override this check.
 avrdude.exe done. Thank you.
 d:\Work\Soft\dudebitbang>pause
 Для продолжения нажмите любую клавишу . . .

Сейчас программатор нормально определился системой, но микроконтроллер не отвечает на его команды. Возможные причины неисправности:

  • Неправильно подключен микроконтроллер. Проверьте соответствие выводов FTBB и прошиваемого микроконтроллера
  • Плохой контакт или обрыв провода.
  • Микроконтроллер заблокирован FUSE битами или выставлен на неактивный способ тактирования.

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


Я по ошибке залил прошивку для JTAG в основной контроллер и он после этого перестал отзываться на команды программатора. Что делать?

Дело в том, что контроллер JTAG адаптера тактуется от внешнего кварцевого резонатора, поэтому FUSE биты выставлены соответственно. Но у главного микроконтроллера в обычном режиме кварца нет. Соответственно запуститься он с настройками FUSE для кварца он не сможет. Поэтому то он и не определяется. Решение простое – взять любой из кварцев, что идет в комплекте с Pinboard (на 12 или на 16мгц), и воткнуть его в колодку ZQ, что слева от главного микроконтроллера.

Слева от главного микроконтроллера

Не забыв установить джамперы на Х1 и Х2. После чего подключаете шнур FTBB программатора и зашиваете нужную прошивку как обычно.

Вытаскиваете кварц – он теперь тут не нужен. Бутлоадер установлен и работает.

Инструкция по использванию JTAG отладчика

Что нужно сделать для того, чтобы воспользоваться JTAG отладчиком

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

Что нужно сделать для того, чтобы воспользоваться JTAG отладчиком.

1. Подключить линию отладки JTAG:

Для этого нужно соединить JTAG адаптер с выводами JTAG интерфейса главного контроллера. Это выводы TDI, TDO, TMS, TCK

Соединять нужно один к одному. Т.е.

  • TDI – TDI
  • TDO – TDO
  • TMS – TMS
  • TCK – TCK

На вывод J RST со стороны JTAG адаптера не обращайте внимания, он для прошивки JTAG контроллера.

Для этого придется сделать соединительный кабель на четыре жилы. Такой же как для прошивки.

Соединительный кабель на четыре жилы
2. Подключить JTAG контроллер к интерфейсу USB-UART, переключив рубильники UART в положение OFF, а рубильники JTAG в положение ON
Рубильники
3. Убедиться, что порт, на который села микросхема FT232RL соответствует COM1…COM4 иначе студия не найдет отладочный интерфейс. Если это не так, то смотри инструкцию по быстрому старту демоплаты, там подробно указано как и что нужно подправить.
4. Настроить студию так, чтобы в качестве отладочного инструмента был не AVR Sumulator, а JTAG ICE (не путать с JTAG ICE II)

Делается это в меню DEBUG->Select Platform & Device

DEBUG->Select Platform & Device

Там заново выбрать контроллер и отладочную платформу (либо при создании нового проекта сразу указать, что будет JTAG), не забыть также повторно выбрать тип процессора. В данном случае будет Mega16 или Mega32 (в зависимости от серии демоплаты и главного контроллера):

Выбрать контроллер

Жмется Финиш и студия готова к работе.

Внизу окна студии, в самой нижней строке должно быть написано Atmega16 JTAG ICE (или мега32)

Внизу окна студии


!!!WARNING!!!

При подключении JTAG интерфейса в режиме отладки происходит перезапись памяти кристалла. А это значит из контроллера будет стерт Bootloader. Учитывайте это. Залить бутлоадер можно тем же JTAG адаптером, использовав его как программатор. Либо через FTBB Prog, воспользовавшись соответствующей инструкцией.

!!!WARNING!!!

При работе в режиме отладки через JTAG fuse биты не меняются, а значит, не смотря на стертый бутлоадер, контроллер будет стартовать словно с бутом – т.е. не с нулевого адреса, а с адреса старта бутлоадера. В этом случае нужно будет подправить FUSE биты, переключив FUSE бит BOOTRST в противоположное состояние. Сделать это можно тем же JTAG адаптером.

Вызовите диалог Сonnect…

Диалог Сonnect

В типе коннекта надо выбрать JTAG в качестве программатора.

Выбрать JTAG в качестве программатора

И нажать Connect… Адаптер немного потупит и выдаст окно программатора:

Окно программатора

Выбери тип контроллера и нажми Read Signature. Должна считаться сигнатура и появиться надпись:

Сигнатура

Это говорит о том, что сигнатура соответствует текущему чипу. Это очень важно.

Далее переходим на вкладку Fuses и жмем кнопку Read (всегда при работе с Fuses нужно считывать их перед тем как что либо менять!!!) Будет такая картина:

Жмем кнопку Read

Галочку BOOTRST надо снять, после чего нажать Program. И закрыть окно прошивальщика.

Кстати, этим прошивальщиком можно заливать и любую произвольную прошивку, достаточно заглянуть на вкладку Programm. А также вернуть на место Bootloader и выставить любые Fuse биты.

Все, теперь мы готовы к запуску. Жми Compile and Run. Как обычно:

Compile and Run

Пойдет компиляция, потом студия затупит, а JTAG адаптер начнет активно моргать лампочкой. Спустя несколько секунд. Стрелочка текущей команды появится возле метки ORG 0000 – программа запущена и готова к пошаговому выполнению.

Программа запущена и готова

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

Стрелка показывает текущую инструкцию, поле IO View – содержимое регистров периферии. Причем их можно менять произвольно, вне зависимости от программы. Разверните PORTD, выставите галочки в биты DDRD4 и PORTD4

Разверните PORTD

И при этом светодиод LED1, если у него будет стоять джампер, зажгется! А ведь процессор еще ни одного шага не сделал! Он по прежнему стоит на нуле, но мы можем дрыгать периферию как нам вздумается. Если потыкать сейчас по регистрам таймеров, то можно запустить ШИМ, а можно сгенерерировать прерывание. И все это в реальном контроллере, не написав ни единой строчки кода, только вручную перещелкивая битами регистров. При этом в регистре PIN будет показано текущее значение, которое навелось на портах контроллера на момент обмена.

Работа в режиме отладки

Изучите кнопочки, что будут вверху экрана. Они управляют выполнением кода

Кнопочки

Слева направо:

  1. Пуск (сейчас запущена, поэтому серая)
  2. Стоп – остановка симуляции (зашитая при симуляции программа останется в МК)
  3. Свободный пуск – контроллер пойдет выполнять программу, не отчитываясь о результатах.
  4. Пауза. Позволяет выбросить выполняющуюся программу в том месте где мы нажали.
  5. Сброс контроллера – словно бы мы нажали RESET. Удобней сбрасывать так, чем перегружать симуляцию.
  6. Перейти к текущему положению программы. Удобно когда у нас прога раскидана по куче файлов, чтобы не искать везде эту желтую стрелочку
  7. Шаг со входом в процедуры/функции. Фактически пошаговое выполнение.
  8. Шаг с перескакиванием функций. Удобно когда надо перескочить уже отлаженные и четко работающие функции, дабы не терять на них время.
  9. Шаг над. При этом программа делает очередную итерацию главного цикла и встает над точкой со стрелкой. Если конечно сможет. Зависит от алгоритма программы.
  10. Выполнить код до текущего положения курсора. Адски полезная фича
  11. Пошаговое автовыполнение. Студия сама будет быстро делать шаги. Бесполезная опция =)
  12. Включить брейпоинт. Точка останова, на которой контроллер встанет как вкопанный. Очень удобная вещь. Незаменима при отладке. Ставится в нужном месте, где нам надо посмотреть выполнение кода и делается свободный запуск программы. Когда студия пойдет через бряк она там вывалится с показом всей инфы.
  13. --
  14. Добавить переменную в Watch List. Ставим курсор на любую переменную и жмем эту кнопку. И она попадает под наше пристальное наблюдение.
  15. Показать/Спрятать окно гляделок за переменными.
  16. Показать/Спрятать Окно регистров.
  17. Показать/Спрятать окно памяти. Там можно смотреть как движется стек, как расположены данные в ПЗУ, ОЗУ, ЕЕПРОМЕ. Полезнейшая вещь!
  18. Переключиться в режим дизассемблера. Даже когда пишешь на асме пригождается,например, когда надо развернуть макрос и обработать его не как одну команду, а покомандно. А уж когда пишешь на Си без дизасма никуда. Иначе непонятно что вообще там происходит. Оптимизатор бывает такое отмочит, что без курения в машинные коды и не поймешь что происходит.
  19. --

Подробней про отладку в студии читайте в статье: http://easyelectronics.ru/avr-uchebnyj-kurs-otladka-programm-chast-1.html
Все сказанное там справедливо и тут. Разве что с рядом ограничений – например в JTAG режим мы можем поставить всего три брейкпоинта.

Ошибки в работе JTAG и борьба с ними

Делятся они на два вида. Первая – студия не находит адаптер. Так и пишет, что мол не может подсоединиться. Тут надо проверить, чтобы COM порт был нужного номера (от 1 до 4) и правильно включены все переключатели (см. начало статьи). А также проверить правильность работы драйвера. Иногда полезно бывает взять и передернуть питание платы. Чтобы сбросить контроллер JTAG’a. Бывает что он виснет при загрузке.

Вторая ошибка – Студия видит JTAG, но говорит, что не видит Target. Тут надо проверить, контакты JTAG интерфейса, что нет нигде залипаний и неконтакта в четырехжильном проводе. А также, что активен Fuse bit JTAGEN (по умолчанию он включен, но мало ли).

Если что то не так с отладочным интерфейсом – пиши на форум, разберемся.

Для обладателей платы с контроллером Мега32

Различия версий между М16 и М32

Различия между версиями Pinboard 1.1 M16 и Pinboard 1.1 M32 только в использованном главном контроллере. Это ATmega16A и ATMega32A соответственно. Для краткости я их буду называть PB1.1M16 и PB1.1M32

Bootloader

На ATMega32 установлен немного другой Bootloader поэтому при старте он не зажигает LED1, как это сказано в инструкции. А в целом он ведет себя с AVRPROG как обычно – после сброса, в течении 5 минут ждет запроса на прошивку. В архиве boot_loaders.zip лежат исходники загрузчиков для Мега32 и Мега168 (за компанию ;) )

Тестовая прошивка

В инструкции для PB1.1M16 было сказано, что прошивка (MainDemo16-RTOS.hex) которая идет изначально с контроллером не поддерживает работу дисплея, а для его проверки надо перешиться на прошивку Demo16-RTOS.hex которая не запускается если не подключен дисплей.

В PB1.1M32, начиная с 14.08.10 числа, пойдет единая универсальная тестовая прошивка, которая не виснет при неправильно подключении дисплея, а просто начинает немного подтормаживать в терминале. Так что дисплей можно начинать подключать сразу из коробки, без каких либо телодвижений. По перешивке ничего особенно не изменилось. Все точно также как и для версии PB1.1M16

Исходник модифицированной прошивки будет лежать в файле M32Demo.zip. Не обращайте внимания на то, что проект называется Demo16-RTOS. Он просто сделан на базе 16го путем небольшой правки исходника для М16 =))).

Самопрошивка

Для самопрошивки через FTBB нужно использовать файл m32boot.hex из архива boot_loaders.zip пример командной строки для прошивки контроллера M32 приведен в файле PBSelf32.cmd

Либо ниже:

 avrdude.exe -p m32 -c pinb -P ft0 -B 4800 -U hfuse:w:156:m -U lfuse:w:228:m
 avrdude.exe -p m32 -c pinb -P ft0 -U flash:w:m32boot.hex:a
 
 @echo off
 color 0A
 echo ATmega32 Burned ok!
 pause

Примеры из учебного курса

Разница между Atmega16 и Mega32 только в размере используемой памяти. Поэтому даже код написанный на ассемблере для M16 без проблем компилируется и зашивается в M32, надо только подправить название контроллера в исходнике:

 .include "m16def.inc" ; Используем ATMega16
 .include "define.asm" ; Наши все определения переменных тут
 .include "macro.asm" ; Все макросы у нас тут
 .include "WH\lcd4_macro.inc"
 .include "kernel_macro.asm"
 ...

на

 .include "m32def.inc" ; Используем ATMega32
 .include "define.asm" ; Наши все определения переменных тут
 .include "macro.asm" ; Все макросы у нас тут
 .include "WH\lcd4_macro.inc"
 .include "kernel_macro.asm"
 ...

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

Второе отличие между мегой16 и мегой32 – в таблице прерываний. У Меги16 таблица прерываний на один вектор короче:

 .CSEG
 .ORG $000 ; (RESET) External Pin, Power-on Reset, Brown-out Reset,
 Watchdog Reset and JTAG AVR Reset
 RJMP Reset
 .ORG $002
 RETI ; (INT0) External Interrupt Request 0
 .ORG $004
 RETI ; (INT1) External Interrupt Request 1
 .ORG $006
 RETI  ; (TIMER2 COMP) Timer/Counter2 Compare Match
 .ORG $008
 RETI ; (TIMER2 OVF) Timer/Counter2 Overflow
 .ORG $00A
 RETI  ; (TIMER1 CAPT) Timer/Counter1 Capture Event
 .ORG $00C
 RETI ; (TIMER1 COMPA) Timer/Counter1 Compare Match A
 .ORG $00E
 RETI ; (TIMER1 COMPB) Timer/Counter1 Compare Match B
 .ORG $010
 RETI ; (TIMER1 OVF) Timer/Counter1 Overflow
 .ORG $012
 RETI ; (TIMER0 OVF) Timer/Counter0 Overflow
 .ORG $014
 RETI ; (SPI,STC) Serial Transfer Complete
 .ORG $016
 RETI  ; (USART,RXC) USART, Rx Complete
 .ORG $018
 RETI ; (USART,UDRE) USART Data Register Empty
 .ORG $01A
 RETI ; (USART,TXC) USART, Tx Complete
 .ORG $01C
 RETI ; (ADC) ADC Conversion Complete
 .ORG $01E
 RETI ; (EE_RDY) EEPROM Ready
 .ORG $020
 RETI ; (ANA_COMP) Analog Comparator
 .ORG $022
 RETI ; (TWI) 2-wire Serial Interface
 .ORG $024
 RETI ; (INT2) External Interrupt Request 2
 .ORG $026
 RETI ; (TIMER0 COMP) Timer/Counter0 Compare Match
 .ORG $028
 RETI ; (SPM_RDY) Store Program Memory Ready

А у Мега32 есть еще и прерывание INT2, поэтому все вектора, что идут ниже, сместились на один вектор.

Вот таблица векторов для АтМега32:

 .CSEG
 .ORG $000
 RJMP Reset ; (RESET) External Pin, Power-on Reset, Brown-out Reset and
 Watchdog Reset
 .ORG $002
 RETI ; (INT0) External Interrupt Request 0
 .ORG $004
 RETI ; (INT1) External Interrupt Request 1
 .ORG $006
 RETI ; (INT2) External Interrupt Request 2
 .ORG $008
 RETI ; (TIMER2 COMP) Timer/Counter2 Compare Match
 .ORG $00A
 RETI ; (TIMER2 OVF) Timer/Counter2 Overflow
 .ORG $00C
 RETI ; (TIMER1 CAPT) Timer/Counter1 Capture Event
 .ORG $00E
 RETI ; (TIMER1 COMPA) Timer/Counter1 Compare Match A
 .ORG $010
 RETI ; (TIMER1 COMPB) Timer/Counter1 Compare Match B
 .ORG $012
 RETI ; (TIMER1 OVF) Timer/Counter1 Overflow
 .ORG $014
 RETI ; (TIMER0 COMP) Timer/Counter0 Compare Match
 .ORG $016
 RETI ; (TIMER0 OVF) Timer/Counter0 Overflow
 .ORG $018
 RETI ; (SPI, STC) Serial Transfer Complete
 .ORG $01A
 RETI ; (USART, RXC) USART, Rx Complete
 .ORG $01C
 RETI ; (USART, UDRE) USART Data Register Empty
 .ORG $01E
 RETI ; (USART, TXC) USART, Tx Complete
 .ORG $020
 RETI ; (ADC) ADC Conversion Complete
 .ORG $022
 RETI ; (EE_RDY) EEPROM Ready
 .ORG $024
 RETI ; (ANA_COMP) Analog Comparator
 .ORG $026
 RETI ; (TWI) 2-wire Serial Interface
 .ORG $28
 RETI ; (SPM_RDY) Store Program Memory Ready

Остальные названия векторов, регистров, битов периферии полностью идентичны. Так что код подправленный по этим пунктам без проблем копируется и компилируется с Мега16 на Мега32.

Где в инструкции сказано залить файл Demo16_RTOS.hex вы должны взять файл M32Demo.hex из архива. M32Demo.zip

В остальном же, все что справедливо для М16 работает и на М32.

Тестовая прошивка демоплаты с контроллером Мега32

Брать Демоархив

Исходники загрузчика для М32 и М168

Брать исходники

Небольшой мануал по работе в Linux

Автор: Valber
Версия: 0.1

Это краткая инструкция по использованию отладочной платы Pinboard на linux. В данной статье используется софт предлагаемый большинством дистрибутивов, такой как AVRDUDE,gcc-avr. Это пока небольшая инструкция и здесь описана малость (прошивка через bootloader), постараюсь дополнить её, работая с Pinboard.

Используется отладочная плата: Pinboard v1.1

Подключение платы

Pinboard

Вкратце необходимые установки на плате

  1. Voltage Selection установлен в 5V
  2. Переключатели UART 1,2 установлены ON.
  3. Оба переключателя JTAG 1,2 установлены в OFF.
  4. Перемычка питания установлена в положение USBH

Для начало необходимо понять установлен ли в вашей системе драйвер FTDI адаптера. Возьмите USB шнур и подключите его к компьютеру, а второй конец к USB-1(USB SOFT) на плате Pinboard. Нажмите кнопку MainPower Откройте терминал и наберите:

 ls /dev

Если среди всего что вам покажет терминал, есть ttyUSB0 то это означает что в вашей системе установлена поддержка FTDI.

Включение поддержки FTDI в ядре

!!!Здесь описаны действия в дистрибутиве Gentoo в чем-то они могут сходится, в чем-то отличаться, если хотите что-то добавить/сделать поправку пишите!

Большинство дистрибутивов распространяются с уже собранным «универсальным» ядром. Если вам необходимо включить поддержку FTDI в ядре(например у вас дистрибутив Gentoo). перейдите в папку с исходными кодами ядра.

Например:

 cd /etc/source/linux-....папка с ядром
 make menuconfig

в меню есть поиск (клавиша "/") вы можете найти FTDI драйвер с помощью него. Например у меня в ядре надо было включить.

→ Device Drivers → USB supports → USB serial computer support → FTDI single port serial driver

После проделанных изменений сохраните новую конфигурацию.

 make && make modules

Посмотрите куда будет сохранен образ ядра bzImage примонтируйте загрузочный (отдел если надо)

 mount /boot
 cp /адрес где расположено ядро/ bzImage /boot/название ядра

под названием ядра имеется ввиду ваше название ядра на которое вы будете ссылаться в grub.conf. Отредактируйте /boot/grub.conf. Отмонтируйте загрузочный раздел:

 umount /boot

перезагрузитесь с новым ядром и снова попробуйте подключить Pinboard как описано выше.

Прошивка через bootloader, стандартными средствами

Буду писать код на C а не на привычном ассемблере, почему? Потому, что синтаксис именно директивы компилятора(вроде .device). Если есть желание можно установить пакет avra он позволит скомпилировать ваш ассемблерный файл с синтаксисом Atmel() в hex. GCC(GNU Collection Compilers) тоже может компилировать ассемблер, но там есть отличия и нет(пока не нашел) вменяемой документации и примеров на русском.... хотя и на английском тоже.

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

  1. avrdude прошивающая программа
  2. gcc-avr компилятор
  3. avr-libc библиотека С-шных функций

Откройте ваш редактор и наберите простейший пример.

 #define F_CPU 8000000L
 #include <avr/io.h>
int main(void) { DDRС=0xFF; //Порт С на сконфигурирован на выход PORTС=0xFF; while(1){ //бесконечный цикл } }

Сохраните, например как test.c , затем откройте терминал и перейдите в папку с вашей программой, теперь скомпилируем объектный файл.

 avr-gcc -mmcu=atmega16 -o test.o test.c

или

 avr-gcc -mmcu=atmega16 -O3 -o test.o test.c 

во втором случае мы оптимизируем по размеру выходной файл. Затем транслируем получившийся файл в формат Intel Hex

 avr-objcopy -O ihex test.o test.hex

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

 sudo su

Подключите Pinboard к компьютеру как это было описано выше. Перед прошивкой вы должны нажать клавишу RESET рядом с главным микроконтроллером и сразу же начать прошивать(Reset 15c.):

 avrdude -p m16 -c avr109 -P /dev/ttyUSB0 -U flash:w:test.hex

Тут p — это тип микроконтроллера Р — порт с - тип программатора

Документация по AVRdude на русском.

Прошивка Pinboard от пользователя

Например, если устройству соответствует файл /dev/ttyUSB0, выполняем:

 udevadm info -q path -n /dev/ttyUSB0

в результате получаем что-то вроде

 /devices/pci0000:00/0000:00:1d.3/usb5/5-1/5-1:1.0/ttyUSB0/tty/ttyUSB0

0000:00:1d.3 - это и есть ID нашего устройства. Соответственно в файл /etc/udev/rules.d/95-avrdude.rules записываем правило(!В одну строчку!!):

 KERNEL=="ttyUSB0", ATTRS{serial}=="0000:00:1d.3", , GROUP="пользователь", MODE="0666"

Теперь снова включим и выключим Pinboard. Теперь можно прошивать с пользовательского терминала, а также пользоваться встроенной в Eclipse кнопкой прошивки или графическими оболочками AVRdude!

Вот ресурсы которыми я руководствовался для написания этого раздела:
Подробное руководство по udev на русском.

Позже напишу более подробное руководство по использованию Eclipse, а пока оно не сильно отличается от написанного Работа с Arduino

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты