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

УПАВЛЕНИЕ ПРОГРАММАТОРОМ.

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

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

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

КонтактНаименованиеПортНомер битаНаправление Инверсия
2DATA 0378h (278h)0выход нет
3DATA 1378h (278h)1выход нет
7DATA 5378h (278h)5выход нет
8DATA 6378h (278h)6выход нет
9DATA 7378h (278h)7выход нет
10ACK379h (279h)6вход нет
11BUSY379h (279h)7вход есть
12PE379h (279h)5вход нет
13SLCT379h (279h)4вход нет
14AutoLineFeed37Ah (27Ah)1выход (вход) есть
15ERROR379h (279h)3вход нет
16INIT37Ah (27Ah)2выход (вход) нет
18...250V--- -

 Если используется порт 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.
     Замечу, что формат файла определялся интуитивно, поэтому буду благодарен за поправки. Для наглядности в строки введены интервалы.
     Каждая строка начинается двоеточием. Каждая последующая пара символов представляет собой один байт в шестнадцатеричном коде. Четыре байта в начале и один байт в конце строки являются служебными, находящиеся между ними байты - информационные - загружаются в память. В служебных строках информационные байты отсутствуют.
     Я выбрал две начальные и три конечные строки одной из программ:
    :10000000B6C000000000000000000000000000007A
    :100010000000000000000000000024D07CE050FD43
    ...
    :100E20002A1D3B1D4C1D5D1D6E1D7F1D279779934F
    :0E0E300069935993499339932993199308951F
    :00000001FF
     Первый байт - число информационных(!) байт в строке; для первой строки это 10, значит, в первой, второй и третьей строках по 10H информационныx байт (10H=16); в предпоследней строке их 0EH (=14).
     Следующие два байта - адрес ячейки памяти, по которому записывается первый информационный байт строки (остальные информационные байты строки записываются в последующие ячейки памяти), третий байт отличается от нуля только в служебных строках. Он равен единице в последней строке, являющейся, очевидно, признаком конца файла, и равен двум в первой строке файла .hex , загружаемого в EEPROM микроконтроллера AVR (такая первая строка - признак файла с информацией для EEPROM); с другими значениями этого байта я не сталкивался.
     Далее - пары информационных байт, каждая пара составляет ассемблерную команду или половину команды микроконтроллера AVR.
     Последний байт - контрольное число. Если просуммировать все байты строки, то младший байт результата должен равняться нулю (суммирование с результатом размерностью в байт).

    Алгоритм последовательной загрузки программы в микроконтроллер 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