Система команд avr. Система команд микроконтроллеров AVR: полное руководство

Какие основные группы команд входят в систему команд AVR. Как устроена архитектура микроконтроллеров AVR. Какие режимы пониженного энергопотребления поддерживают AVR. Чем отличается система команд AVR от других микроконтроллеров.

Содержание

Группы команд в системе команд AVR

Система команд микроконтроллеров AVR является одной из самых развитых среди 8-разрядных микроконтроллеров. Она насчитывает до 133 различных инструкций, которые можно разделить на несколько основных групп:

  • Команды условного ветвления
  • Команды безусловного ветвления
  • Арифметические и логические операции
  • Команды пересылки данных
  • Команды работы с битами

Большинство команд AVR имеют фиксированную длину в одно 16-битное слово. Это позволяет объединять в одной команде как код операции, так и операнды. Лишь некоторые команды, такие как вызов процедур CALL, длинные переходы JMP, возврат из подпрограмм RET и работа с памятью программ LPM имеют размер 32 бита.

Особенности архитектуры микроконтроллеров AVR

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


  • Гарвардская архитектура с раздельными шинами для памяти программ и данных
  • Использование технологии конвейеризации
  • Наличие регистрового файла быстрого доступа
  • Одноцикловое выполнение большинства команд

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

Режимы пониженного энергопотребления AVR

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

  1. Режим холостого хода (Idle)
  2. Режим микропотребления (Power Down)
  3. Режим сохранения энергии (Power Save)
  4. Режим подавления шума АЦП (ADC Noise Reduction)
  5. Основной режим ожидания (Standby)
  6. Дополнительный режим ожидания (Extended Standby)

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

Сравнение системы команд AVR с другими микроконтроллерами

Система команд AVR имеет ряд преимуществ по сравнению с другими популярными семействами 8-разрядных микроконтроллеров:


  • Большее количество команд (133) по сравнению с PIC (75) и MCS51 (111)
  • Более эффективное выполнение команд — за 1 такт вместо 4-12 тактов у других микроконтроллеров
  • Наличие аппаратного умножения в некоторых моделях AVR
  • Более развитые возможности адресации памяти

Эти особенности позволяют создавать для AVR более компактный и быстрый программный код по сравнению с другими 8-разрядными микроконтроллерами.

Регистровый файл быстрого доступа в AVR

Одной из ключевых особенностей архитектуры AVR является наличие регистрового файла быстрого доступа. Он содержит 32 8-разрядных регистра общего назначения, напрямую связанных с арифметико-логическим устройством (АЛУ) процессора.

Основные характеристики регистрового файла AVR:

  • 32 регистра по 8 бит каждый
  • Прямая связь с АЛУ
  • Возможность использования 6 регистров в качестве трех 16-разрядных указателей адреса
  • Расположение в младших 32 байтах общего адресного пространства SRAM

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


Особенности работы с памятью в микроконтроллерах AVR

Микроконтроллеры AVR имеют раздельные адресные пространства для памяти программ и памяти данных, что является характерной чертой Гарвардской архитектуры. Рассмотрим основные особенности работы с различными видами памяти в AVR:

Память программ

Память программ в AVR представлена Flash-памятью, которая может быть запрограммирована непосредственно в системе. Основные характеристики памяти программ:

  • Размер варьируется в зависимости от модели микроконтроллера
  • Хранит команды и константы
  • Доступ осуществляется по 16-разрядной шине
  • Поддерживает внутрисистемное программирование

Память данных

Память данных в AVR включает в себя несколько областей:

  • Регистровый файл (32 байта)
  • Память ввода-вывода (64 байта)
  • Внутренняя SRAM (размер зависит от модели)

Особенности работы с памятью данных:

  • Поддерживает различные режимы адресации
  • Обеспечивает быстрый доступ к регистровому файлу
  • Позволяет эффективно работать с портами ввода-вывода

Система прерываний в микроконтроллерах AVR

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


  • Поддержка множества источников прерываний (внешние, от таймеров, от периферийных устройств)
  • Наличие индивидуальных векторов прерываний для каждого источника
  • Возможность настройки приоритетов прерываний
  • Быстрое переключение контекста при обработке прерываний

Эффективная система прерываний позволяет создавать гибкие и отзывчивые приложения на базе микроконтроллеров AVR.

Реализация микроконтроллера AVR в ПЛИС

Интересным экспериментом является попытка реализации микроконтроллера, совместимого с AVR, внутри программируемой логической интегральной схемы (ПЛИС). Такой проект позволяет лучше понять архитектуру AVR и особенности работы микроконтроллеров в целом.

Основные этапы реализации AVR-совместимого микроконтроллера в ПЛИС:

  1. Изучение системы команд и архитектуры AVR
  2. Проектирование основных блоков микроконтроллера (АЛУ, регистровый файл, декодер команд)
  3. Реализация ограниченного набора команд AVR
  4. Использование встроенной памяти ПЛИС для хранения программы и данных
  5. Подключение периферийных устройств (светодиоды, кнопки) к регистрам микроконтроллера

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



Справочник по командам ассемблера AVR

Все команды этой группы выполняют переход (PC ← PC + A + 1) при разных условиях.

МнемоникаОписаниеОперацияФлаги
ADD Rd, RrСложение двух регистровRd ← Rd + RrZ, C, N, V, H
ADC Rd, RrСложение двух регистров с переносомRd ← Rd + Rr + СZ, C, N, V, H
SUB Rd, RrВычитание двух регистровRd ← Rd — RrZ, C, N, V, H
SBC Rd, RrВычитание двух регистров с заёмомRd ← Rd — Rr — СZ, C, N, V, H
ADIW Rd, KСложение регистровой пары с константойR(d+1):Rd ← R(d+1):Rd + KZ, C, N, V, S
SBIW Rd, KВычитание константы из регистровой парыR(d+1):Rdl ← R(d+1):Rd — KZ, C, N, V, S
SUBI Rd, KВычитание константы из регистраRd ← Rd — KZ, C, N, V, H
SBCI Rd, KВычитание константы из регистра с заёмомRd ← Rd — K — СZ, C, N, V, H
INC RdИнкремент регистраRd ← Rd + 1 Z, N, V
DEC RdДекремент регистраRd ← Rd – 1Z, N, V
MUL Rd, RrУмножение чисел без знакаR1:R0 ← Rd * RrZ, C
MULS Rd, RrУмножение чисел со знакомR1:R0 ← Rd * RrZ, C
MULSU Rd, RrУмножение числа со знаком с числом без знакаR1:R0 ← Rd * RrZ, C
FMUL Rd, RrУмножение дробных чисел без знакаR1:R0 ← (Rd * Rr) << 1Z, C
FMULS Rd, RrУмножение дробных чисел со знакомR1:R0 ← (Rd * Rr) << 1Z, C
FMULSU Rd, RrУмножение дробного числа со знаком с числом без знакаR1:R0 ← (Rd * Rr) << 1Z, C
МнемоникаОписание
Операция
Флаги
CBR Rd, KОчистка разрядов регистраRd ← Rd and (0FFH – K)Z, N, V
SBR Rd, KУстановка разрядов регистраRd ← Rd or KZ, N, V
CBI P, bСброс разряда I/O-регистраP. b ← 0
SBI P, bУстановка разряда I/O-регистраP.b ← 1
BCLR sСброс флага SREGSREG.s ← 0SREG.s
BSET sУстановка флага SREGSREG.s ← 1SREG.s
BLD Rd, bЗагрузка разряда регистра из флага TRd.b ← T
BST Rr, bЗапись разряда регистра во флаг T T ← Rd.bT
CLCСброс флага переносаC ← 0C
SECУстановка флага переносаC ← 1C
CLNСброс флага отрицательного числаN ← 0N
SENУстановка флага отрицательного числаN ← 1N
CLZСброс флага нуляZ ← 0Z
SEZУстановка флага нуляZ ← 1Z
CLIОбщий запрет прерыванийI ← 0I
SEIОбщее разрешение прерыванийI ← 1I
CLSСброс флага знакаS ← 0S
SESУстановка флага знакаS ← 1S
CLVСброс флага переполнения дополнительного кодаV ← 0V
SEVУстановка флага переполнения дополнительного кодаV ← 1V
CLTСброс пользовательского флага TT ← 0T
SETУстановка пользовательского флага TT ← 1T
CLHСброс флага половинного переносаH ← 0H
SEHУстановка флага половинного переносаH ← 1H
МнемоникаОписаниеОперацияФлаги
ASR RdАрифметический сдвиг вправоRd(i) ← Rd(i+1) (n=0..6), C ← Rd(0)Z, C, N, V
LSL RdЛогический сдвиг влевоRd(i+1) ← Rd(i), Rd(0) ← 0, C ← Rd(7)Z, C, N, V
LSR RdЛогический сдвиг вправоRd(i) ← Rd(i+1), Rd(7) ← 0, C ← Rd(0)Z, C, N, V
ROL RdСдвиг влево через переносRd(i+1) ← Rd(i), Rd(0) ← C, C ← Rd(7)Z, C, N, V
ROR RdСдвиг вправо через переносRd(i) ← Rd(i+1), Rd(7) ← C, C ← Rd(0)Z, C, N, V
SWAP RdОбмен местами тетрадRd(3..0) ↔ Rd(7..4)
МнемоникаОписаниеОперацияФлаги
MOV Rd, RrПересылка между регистрамиRd ← Rr
MOVW Rd, RrПересылка между парами регистровR(d +1):Rd ← R(r+1):Rr
LDI Rd, KЗагрузка константы в регистрRd ← K
LD Rd, XКосвенное чтениеRd ← [X]
LD Rd, X+Косвенное чтение с пост-инкрементомRd ← [X], X ← X + 1
LD Rd, -XКосвенное чтение с пред-декрементомX ← X — 1, Rd ← [X]
LD Rd, YКосвенное чтениеRd ← [Y]
LD Rd, Y+Косвенное чтение с пост-инкрементомRd ← [Y], Y ← Y + 1
LD Rd, -YКосвенное чтение с пред-декрементомY ← Y — 1, Rd ← [Y]
LDD Rd, Y+qКосвенное чтение со смещениемRd ← [Y+q]
LD Rd, ZКосвенное чтениеRd ← [Z]
LD Rd, Z+Косвенное чтение с пост-инкрементомRd ← [Z], Z ← Z + 1
LD Rd, -ZКосвенное чтение с пред-декрементомZ ← Z — 1, Rd ← [Z]
LDD Rd, Z+qКосвенное чтение со смещениемRd ← [Z+q]
LDS Rd, AНепосредственное чтение из ОЗУRd ← [A]
ST X, RrКосвенная запись[X] ← Rr
ST X+, RrКосвенная запись с пост-инкрементом[X] ← Rr, X ← X + 1
ST -X, RrКосвенная запись с пред-декрементомX ← X — 1, [X] ← Rr
ST Y, RrКосвенная запись[Y] ← Rr
ST Y+, RrКосвенная запись с пост-инкрементом[Y] ← Rr, Y ← Y + 1
ST -Y, RrКосвенная запись с пред-декрементомY ← Y — 1, [Y] ← Rr
STD Y+q, RrКосвенная запись со смещением[Y+q] ← Rr
ST Z, RrКосвенная запись[Z] ← Rr
ST Z+, RrКосвенная запись с пост-инкрементом[Z] ← Rr, Z ← Z + 1
ST -Z, RrКосвенная запись с пред-декрементомZ ← Z — 1, [Z] ← Rr
STD Z+q, RrКосвенная запись со смещением[Z+q] ← Rr
STS A, RrНепосредственная запись в ОЗУ[A] ← Rr
LPMЗагрузка данных из памяти программыR0 ← {Z}
LPM Rd, ZЗагрузка данных из памяти программы в регистрRd ← {Z}
LPM Rd, Z+Загрузка данных из памяти программы с пост-инкрементом ZRd ← {Z}, Z ← Z + 1
SPMЗапись в программную память{Z} ← R1:R0
IN Rd, PПересылка из I/O-регистра в регистрRd ← P
OUT P, RrПересылка из регистра в I/O-регистрP ← Rr
PUSH RrСохранение регистра в стекеSTACK ← Rr
POP RdИзвлечение регистра из стекаRd ← STACK
МнемоникаОписаниеУсловиеФлаги
BRBC s, AПереход если флаг S сброшенЕсли SREG(S) = 0
BRBS s, AПереход если флаг S установленЕсли SREG(S) = 1
BRCS AПереход по переносуЕсли C = 1
BRCC AПереход если нет переносаЕсли C = 0
BREQ AПереход если равноЕсли Z = 1
BRNE AПереход если не равноЕсли Z = 0
BRSH AПереход если больше или равноЕсли C = 0
BRLO AПереход если меньшеЕсли C = 1
BRMI AПереход если отрицательное значениеЕсли N = 1
BRPL AПереход если положительное значениеЕсли N = 0
BRGE AПереход если больше или равно (со знаком)Если (N и V) = 0
BRLT AПереход если меньше (со знаком)Если (N или V) = 1
BRHS AПереход по половинному переносуЕсли H = 1
BRHC AПереход если нет половинного переносаЕсли H = 0
BRTS AПереход если флаг T установленЕсли T = 1
BRTC AПереход если флаг T сброшенЕсли T = 0
BRVS AПереход по переполнению дополнительного кодаЕсли V = 1
BRVC AПереход если нет переполнения дополнительного кодаЕсли V = 0
BRID AПереход если прерывания запрещеныЕсли I = 0
BRIE AПереход если прерывания разрешеныЕсли I = 1
SBRC Rd, KПропустить следующую команду если бит в регистре очищенЕсли Rd[K] = 0
SBRS Rd, KПропустить следующую команду если бит в регистре установленЕсли Rd[K] = 1
SBIC A, bПропустить еследующую команду если бит в регистре ввода/вывода очищенЕсли I/O(A, b) = 0
SBIS A, bПропустить следующую команду если бит в регистре ввода/вывода установленЕсли I/O(A, b) = 1

Питание, система команд и архитектура МК AVR (Лекция) | МК

МК

 

ПЛАН ЛЕКЦИИ

1. Режимы пониженного энергопотребления

2. Система команд AVR

3. Архитектура микроконтроллеров AVR

 

