Как прошить и чем отлаживать микроконтроллеры AVR.
Первый вопрос, который встаёт перед начинающим эмбеддером — это как прошить микроконтроллер?
Для того чтобы прошить микроконтроллер необходимы три составляющие:
Любой микроконтроллер имеет режим программирования, в этом режиме некоторые выводы микроконтроллера изменяют свои функции, таким образом, что он может принимать данные и команды от программатора. У AVR вход в режим программирования осуществляется с помощью вывода Reset.
Как известно, в рабочем состоянии на этом выводе должна присутствовать логическая единица, подача логического нуля на этот вывод приводит к сбросу микроконтроллера. Вернее, кратковременная подача нуля, который затем сменится единицей. Если же в течение длительного времени подать и удерживать ноль, то микроконтроллер перейдёт в режим программирования.
Самый простой и в то же время популярный программатор — программатор Громова, ниже приведена его схема.
Вся схема помещается в корпус разъема DB9F.
По сути он просто преобразует логические уровни, com порта(±12вольт), в логические уровни микроконтроллера(0 и +5вольт). Давайте рассмотрим как это происходит на примере вывода SCK. Остальные информационные выводы, кроме вывода MISO, подключаются также с помощью диода и двух резисторов.
Когда сигнала нет вывод SCK через резистор R6 подтянут к земле.
Когда передаётся логический ноль напряжение равно 12 вольтам. Это напряжение распределяется между диодом и двумя резисторами. Падение напряжение на диоде — 1 вольт, оставшееся напряжение делится между двумя резисторами, по 5,5 вольта на каждый и с одного из них поступает на вывод МК. Получается что при передаче с com порта 12 вольт, на микроконтроллер приходит всего 5,5.
Когда передаётся логическая единица напряжение равно -12 вольт. Это напряжение запирает диод и ток через него не течёт, в итоге вывод микроконтроллера, через резистор R6 оказывается подтянутым к земле.
Надо сказать, что у com порта логический ноль лежит в диапазоне от +3 до +12 вольт, а единица от -3 до -12 и рассмотренный нами случай справедлив только для ПК, где логическая единица кодируется напряжением -12, а логический ноль +12 вольт. В некоторых ноутбуках логическая единица кодируется напряжением -3 вольта, а логический ноль +3. Поэтому не стоит удивляться если не получиться прошить микроконтроллер с ноутбука через программатор Громова. Кстати программа, которая работает с программаторами, подключающимися через com порт называется UniProf.
Такой программатор подойдёт если надо прошить несколько устройств, в повседневном использовании он неудобен по двум причинам: необходим com порт, который всё реже можно встретить на современных ПК, и низкая скорость прошивки.
Описанных выше недостатков лишены usb программаторы. Например USBasp или SP200S.
Что касается SP200S — подключение по usb, большое количество поддерживаемых микросхем, высокая скорость прошивки, низкая цена, около 15$, но этот программатор не определяется на компьютерах где установлена Windows8.1. Причина тому преобразователь usb-uart PL2303HX, который не поддерживается Windows8.1, что иногда бывает нужно.
Перейдём к отладке, если железного отладчика нет, то производить отладку в железе можно двумя способами:
Давайте первый способ рассмотрим на примере, у нас есть условный оператор и нам необходимо узнать выполняется ли он, для этого мы внутри него зажигаем светодиод, ждём некоторое время, гасим светодиод. Компилируем, зашиваем программу в контроллер, если светодиод моргнул программа зашла в if().
Таким образом, мигая в разных местах программы разное количество раз, можно определить какие части кода выполнялись.
Если нам необходима более подробная информация, например, данные с датчика температуры, можно воспользоваться преобразователем usb-uart и программой Terminal. После получения информации с датчика шлём её по uart в окно Terminal.
Знать такие способы нужно, но пользоваться удобнее железным отладчиком, вот мы и подошли к тому, ради чего задумывалась эта статья — программатор-отладчик AVRDRAGON.Программатор поддерживает почти все микроконтроллеры фирмы Atmel, исключением являются лишь некоторые XMEGA. Отладчик позволяет остановить программу в любом месте и посмотреть значения переменных, регистров, исполнять программу пошагово, посмотреть стек вывозов функций и много другой полезной информации.
Поддерживает следующие интерфейсы:
Более подробно про каждый из интерфейсов можно почитать тут.
Управление программатором осуществляется прямо из Atmel Studio, без проблем работает под windows8.1, единственное, что заставляет задуматься перед покупкой это цена, ко мне он приехал с али за 79$, на момент написания статьи стоит 88$. Итак по поводу цены, не так давно ко мне приехал китайский jlink за 13$, после подключения к компьютеру он попросил обновится, в конце обновления ругнулся, что оборудование нелицензионное и всё, потух весело мигающий светодиод, в общем, слетела прошивка, три дня ушло чтобы найти прошивку, которая не слетала бы при обновлении и заставить его работать, кстати, прошить его получилось только под XP, под 7-кой и 8-кой он правильно не определялся. Как он будет работать и что будет при следующем обновлении не известно, вот в чём минус подделки.
В общем, покупать или нет каждый решает сам, в случае покупки обязательно запаковать его в какой-нибудь корпус, либо сделать отверстие для кабеля в родной коробочке, так он прослужит гораздо дольше.
Покупал AVRDRAGON тут.
Для того чтобы прошить микроконтроллер необходимы три составляющие:
- чип, который хотим прошить
- программатор
- специальная программа управляющая программатором, установленная на компьютере
Любой микроконтроллер имеет режим программирования, в этом режиме некоторые выводы микроконтроллера изменяют свои функции, таким образом, что он может принимать данные и команды от программатора. У AVR вход в режим программирования осуществляется с помощью вывода Reset.
Как известно, в рабочем состоянии на этом выводе должна присутствовать логическая единица, подача логического нуля на этот вывод приводит к сбросу микроконтроллера. Вернее, кратковременная подача нуля, который затем сменится единицей. Если же в течение длительного времени подать и удерживать ноль, то микроконтроллер перейдёт в режим программирования.
Самый простой и в то же время популярный программатор — программатор Громова, ниже приведена его схема.
Вся схема помещается в корпус разъема DB9F.
По сути он просто преобразует логические уровни, com порта(±12вольт), в логические уровни микроконтроллера(0 и +5вольт). Давайте рассмотрим как это происходит на примере вывода SCK. Остальные информационные выводы, кроме вывода MISO, подключаются также с помощью диода и двух резисторов.
Когда сигнала нет вывод SCK через резистор R6 подтянут к земле.
Когда передаётся логический ноль напряжение равно 12 вольтам. Это напряжение распределяется между диодом и двумя резисторами. Падение напряжение на диоде — 1 вольт, оставшееся напряжение делится между двумя резисторами, по 5,5 вольта на каждый и с одного из них поступает на вывод МК. Получается что при передаче с com порта 12 вольт, на микроконтроллер приходит всего 5,5.
Когда передаётся логическая единица напряжение равно -12 вольт. Это напряжение запирает диод и ток через него не течёт, в итоге вывод микроконтроллера, через резистор R6 оказывается подтянутым к земле.
Надо сказать, что у com порта логический ноль лежит в диапазоне от +3 до +12 вольт, а единица от -3 до -12 и рассмотренный нами случай справедлив только для ПК, где логическая единица кодируется напряжением -12, а логический ноль +12 вольт. В некоторых ноутбуках логическая единица кодируется напряжением -3 вольта, а логический ноль +3. Поэтому не стоит удивляться если не получиться прошить микроконтроллер с ноутбука через программатор Громова. Кстати программа, которая работает с программаторами, подключающимися через com порт называется UniProf.
Такой программатор подойдёт если надо прошить несколько устройств, в повседневном использовании он неудобен по двум причинам: необходим com порт, который всё реже можно встретить на современных ПК, и низкая скорость прошивки.
Описанных выше недостатков лишены usb программаторы. Например USBasp или SP200S.
Что касается SP200S — подключение по usb, большое количество поддерживаемых микросхем, высокая скорость прошивки, низкая цена, около 15$, но этот программатор не определяется на компьютерах где установлена Windows8.1. Причина тому преобразователь usb-uart PL2303HX, который не поддерживается Windows8.1, что иногда бывает нужно.
Перейдём к отладке, если железного отладчика нет, то производить отладку в железе можно двумя способами:
- с помощью светодиода
- с помощью преобразователя usb-uart
Давайте первый способ рассмотрим на примере, у нас есть условный оператор и нам необходимо узнать выполняется ли он, для этого мы внутри него зажигаем светодиод, ждём некоторое время, гасим светодиод. Компилируем, зашиваем программу в контроллер, если светодиод моргнул программа зашла в if().
if(условие)
{
какой-то код.......
led_on();
delay_ms(100);
led_off();
}
Таким образом, мигая в разных местах программы разное количество раз, можно определить какие части кода выполнялись.
Если нам необходима более подробная информация, например, данные с датчика температуры, можно воспользоваться преобразователем usb-uart и программой Terminal. После получения информации с датчика шлём её по uart в окно Terminal.
Знать такие способы нужно, но пользоваться удобнее железным отладчиком, вот мы и подошли к тому, ради чего задумывалась эта статья — программатор-отладчик AVRDRAGON.Программатор поддерживает почти все микроконтроллеры фирмы Atmel, исключением являются лишь некоторые XMEGA. Отладчик позволяет остановить программу в любом месте и посмотреть значения переменных, регистров, исполнять программу пошагово, посмотреть стек вывозов функций и много другой полезной информации.
Поддерживает следующие интерфейсы:
- SPI programming (SPI)
- High Voltage Serial Programming (HVSP)
- Parallel Programming (PP)
- JTAG Programming (JTAG)
- PDI Programming (PDI)
- aWire Programming (aWire)
Более подробно про каждый из интерфейсов можно почитать тут.
Управление программатором осуществляется прямо из Atmel Studio, без проблем работает под windows8.1, единственное, что заставляет задуматься перед покупкой это цена, ко мне он приехал с али за 79$, на момент написания статьи стоит 88$. Итак по поводу цены, не так давно ко мне приехал китайский jlink за 13$, после подключения к компьютеру он попросил обновится, в конце обновления ругнулся, что оборудование нелицензионное и всё, потух весело мигающий светодиод, в общем, слетела прошивка, три дня ушло чтобы найти прошивку, которая не слетала бы при обновлении и заставить его работать, кстати, прошить его получилось только под XP, под 7-кой и 8-кой он правильно не определялся. Как он будет работать и что будет при следующем обновлении не известно, вот в чём минус подделки.
В общем, покупать или нет каждый решает сам, в случае покупки обязательно запаковать его в какой-нибудь корпус, либо сделать отверстие для кабеля в родной коробочке, так он прослужит гораздо дольше.
Покупал AVRDRAGON тут.
Похожие статьи