Микроконтроллеры AVR - с чего начатьКонтроллер Управление программатором Программирование Ссылки

Микроконтроллеры AVR: с чего начать

Глава к книге "Микроконтроллеры AVR: от простого к сложному"

Для просмотра рисунков в крупном масштабе щелкните по ним мышкой.

Здесь свалена информация о микроконтроллерах AVR с предыдущей версии сайта, ссылки могли устареть.

Информация, приведенная на данной странице, ориентирована на программатор, выполненный на основе программатора ByteBlaster (программатор PLD Altera, см.рисунок). Программатор, описанный в книге (см. ПУБЛИКАЦИИ), отличается от программатора ByteBlaster как по схеме, так и по программному обеспечению. Однако общие принципы для обоих программаторов одинаковы.

Хотя сначала мне показалось более удобным иметь два программатора в одном (скорее потому, что ByteBlaster уже был), оказалось, что лучше пользоваться двумя отдельными программаторами, в связи с этим программное обеспечение для программатора ByteBlaster+AVR ограничилось поддержкой микроконтроллеров AVR серии AT90, дальнейшее развитие ПО (поддержка ATtiny, ATmega, программирование Fuse-битов) шло под схему, приведенную на странице ПУБЛИКАЦИИ.

Обзор программаторов для микроконтроллеров AVR.

 

 В сети можно найти множество программаторов для микроконтроллеров AVR.   Для разработки контроллеров удобен программатор с последовательной загрузкой программ (Serial Downloading), позволяющий программировать МК в системе, то есть, для перепрограммирования не требуется извлекать МК с платы контроллера, на плате контроллера предусматривается дополнительный разъем для программирования (обычно на плату контроллера устанавливают разъем BH-10, а шлейф программатора заканчивается разъемом IDC-10).

 Такой программатор обычно подключается к СОМ- или LPT-порту компьютера (далее - РС). Преимуществом подключения к СОМ-порту является возможность использования длинного кабеля РС-программатор. К недостаткам следует отнести

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

 -использование программатором СОМ-порта.

 Этих недостатков лишен программатор, подключаемый к LPT-порту РС, хотя в этом случае приходится отключать принтер. Для изготовления такого программатора микроконтроллеров AVR  требуется лишь буферная ИС, например, КР1533АП5 или ее аналог 74HC244 и несколько пассивных элементов, а плата может быть размещена в корпусе стандартного 25-контактного разъема DB-25, подключаемого к LPT-порту РС (существуют разновидности такого корпуса - металлический на винтах и пластиковый на защелках, корпус на защелках более вместителен). Питание буферной ИС поступает с платы программируемого контроллера.

 В своем программаторе я использую кабель длиной в 1 метр. 

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

При желании "мощно сэкономить" и рискнуть целостностью LPT-порта и МК можно отказаться от буфера и ограничительных резисторов, тогда программатор можно сделать из двух разъемов и пяти проводов. Правда, в таком варианте провода надо делать очень короткими.

 Простая схема такого программатора с программным обеспечением скачивается здесь. Это fbprg.pdf (схема подключения AVR-микроконтроллеров к LPT-порту), то же - fbprg.gif (разница лишь в формате файла; картинка в fbprg.pdf качественнее), программное обеспечение - в fbprg.zip (здесь же схема и печатная плата для подключения микроконтроллера AT90S1200). Схема отличается тем, что питание и тактирование программируемого микроконтроллера AVR осуществляется от компьютера через LPT-порт. Достоинства: минимум деталей - нужны 25-контактный разъем (папа) для LPT-порта и 3 резистора (кварцевый резонатор и источник питания не требуются).

 Недостатки: опасность вывести из строя LPT-порт, необходимость использовать короткие проводники, невозможность программирования микроконтроллера AVR в составе системы (контроллера), вероятность сбоев во время программирования за счет перекрестных наводок на линиях программатора. Но, используя такой программатор, можно прошить микроконтроллер AVR программатора, подключаемого к СОМ-порту РС.

 Ознакомление с разделом Memory Programming, часть "Serial Downloading" технического описания какого-либо МК серии АТ90 или ATMega помогло написать собственное программное обеспечение.

 Первоначально мне показалось удобным изготовить программатор микроконтроллеров AVR на основе ByteBlaster, рекомендуемого для программирования в составе системы PLD ALTERA (программируемые логические устройства компании ALTERA). Для программирования микроконтроллеров AVR понадобилось добавить всего одну линию и изготовить переходник для микроконтроллеров AVR. Необходимо также разработать собственное программное обеспечение.

 

 От переходника можно отказаться, но тогда у вас будет программатор с отличающейся от предлагаемой корпорацией Atmel цоколевкой разъема (это не страшно, тем более, что в разных программаторах Atmel для микроконтроллеров AVR используются как минимум две разные цоколевки). Кроме того, в ByteBlaster не рекомендуется использовать кабель длиннее 25 см, а переходник позволит получить кабель для программирования МК суммарной длиной 1 м (25 см кабель ByteBlaster + длина кабеля переходника).  Правда, длину кабеля ByteBlaster можно значительно увеличить, если разместить плату программатора не в корпусе разъема , подключаемого к LPT-порту РС, а рядом с программируемой платой. Но такой вариант менее удобен в эксплуатации.

 Схема программатора ByteBlaster находится здесь.

  