1. Режимы пониженного энергопотребления

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

  • Режим холостого хода (IDLE), в котором прекращает работу только процессор и фиксируется содержимое памяти данных, а внутренний генератор синхросигналов, таймеры, система прерываний и WATCHDOG-таймер продолжают функционировать.
  • Режим микропотребления (Power Down), в котором сохраняется содержимое регистрового файла, но останавливается внутренний генератор синхросигналов. Выход из Power Down возможен либо по общему сбросу микроконтроллера, либо по сигналу (уровень) от внешнего источника прерывания. При включенном WATCHDOG-таймере ток потребления в этом режиме составляет около 60…80 мкА, а при выключенном — менее 1 мкА для всех типов AVR. Вышеприведенные значения справедливы для величины питающего напряжения 5 В.
  • Режим сохранения энергии (Power Save), который реализован только у тех AVR, которые имеют в своем составе систему реального времени. В основном, режим Power Save идентичен Power Down, но здесь допускается независимая работа дополнительного таймера/счетчика RTC. Выход из режима Power Save возможен по прерыванию, вызванному или переполнением таймера/счетчика RTC, или срабатыванием блока сравнения этого счетчика. Ток потребления в этом режиме составляет 6…10 мкА при напряжении питания 5 В на частоте 32,768 кГц.
  • Режим подавления шума при работе аналого-цифрового преобразователя (ADC Noise Reduction). Как уже отмечалось, в этом режиме останавливается процессорное ядро, но разрешена работа АЦП, двухпроводного интерфейса I2C и сторожевого таймера.
  • Основной режим ожидания (Standby). Идентичен режиму Power Down, но здесь работа тактового генератора не прекращается. Это гарантирует быстрый выход микроконтроллера из режима ожидания всего за 6 тактов генератора.
  • Дополнительный режим ожидания (Extended Standby). Идентичен режиму Power Save, но здесь работа тактового генератора тоже не прекращается. Это гарантирует быстрый выход микроконтроллера из режима ожидания всего за 6 тактов генератора.

Микроконтроллеры AVR mega64, mega103 и mega128 имеют еще одну примечательную архитектурную особенность, позволяющую значительно снизить энергопотребление всего кристалла в целом, когда в процессе работы возникают вынужденные паузы ожидания. В этом случае целесообразно уменьшить ток потребления центрального процессора и периферийных устройств как в активном режиме, так и в режиме холостого хода, понизив основную тактовую частоту микроконтроллера. Для этой цели на кристалле размещен специальный предделитель, позволяющий делить основную тактовую частоту на целое число в диапазоне от 2 до 129. Включение/выключение данной функции осуществляется одной короткой командой в программе.

AVR функционируют в широком диапазоне питающих напряжений от 1,8 до 6,0 Вольт. Температурные диапазоны работы микроконтроллеров AVR — коммерческий (0С…70С) и индустриальный (-40С…+85С). К сожалению, корпорация Atmel не выпускает и не планирует выпускать AVR для работы в автомобильном (-40С…+125С) и военном (-55С…+125С) температурных диапазонах.


Рис. 2.  Структурная схема AVR

 

            С точки зрения программиста AVR представляет собой 8-разрядный RISC микроконтроллер, имеющий быстрый Гарвардский процессор, память программ, память данных, порты ввода/вывода и различные интерфейсные схемы. Структурная схема микроконтроллера приведена на рис. 2. Гарвардская архитектура AVR реализует полное логическое и физическое разделение не только адресных пространств, но и информационных шин для обращения к памяти программ и к памяти данных, причем способы адресации и доступа к этим массивам памяти также различны. Подобное построение уже ближе к структуре цифровых сигнальных процессоров и обеспечивает существенное повышение производительности. Центральный процессор работает одновременно как с памятью программ, так и с памятью данных; разрядность шины памяти программ расширена до 16 бит.    Следующим шагом на пути увеличения быстродействия AVR является использование технологии конвейеризации, вследствие чего цикл «выборка — исполнение» команды заметно сокращен. Например, у микроконтроллеров семейства MCS51 короткая команда выполняется за 12 тактов генератора (1 машинный цикл), в течение которого процессор последовательно считывает код операции и исполняет ее. В PIC-контроллерах фирмы Microchip, где уже реализован конвейер, короткая команда выполняется в течение 8 периодов тактовой частоты (2 машинных цикла). За это время последовательно дешифрируется и считывается код операции, исполняется команда, фиксируется результат и одновременно считывается код следующей операции (одноуровневый конвейер). Поэтому в общем потоке команд одна короткая команда реализуется за 4 периода тактовой частоты или за один машинный цикл.

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

 

2. Система команд AVR

Система команд AVR весьма развита и насчитывает до 133 различных инструкций. Почти все команды имеют фиксированную длину в одно слово (16 бит), что позволяет в большинстве случаев объединять в одной команде и код операции, и операнд(ы). Лишь немногие команды имеют размер в 2 слова (32 бит) и относятся к группе команд вызова процедуры CALL, длинных переходов в пределах всего адресного пространства JMP, возврата из подпрограмм RET и команд работы с памятью программ LPM.

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

 

3. Архитектура микроконтроллеров AVR

Файл регистров быстрого доступа, содержит 32 8-разрядных рабочих регистра общего назначения связанных непосредственно с ALU. За один тактовый цикл из файла регистров выбираются два операнда, выполняется операция и результат вновь возвращается в файл регистров.

Шесть из 32 регистров могут быть использованы как три 16-разрядных регистра указателя косвенной адресации адресного пространства данных, обеспечивающие эффективное вычисление адресов. Один из этих указателей адреса используется, также, как указатель адреса для функции непрерывного просмотра таблиц. Эти 16-разрядные дополнительные регистры обозначаются X-регистр, Y-регистр и Z-регистр.

ALU поддерживает арифметические и логические операции между регистрами или между константой и регистром. Выполняются в ALU и операции с отдельными регистрами.

На рисунке показана AVR расширенная RISC архитектура микроконтроллеров ATmega603/103.

 

 

Рис. 5. Расширенная RISC архитектура микроконтроллеров ATmega603/103

 

В дополнение к операциям с регистрами, регистровый файл может использоваться и для обычной адресации памяти. Это объясняется тем, что файл регистров располагается по 32 самыми младшими адресами пространства данных, и к ним можно обращаться как к обычным ячейкам памяти.

Пространство памяти I/O содержит 64 адреса периферийных функций CPU таких как: регистры управления, таймеры/счетчики, аналого-цифровые преобразователи и другие I/O функции. К памяти I/O можно обращаться непосредственно или как к ячейкам пространства памяти соответствующим адресам регистра файлов $20 — $5F.

В микроконтроллерах AVR использованы принципы Гарвардской архитектуры — отдельные память и шины для программ и данных. При работе с памятью программ используется одноуровневый конвейер — в то время, как одна команда выполняется, следующая команда выбирается из памяти программ, Такой прием позволяет выполнять команду в каждом тактовом цикле. Памятью программ является внутрисистемно программируемая Flash память. За малым исключением AVR команды имеют формат одного 16-разрядного слова, в связи с чем каждый адрес памяти программ содержит одну 16-разрядную команду.        

В процессе обработки прерываний и вызовов подпрограмм адрес возврата счетчика команд (PC) сохраняется в стеке. Стек размещается в SRAM данных и, следовательно размер стека ограничен только общим размером SRAM и уровнем ее использования. Все пользовательские программы в подпрограммах возврата (прежде, чем подпрограммы или прерывания будут выполняться) должны инициализировать указатель стека (SP). 16-разрядный указатель стека, с возможностью чтения/записи располагается в пространстве I/O.

AVR архитектура поддерживает пять различных режимов адресации 4000 байт SRAM данных. Гибкий модуль обработки прерываний имеет в пространстве I/O свой управляющий регистр с дополнительным битом разрешения глобального прерывания в регистре статуса. Все прерывания имеют свои векторы прерывания в таблице векторов прерывания, располагаемой в начале памяти программ. Приоритеты прерываний соответствуют положению векторов прерываний — прерывание с наименьшим адресом вектора имеет наивысший приоритет.  

По разнообразию и количеству реализованных инструкций AVR больше похожи на CISC, чем на RISC процессоры. Например, у PIC-контроллеров система команд насчитывает до 75 различных инструкций, а у MCS51 она составляет 111. В целом, прогрессивная RISC архитектура AVR в сочетании с наличием регистрового файла и расширенной системы команд позволяет в короткие сроки создавать работоспособные программы с эффективным кодом как по компактности реализации, так и по скорости выполнения.

 

3.1. Регистровый файл быстрого доступа

Следующая отличительная черта архитектуры микроконтроллеров AVR — регистровый файл быстрого доступа, структурная схема которого показана на рис. 4. Каждый из 32-х регистров общего назначения длиной 1 байт непосредственно связан с арифметико-логическим устройством (ALU) процессора. Другими словами, в AVR существует 32 регистра — аккумулятора (сравните, например, с MCS51). Это обстоятельство позволяет в сочетании с конвейерной обработкой выполнять одну операцию в ALU за один машинный цикл. Так, два операнда извлекаются из регистрового файла, выполняется команда и результат записывается обратно в регистровый файл в течение только одного машинного цикла.

Рис. 3. Сравнительная характеристика некоторых микропроцессорных платформ

 

Шесть из 32-х регистров файла могут использоваться как три 16-разрядных указателя адреса при косвенной адресации данных. Один из этих указателей (Z Pointer) применяется также для доступа к данным, записанным в памяти программ микроконтроллера. Использование трех 16-битных указателей (X, Y и Z Pointers) существенно повышает скорость пересылки данных при работе прикладной программы.

 


Рис. 4.  Регистровый файл

 

Регистровый файл занимает младшие 32 байта в общем адресном пространстве SRAM AVR. Такое архитектурное решение позволяет получать доступ к быстрой «регистровой» оперативной памяти микроконтроллера двумя путями - непосредственной адресацией в коде команды к любой ячейке и другими способами адресации ячеек SRAM.

В технической документации фирмы Atmel это полезное свойство носит название «быстрое контекстное переключение» и является еще одной отличительной особенностью архитектуры AVR, повышающей эффективность работы микроконтроллера и его производительность. Особенно заметно данное преимущество при реализации процедур целочисленной 16-битной арифметики, когда исключаются многократные пересылки между различными ячейками памяти данных при обработке арифметических операндов в ALU.

 

Сделаем простой AVR микроконтроллер

Меня часто спрашивают: «Чем отличается микроконтроллер от ПЛИС?» Ну что тут можно ответить? Это как бы разные вещи… Микропроцессор последовательно выполняет команды, описанные в его программе. Работа ПЛИС в конечном счете определяется принципиальной электрической схемой, реализованной внутри чипа. Архитектура микроконтроллера, то есть тип процессора, количество портов ввода вывода, интерфейсы, определяется производителем. Микросхема микроконтроллера изготовлена на заводе и изменить ее нельзя. Можно только написать программу, которую он будет исполнять. ПЛИС — это свобода для творчества. Архитектура реализуемого устройства может быть почти любая, лишь бы поместилась вся логика в чип. В ПЛИС можно, например, попробовать реализовать даже и микроконтроллер! Попробуем?

Один из самых распространенных микроконтроллеров — это 8-ми разрядные RISС процессоры семейства AVR компании Atmel. В этой статье я расскажу как реализовать «почти» совместимый с AVR микроконтроллер внутри нашей ПЛИС на плате Марсоход.

Прежде, чем начинать делать свою реализацию микроконтроллера, конечно, следует изучить внутренности контроллера AVR. Нужно как минимум знать систему команд микропроцессора AVR. На нашем сайте можно скачать его описание:

Мы не будем ставить себе целью полностью повторить поведение чипа Atmel, мы хотим сделать наш микропроцессор лишь частично совместимым. Полностью повторить можно, но нужна ПЛИС гораздо большего объема. У нас на плате Марсоход стоит CPLD EPM240T100C5, значит у нас есть всего-навсего 240 триггеров и логических элементов.

Кроме триггеров и логики в нашей ПЛИС имеется последовательная флеш память UFM объемом 512 слов по 16 бит. В этой флеш памяти мы будем хранить программу микроконтроллера.  Удобно, что слова, хранимые во флеш, имеют разрядность 16. Все команды процессора AVR также шестнадцатиразрядные. Кое-что про UFM мы уже писали на нашем сайте. У нас был проект для ПЛИС платы Марсоход, который выполнял чтение из UFM памяти.

«Оперативной памяти» в нашей ПЛИС нет. Ну значит не будет памяти у нашего микроконтроллера, жаль но это нас не остановит.

У микроконтроллера AVR имеется 32 восьмиразрядных регистра общего назначения. Нижняя группа регистров r0-r15 может быть использована только в командах с операндами-регистрами. Верхняя группа регистров r16-r31 может использоваться в командах и с непосредственными операндами. Поскольку места внутри нашего чипа на плате Марсоход действительно не много, нам придется реализовать только некоторые регистры. Это довольно существенное ограничение, и его нужно будет учитывать при написании программ для нашего микроконтроллера.

Мы реализуем только 7 регистров: r16-r22:

  • Первые 4 регистра r16…r19 — это просто регистры.
  • Регистр r20 — это тоже обычный регистр, только его биты мы подключим к 8-ми светодиодам платы Марсоход.
  • Регистр r21 — это тоже обычный регистр, но его биты мы подключим к выводам управления шаговых двигателей на плате Марсоход.
  • Регистр r22 — только для чтения. К нему подключены входы от 4-х кнопочек платы Марсоход.

Схема нашего микроконтроллера создана в среде Altera QuartusII и выглядит вот так (нажмите на картинку, чтобы увеличить):


Наш микроконтроллер работает по простому алгоритму:

  1. Считывает из флеш памяти UFM очередную команду.
  2. Декодирует команду и выбирает для нее нужные операнды из регистров или непосредственно из кода команды.
  3. Выполняет команду в арифметико-логическом устройстве.
  4. Запоминает результат исполнения команды в регистре приемнике, определяемом командой.
  5. Переходит к исполнению следующей команды.

У нас сейчас нет цели сделать высокопроизводительный микроконтроллер, мы не будем делать конвейерную обработку данных. Это объясняется тем, что команды из флеш памяти чипа мы можем считывать только в последовательном формате, то есть на чтение одной команды нужно как минимум 16 тактов. Быстрее здесь сделать нельзя (да нам и не нужно сейчас).

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

Перечислим команды микроконтроллера AVR, которые мы собираемся реализовать:


ADD  0000 11rd dddd rrrr
SUB  0001 10rd dddd rrrr

AND  0010 00rd dddd rrrr
EOR  0010 01rd dddd rrrr
OR   0010 10rd dddd rrrr
MOV  0010 11rd dddd rrrr

CP   0001 01rd dddd rrrr
LSR  1001 010d dddd 0110

SUBI 0101 KKKK dddd KKKK
ANDI 0111 KKKK dddd KKKK
ORI  0110 KKKK dddd KKKK
CPI  0011 KKKK dddd KKKK
LDI  1110 KKKK dddd KKKK

BREQ 1111 00kk kkkk k001
BRNE 1111 01kk kkkk k001
BRCS 1111 00kk kkkk k000
BRCC 1111 01kk kkkk k000


Слева написаны названия команд, а справа — их бинарное представление (кодирование). Так буква «r» обозначает регистр источник, буква «d» — регистр приемник, «K» — это непосредственно операнд.

Конечно — это только малая часть от «настоящей системы команд», но уже и эти команды позволять писать вполне работающие программы.
У нас будет упрощенное АЛУ (Арифметико-Логическое Устройство). Оно реализует только некоторые, наиболее употребительные команды, а так же всего 2 флага для условных переходов: «Z» и «C».

