Архитектура AVR в примерах/Простейшее устройство

В данной работе мы соберем простейшее устройство, пригодное для выполнения последующих лабораторных работ, на основе микроконтроллера ATmega8 (или иного, совместимого по цоколевке). В некоторой степени, это устройство повторяет конструкцию плат Arduino Uno и Arduino Nano, которые также можно использовать для выполнения работ данного раздела.

Перед началом

править

Для устройства нам потребуются:

  • Микроконтроллер ATmega8 (или совместимый по цоколевке) в DIP-корпусе (или на соответствующей плате-адаптере) с установленным загрузчиком Optiboot, настроенным на выбранную тактовую частоту процессора (7.3728 MHz) и скорость передачи данных (115200 bit⁄s);
    при наличии отдельного программатора можно обойтись микроконтроллером без загрузчика;
  • адаптер «USB—асинхронный порт» (на основе PL2303-HX, CP2101, или иной);
  • (необязательно) источник питания (3 ÷ 5 V, с учетом рабочего напряжения используемого адаптера асинхронного порта), желательно — с возможностью установить ограничение по току порядка 10 mA;
    как правило, необходимое питание можно получить с шины USB, для чего на адаптерах и платах разработчика предусмотрены соответствующие выводы;
  • макетная панель (англ. breadboard);
  • два резистора (порядка 100 kΩ и 250 Ω; ⅛ W), кварцевый резонатор на 7.3728 MHz, три конденсатора (один — порядка 100 nF, два — порядка 22 pF каждый), светодиод на напряжение порядка 1.5 V, кнопка, — подходящие для монтажа на макетной панели;
    все перечисленные компоненты (с точностью до номиналов) уже присутствуют в необходимых для данной работы цепях на платах, подобных Arduino Uno;
  • соединительные провода.

Кроме того, для проверки связи с устройством потребуется пакет Avrdude. (Установить этот пакет в Debian и производных от него системах можно командой, подобной # apt-get install -- avrdude .)

Сборка устройства

править
 
Размещение компонент устройства на макетной панели
  1. Установим МК на макетной панели, первый вывод — в позиции E10 (занимая, таким образом, вертикальные ряды 10–23.)
  2. Установим на макетной панели прочие элементы:
    • кварцевый резонатор 7.3728 MHz — между выводами 9 и 10 МК;
    • два конденсатора 22 pF — между выводами 8–9 и 8–10 МК;
    • резистор 100 kΩ — между позицией A10 (вывод 1 МК; сигнал Reset) и шиной + Uи. п.;
    • конденсатор 100 nF — между D8 и D10;
    • кнопку — A3–A5 и светодиод — F3–F5;
    • резистор 250 Ω — между J3 и «общим».
  3. Выполним следующие соединения компонент собираемой схемы:
    • «общий» — J16, E3, желательно — B17 (выводы 8, 22 МК; «общий»);
    • + Uи. п. — A16;
    • B5–B10 (вывод 1 МК; сигнал Reset);
    • I5–I19 (вывод 19 МК; PB5.)

Начальная проверка работоспособности

править
  1. Проверим правильность выполненных соединений.
    В частности, можно подключить — с соблюдением полярности — к питающим выводам мультиметр, работающий в режиме измерения падения напряжения на p-n-переходе. Ожидаемый результат измерения — порядка 1.5 V.
  2. Подключим питание устройства;
    • при использовании лабораторного источника питания — установим напряжение 3 ÷ 5 V (но с учетом рабочего напряжения используемого адаптера асинхронного порта) и предельный ток порядка 10 mA;
    • при отсутствии иной возможности ограничить ток (в частности — при питании от USB-адаптера) можно включить в разрыв проводника Uи. п. резистор номиналом порядка 56 Ω;
    • имеет смысл при первом подключении измерить протекающий через устройство ток; ожидаемые значения — не более порядка 1 mA.
  3. Сбросим устройство нажатием на кнопку. При этом, светодиод должен мигнуть три раза (в параметрах сборки Optiboot по-умолчанию.)

Подключение к USB

править
  1. Соединим адаптер «USB—асинхронный порт» с основной платой:

    • «общий» с «общим»;
    • TxD с A11 и RxD с A12 (выводы 2, 3 МК; RxD, TxD);
    • (необязательно) DTR или RTS — с A8;
    • только при получении питания с модуля — вывод 3.3 V (или 5 V) модуля с шиной + Uи. п. макетной панели.
  2. Проверим возможность связи с загрузчиком Optiboot используя Avrdude, подобно:

    $ avrdude -P /dev/ttyUSB1 -c arduino -b 115200 \
          -p atmega8 -U flash:r:flash.hex:i 
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude: Device signature = 0x1e9307
    avrdude: reading flash memory:
    
    Reading | ################################################## | 100% 1.02s
    
    avrdude: writing output file "flash.hex"
    
    avrdude: safemode: Fuses OK
    
    avrdude done.  Thank you.
    
    $ 
    

    Помимо вывода выше, успешное выполнение Avrdude приведет к созданию в текущей директории файла flash.hex — образа текущего содержания flash-памяти МК.

    NB
    Для запуска Optiboot, Avrdude пытается выполнить сброс МК кратковременно изменяя состояние линий RTS и DTR. Если эти линии не соединены с цепью Reset МК (так, на некоторых адаптерах эти линии не разведены вовсе), то сброс следует выполнить вручную, подобно:
    1. ввести команду выше, не завершая ее нажатием ⏎ Enter;
    2. нажать на кнопку сброса устройства;
    3. отпустить кнопку сброса и немедленно завершить ввод команды avrdude нажатием ⏎ Enter.