Для массового программирования микроконтроллеров AVR более подойдет параллельный программатор. Но если для последовательного программиорвания используется 4 сигнальные линии и 2 линии питания, то для параллельного - порядка 20-ти линий (их число отличается для разных типов МК).

 В таком программаторе можно соединить несколько розеток с программируемыми микроконтроллерами AVR и программировать их одновременно.

 Вам такой программатор не нужен? Ошибаетесь. Например, при программировании микроконтроллеров AVR серии ATMega есть возможность использовать контакт RESET МК в качестве еще одного контакта порта ввода-вывода, для этого программируется один из Fuse-битов МК, но после этого дальнейшее последовательное программирование невозможно, так как оно требует использования этого контакта в его первоначальной функции RESET. Восстановить эту функцию можно только при параллельном программировании.

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

 С целью восстановления возможности последовательного программирования можно сделать параллельный программатор с единственной программной функцией восстановления Fuse-битов МК.

Что нужно для разработки программатора?

 

  • Уметь программировать LPT-порт; для этого надо ознакомиться с описанием работы LPT-порта.
  • Изучить раздел "Memory Programming", часть "Serial Downloading" технического описания выбранного микроконтроллера AVR.
  • Ознакомиться с аналогичной схемой программатора.

 Так как мне нужен был программатор ByteBlaster, подключаемый к LPT-порту, работающий по такому же алгоритму и дающий возможность программировать PLD ALTERA, то я воспользовался его схемой и изготовил съемный переходник для подключения к разъему с цоколевкой, рекомендованной корпорацией ATMEL для программирования микроконтроллеров AVR. Кроме того, в ByteBlaster довольно удачно выбраны контакты с позиции написания управляющей программы. Для пущего комфорта в написании программы я использовал незадействованный ключ элемента DD1, подключив его к конт.16 разъема DB-25M, что позволило в программе использовать отдельный порт для управления линией SCK. При некотором усложнении программы это можно было проделать и через конт.8 разъема DB-25M, оставив ByteBlaster в первозданном виде.

Вы можете посмотреть схему комплекта дополненный ByteBlaster - переходник для AVR здесь.

 

 Для программирования микроконтроллеров AVR в составе отладочного комплекта STK-200 применяется такой же 10-контактный разъем BH-10, но с подключением цепей к другим контактам; в программаторе AVR910 рекомендуется использовать шестиконтактный разъем. Я использовал разъемы BH-10 с шагом между контактами 2,54 мм. Использование таких разъемов удобно тем, что на плате контроллера можно установить даже не разъем, а три или пять секций двухрядных джамперов, которые продаются в виде длинных пластиковых линеек, от которых можно отломить нужное число секций.

 Если отказаться от переходника, то цепи 10-контактного разъема ByteBlaster можно обозвать, например, так:

 

Цепь MOSI VCC(+5V) RESET SCK MISO GND(0V)
Контакт 1 4 5 6 7 2 или 10

 Разместив ответный разъем на плате контроллера, соедините его контакты с одноименными контактами микроконтроллера AVR (так, контакт 1 (MOSI) разъема соединяется с контактом MOSI используемого микроконтроллера AVR). Соединение контактов разъема 2 и 3 на плате контроллера позволит программно определять, подключен ли контроллер к программатору.

 Однако изготовление переходника позволит программировать микроконтроллеры AVR в составе контроллеров с разъемами, рекомендуемыми корпорацией ATMEL (а вдруг захочется). Привожу соединения между контактами разъемов переходника:

 