Флаг «Z» устанавливается, если результат АЛУ это ноль. Если результат из АЛУ не нулевой, то флаг «Z» сбрасывается. Флаг «C» устанавливается при возникновении переноса в арифметических операциях ADD и SUB/SUBI или сравнения CP/CPI. Флаги влияют на исполнение команд условных переходов: флаг «Z» влияет на BREQ, BRNE, а флаг «C» влияет на BRCS, BRCC.

Вообще всеь проект мы уже реализовали и его можно взять здесь:

.
Исходный текст нашего ядра AVR написан на языке Verilog и его можно посмотреть здесь.

Теперь посмотрим, как мы сможем написать программу для нашего микроконтроллера? Для написания программы на языке ассемблер воспользуемся средой разработки компании Atmel AVRStudio4. Эту среду разработки можно скачать прямо с сайта компании Атмел (после регистрации), вот здесь. Или поищите в яндексе — наверняка найдете в свободном доступе.


Создаем проект в AVRStudio4 и пишем простую программу. Программа будет моргать светодиодом на плате Марсоход и опрашивать состояние нажатых кнопочек. Если нажать одну кнопочку, то моргающий светодиод «побежит» в одну сторону, а если нажать другую кнопочку, то светодиод «побежит» в другую сторону. Вот исходный текст на ассемблере для нашего примера:


.include «1200def.inc»
.device AT90S1200

.cseg
.org 0

start:

;initial one bit in register
ldi    r16,$80

rd_port:

;read port (key status)
mov    r17,r22
cpi r17,$0f
;go and blink one LED if no key pressed
breq do_xor

cpi r17,$0e
;go and right shift LEDs if key[0] pressed
breq do_rshift

cpi r17,$0d
;go and left shift LEDs if key[1] pressed
breq do_lshift

;jump to read keys
or    r16,r16
brne rd_port

do_rshift:
cpi r16,1
breq set80
lsr    r16
mov    r20,r16
brne pause
set80:    
ldi    r16,$80
mov    r20,r16
or    r16,r16
brne pause

do_lshift:
cpi r16,$80
breq set1
lsl    r16
mov    r20,r16
brne pause
set1:    
ldi    r16,$01
mov    r20,r16
or    r16,r16
brne pause

do_xor:
eor    r20,r16

pause:
ldi    r18,$10
cycle2:
ldi r19,$FF
cycle1:
or    r19,r19
or    r19,r19
subi r19,1
brne cycle1
subi r18,1
brne cycle2

or    r16,r16    
brne rd_port


Видите? Чтение состояния кнопочек — это чтение из регистра r22. Изменение состояния светодиодов — это запись в регистр r20.
Настройте AVRStudio так, что бы выходной формат был «Generic». Это в свойствах проекта, «Assembler Options», настройка «Hex Output Format».
После компиляции программы получается вот такой текстовый файл с кодами программы:


000000:e800
000001:2f16
000002:301f
000003:f0c1
000004:301e
000005:f021
000006:301d
000007:f059
000008:2b00
000009:f7b9
00000a:3001
00000b:f019
00000c:9506
00000d:2f40
00000e:f471
00000f:e800
000010:2f40
000011:2b00
000012:f451
000013:3800
000014:f019
000015:0f00
000016:2f40
000017:f429
000018:e001
000019:2f40
00001a:2b00
00001b:f409
00001c:2740
00001d:e120
00001e:ef3f
00001f:2b33
000020:2b33
000021:5031
000022:f7e1
000023:5021
000024:f7c9
000025:2b00
000026:f6d1


Этот файл нам почти подходит для QuartusII. В нашем проекте для ПЛИС есть файл avr_prog.mif (Memory Initialization File), куда мы и вставляем полученный из AVRStudio код (только нужно добавить точку с запятой в конце каждой строки). Таким образом, после компиляции QuartusII эти коды попадут во флеш  UFM нашей ПЛИС.

Теперь можно компилировать и пробовать наш проект в плате Марсоход. Вот видеоролик, демонстрирующий работоспособность нашего процессора:

Все работает так как и задумывалось!
Обратите внимание, что после компиляции, весь проект занимает только 205 логических элемента из 240 имеющихся в нашей ПЛИС. Это значит, что наш микроконтроллер можно и дальше усложнять или добавить какую-то новую логику. Так что проект может быть полезен для создания Ваших устройств.

 

3 Программная модель avr-микроконтроллеров

Программная модель микропроцессора представляет собой совокупность программно доступных ресурсов. В программную модель микроконтроллеров семейства AVR входят РОН, регистры ввода-вывода, память программ, оперативная память данных и энергонезависимая память данных (рисунок 3).

РОН (R0…R31) могут использоваться в программе для хранения данных, адресов, констант и другой информации. Шесть старших регистров объединены попарно и составляют три 16-разрядных регистра Х [R27:R26], Y [R29:R28] и Z [R31:R30] (рисунок 4).

РОН, регистры ввода-вывода и оперативная память данных образуют единое адресное пространство.

Р исунок 3 – Программная модель AVR-микроконтроллеров

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

Существует две конфигурации единого адресного пространства памяти AVR-микроконтроллеров. В конфигурации А младшие 32 адреса ($0000…$001F) соответствуют РОН, следующие 64 адреса ($0020…$005F) занимают регистры ввода-вывода, внутренняя оперативная память данных начинается с адреса $0060. В конфигурации В начиная с адреса $0060 размещаются 160 дополнительных регистров ввода-вывода; внутренняя оперативная память данных начинается с адреса $0100. Конфигурация А используется в младших моделях микроконтроллеров и в некоторых старших моделях в режиме совместимости с моделями, снятыми с производства; конфигурация В – в старших моделях.

В память программ, кроме собственно программы, могут быть записаны постоянные данные, которые не изменяются в процессе работы микропроцессорной системы (константы, таблицы линеаризации датчиков и т.п.). Выполнение программы при включении питания или после сброса микроконтроллера начинается с команды, находящейся по адресу $0000 (т. е. в первой ячейке) памяти программ.

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

4 Система команд avr-микроконтроллеров

Система команд (Instruction set) микропроцессора представляет собой совокупность выполняемых микропроцессором операций и правил их кодирования в программе. Система команд AVR-микроконтроллеров включает команды (инструкции) арифметических и логических операций, команды ветвления, управляющие последовательностью выполнения программы, команды передачи данных и команды операций с битами. Всего в систему команд входит более 130 инструкций [22]. Младшие модели микроконтроллеров не поддерживают некоторых из них.

Система команд AVR-микроконтроллеров приведена в приложении 2.

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

Процесс разработки прикладного ПО устройств на основе однокристальных микроконтроллеров включает следующие этапы (рисунок 5) [12]:

  • разработки алгоритма и структуры программы;

  • написания исходного текста программы;

  • получения выполняемой программы;

  • тестирования и отладки программы;

  • получения загрузочной программы.

5.1 Этап разработки алгоритма и структуры программы

На этом этапе выбирается метод решения задачи и разрабатывается алгоритм его реализации.

Алгоритм – это набор правил или описание последовательности операций для решения определённой задачи или достижения некоторой цели (рисунок 5). Графическим изображением алгоритма является схема алгоритма (flowchart), выполняемая в соответствии с ГОСТ 19.701–90 «Единая система программной документации. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения» [14].

5.2 Этап написания исходного текста программы

На этом этапе разработанный алгоритм записывается в виде программы на исходном языке (ассемблере или языке высокого уровня).

Языком ассемблера называется язык программирования, в котором каждой команде процессора или совокупности команд процессора соответствует сокращённая символическая запись (мнемоника). Использование символического обозначения команд, а также адресов регистров и ячеек памяти, переменных, констант и других элементов программы существенно облегчает процесс составления программ по сравнению с программированием на уровне машинных кодов. Символические обозначения элементов обычно отражают их содержательный смысл. Язык ассемблера обеспечивает возможность доступа ко всем ресурсам программируемого микропроцессора (микроконтроллера) и позволяет создавать программы, эффективные как по быстродействию, так и по объёму занимаемой памяти.

В этой связи программирование на языке ассемблера предполагает знание архитектуры и свойств микропроцессора, т. е. всего того, что входит в понятие «программная модель». Языки ассемблера различаются для разных типов микропроцессоров, т. е. являются машинно-ориентированными. В ряде ассемблеров допускается оформление повторяющейся последовательности команд как одной макрокоманды (макроса), такие ассемблеры называют макроассемблерами.

Языки высокого уровня (С, Паскаль, Бейсик и др.), как и ассемблер, обеспечивают доступ ко всем ресурсам микроконтроллера, но вместе с тем дают возможность создавать хорошо структурированные программы, снимают с программиста заботу о распределении памяти и содержат большой набор библиотечных функций для выполнения стандартных операций.

5.3 Этап получения выполняемой программы

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

Транслятором (translator) называют программу, служащую для перевода (трансляции) программ на языке ассемблера в машинный код, «понимаемый» процессором. .

Компилятор (compiler) представляет собой программу, преобразующую в эквивалентный машинный код текст программы на языке высокого уровня.

Результатом работы транслятора или компилятора может быть как выполняемый загрузочный модуль, так и объектный модуль (программа, команды, переменные и константы которой не «привязаны» к конкретным адресам ячеек памяти).

Для построения выполняемой программы из объектных модулей применяется компоновщик (редактор связей, linker). В процессе получения выполняемой программы из исходного текста программы устраняются синтаксические ошибки, состоящие в нарушении правил синтаксиса используемого языка программирования.

5.4 Этап тестирования и отладки программы

На этом этапе производится поиск, локализация и устранение в ней логических ошибок.

Тестирование служит для обнаружения в программе ошибок и выполняется с использованием некоторого набора тестовых данных. Тестовые данные должны обеспечивать проверку всех ветвей алгоритма. При тестировании программы могут подвергаться проверке также некоторые показатели системы, связанные с программой (например, объём кодов и данных). После тестирования программа должна быть подвергнута отладке (debug), задачей которой является локализация ошибки, т. е. нахождение места в программе, вызывающего ошибку.

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

5.5 Этап получения загрузочной программы

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

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

Сопровождение программы (program maintenance) – это процесс внесения изменений, исправления оставшихся ошибок и проведения консультаций по программе, находящейся в эксплуатации. Виды программных документов регламентированы ГОСТ 19.101–77 «Единая система программной документации. Виды программ и программных документов» [2].

Разработка ПО для встраиваемых микропроцессоров производится на персональном компьютере с использованием специальных программных и аппаратных средств. Такой способ создания ПО носит название кросс-разработки. Совокупность аппаратных и программных средств, применяемых для разработки и отладки ПО, объединяют общим наименованием средства поддержки разработки. В настоящем лабораторном практикуме процесс разработки ПО изучается на примере языка ассемблера AVR-микроконтроллеров. Создание исходного текста программы, трансляция и отладка выполняются в интегрированной среде разработки (Integrated Development Environment – IDE) AVR Studio.

Учебные материалы по математике | Вопросы по avr-ассемблеру

Вопросы по AVR-ассемблеру

Структура процессорного модуля МК AVR, назначение основных его элементов (АЛУ, счетчик команд, регистр команд, дешифратор команд, РОН, указатель стека, регистр состояния) и принципы его функционирования.

Принципы организации памяти в МК AVR. Типы внутренней и внешней памяти, используемой в МК AVR.

Назначение и особенности использования регистрового файла РОН в МК AVR.

Формат регистра состояния SREG МК AVR и назначение отдельных его разрядов.

Общая структура ассемблерной программы для МК AVR и функциональное назначение отдельных блоков этой программы.

Способы адресации памяти данных МК AVR. Пряма адресация одного РОН.

Способы адресации памяти данных МК AVR. Прямая адресация двух РОН.

Способы адресации памяти данных МК AVR. Прямая адресация регистров ввода/вывода.

Способы адресации памяти данных МК AVR. Прямая адресация ОЗУ.

Способы адресации памяти данных МК AVR. Простая косвенная адресация.

Способы адресации памяти данных МК AVR. Относительная косвенная адресация.

Способы адресации памяти данных МК AVR. Косвенная адресация с преддекрементом.

Способы адресации памяти данных МК AVR. Косвенная адресация с постинкрементом.

Способы адресации памяти данных МК AVR. Доступ к EEPROM.

Система команд МК AVR. Команды логических операций. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды арифметических операций. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды сдвига. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды битовых операций. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды пересылки данных между РОН. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды пересылки данных между РОН и РВВ. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды пересылки данных между РОН и ОЗУ. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды относительного, абсолютного и косвенного переходов. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды относительного, абсолютного и косвенного вызова подпрограмм и возврата из них. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды передачи управления типа «проверка/пропуск». Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды сравнения, формирующие флаги регистра SREG. Примеры использования рассматриваемых команд.

Система команд МК AVR. Команды управления системой. Примеры использования рассматриваемых команд.

Организация стека в МК AVR. Назначение и принципы функционирования стека. Команды работы со стеком.

Основные особенности оформления ассемблерных программ для МК AVR. Запись команд, меток, чисел и выражений.

Директивы компилятора ассемблера МК AVR. Примеры их использования в программе.

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

Формирование задержек в ассемблерных AVR-программах. Примеры программ формирования задержки.

Формирование задержек в ассемблерных AVR-программах с использованием таймера. Пример программы формирования задержки.

Типовые конструкции а ассемблерных AVR-программах. Пример построения конструкции IF-THEN-ELSE с использование неравенств >= или <=.

Типовые конструкции а ассемблерных AVR-программах. Пример построения конструкции IF-THEN-ELSE с использованием строгих неравенств > или <.

Типовые конструкции а ассемблерных AVR-программах. Пример построения конструкции IF-THEN-ELSE с использованием двойных неравенств типа C<A<B.

Типовые конструкции а ассемблерных AVR-программах. Пример построения конструкции CASE.

Типовые конструкции а ассемблерных AVR-программах. Пример организации цикла с предусловием типа WHILE.

Типовые конструкции а ассемблерных AVR-программах. Пример организации цикла с постусловием типа REPEAT.

Использование внешних прерываний в МК AVR. Формат регистров управления внешними прерываниями. Пример оформления подпрограммы обработки внешнего прерывания.

Управление динамической индикацией многоразрядных светодиодных семисегментных индикаторов в МК AVR.

Подключение матричной клавиатуры 4х4 к МК AVR. Программа сканирования клавиатуры.

Универсальный синхронный/асинхронный приемопередатчик USART в МК AVR. Формат регистров управления USART.

Программирование USART МК AVR. Примеры программ приема и передачи информации с использованием USART.

Система команд « схемопедия


Микроконтроллеры AVR имеют систему сокращенного набора команд RISC, хотя целиком и не полностью попадают под это определение.

Система RISC подразумевает полную симметрию между ресурсами памяти разного типа. Это, в частности, позволяет обращаться к регистрам, портам и памяти данных одними и теми же командами, что и обуславливает их небольшое количество. Однако, не смотря на то, что адресное пространство памяти AVR действительно непрерывно, всё же три разных его области используются только для своих специфических целей. РОН – преимущественно для математических операций, РВВ – для управления процессором, ОЗУ – только как хранилище информации. В связи с этим существуют группы команд как для работы с каждым видом памяти в отдельности, так и для пересылки данных из одной области памяти в другую. Поэтому и количество команд AVR достаточно велико. В фирменной документации, где много говорится про ортогональность ядра, в первую очередь имеется в виду полная равноправность именно РОН.

Система команд линейки ATtiny является подмножеством системы команд старшего семейства ATmega. В ряде старых моделях ATtiny могут отсутствовать некоторые аппаратные узлы (индексные регистры X,Y, программный стек, память ОЗУ и др.) и, соответственно, отсутствовать связанные с ними команды. Система же команд ATtiny более позднего времени выпуска практически аналогична семейству ATmega. Главное отличие обеих семейств – отсутствие встроенного умножителя у ATtiny (отсутствие группы команд умножения).

Разные модели ATtiny могут иметь (90…120) команд. ATmega поддерживают (130…135) инструкций. Так заявлено в спецификациях Atmel. Но фактическое число, на самом деле, значительно меньше.

Это связано с тем, что в ассемблере AVR встроен ряд макроопределений, эквивалентных реальным командам, но имеющих иной символический вид. Так, например, у команды ori Rd,K существует команда двойник sbr Rd,K, которая выполняет тоже действие (Rd = Rd OR K) и имеет такой же код операции. Аналогичные псевдокоманды существуют и для разных случаев применения bset s, bclr s, brbs s,k, brbc s,k, и мн. др.

Способы адресации

Большинство команд ассемблера используют различные ячейки памяти микроконтроллера и, соответственно, содержат кроме кода операции (КОП) также их адреса. В зависимости от того в каком виде в команде хранится адрес различают два способа адресации: прямую и косвенную. В первом случае адрес ячейки задан явно, а во-втором он находится в одном из регистров-указателей (у AVR это 16-разрядные регистры X,Y,Z). У микропроцессоров различного типа, оба способа адресации могут иметь множество вариаций. Ниже приведены характерные только для микроконтроллеров AVR.

Разновидности прямой адресации

Прямая адресация регистра общего назначения

В команде присутствует адрес регистра приемника либо источника результата. Примерами команд могут служить inc Rd, dec Rd, lsl Rd, lsr Rd и т.д. Адресацию, где в команде кроме адреса регистра находится еще и константа (ldi  Rd,K, ori Rd,K  и т.д.), называют также непосредственной, а в случае сохранения/восстановления данных в стеке (push Rr и pop Rd) – стековой. Адрес РОН находится в пределах 0…31 (в командах с непосредственной адресацией 0…15).

Прямая адресация двух регистров общего назначения

Команды данного типа содержат адреса двух  РОН, один из которых является источником, а другой приемником результата в арифметических операциях, а также операциях пересылки. Примеры команд: mov Rd, Rr, add Rd, Rr, sub Rd, Rr, and Rd,Rr и т.д. Адреса обоих регистров лежат в пределах 0…31, но в некоторых командах умножения могут использоваться только РОНы 16…31 (muls Rd,Rr и fmuls Rd,Rr) или 16…23 (mulsu Rd,Rr и fmulsu Rd,Rr).

Прямая адресация регистра ввода-вывода

Прямую адресацию регистра ввода-вывода у AVR используют команды двух типов. Это копирование РВВ в РОН in Rd,P и пересылка в противоположном направлении out P,Rr. В обоих случаях могут быть использованы любые регистры общего назначения 0…31 и регистры ввода-вывода 0…64.

Прямая адресация ОЗУ

Прямая адресация ОЗУ встречается в командах lds Rd,k и sts k,Rr. Первая инструкция пересылает байта из SRAM микроконтроллера в один из РОНов, вторая копирует содержимое РОНа в ячейку SRAM. В обеих командах под поле адреса ячейки памяти отводится 16 битов, а значит, имеется возможность напрямую обращаться к любому адресу SRAM из диапазона 0…65535. Инструкции работают со всеми РОНами 0…31 и имеют размер в 2 слова (4 байта).

Разновидности косвенной адресации

Простая косвенная адресация

Простая косвенная адресация применяется для копирования данных из SRAM в РОН одной из команд ld Rd,X/Y/Z, а также для пересылки в обратном направлении  st X/Y/Z,Rr. В 2-байтовых регистрах-указателях X,Y,Z содержится адрес ячейки приемника либо источника в диапазоне 0…65535.

Косвенная адресация с преддекрементом

Этот вид адресации подобен простой косвенной адресации за исключением одного отличая. Перед выполнением операций пересылки значения индексных регистров X,Y,Z аппаратно уменьшается на единицу, что и символизирует знак “-” в командах ld Rd,-X/-Y/-Z и st -X/-Y/-Z,Rr.

Косвенная адресация с постинкрементом

При косвенная адресации с постинкрементом значения указателей X,Y,Z аппаратно увеличивается на единицу (знак “+” перед указателями) после пересылки байта командами ld Rd,X+/Y+/Z+ и st X+/Y+/Z+,Rr.

Относительная косвенная адресация

Относительная косвенная адресация также используется для пересылки данных между РОН и SRAM. Однако адрес ячейки памяти определяется здесь как сумма содержимого указателей Y,Z и фиксированного смещения q. Для пересылки байта из SRAM в РОН применяются команды ldd Rd,Y+q/Z+q, а для пересылки в обратном направлении st Y+q/Z+q,Rr. Величина q может лежать в пределах 0…63.

Перейти к следующей части: Арифметические и логические команды

Архитектура и система команд контроллера ЖКИ

Рассмотрим вопросы аппаратного и программного сопряжения микрокон­троллеров AVR и символьных ЖКИ, построенных на базе контроллера HD44780 (LCD – модуль). Рассматриваемый ЖКИ при помощи 14–контакт­ного разъема (табл. 8) обменивается информацией с микроконтроллером AVR. Микроконтроллер посылает в ЖКИ команды (табл. 9) и ASCII–коды выводи­мых символов. В свою очередь, ЖКИ может посылать AVR–микроконтроллеру по его запросу информацию о своем состоянии и данные из своих внутренних блоков памяти.

Таблица 8. Описание выводов ЖКИ на базе HD44780

Название вывода Описание
VSS (–) Питание. 0 V.
VDD (+) Питание.+5V.
V0 Напряжение смещения, управляющее контрастностью
RS Вход. Высокий уровень – Данные; Низкий – Команды
R/W Вход. Высокий–Чтение, Низкий–Запись
E Вход. Строб, сопровождающий сигналы на шине «команды/данные»
7 – 14 DB0 – DB7 Шина «команды/данные»

Три вывода 14–контактного разъема предназначены для подачи питаю­щего напряжения и напряжения смещения, которое управляет контрастностью дисплея. На рис. 11показана рекомендуемая схема подключения этих выво­дов.

Из оставшихся 11 выводов 8 (DB0 – DB7) используются для организации мультиплексированной шины «команды / данные», и на 3 вывода (RS, R/W, E) AVR–микроконтроллер выставляет управляющие сигналы. На рис. 12 изображены временные диаграммы этих сигналов при записи команд / данных в контроллер ЖКИ.При помощи сигнала на линии RS микропроцессор сообщает контроллеру индикатора о том, что именно передается по шине: команда или данные. Cигнал на линии Е является стробом, сопровождающим сигналы на шине «команды / данные». Запись информации в ЖКИ происходит по спа- ду этого сигнала. Потенциал на управляющем выводе R/W Рис. 11. Схема питания

задает направление передачи данных: запись в RAM индикатора (R/W=0) или считывание оттуда (R/W=1).

Для случая, когда микроконтроллер имеет ограниченное количество линий ввода / вывода, предусмотрен второй вариант подключения ЖКИ с использованием 4–х разрядной шины «команды / данные». При этом каждый байт данных передается по линиям DB4 – DB7 последовательно двумя тетрадами, начиная со старшей. Контроллер ЖКИ после приема байта команды или байта данных требует некоторого времени табл. 9 для обработки полученной информации, в течение которого AVR–микроконтроллер не должен выполнять новых передач.


Рис. 12. Запись данных в ЖКИ

Для того, чтобы определить, когда контроллер ЖКИ закончит свои внутренние операции, AVR может опрашивать BUSY–флаг индикатора (команда «чтение busy–флага»). Второй, более простой способ заключается в том, что управляющий микроконтроллер просто выполняет временную задержку после каждой передачи информации.

Если во время цикла записи AVR–микроконтроллер передает в контрол­лер индикатора код команды, то этот код записывается в регистр команд кон­троллера ЖКИ, и команда сразу же начинает выполняться. Если AVR–микро­контроллер передает в контроллер ЖКИ данные, которые представляют собой ASCII–коды отображаемых символов, то они записываются в буфер данных (DDRAM), который обычно содержит 80 ячеек (рис. 13). При записи или считывании буфера данных обращение осуществляется к ячейке, на которую в данный момент указывает курсор.

Таблица 9. Система команд контроллера НD4478

Описание команды Код RS,R/W, DB7–DB0 Время (fosc=250кГц)
Очистить дисплей и установить курсор в нулевую позицию 0 0 0 0 0 0 0 0 0 1 82 мкс до 1.64 мс
Установить курсор в нулевую позицию (адрес 0). Установить дисплей относительно буфера DDRAM в начальную позицию. Содержимое DDRAM при этом не меняется. 0 0 0 0 0 0 0 0 1 * 40 мкс до 1.6 мс
Установить направление сдвига курсора вправо (I/D=1) или влево (I/D=0) при записи/чтении очередного кода в DDRAM. Разрешить (S=1) сдвиг дисплея вместе со сдвигом курсора. 0 0 0 0 0 0 0 0 I/D S 40 мкс
Включить(D=1)/выключить(D=0) дисплей. Зажечь(C=1)/погасить(C=0) курсор. Изображение курсора сделать мигающим (B=1). 0 0 0 0 0 0 1 D C B 40 мкс
Переместить курсор (S/C=0) или сдвинуть дисплей (S/C=1) вправо (R/L=1) или влево(R/L=0). 0 0 0 0 0 1 S/C R/L * * 40 мкс
Установить разрядность шины данных 4 бита (DL=0) или 8 бит (DL=1), количество строк дисплея – одна (N=0) или две (N=1), шрифт – 5х7 точек (F=0) или 5х10 точек (F=1). 0 0 0 0 1 DL N F * * 40 мкс
Установка адреса CGRAM. После этой команды данные будут записываться/считываться в/из CGRAM. 0 0 0 1 . . ACG . . 40 мкс
Установка адреса DDRAM 0 0 1 . . ADD . . 40 мкс
Чтение состояния busy–флага (BF) и счетчика адреса 0 1 BF . . AC . . 1 мкс
Запись данных в DDRAM или CGRAM. 1 0 Данные 40 мкс
Чтение данных из DDRAM или CGRAM. 1 1 Данные 40 мкс

 

Примечание:
DDRAM– Display data RAM – ОЗУ ASCII–кодов, отображаемых символов
CGRAM–Сharacter generator RAM – ОЗУ знакогенератора


Рис. 13. Отображение на дисплее символов, ASCII–коды которых записаны в DDRAM
(а – однострочный ЖКИ, б – двухстрочный ЖКИ)

Буфер данных имеет больше ячеек, чем число знакомест дисплея. Смещая окно индикатора относительно буфера данных (см. систему команд), можно отображать на дисплее различные области буфера. У индикаторов с двумя строками первые 40 ячеек буфера данных, обычно, отображаются на верхней строке дисплея, а вторые 40 ячеек – на нижней строке. Сдвиг окна дисплея относительно буфера данных для верхней и нижней строк происходит синхронно. Курсор будет виден на индикаторе только в том случае, если он попал в зону видимости дисплея (и если предварительно была подана команда – отображать курсор).

Кроме DDRAM, контроллер ЖКИ содержит еще один блок памяти – знакогенератор. Его «прошивка», то есть соответствие ASCII–кодов начертанию символов, обычно имеется в описании индикатора. Знакогенератор состоит из двух частей. Основная его часть представляет собой ПЗУ (CGROM) и ее, следовательно, нельзя изменить. Вторая часть, в которой задаются начертания символов для первых 16–ти кодов таблицы знакогенератора, представляет собой перепрограммируемое ОЗУ(CGRAM). Имеется возможность задать начертание 8 символов, соответствующих кодам 0(8), 1(9), 2(10) … 7(15). Для каждого из восьми перепрограммируемых символов в CGRAM отводится по 8 ячеек памяти, каждая из которых соответствует одной строке точек в изображении символа. Таким образом, перепрограммируемая часть знакогенератора содержит 64 байта памяти (8х8). Пример кодирования CGRAM для одной буквы приведен на рис. 14.
На рис. 15 и рис. 17 приведены две возможные схемы сопряжения ЖКИ и AVR–микроконтроллера. В пер Рис. 14: Пример вой схеме (рис. 5) ЖКИ подключается к AVR как блок кодирования символа внешней памяти данных.

Узел формирования стробирующего сигнала E здесь выполнен так же, как и на фирменных платах STK200, STK300 и использует сигнал записи WR AVR–микроконтроллера и старший разряд адреса A15. Таким образом, информация на индикатор поступает при выполнении AVR–микроконтроллером команды записи данных во внешнюю память с любым адресом, имеющим A15=1.

На рис. 16 представлена временная диаграмма записи данных во внешнюю память AVR–микроконтроллера.

Сравнивая ее с диаграммой сигналов записи данных в контроллер ЖКИ (рис. 12), не трудно заметить, что сигналы E и WR имеют разную полярность. Различаются также временные соотношения этих сигналов с сигналами на шине данных. Поэтому узел формирования сигнала E на рис. 15 имеет дополнительный инвертор и дифференцирующую цепочку, укорачивающую импульс записи.

В качестве сигнала выбора регистра RS в рассматриваемой схеме используется еще один разряд адреса – A14. Таким образом, операции записи в контроллер ЖКИ команд или данных отличаются между собой только адресом. Например, данные можно записывать по адресу $C000, а команды – по адресу $8000.

Вывод R/W ЖКИ в предлагаемой схеме непосредственно присоединен к линии «земля», тем самым задается единственно возможное направление передачи информации от AVR–микроконтроллера на ЖКИ. При этом потеря возможности опрашивать BUSY–флаг и считывать данные из блоков памяти контроллера ЖКИ окупается экономией одного управляющего вывода AVR.

 

Рис. 15. Включение ЖКИ как блока внешней памяти

На рис. 17 изображена схема подключения ЖКИ, которую можно использовать для AVR–микроконтроллеров, не имеющих возможности подключения внешней памяти данных. В этой схеме управляющие сигналы E и RS формируются программно на обычных линиях ввода/вывода AVR. В приведенном примере шина данных состоит из 4 разрядов. Каждый байт данных при этом, как упоминалось выше, передается за две последовательные посылки, начиная со старшей тетрады.


Рис. 16. Запись данных во внешнюю память AVR–микроконтроллера

Рис. 17. Подключение ЖКИ при помощи 6 цифровых выводов

Простейшими составными «кирпичиками» драйвера ЖКИ могут быть подпрограммы, представленные в файле Lab2.asm:

LCD_SETUP – подпрограмма инициализации и установки LCD модуля;

LCD_HELLO – подпрограмма вывода на LCD модуль сообщения «HELLO»;

LCD_CMD – подпрограмма вывода в LCD модуль команды;

LCD_DATA – подпрограмма вывода в LCD модуль данных;

LCD_CURSOR – подпрограмма установки курсора в LCD.

Используется 4 битовая схема подключения LCD модуля к микроконтроллеру. Подпрограмма «WAIT_2M» осуществляет задержку 2.3 мсек с тактовой частотой микроконтроллера 1 МГц;

В файле Lab_2.prj используется строка с LCD модулем:

X[inst_name] LCD(chars lines oscil_freq) RS RW E D7 D6 D5 D4 D3 D2 D1 D0

В следуэщей редакции:

Xdisp LCD(24 2 250K) PD2 PB0 PD3 PD7 PD6 PD5 PD4 nc3 nc2 nc1 nc0,

где Disp – имя LCD модуля;

nc3 nc2 nc1 nc0 – выводы D3 D2 D1 D0 LCD модуля не используются (применена схема с 4 битовым подключением к микроконтроллеру)

24 2 250K – параметры LCD модуля (число символов, число строк, частота)

PD2 – RS PB0 – RW PD3 – E/

Задание к лабораторной работе

 

Изучить программу Lab2.asm и файл проекта Lab_2.prj. Отладить программу в среде VMLab, подключив необходимую периферию к микроконтроллеру AVR – интерфейс UART и LCD модуль (дисплей). На рис.18 представлены результаты моделирования программы в среде VMLab.

Рис. 18. Результаты моделирования программы Lab2.asm в среде VMLab.

 

Файл Lab_2.prj

.MICRO «ATmega16» ; ATmega16 with 16 of external RAM

.PROGRAM «Lab2.asm»

.TARGET «Lab2.hex»

.TRACE ; Activate micro trace

.POWER VDD=5 VSS=0 ; Power nodes

.CLOCK 1meg ; Micro clock

.STORE 250m ; Trace (micro+signals) storage time

Xterm TTY(4800 8) PD0 PD1 ; place terminal

Xdisp LCD(24 2 250K) PD2 PB0 PD3 PD7 PD6 PD5 PD4 nc3 nc2 nc1 nc0

.plot v(pd0) v(pd1)

 

 

Файл Lab2.asm

.include «m16def.inc»

.EQU OE = 0b001000 ; bit 3 Port D

.EQU RS = 0b0001004 ; bit 2 Port D

.DEF TEMP = R16 ; temporary working register

.DEF PARAM = R17 ; Parameter transfer register

.DEF DELAY = R10 ;

.DEF DELAY1 = R11 ; To generate long delays

.DEF DELAY2 = R12 ;

; Reset and interrupt vectors

CSEG

ORG 0x00

START:

Rjmp RESET ; Reset vector

Org URXCaddr

rjmp uart_rx

Org UDREaddr

Reti

Org UTXCaddr

Reti

; Device initialization

RESET:

Ldi temp, high(RAMEND) ; инициализация памяти стека

Out SPH, temp

Ldi temp, low(RAMEND)

404 — Heimkinoraum.de

Печенье Wir verwenden

Auch wir verwenden Cookies und ähnliche Technologien, damit bei Ihrem Besuch unsere Webseite technisch funktioniert und um Ihnen die bestmögliche Erfahrung auf unserer Website zu bieten. Außerdem binden wir so die Tools von Kooperationspartnern für Statistiken zur Nutzung unserer Webseite sowie zur Leistungsmessung ein und geben Informationen zu Ihrer Verwendung unserer Website weiter. Unsere Partner führen diese Informationen möglicherweise mit weiteren Daten zusammen, die Sie ihnen bereitgestellt haben oder die sie im Rahmen Ihrer Nutzung der Dienste gesammelt haben.Durch Anklicken des jeweiligen Buttons haben sie nachfolgend die Wahl, all Cookies und ähnlichen Technologien zu akzeptieren oder, wenn Sie mehr über die von uns verwendeten Cookies und deren Verwaltung erfahren möchten, können Sieäber Die unserez Nutzer-индивидуальные Einstellungen zur Cookie-Nutzung treffen. Nähere Informationen dazu und zu Ihren Rechten als Benutzer finden Sie in unserer Datenschutzerklärung oder im Impressum.

<Цюрюк
Cookie-Einstellungen
Были ли куки-файлы? Подробности anzeigen

Cookies sind kleine Textdateien, die von Ihrem Browser gespeichert werden und dazu dienen, gewisse Informationen während des Navigierens auf einer Webseite oder bei zukünftigen Besuchen wieder abrufen zu können. Durch die gespeicherten und zurückgesandten Informationen erkennt die jeweilige Webseite, dass Sie diese mit dem Browser Ihres Endgeräts bereits aufgerufen und besucht haben.Weitere Informationen finden Sie in unserer Datenschutzerklärung.

Unbedingt erforderliche Cookies Подробности anzeigen

Unbedingt erforderliche Cookies, auch «строго необходимые» genannt, gewährleisten Funktionen, ohne die Sie diese Веб-сайт nicht wie beabsichtigt nutzen könnten. Diese Cookies werden ausschließlich von HEIMKINORAUM verwendet und sind deshalb sogenannte First Party Cookies. Diese Cookies dienen zum Beispiel dazu, dass Sie als angemeldeter Nutzer bei Zugriff auf verschiedene Unterseiten unserer Webseite stets angemeldet bleiben und so nicht jedes Mal bei Aufruf einer neuen Seite Ihre Anmeldedben erneuts eite.Rechtsgrundlage für diese Erhebung und Verarbeitung ist unser berechtigtes Interesse (статья 6 Abs. 1 Satz 1, лит. F DS-GVO). Weitere Informationen dazu finden Sie in unserer Datenschutzerklärung.

Statistik Подробности anzeigen

Cookies für statistische Analysen sind sammeln auf Basis einer zufälligen Kennung pseudonymisierte Informationen darüber, wie unsere Webseite genutzt wird, um deren Attraktivität, Inhalt und Funktionalität zu verbessern.Diese Cookies helfen uns, zu bestimmen, ob, welche, wie oft und wie lange Unterseiten unserer Webseite besucht werden und für welche Inhalte sich Nutzer besonders interessieren. Erfasst werden weiterhin z.B. Sucbegriffe, das Land oder die Region aus der der Zugriff erfolgt, sowie der Anteil von mobilen Endgeräten, die auf unsere Webseiten zugreifen. Wir erstellen anhand dieser Informationen Statistiken, um die Inhalte unserer Webseite gezielter auf Ihre Bedürfnisse abzustimmen und unser Angebot zu optimieren.Rechtsgrundlage für diese Erhebung und Verarbeitung ist unser berechtigtes Interesse (статья 6 Abs. 1 Satz 1, лит. F DS-GVO). Sie können dieser Verarbeitung hier widersprechen. Weitere Informationen dazu finden Sie in unserer Datenschutzerklärung.

Erweiterte Statistik Подробности anzeigen

Bei der erweiterter Nutzungsanalysen werden für Besucher, die sich in ihrem Kundenkonto einloggen, Endgeräte-übergreifende Statistiken auf Basis eines kundenindividuellen Псевдонимы erhoben.Weiterhin fällt unter dieser Kategorie die Aufzeichnung von Webseitenbesuchen, bei der Mausbewegungen nachvollzogen werden können. Tastatureingaben des Besuchers werden dabei niemals aufgezeichnet. Ebenso werden Informationen verborgen, die eine Identifikation des Nutzers ermöglichen würden. Rechtsgrundlage für diese Erhebung und Verarbeitung ist Ihre Einwilligung (статья 6 Abs. 1 Satz 1, лит. A DS-GVO). Weitere Informationen dazu finden Sie in unserer Datenschutzerklärung.

Leistungsmessung Подробности anzeigen

Cookies zur Leistungsmessung werden genutzt, um die Leistung von Werbemaßnahmen zu ermitteln und um sie optimieren zu können.Informationen zur Leistung werden von unseren Partnern möglicherweise mit weiteren Daten zusammengeführt, die Sie ihnen bereitgestellt haben oder die von unseren Partnern im Rahmen Ihrer Nutzung der Dienste gesammelt wurden. Rechtsgrundlage für diese Erhebung und Verarbeitung ist Ihre Einwilligung (статья 6 Abs. 1 Satz 1, лит. A DS-GVO). Weitere Informationen dazu finden Sie in unserer Datenschutzerklärung.

Personalisierung Подробности anzeigen

Cookies zur Personalisierung ermöglichen es Ihnen personalisierte Inhalte, pasnd zu Ihren Interessen innerhalb und außerhalb dieser Webseite zu sehen.Von unseren Partnern werden Informationen zu Ihren Interessen möglicherweise mit weiteren Daten zusammengeführt, die Sie ihnen bereitgestellt haben или unsere Partner im Rahmen Ihrer Nutzung der Dienste gesammelt haben. Rechtsgrundlage für diese Erhebung und Verarbeitung ist Ihre Einwilligung (статья 6 Abs. 1 Satz 1, лит. A DS-GVO). Weitere Informationen dazu finden Sie in unserer Datenschutzerklärung.

Руководство по подключению программатора карманного AVR

Добавлено в избранное Любимый 10

Использование AVRDUDE через командную строку

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

Если у вас есть Arduino, значит, у вас уже установлен AVRDUDE — это инструмент, который Arduino использует для загрузки эскизов. Если вам нужно установить AVRDUDE отдельно, ознакомьтесь с документацией в разделе загрузок AVRDUDE. Файлы avrdude-doc-X.XX.pdf (т.е. avrdude-doc-6.3.pdf ) особенно полезны при установке AVRDUDE для вашей операционной системы, если у вас есть проблемы с использованием команд AVRDUDE в любом каталоге через командную строку. .

Проверка работоспособности — пути AVRDUDE

AVRDUDE — это инструмент командной строки , поэтому, чтобы использовать его, вам нужно открыть «Командную строку» (Windows) или «Терминал» (Mac / Linux). Чтобы убедиться, что AVRDUDE работает, лучше сначала провести небольшую проверку работоспособности. Откройте командную строку и введите следующую команду.

  язык: bash
Avrdude
  

Вы должны увидеть результат, подобный изображению ниже.

Проверка работоспособности — проверка подписи устройства

Примечание: В следующем примере предполагается, что у вас есть ATmega328P , подключенный к другому концу вашего программатора.Если у вас другой тип микроконтроллера, вам нужно будет сформулировать немного другую команду, проверьте раздел «Указать программатор и устройство AVR» ниже.

Чтобы убедиться, что AVRDUDE работает, и ваш карманный программатор AVR подключен правильно, хорошо провести еще одну небольшую проверку работоспособности. Введите это в командную строку:

  язык: bash
avrdude -c usbtiny -p atmega328p
  

Если все подключено правильно, вы должны получить такой ответ:

Эта базовая команда определяет тип используемого вами программатора и AVR, с которым он разговаривает.AVRDUDE попытается прочитать подпись устройства из вашего AVR, которая отличается для каждого типа AVR. Каждые ATmega328P должны иметь подпись устройства 0x1E950F .

Flash-программирование

Внимание! В этом примере предполагается, что биты предохранителя (т.е. младший, высокий и расширенный) установлены уже перед прошивкой файла .hex. Поскольку мы используем RedBoard, запрограммированный с Arduino, мы можем записать на плату файл .hex.

Теперь, когда вы убедились, что все в рабочем состоянии, вы можете выполнять все виды чтения и записи в память с помощью AVRDUDE. Основная часть памяти, которую вы, вероятно, захотите записать, — это флеш-память — энергонезависимая память, в которой хранятся программы.

Предупреждение! Записав следующий файл blink.hex на микронтроллер AVR, он перезапишет то, что находится в памяти. В этом файле нет загрузчика Arduino, поэтому вы не сможете загрузить его через последовательный порт с помощью Arduino IDE, пока не переустановите загрузчик с соответствующим микроконтроллером.Если вы используете RedBoard, запрограммированный с помощью Arduino, вы все равно можете переустановить загрузчик для повторной загрузки через последовательный порт. На плате используется optiboot_atmega328.hex . Вы можете найти это в программной папке Arduino, похожей на этот путь … \ arduino-1.8.5 \ hardware \ arduino \ avr \ bootloaders \ optiboot или в « Reinstalling the RedBoard’s Arduino Bootloader » далее в этом руководстве.

В этом примере в качестве примера будет использоваться файл blink.hex .Загрузите следующие файлы ниже. Если вы используете файл blink.hex , убедитесь, что вы распаковали папку и поместили ее в рабочий каталог.

Скачать Blink Here (ZIP)

Эта команда выполнит базовую запись во флэш-память с использованием файла HEX.

  язык: bash
avrdude -c usbtiny -p atmega328p -U flash: w: blink.hex
  

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

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

Совет: В некоторых случаях вам может потребоваться указать файл * .hex , который вы прошиваете. Обычно это необязательно, но вы можете получить сообщение об ошибке, если AVRDUDE не сможет прочитать файл.

Неверный формат файла

Чтобы указать, вы можете добавить : i , чтобы указать, что это шестнадцатеричный формат Intel:

avrdude -c usbtiny -p atmega328p -U flash: w: blink.hex: i

Или : a для автоматического определения формата:

avrdude -c usbtiny -p atmega328p -U flash: w: blink.hex: a

Для получения дополнительной информации попробуйте проверить AVRDUDE в Интернете Документация в разделе «Описание параметра», где описывается команда « -U memtype: op: filename [: format] ». Онлайн-документация

AVRDUDE: Описание опций
Чтение флэш-памяти

Команда -U также может использоваться для чтения содержимого памяти AVR.Например, команда, подобная приведенной ниже, прочитает содержимое вашего AVR и сохранит его в файл с именем « mystery.hex ».

  язык: bash
avrdude -c usbtiny -p atmega328p -U flash: r: mystery.hex: r
  

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

Переустановка загрузчика Arduino RedBoard

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

RedBoard, запрограммированный с помощью загрузчика Arduino (HEX)

Перейдите по пути, по которому вы загрузили загрузчик, и введите следующую команду.

  язык: bash
avrdude -c usbtiny -p atmega328p -U flash: w: optiboot_atmega328_2012_with_1s_watchdog.hex
  

Если все пойдет хорошо, вы должны получить сообщение о том, что он был написан, проверен и завершил загрузку. Вы должны получить результат, аналогичный приведенному ниже. В этом случае файл конфигурации (т.е.е. avrdude.conf ) и загрузчик ( * .hex ) не находились в одном рабочем каталоге. Чтобы указать, где искать файлы, потребовались две дополнительные команды. Кроме того, формат * .hex необходимо было автоматически определять при прошивке файла путем добавления : a .

Вернитесь к Arduino IDE, отсоедините USB-кабель от вашего программатора и подключитесь к USB-порту RedBoard, чтобы посмотреть, сможете ли вы загрузить простое мигание .ino скетч обратно на плату через последовательный порт. Перед загрузкой убедитесь, что выбрали соответствующее определение платы и COM-порт. Вы должны увидеть знакомое сообщение, указывающее, что IDE Arduino — это «Done Uploading» по завершении, а встроенный светодиодный индикатор начнет мигать на контакте 13.