Цепь MISO VCC(+5V) SCK MOSI RESET GND(0V) Резерв Перемычка
к AVR(6 или 10 контактов,мама) 1 2 3 4 5 6 7 -
к ByteBlaster(10 контактов,папа) 7 4 6 1 5 10 9 2 и 3

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

Описание используемых в программаторе микроконтроллеров AVR контактов LPT-порта.

 Для подключения к компьютеру используется разъем DB-25M.

 

Контакт Наименование Порт Номер бита Направление Инверсия
2 DATA 0 378h (278h) 0 выход нет
3 DATA 1 378h (278h) 1 выход нет
7 DATA 5 378h (278h) 5 выход нет
8 DATA 6 378h (278h) 6 выход нет
9 DATA 7 378h (278h) 7 выход нет
10 ACK 379h (279h) 6 вход нет
11 BUSY 379h (279h) 7 вход есть
12 PE 379h (279h) 5 вход нет
13 SLCT 379h (279h) 4 вход нет
14 AutoLineFeed 37Ah (27Ah) 1 выход (вход) есть
15 ERROR 379h (279h) 3 вход нет
16 INIT 37Ah (27Ah) 2 выход (вход) нет
18...25 0V - - - -

 Если используется порт LPT1, программное управление производится через порты 378h, 379h и 37Ah; для порта LPT2 - через 278h, 279h и 27Ah.

 Направление ВЫХОД означает, что информация выводится из компьютера. ВЫХОД (ВХОД) - возможны оба направления, но в программаторе используется ВЫХОД. Наличие ИНВЕРСИИ означает, что при записи единицы в бит слова, выводимого в порт, на соответствующем контакте будет ноль. Инверсия при приеме и передаче проверялась экспериментально.

Использование контактов LPT-порта в программаторе для микроконтроллеров AVR.

 Воспользуемся схемой программатора с переходником и таблицей контактов LPT-порта.

  • В программаторе контакты 7 и 10 соединены, если выводимая на конт.7 информация будет повторяться на конт.10 - программатор подключен.
  • Контакт 15 соединен в программаторе с 0V, значит, программно определив его состояние можно узнать, подключен ли программатор и все ли в порядке с 0V.
  • Если сигнал на контакте 12 повторяет сигнал на конт.9 - значит работает DD1 и есть +5V, стало быть, подключен программируемый микроконтроллер или PLD и программатор готов к работе (если питание не подано прямо на контакт переходника или программатора ярыми врагами).
  • Если переходник для программирования микроконтроллеров AVR подключен к программатору и +5V подведено - на конт.11 появится 0V, программатор готов к загрузке программы в микроконтроллер AVR.
  • При положительном результате всех проверок можно разрешить передачу сигналов в микроконтроллер AVR, подав низкий уровень на конт.14.
  • Остальные контакты используются для передачи следующих сигналов: 3 - RESET, 16 - SCK, 2 - MOSI, 13 - MISO.

    Как управлять состоянием указанных в таблице линий LPT-порта.

     Простая программа на Pascal иллюстрирует организацию управления.

    const bit0=1; bit1=2; bit2=4; bit3=8; bit4=16; bit5=32; bit6=64; bit7=128;

    var B:byte;

    begin

    Port[$378]:=bit7+bit5; {в порт 378h посылается 128+32, высокие уровни на контактах 9 и 7}
    Readln; {проверьте уровни на контактах 2, 3, 7, 8 и 9, затем нажмите ENTER}
    Port[$37A]:=bit1+bit2; {на конт.14 низкий уровень (он с инверсией), на конт.16 высокий}
    Readln; {проверьте уровни на контактах 14 и 16, затем нажмиет ENTER}
    while true do begin {в бесконечном цикле проверяется состояние порта 379h}
     B:=Port[$379]; {на контактах, не соединенных с землей,- высокие уровни}
     Writeln(B); {исходно состояние порта 127: 1+2+4+8+16+32+64 (нет 128: бит 7 инверсный)}
    end; {соединение конт.11, 12, 13 или 15 с любым контактом 0V изменит состояние порта}
    end.

    Формат файлов .hex, загружаемых в память микроконтроллера AVR

    .

     В шестнадцатеричном формате .hex хранятся файлы с информацией, предназначенной для загрузки как во Flash-память микроконтроллера AVR (память программ), так и в EEPROM микроконтроллера AVR (электрически перепрограммируемая постоянная память).

     Рассмотрим фрагмент файла .hex, генерированного AVR Studio 3.0 и готового для записи во Flash-память микроконтроллера AVR.

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

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

     Для примера я выбрал две начальные и три конечные строки одной из программ, ассемблированных в AVR Studio:

    :10 0000 00 B6C0 0000 0000 0000 0000 0000 0000 0000 7A
    :10 0010 00 0000 0000 0000 0000 0000 24D0 7CE0 50FD 43
    ...
    :10 0E20 00 2A1D 3B1D 4C1D 5D1D 6E1D 7F1D 2797 7993 4F
    :0E 0E30 00 6993 5993 4993 3993 2993 1993 0895 1F
    :00 0000 01 FF

     Первый байт - число информационных(!) байт в строке; для первой строки это 10, значит, в первой, второй и третьей строках по 10H информационныx байт (10H=16); в предпоследней строке их 0EH (=14).

     Следующие два байта - адрес ячейки памяти, по которому записывается первый информационный байт строки (остальные информационные байты строки записываются в последующие ячейки памяти), третий байт отличается от нуля только в служебных строках. Он равен единице в последней строке, являющейся, очевидно, признаком конца файла, и равен двум в первой строке файла .hex , загружаемого в EEPROM микроконтроллера AVR (такая первая строка - признак файла с информацией для EEPROM); с другими значениями этого байта я не сталкивался.

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

     Последний байт - контрольное число. Если просуммировать все байты строки, то младший байт результата должен равняться нулю (суммирование с результатом размерностью в байт). Для файла .hex, полученного при ассемблировании в AVR Studio, информационные байты располагаются последовательно, так, как они должны располагаться в памяти программ (см. 2-ю колонку с адресами: в каждой строке адрес на 10Н больше, чем в предыдущей)

    Отмечу, что в результате компилирования программы, написанной на С в IAR Embedded Workbench, файл .hex оказывается составленным из блоков, внутри которых байты располагаются последовательно, как и показано выше, но после блока, начинающегося адресом 1040 может быть блок с младшим адресом, например, 0820, а количество информационных байтов в блоке может быть не кратна 10Н (не кратна 16-ти). Лучше сразу учитывать возможность загрузки такого файла при разработке программного обеспечения.

    Алгоритм последовательной загрузки программы в микроконтроллер AVR

     Для начала следует ознакомиться с разделом Serial Downloading главы Memory Programming полного технического описания какого-нибудь микроконтроллера AVR. Я не стану пересказывать этот раздел, остановлюсь лишь на моментах, которые вызвали у меня сомнение, потребовали проверки или не были описаны вовсе.

    • В файле .hex последовательность байт не требует перестановки, функции Pascal Hi(word) и Lo(word) дают правильный результат.

       Большинство команд микроконтроллера AVR двухбайтные, несколько команд 4-хбайтные. Так вот, если сравнить пары байт, составляющих одинаковые команды, в файле .hex и при просмотре Program Memory в AVR Studio, то оказывается, что в файле пара выглядит так: C04F, а в Program Memory так: 4FC0 .

       ( Пунктик появился от великого ума: не фиг было просматривать Program Memory!)

    • После каждого включения питания следует выполнять инструкцию Programming Enable (см. Serial Programming Instruction Set). А точнее, что эта инструкция обязательна не только для записи в память, но и для считывания, а также стирания.
    • Не ясен рисунок Serial Programming Waveforms из технического описания микроконтроллера, компьютер не может одновременно изменять состояние линии SCK и производить запись или считывание порта. Нормально работает такая последовательность: запись информации на выходную линию, считывание информации со входной линии при SCK=0 (информация, выставленная компьютером, записывается в микроконтроллер AVR), затем установка SCK (SCK=1), пауза, сброс SCK (SCK=0, при этом информация c выходной линии микроконтроллера AVR поступает через программатор в компьютер).
акселерометры цифровые с USB и RS-485 интерфейсами, аналоговые


   

<=  ссылки на разработки

различные АЦП с USB-интерфейсом и памятью
контроллер термопар с USB-интерфейсом
контроллер GSM управления и сигнализации
люксметр
колориметр
прочие разработки
печатная плата в домашних условиях
гарнитура стационарного телефона


Хостинг от uCoz