Примечание: Ищете дополнительную информацию об установке загрузчика Arduino? Ознакомьтесь с нашим руководством ниже о различных методах прошивки загрузчика Arduino на микросхему AVR!

Установка загрузчика Arduino

4 декабря 2013 г.

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


Полезные опции

Вот лишь несколько последних советов и приемов AVRDUDE, прежде чем мы познакомим вас с миром AVR.

Укажите программатор и устройство AVR

Для использования AVRDUDE требуются две опции: программатор типа и устройство AVR Спецификация :

  • Определение программатора , если вы используете карманный программатор AVR, будет -c usbtiny .Если вам нужно использовать другой программатор, посмотрите эту страницу и от CTRL + F до « -c programmer-id ».

  • Тип устройства АРН определяется опцией -p . Мы показали несколько примеров с ATmega328P, но что, если вы используете ATtiny85? В этом случае вы захотите вместо этого поставить -p t85 . Ознакомьтесь с исчерпывающим списком совместимых типов устройств AVR в верхней части этой страницы.

Подробный вывод

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


Там еще много чего. Ознакомьтесь с онлайн-документацией AVRDUDE в разделе Описания опций для получения полного списка команд.

Онлайн-документация AVRDUDE: описание опций

← Предыдущая страница
Программирование через Arduino

rahra / avrshell: Маленькая командная строка для облегчения разработки и отладки аппаратного и программного обеспечения AVR.

Оболочка

AVR — это совершенная система разработки, отладки и обучения для Микроконтроллеры на базе AVR.

AVR Shell — это крошечная автономная многозадачная ОС, которая запускается на 8-битном AVR. ядра, такие как Atmega328p, который находится на популярных платах Arduino, таких как Arduino Uno или Arduino Nano.

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

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

Компиляция

Для компиляции вам понадобится gcc-avr и, например, avrdude для прошивки программа.

Загрузите весь исходный код, измените его на src / и просто запустите make и make upload , если ваша плата Arduino подключена. Вы, наверное, открываете Makefile и соответствующим образом измените USBDEV и BAUD .

Подключение

Просто подключитесь к Arduino с помощью программы последовательного терминала, такой как minicom .Просто запустите minicom -D / dev / ttyACM0 -o -b 9600 -w .

Команды

Следующие команды пока реализованы.

в … Работает аналогично инструкции в , но реализуется с помощью инструкции с отображением памяти ( ldd ).

out . … Работает как инструкция из .

sbi …… Установить бит (0-7) в регистре ввода-вывода.

cbi …… Очистить бит (0-7) в регистре ввода-вывода.

дамп [len] ……… Дамп len (по умолчанию = 512) байт памяти.

pdump [len] …….. Дамп len (по умолчанию = 512) байт программной памяти.

edump [len] …….. Дамп len (по умолчанию = 512) байт памяти EEPROM.

вместо ……… Записать байт в EEPROM по адресу addr .

cpu ………………….. Вывод информации о процессоре, такой как биты предохранителей, биты блокировки и подпись.

время безотказной работы ……………….. Показывать тики безотказной работы системы с момента последнего сброса.

запустить …………….. Выполнить процесс pid .

остановить ……………. Остановить процесс pid .

новый <адрес> …………. Создайте новый процесс с подпрограммой запуска по адресу , адрес .

ps …………………… Список процессов с pid, текущим указателем стека и состоянием. Состояния определены в process.h.

Все эти команды реализованы с использованием ld , lpm и st .

Прерывания

Оболочка AVR обрабатывает все прерывания и выводит сообщение, если прерывание пойманный.

Исключениями являются прерывание загрузки 0x00 и последовательные прерывания 0x24 и 0x26. поскольку они используются для самой оболочки AVR.

AVR Shell разработан Бернхардом Р. Фишером, [email protected].

Ключ PGP: 9867 8E06 0630 07E4 A1F0 B9C5 9BD6 0166 8E24 F29D

Не стесняйтесь обращаться ко мне.

Получите phun с помощью AVR Shell!

Использование цепочки инструментов GNU AVR в Windows 10

Использование цепочки инструментов GNU AVR в Windows 10

Содержание

Введение

На этой странице предпринята попытка описать процедуру установки полного Набор инструментов на основе GCC в современной системе Windows.Я разработал эти инструкции на моем компьютере с Windows 10, но они должны работать на версии Windows, начиная с Windows 7. В более старых версиях вы могли хочу использовать WinAVR. WinAVR использовал как предпочтительный способ установки этой инструментальной цепочки в Windows, даже до полуофициальности, но не сохранился в годы. Сообщается, что установщик наносит ущерб новым версиям Windows, но вероятно, он отлично работает на XP.

Установить Git

Мы собираемся использовать оболочку bash, установленную Git, в качестве отправной точки.Его легко установить, и если вы используете Git в Windows, он может быть у вас уже. Щелкните меню «Пуск» и выполните поиск по запросу «Git Bash». Если оно подходит, он у вас уже есть. Если нет, скачайте и установите Git для Windows. Значения по умолчанию для все варианты установщика будут работать для наших целей.

Установите Atmel GNU Toolchain

Загрузите Atmel AVR Toolchain для Windows с сайта Atmel и запустите установщик. Когда спросили куда извлекать файлы, щелкните значок «… «и перейдите к C: \ Program Files, затем нажмите «Извлечь».

Установить GNU Make

Загрузите Gnu Make и запустите установщик. Примите расположение по умолчанию для установки. Вы можете выбрать, будет ли вам не нужен значок в меню «Пуск».

Установить avrdude

Скачать avrdude

. Разархивируйте archive и скопируйте его в папку C: \ Program Files.

Обновите PATH

Теперь нам нужно указать Windows, где найти все инструменты, которые вы только что устанавливается, когда вы вводите их имена в командной строке.Зайдите в меню Пуск и откройте Панель управления, затем перейдите в Система. На левой панели выберите «Расширенные системные настройки». На вкладке «Дополнительно» щелкните значок Кнопка «Переменные среды».

В разделе «Пользовательские переменные» выберите «Путь» и нажмите кнопку «Изменить». Если у вас еще нет переменной с именем «Путь», нажмите кнопку «Создать». кнопку, чтобы создать его, введите «Путь» без имени и заполните поле значение, как описано ниже.

Всплывающее окно редактирования, к сожалению, отличается в зависимости от создаете ли вы новую переменную или имеете только один элемент на вашем пути, или если на вашем пути уже есть несколько элементов.В первых двух случаях вы просто получите текстовое поле для значения. В третьем случае вы получаете список значений. В любом случае вы хотите добавить следующие три значения. Если вы получите список, добавьте их как отдельные элементы (см. снимок экрана ниже). Если вы получите текстовое поле, введите их через точку с запятой. Убедитесь, что они введены точно или Windows не сможет найти программы.

Три значения, которые нужно добавить:

  • C: \ Program Files \ avr8-gnu-toolchain \ bin
  • C: \ Program Files (x86) \ GnuWin32 \ bin
  • C: \ Program Files \ avrdude

Щелкните OK во всех открытых вами окнах.

Установите драйверы для вашего программатора

В этом руководстве предполагается, что вы собираетесь использовать FabISP, FabTinyStarISP или другой программатор на базе USBtiny. Если вы используете один из официальных Atmel Для программистов самый простой способ получить драйверы — это установить Atmel Studio.

Программисты USBtiny используют общий драйвер libusb, но Windows 10 политика подписи драйверов усложняет установку. К счастью, есть инструмент, который помогает в этом. Скачайте Zadig и запустите его.Подключите свой программатором и выберите в списке устройство «USBtinySPI». (Если оно не отображается, перейдите в меню «Параметры» и нажмите «Список всех» Устройства ». Драйвер, который вы хотите установить (справа от зеленого стрелка) либо libusb-win32, либо libusb0. Щелкните значок Кнопка «Установить драйвер». Вам нужно сделать это только один раз.

Проверка работоспособности

Теперь все установлено. Проверим, все ли работает.

Перейдите в меню «Пуск», найдите «Git Bash» и запустите его.Когда вы видите инструкции, предлагающие открыть терминал в другом учебные пособия, это окно терминала, которое вы должны использовать.

Убедитесь, что установленные нами команды работают нормально:

марка

Введите make -v и нажмите Enter. Вы должны увидеть:

 GNU Make 3.81
Авторское право (C) 2006 Free Software Foundation, Inc. 

… и так далее.

Если вместо этого вы получаете сообщение об ошибке «команда не найдена», перепроверьте установка make и установка вашей переменной пути для опечаток.

avr-gcc

Введите avr-gcc —version и нажмите ввод. Вы должны увидеть:

 avr-gcc.exe (AVR_8_bit_GNU_Toolchain_3.5.4_1709) 4.9.2 

… и так далее.

Если вместо этого вы получаете сообщение об ошибке «команда не найдена», перепроверьте установка инструментальной цепочки Atmel и настройка переменной пути для опечатки.

avrdude

Подключите программатор к USB-порту и введите: avrdude -c usbtiny -p t45 и нажмите ввод. Вы должны увидеть:

 avrdude.exe: инициализация не удалась, rc = -1
... 

Это означает, что avrdude успешно нашел вашего программиста, но не удалось поговорить с целевой доской (ожидается, потому что у нас нет ничего связан с программистом прямо сейчас.)

Если вместо этого вы видите:

 avrdude.exe: ошибка: не удалось найти устройство USBtiny (0x1781 / 0xc9f) 

проверьте установку драйвера USB (шаги Zadig).

Если вы получаете сообщение об ошибке «команда не найдена», проверьте свою установку. avrdude и вашей переменной пути.

Ура!

Вы должны быть готовы к работе!


Это работа под лицензией Creative Commons Международная лицензия Attribution-ShareAlike 4.0.

AVRDUDE — загрузчик / загрузчик AVR

AVRDUDE — загрузчик / загрузчик AVR

AVRDUDE это полезность для загружать / выгружать / управлять содержимым ROM и EEPROM AVR микроконтроллеры, использующие технику внутрисистемного программирования (ISP).

Документация

Документацию можно скачать с область загрузки, или читайте онлайн здесь.

История

AVRDUDE когда-то был запущен Брайаном С. Дином как частный проект. внутрисистемного программатора для микроконтроллеров серии Atmel AVR, как часть коллекции инструментов с открытым исходным кодом и бесплатных программных средств, доступной для эти контроллеры. Первоначально программное обеспечение было написано для операционной системы FreeBSD, поддерживается в частном репозитории CVS и распространяется под названием avrprog .

В связи с растущим интересом к переносу программного обеспечения на другие операционные системы, Брайан решил сделать проект общедоступным на саванна.nongnu.org. Изменение имени на AVRDUDE было выбрано для разрешить неоднозначность с помощью распределенной утилиты avrprog от Atmel вместе с их программным обеспечением AVRstudio .

Основные характеристики

Основные особенности AVRDUDE:

  • Пользовательский интерфейс, управляемый из командной строки, для всех загрузок и функции загрузки (включая обработку байтов предохранителей) для упрощения автоматизация e. грамм. путем включения в Makefiles.
  • Интерактивный просмотр и модификация различной памяти регионы в так называемом терминальном режиме . Также предлагается возможность изменения рабочих параметров Atmel STK500 плата (целевое напряжение, VAref, основная тактовая частота).
  • Работает на всех основных операционных системах в стиле POSIX, а также на платформах Win32. Используя существующие драйверы операционной системы в системах в стиле POSIX, безопасный доступ через параллельный порт без привилегий root может поддерживаться.На платформах Win32 доступ к параллельному порту требует предыдущей установки драйвера (giveio.sys), который предоставляет пользователю прямой доступ к регистры ввода-вывода.
  • Поддерживает широкий спектр аппаратного обеспечения для программирования от дешевых интернет-провайдеров. штекеры, которые подключают интерфейс ISP AVR напрямую к параллельный порт компьютера (без дополнительных схем) или последовательный порт (требуется некоторая дополнительная схема), более продвинутый Адаптеры ISP, использующие микросхему буфера / драйвера (например, 74HC373), до (более сложные) программисты с последовательным подключением, такие как AVR910 Устройства ISP, плата Atmel STK500 и Atmel JTAG ICE mkII.Самые популярные адаптеры заранее определены, добавить новый адаптер параллельного порта так же просто как редактирование файла конфигурации (перекомпиляция не требуется).
  • Поддерживает Intel Hex, Motorola S-Record и необработанные двоичные файлы для ввода и вывода, а также для непосредственного содержимого памяти спецификация в командной строке (полезна, например, для fuse байтов). При вводе формат файла может быть определен автоматически.
  • В «терминальном режиме» области памяти устройства могут быть осмотрел и, возможно, доработал.Это позволяет устанавливать предохранители. интерактивно или для изменения нескольких ячеек EEPROM.

Как получить помощь или сообщить об ошибках

Чтобы получить поддержку AVRDUDE или связаться с другими пользователями этот инструмент, см. avr-chat список рассылки.

Люди, которые хотят внести свой вклад в проект, могут подписаться на avrdude-dev список рассылки и свяжитесь с командой разработчиков там.

Если вы уверены, что нашли ошибку в AVRDUDE, вы можете открыть ошибку отчет.

Документации разработчиков для AVRDUDE пока не так много. Есть уголок разработчиков с несколько случайных статей. Дополнительная информация доступна на частном сайте Брайана.


Последнее изменение: Пт, 8 января, 09:14:46 CET 2010 Учебное пособие по

AVR — AVRDUDE

Хорошо, теперь у вас есть целевая плата и программист. Затем вы будете использовать программное обеспечение, которое вы установили на шаге 2, чтобы поговорить с чипом. Это программное обеспечение очень мощное, но его также сложно использовать с первого раза.Однако вам следует проявить настойчивость, и через несколько раз им станет (легче) пользоваться.

комментариев? Предложения? Напишите на форум!

Avrdude — это программа командной строки, поэтому вам придется вводить все команды (позже вы узнаете, как сократить это с помощью Makefile)

Менее Windows, вам нужно открыть командное окно, выбрать Run … из меню «Пуск», ввести cmd и нажать OK .

В MacOS X вы можете использовать программу Terminal для вызова интерфейса командной строки, находящегося в папке Utilities

Теперь в новом окне терминала введите в avrdude этот ответ, который в основном представляет собой простой список того, что может делать avrdude …

Вариантов много, рассмотрим быстро. Не пытайтесь запомнить их, просто почувствуйте, что некоторые из них могут делать.

  • : Это просто для того, чтобы сообщить, какой микроконтроллер он программирует. Например, если вы программируете ATtiny2313, используйте attiny2313 в качестве номера детали
  • .
  • -b : это для отмены последовательной скорости передачи для программистов, таких как STK500. Не используйте этот переключатель, значение по умолчанию правильное.
  • -B : это изменение битрейта, то есть того, насколько быстро программист общается с чипом. Если ваш чип тактируется очень медленно, вам нужно говорить с ним медленно, чтобы он не отставал.Об этом поговорим позже, пока не используйте.
  • -C : файл конфигурации сообщает avrdude обо всех различных способах общения с программистом. Это файл конфигурации по умолчанию, поэтому давайте просто воспользуемся им: не используйте этот командный переключатель
  • -c : здесь мы указываем тип программатора, если вы используете STK500, используйте stk500, если вы используете программатор DT006, используйте dt006 и т. Д.
  • -D: Запрещает стирать чип перед программированием.Мы этого не хотим, поэтому не используйте этот командный переключатель.
  • -P <порт>: это коммуникационный порт, используемый для общения с программистом. Это может быть COM1 для последовательного порта или LPT1 для параллельного порта или USB для USB.
  • -F: Это отменяет проверку подписи, чтобы убедиться, что чип, который, по вашему мнению, вы программируете, таковым. Настоятельно рекомендуется этот тест, поскольку он проверяет соединение, поэтому не используйте этот переключатель.
  • -e: стирает чип, как правило, мы не используем его, потому что мы автоматически стираем флэш-память перед программированием.
  • Хорошо, это важная команда. Это тот, который на самом деле занимается программированием. — это либо flash, либо eeprom (или hfuse, lfuse или efuse для предохранителей конфигурации микросхемы, но мы не собираемся связываться с ними). r | w | v означает, что вы можете использовать r (чтение), w (запись) или v (проверка) в качестве команды. — это файл, в который вы хотите писать или читать. и [: format] означает необязательный флаг формата. Мы всегда будем использовать формат Intel Hex, поэтому используйте i
    . Так, например.Если вы хотите записать файл test.hex во флэш-память, вы должны использовать -U flash: w: test.hex: i. Если вы хотите прочитать память eeprom в файл «eedump.hex», вы должны использовать -U eeprom: r: eedump.hex: i
  • -n: Это означает, что вы на самом деле ничего не пишете, это хорошо, если вы хотите убедиться, что не отправляете никаких других команд, которые могут повредить чип, что-то вроде «предохранителя».
  • -V: отключает автоматическую проверку при записи. Мы хотим проверить, когда мы записываем во флеш-память, поэтому не используйте это.
  • -u: Если вы хотите изменить биты предохранителя, используйте этот переключатель, чтобы указать, что вы действительно это имеете в виду.
  • -t: это «терминальный» режим, в котором вы можете вводить команды подряд. Не используйте это, это сбивает с толку новичков.
  • -E: Здесь перечислены некоторые спецификации программиста, не используйте его.
  • -v: Это дает вам «подробный» вывод … на случай, если вы хотите что-то отладить. Если вы хотите, вы можете использовать его, но в целом мы не будем.
  • -q: Противоположно указанному выше, производит меньше продукции.В общем, мы не будем его использовать, но, возможно, через некоторое время вы захотите.

Те, которые вы будете использовать 99% времени, выделены красным. Рассмотрим их подробнее

Чтобы получить список поддерживаемых программистов, введите avrdude -c asdf ( asdf — это просто чушь, чтобы заставить его выплюнуть список программистов) Вот мой результат, ваш может немного отличаться. Не пытайтесь запоминать его, просто просмотрите список.

C: \> avrdude -c asdf

avrdude: не удается найти идентификатор программиста «asdf»

Действительные программисты:
dasa3 = последовательный порт, сброс =! dtr sck = rts mosi = txd miso = cts [C: \ WinAVR \ bin \ avrdude.conf: 763]
dasa = последовательный порт, сброс = rts sck = dtr mosi = txd miso = cts [C: \ WinAVR \ bin \ avrdude.conf: 750]
siprog = Lancos SI-Prog [C: \ WinAVR \ bin \ avrdude.conf: 737]
ponyser = design ponyprog serial, reset =! txd sck = rts mosi = dtr miso = cts [C: \ WinAVR \ bin \ avrdude.conf: 724]
frank-stk200 = Франк STK200 [C: \ WinAVR \ bin \ avrdude.conf: 689]
blaster = Altera ByteBlaster [C: \ WinAVR \ bin \ avrdude.conf: 676]
ere-isp-avr = ERE ISP-AVR [C: \ WinAVR \ bin \ avrdude.conf: 666]
atisp = Программный кабель AT-ISP V1.1 для AVR-SDK1 из [C: \ WinAVR \ bin \ avrdude.conf: 656]
dapa = Прямой кабель параллельного доступа AVR [C: \ WinAVR \ bin \ avrdude.conf: 645]
xil = JTAG-кабель Xilinx [C: \ WinAVR \ bin \ avrdude.conf: 632]
futurlec = Кабель для программирования Futurlec.com.[C: \ WinAVR \ bin \ avrdude.conf: 615]
abcmini = ABCmini Board, также известный как Dick Smith HOTCHIP [C: \ WinAVR \ bin \ avrdude.conf: 605]
picoweb = Кабель для программирования Picoweb, http://www.picoweb.net/ [C: \ WinAVR \ bin \ avrdude.conf: 595]
sp12 = Программист Стива Болта [C: \ WinAVR \ bin \ avrdude.conf: 584]
alf = Nightshade ALF-PgmAVR, http://nightshade.homeip.net/ [C: \ WinAVR \ bin \ avrdude.conf: 568]
bascom = Кабель для программирования Bascom SAMPLE [C: \ WinAVR \ bin \ avrdude.conf: 558]
dt006 = Dontronics DT006 [C: \ WinAVR \ bin \ avrdude.conf: 548]
pony-stk200 = Pony Prog STK200 [C: \ WinAVR \ bin \ avrdude.conf: 536]
stk200 = STK200 [C: \ WinAVR \ bin \ avrdude.conf: 520]
bsd = Программист Брайана Дина, http://www.bsdhome.com/avrdude/ [C: \ WinAVR \ bin \ avrdude.conf: 509]
pavr = Программатор последовательного порта pAVR Джейсона Кайла [C: \ WinAVR \ bin \ avrdude.conf: 501]
dragon_dw = Atmel AVR Dragon в режиме debugWire [C: \ WinAVR \ bin \ avrdude.conf: 494]
dragon_hvsp = Atmel AVR Dragon в режиме HVSP [C: \ WinAVR \ bin \ avrdude.conf: 486]
dragon_pp = Atmel AVR Дракон в режиме PP [C: \ WinAVR \ bin \ avrdude.conf: 478]
dragon_isp = Atmel AVR Dragon в режиме ISP [C: \ WinAVR \ bin \ avrdude.conf: 470]
dragon_jtag = Atmel AVR Dragon в режиме JTAG [C: \ WinAVR \ bin \ avrdude.conf: 462]
jtag2dw = Atmel JTAG ICE mkII в режиме debugWire [C: \ WinAVR \ bin \ avrdude.conf: 454]
jtag2isp = Atmel JTAG ICE mkII в режиме ISP [C: \ WinAVR \ bin \ avrdude.conf: 446]
jtag2 = Atmel JTAG ICE mkII [C: \ WinAVR \ bin \ avrdude.conf: 438]
jtag2fast = Atmel JTAG ICE mkII [C: \ WinAVR \ bin \ avrdude.conf: 430]
jtag2slow = Atmel JTAG ICE mkII [C: \ WinAVR \ bin \ avrdude.conf: 422]
jtagmkII = Atmel JTAG ICE mkII [C: \ WinAVR \ bin \ avrdude.conf: 414]
jtag1slow = Atmel JTAG ICE (mkI) [C: \ WinAVR \ bin \ avrdude.conf: 407]
jtag1 = Atmel JTAG ICE (mkI) [C: \ WinAVR \ bin \ avrdude.conf: 399]
jtagmkI = Atmel JTAG ICE (mkI) [C: \ WinAVR \ bin \ avrdude.conf: 391]
avr911 = Atmel AppNote AVR911 AVROSP [C: \ WinAVR \ bin \ avrdude.conf: 385]
avr109 = Загрузчик Atmel AppNote AVR109 [C: \ WinAVR \ bin \ avrdude.conf: 379]
Butterfly = Плата разработки Atmel Butterfly [C: \ WinAVR \ bin \ avrdude.conf: 373]
usbtiny = USBtiny простой USB-программатор [C: \ WinAVR \ bin \ avrdude.conf: 367]
usbasp = USBasp, http: // www.fischl.de/usbasp/ [C: \ WinAVR \ bin \ avrdude.conf: 361]
avr910 = Низкозатратный последовательный программатор Atmel [C: \ WinAVR \ bin \ avrdude.conf: 355]
stk500hvsp = Atmel STK500 V2 в режиме последовательного программирования высокого напряжения [C: \ WinAVR \ bin \ avrdude.conf: 349]
stk500pp = Atmel STK500 V2 в режиме параллельного программирования [C: \ WinAVR \ bin \ avrdude.conf: 343]
stk500v2 = Прошивка Atmel STK500 версии 2.x [C: \ WinAVR \ bin \ avrdude.conf: 337]
stk500v1 = Atmel STK500 версии 1.x прошивка [C: \ WinAVR \ bin \ avrdude.conf: 331]
stk500 = Atmel STK500 [C: \ WinAVR \ bin \ avrdude.conf: 325]
avrisp2 = Atmel AVR ISP mkII [C: \ WinAVR \ bin \ avrdude.conf: 315]
avrispmkII = Atmel AVR ISP mkII [C: \ WinAVR \ bin \ avrdude.conf: 309]
avrispv2 = Atmel AVR ISP V2 [C: \ WinAVR \ bin \ avrdude.conf: 303]
avrisp = Интернет-провайдер Atmel AVR [C: \ WinAVR \ bin \ avrdude.conf: 297]

Вы заметите, что здесь перечислены упомянутые ранее программисты, в том числе avrisp , avrispv2 , stk500 , dragon , dasa / dasa3 / ponyser (программаторы последовательного порта bitbanging), dapa / dt006 / stk200 (программаторы битбэнгинга параллельного порта)

Найдите имя программиста, которого вы используете, и примите его близко к сердцу!

Чтобы получить список частей, поддерживаемых avrdude, введите avrdude -c avrisp (не имеет значения, если вы не используете программатор avrisp) без номера детали в командной строке.Не запоминайте этот список, просто просмотрите его, чтобы получить представление о поддерживаемых микросхемах.

C: \> avrdude -c avrisp
avrdude: Часть AVR не указана, используйте «-p Part»

Допустимые части:
m6450 = ATMEGA6450 [C: \ WinAVR \ bin \ avrdude.conf: 10974]
m3250 = ATMEGA3250 [C: \ WinAVR \ bin \ avrdude.conf: 10785]
m645 = ATMEGA645 [C: \ WinAVR \ bin \ avrdude.conf: 10596]
m325 = ATMEGA325 [C: \ WinAVR \ bin \ avrdude.conf: 10407]
usb1287 = AT90USB1287 [C: \ WinAVR \ bin \ avrdude.conf: 10219]
usb1286 = AT90USB1286 [C: \ WinAVR \ bin \ avrdude.conf: 10030]
usb647 = AT90USB647 [C: \ WinAVR \ bin \ avrdude.conf: 9841]
usb646 = AT90USB646 [C: \ WinAVR \ bin \ avrdude.conf: 9651]
t84 = ATtiny84 [C: \ WinAVR \ bin \ avrdude.conf: 9468]
t44 = ATtiny44 [C: \ WinAVR \ bin \ avrdude.conf: 9286]
t24 = ATtiny24 [C: \ WinAVR \ bin \ avrdude.conf: 9104]
m2561 = ATMEGA2561 [C: \ WinAVR \ bin \ avrdude.conf: 8911]
m2560 = ATMEGA2560 [C: \ WinAVR \ bin \ avrdude.conf: 8718]
m1281 = ATMEGA1281 [C: \ WinAVR \ bin \ avrdude.conf: 8530]
m1280 = ATMEGA1280 [C: \ WinAVR \ bin \ avrdude.conf: 8341]
m640 = ATMEGA640 [C: \ WinAVR \ bin \ avrdude.conf: 8153]
t85 = ATtiny85 [C: \ WinAVR \ bin \ avrdude.conf: 7972]
t45 = ATtiny45 [C: \ WinAVR \ bin \ avrdude.conf: 7793]
t25 = ATtiny25 [C: \ WinAVR \ bin \ avrdude.conf: 7613]
pwm3 = AT90PWM3 [C: \ WinAVR \ bin \ avrdude.conf: 7431]
pwm2 = AT90PWM2 [C: \ WinAVR \ bin \ avrdude.conf: 7247]
t2313 = ATtiny2313 [C: \ WinAVR \ bin \ avrdude.conf: 7060]
m168 = ATMEGA168 [C: \ WinAVR \ bin \ avrdude.conf: 6872]
m88 = ATMEGA88 [C: \ WinAVR \ bin \ avrdude.conf: 6686]
m48 = ATMEGA48 [C: \ WinAVR \ bin \ avrdude.conf: 6499]
t861 = ATTINY861 [C: \ WinAVR \ bin \ avrdude.conf: 6311]
t461 = ATTINY461 [C: \ WinAVR \ bin \ avrdude.conf: 6122]
t261 = ATTINY261 [C: \ WinAVR \ bin \ avrdude.conf: 5933]
t26 = ATTINY26 [C: \ WinAVR \ bin \ avrdude.conf: 5776]
m8535 = ATMEGA8535 [C: \ WinAVR \ bin \ avrdude.conf: 5618]
m8515 = ATMEGA8515 [C: \ WinAVR \ bin \ avrdude.conf: 5460]
m8 = ATMEGA8 [C: \ WinAVR \ bin \ avrdude.conf: 5300]
m161 = ATMEGA161 [C: \ WinAVR \ bin \ avrdude.conf: 5160]
m32 = ATMEGA32 [C: \ WinAVR \ bin \ avrdude.conf: 4985]
m6490 = ATMEGA6490 [C: \ WinAVR \ bin \ avrdude.conf: 4792]
m649 = ATMEGA649 [C: \ WinAVR \ bin \ avrdude.conf: 4607]
m3290 = ATMEGA3290 [C: \ WinAVR \ bin \ avrdude.conf: 4424]
m329 = ATMEGA329 [C: \ WinAVR \ bin \ avrdude.conf: 4239]
m169 = ATMEGA169 [C: \ WinAVR \ bin \ avrdude.conf: 4059]
m163 = ATMEGA163 [C: \ WinAVR \ bin \ avrdude.conf: 3916]
m162 = ATMEGA162 [C: \ WinAVR \ bin \ avrdude.conf: 3720]
m644 = ATMEGA644 [C: \ WinAVR \ bin \ avrdude.conf: 3530]
m324 = ATMEGA324 [C: \ WinAVR \ bin \ avrdude.conf: 3338]
m164 = ATMEGA164 [C: \ WinAVR \ bin \ avrdude.conf: 3146]
m16 = ATMEGA16 [C: \ WinAVR \ bin \ avrdude.conf: 2968]
c128 = AT90CAN128 [C: \ WinAVR \ bin \ avrdude.conf: 2777]
m128 = ATMEGA128 [C: \ WinAVR \ bin \ avrdude.conf: 2599]
m64 = ​​ATMEGA64 [C: \ WinAVR \ bin \ avrdude.conf: 2418]
m103 = ATMEGA103 [C: \ WinAVR \ bin \ avrdude.conf: 2278]
8535 = AT90S8535 [C: \ WinAVR \ bin \ avrdude.conf: 2157]
8515 = AT90S8515 [C: \ WinAVR \ bin \ avrdude.conf: 2043]
4434 = AT90S4434 [C: \ WinAVR \ bin \ avrdude.conf: 1960]
4433 = AT90S4433 [C: \ WinAVR \ bin \ avrdude.conf: 1836]
2343 = AT90S2343 [C: \ WinAVR \ bin \ avrdude.conf: 1712]
2333 = AT90S2333 [C: \ WinAVR \ bin \ avrdude.conf: 1627]
2313 = AT90S2313 [C: \ WinAVR \ bin \ avrdude.conf: 1514]
4414 = AT90S4414 [C: \ WinAVR \ bin \ avrdude.conf: 1401]
1200 = AT90S1200 [C: \ WinAVR \ bin \ avrdude.conf: 1286]
t15 = ATtiny15 [C: \ WinAVR \ bin \ avrdude.conf: 1153]
t13 = ATtiny13 [C: \ WinAVR \ bin \ avrdude.conf: 980]
t12 = ATtiny12 [C: \ WinAVR \ bin \ avrdude.conf: 847]
t11 = ATtiny11 [C: \ WinAVR \ bin \ avrdude.conf: 783]

Это все микросхемы, о которых знает avrdude . Почти все они программируются ISP.

Берегитесь : t2313 и 2313 , m8 и m88 , c128 и m128 и т. Д. Выглядят очень похоже, но на самом деле это совершенно разные микросхемы! По этой причине я предлагаю вам ввести имя чипа, то есть вместо t2313 используйте attiny2313 или m8 используйте atmega8 .Avrdude достаточно умен, чтобы понять, что вы имеете в виду, если наберете полное имя.

Мы собираемся использовать ATtiny2313 , поэтому используйте номер детали attiny2313 или ( t2313 )

Дважды проверьте, какой чип вы используете, посмотрев на верхнюю часть чипа, там написано ATTINY2313 и ATMEGA8 (соответственно), -20PI и -16PC — это просто рейтинги скорости и описания пакетов, поэтому пока их игнорируйте.

Этот переключатель сообщает avrdude, где искать программиста.Если вы используете устройство, подключенное через USB, вы можете просто использовать -P usb или не использовать его. Программист автоматически знает, когда программист является устройством USB.

Если вы используете программатор параллельного или последовательного порта, вы должны использовать эту опцию, чтобы указать, к какому порту подключен программатор. В 99% случаев это lpt1 (параллельный) или com1 (последовательный), но вы всегда можете проверить его, заглянув в диспетчер устройств . Откройте панель управления System Properties

Щелкните Device Manager и откройте подменю Ports .

Перечислены все последовательные и параллельные порты. Может быть несколько COM-портов, но обычно есть только один параллельный (принтерный) порт.

Для компьютеров Mac нет параллельных портов. Однако, если вы используете USB-последовательный адаптер (который позволяет использовать STK500 или AVRISP v1 с Mac), вам необходимо указать последовательный порт. Я еще не знаю надежного способа, но способ, которым я это делаю, — это Терминал . Я набираю ls -l /dev/cu.* , и он выплевывает кучу вещей (я испортил экран захвата, перед этим изображением есть другое окно, но просто игнорируйте это)

/ дев / куб.Bluetooth — это встроенный модуль Bluetooth, не используйте его. /dev/cu.modem — это модем (если он есть), не используйте его. Вы ищете что-то вроде /dev/cu.usbserial или /dev/cu.KeySerial1 или что-то подобное. В данном случае это /dev/cu.usbserial-FTCTYG5U

Хорошо, мы подошли к важной части. Именно здесь мы на самом деле рассказываем avrdude , как поместить данные в чип.Это довольно сложная команда, но мы ее разберем.

— может быть flash , eeprom, hfuse (high fuse), lfuse (low предохранитель) или efuse (расширенный предохранитель)
r | w | v — может быть r (чтение), w (запись), v (проверка)
<имя файла> — входной (запись или проверка) или выходной файл (чтение)
[: формат] — необязательно, формат файла.Вы можете оставить это значение для записи, но для чтения используйте i для Intel Hex (преобладающий стандарт)

Например:

  • Чтобы записать файл с именем firmware.hex во флэш-память, используйте команду: -U flash: w: firmware.hex
  • Чтобы проверить файл с именем mydata.eep из eeprom, используйте команду -U eeprom: v: mydata.eep
  • Чтобы прочитать низкий предохранитель в файл, используйте команду -U lfuse: r: lfusefile.шестнадцатеричный: i

Хорошо, хватит этого трепа. Пришло время запрограммировать прошивку в микросхему!

Подготовьте свою целевую плату AVR, в этом примере мы будем использовать attiny2313 , но, конечно, вам следует заменить чип, который вы используете (в этом случае код, вероятно, ничего не сделает). Убедитесь, что устройство работает от батарей, от сетевой розетки или от программатора, если программист может это сделать.

Загрузите файл test_leds.шестнадцатеричный файл и поместите его в C: \ (Windows) или в свой домашний каталог (Mac)

Выясните, какой программатор вы используете и к какому порту он подключен (в этом примере я буду использовать usbtinyisp, но все в порядке). Поскольку usbtinyisp — это программатор USB, я могу оставить -P выключатель.

введите avrdude -c usbtiny -p attiny2313 -U flash: w: test_leds.hex

  • Если вы используете параллельный битовый программатор DT006 (например, MiniPOV2), вы, вероятно, захотите использовать такую ​​команду, как avrdude -c dt006 -P lpt1 -p attiny2313 -U flash: w: test_leds.шестнадцатеричный
  • Если вы используете последовательный битбэнг-программатор DASA (например, MiniPOV3), вы, вероятно, захотите использовать такую ​​команду, как avrdude -c dasa -P com1 -p attiny2313 -U flash: w: test_leds.hex
  • Если вы используете программатор STK500 devboard, вы, вероятно, захотите использовать такую ​​команду, как avrdude -c stk500 -P com1 -p attiny2313 -U flash: w: test_leds.hex
  • Если вы используете USB-программатор AVRISP v2, вы, вероятно, захотите использовать такую ​​команду, как avrdude -c avrispv2 -p attiny2313 -U flash: w: test_leds.шестнадцатеричный
  • и т.д …

Avrdude должен выполнить следующие шаги:

  1. Инициализация программатора (вы не увидите этого, если он работает)
  2. Инициализация устройства AVR и проверка его готовности к работе с инструкциями
  3. Чтение подписи устройства ( 0x1e910a ), которая подтверждает, что микросхема, указанная в командной строке ( attiny2313 ), на самом деле является микросхемой, к которой подключен программист
  4. Стирание чипа
  5. Чтение файла и проверка его правильности
  6. Пишем флеш
  7. Проверка вспышки

Fuse memory — это отдельный фрагмент флеш-памяти, в который не записывается при обновлении прошивки.Вместо этого 3 предохранителя, как правило, устанавливаются один раз (хотя их можно устанавливать сколько угодно раз). Предохранители определяют такие вещи, как тактовая частота, тип кристалла, включен ли JTAG, каков уровень пониженного напряжения (минимальное напряжение) и т. Д. Для получения дополнительной информации о предохранителях вы можете прочитать о них здесь.

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

Для программирования предохранителей используйте:

avrdude -c usbtiny -p attiny2313 -U lfuse: w :: m
avrdude -c usbtiny -p attiny2313 -U hfuse: w :: m
avrdude -c usbtiny -p attiny2313 -U efuse: w :: m

Где <0xHH> — желаемое значение предохранителя в шестнадцатеричном формате.Например, чтобы установить предохранитель высокого уровня на 0xDA:

avrdude -c usbtiny -p attiny2313 -U hfuse: w: 0xDA: m

Неправильная установка предохранителей может «заглушить» микросхему — например, вы можете отключить программирование в будущем или сделать так, чтобы микросхема ожидала внешний кристалл, когда его нет. По этой причине я предлагаю трижды проверить номиналы предохранителей. Затем проверьте еще раз, убедитесь, что вы не отключаете программирование ISP или контакт сброса или не устанавливаете тактовую частоту на 32 кГц.Затем еще раз убедитесь, что у вас есть правильный чип для расчета. Тогда, наконец, вы можете попробовать записать их в чип!

Помните: после того, как вы установите предохранители, вам не нужно устанавливать их заново

Если программатор неправильно подключен к микросхеме, вы получите следующее сообщение: инициализация не удалась, rc = -1 Дважды проверьте соединения и попробуйте еще раз, или используйте -F для отмены этой проверки

Это означает, что программист не смог поговорить с микросхемой.Если вы используете «простой» программатор, такой как программатор bitbang последовательного или параллельного порта, это может означать, что программист виноват. В противном случае это обычно означает, что программист в порядке, но не может найти чип.

Убедитесь, что микросхема запитана, правильно подключена к розетке или программатору, кабели для программирования подключены правильно, разъем подключен правильно и т. Д. В 99% случаев это проблема с проводкой.

Просто ради удовольствия попробуйте выполнить эту команду avrdude -c usbtiny -p atmega8 -U flash: w: test_leds.шестнадцатеричный

Вы увидите, что он останавливается на шаге 2, как только подпись отличается от ожидаемой, он останавливается. Это связано с тем, что код, скомпилированный для attiny2313 , не будет работать на atmega8 (это верно для большинства микроконтроллеров, файлы .hex не являются перекрестно совместимыми)

Цифровые порты ввода / вывода

на AVR

8-разрядные микроконтроллеры

AVR® управляют приложениями через свои цифровые входы и выходы (I / O). Эти контакты могут контролировать любое напряжение, присутствующее на входе с высоким импедансом, и ток питания или потребителя в качестве цифрового выхода высокого или низкого напряжения.Эти контакты обычно объединяются в группы по восемь и называются портами. AVR использует алфавит для именования этих портов, например: PortA, PortB и т. Д. Контакты PortA обозначаются как PA0 — PA7.

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

Штыревой драйвер достаточно надежен, чтобы напрямую управлять светодиодными дисплеями. Все выводы портов имеют индивидуально выбираемые подтягивающие резисторы с постоянным сопротивлением напряжения питания. Все контакты ввода / вывода имеют защитные диоды как для VCC, так и для заземления, как показано на рисунке.

Каждый порт состоит из трех регистров:

  • DDRx — Регистр направления данных
  • PORTx — регистр вывода вывода
  • PINx — регистр ввода вывода

, где x = имя порта (A, B, C или D)

Эти регистры определяют настройку цифровых входов и выходов.Контакты ввода / вывода также могут использоваться совместно с внутренними периферийными устройствами. Например, аналого-цифровой (АЦП) преобразователь может быть подключен к выводу ввода-вывода вместо цифрового вывода. В этом случае регистры контактов ввода / вывода устанавливают его как трехпозиционный вход с высоким импедансом.

  • Биты DDxn доступны по адресу ввода-вывода DDRx
  • бит PORTxn по адресу ввода / вывода PORTx
  • битов PINxn по адресу ввода / вывода PINx

Где n = номер штыря в регистре порта

DDxn

Биты DDxn в регистре DDRx выбирают направление этого вывода.Если DDxn записывается в «1», Pxn конфигурируется как выходной контакт. Если DDxn записывается в ‘0’, Pxn конфигурируется как входной вывод.

ПОРТxn

Биты PORTxn в регистре PORTx имеют две функции. Они могут управлять выходным состоянием вывода и настройкой входного вывода.

В качестве вывода:
Если в бит записана «1», когда вывод настроен как вывод вывода, вывод порта переводится в высокий уровень. Если в бит записан «0», когда вывод сконфигурирован как вывод, вывод порта переводится в низкий уровень.

Как вход:
Если в бит записана «1», когда контакт настроен как входной, активируется подтягивающий резистор. Если в бит записан «0», когда вывод сконфигурирован как входной вывод, вывод порта является тройным.

PINxn

Биты PINxn в регистре PINx используются для чтения данных с вывода порта. Когда вывод настроен как цифровой вход (в регистре DDRx) и включен подтягивающий сигнал (в регистре PORTx), бит будет указывать состояние сигнала на выводе (высокий или низкий).
Примечание: Если порт сделан выходным, то чтение регистра PINx даст вам данные, которые были записаны на контакты порта.

В качестве входа с тремя состояниями:
Когда регистр PORTx отключает подтягивающий резистор, вход становится тройным, оставляя контакт слева в свободном состоянии. В этом состоянии даже небольшой статический заряд на окружающих объектах может изменить логическое состояние вывода. Если вы попытаетесь прочитать соответствующий бит в регистре вывода, его состояние невозможно предсказать.

Все выводы PORTA установлены как входы с включенными подтягиваниями, а затем считываются данные из PORTA:

  DDRA = 0x00; // делаем ПОРТУ всех входов
ПОРТА = 0xFF; // разрешаем все подтягивания
data = PINA; // считываем выводы PORTA в переменные данные 
 

PORTB настроен на три состояния входов:

  DDRB = 0x00; // делаем PORTB все входы
PORTB = 0x00; // отключаем подтягивания и переводим все контакты в трехуровневое состояние 
 

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

  DDRA = 0x0F; // вывод более низких выводов, ввод более высоких выводов
ПОРТА = 0xF0; // выходные контакты установлены на 0, входные контакты позволяют подтягивать 
 
Доступен пример проекта

, управляющий выводом ввода / вывода вместе с простой отладкой.

Проект цифрового ввода-вывода

на AVR Xplained 328PB

Пример проекта, упомянутый в видео

[| Пример ввода / вывода со ссылкой на видео]]

Переключение между входом и выходом

При переключении между трехсостоянием ({DDxn, PORTxn} = 0b00) и высоким выходом ({DDxn, PORTxn} = 0b11) , промежуточное состояние с включенным подтягиванием {DDxn, PORTxn} = 0b01 ) или выходной низкий ({DDxn, PORTxn} = 0b10) должно произойти.

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

Переключение между входом с подтягиванием и низким выходом создает ту же проблему. В качестве промежуточного шага необходимо использовать либо трехуровневое состояние
({DDxn, PORTxn} = 0b00) , либо состояние высокого уровня вывода ({DDxn, PORTxn} = 0b11) .

Отключить отмену подтягиваний

Бит PUD Pull-up Disable в регистре MCUCR может отменять настройки DDRx и PORTx .

Когда этот бит записан в единицу, подтягивания в портах ввода / вывода отключаются, даже если регистры DDxn и PORTxn настроены на включение подтягиваний ({DDxn, PORTxn} = 0b01) .

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

Запись «1» в PINxn переключает значение PORTxn независимо от значения DDRxn.Инструкцию по сборке SBI можно использовать для переключения одного единственного бита в порту.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *