Микроконтроллеры семейства AVR фирмы Atmel
Счёт начинается со
значения BOTTOM и заканчивается значением TOP. После этого счётчик
перезапускается (снова устанавливается значение BOTTOM). Значение TOP равно
0xFF при WGM2:0 = 3.
Если же WGM2:0 = 7,
значение TOP определяется содержимым регистра OCR0A. В режиме неинвертирующего
выхода сигнал совпадения (OC0x) сбрасывается в момент совпадения значений TCNT0
иOCR0xи перехода к BOTTOM.
В инвертирующем режиме
сигнал на выходе устанавливается в момент совпадения и перехода в BOTTOM.
Благодаря тому, что счётчик работает всегда только в одном направлении, частота
сигнала в режиме fast PWM может быть в два раза выше, чем в режиме phasecorrect
PWM, который использует пилообразный сигнал с двумя наклонами.
Благодаря высокой
частоте выходного сигнала режим fast PWM хорошо подходит для создания систем
регулировки мощности, для построения выпрямителей и цифро-аналоговых
преобразователей. Высокая частота позволяет применять внешние компоненты
(катушки, конденсаторы) небольших размеров, и тем самым, уменьшать общую
стоимость системы.
В режиме fast PWM
значение счётчика увеличивается до тех пор, пока не достигнет значения TOP. В
следующем цикле тактового сигнала таймера счётчик очищается.
Флаг переполнения
таймера/счётчика (TOV0) устанавливается каждый раз, когда счётчик достигает
значения TOP. Если прерывание разрешено, то вызывается процедура обработки
прерывания, которая может быть использована для обновления уровня совпадения.
В режиме fast PWM модуль
совпадения используется для генерации сигнала ШИМ на выходах OC0x. Установка
битов COM0x1:0 = 2 произведёт к генерации на выходе неинвертированного сигнала
ШИМ. Для генерации инвертированного сигнала ШИМ необходимо установить COM0x1:0
= 3. При установке битов COM0A1:0 = 1сигнал на выходе AC0A в момент совпадения
переключается в противоположное состояние при условии, что бит WGM02 = 1.
Эта опция не доступна
для выхода OC0B. Фактическое значение OC0x поступит на внешний контакт
микросхемы только в том случае, если он будет сконфигурирован как выход.
Сигнал ШИМ формируется
путём установки (сброса) регистра OC0x в момент совпадения значений OCR0xи
TCNT0, и сброса (установки) этого регистра в первом тактовом цикле, после
перезагрузки счётчика (изменении его значения с TOP на BOTTOM). Частота сигнала
ШИМ на выходе может быть рассчитана при помощи следующего выражения:
.
Переменная N
представляет собой коэффициент предварительного деления (1, 8, 64, 256 или
1024). Отдельно нужно рассмотреть несколько случаев при генерации сигнала ШИМ,
когда в регистр OCR0Aзаписывается значение, близкое к предельному.
Если в регистре
OCR0Aбудет установлено значение, равное BOTTOM, то выходной сигнал будет
представлять собой короткий выброс для каждого MAX + 1тактового импульса
таймера.
Если в регистр
OCR0Aзаписать значение MAX, то это приведёт к тому, что на выходе будет
постоянно присутствовать либо высокий, либо низкий логический уровень (в
зависимости от значения битов COM0A1:0).
Частота выходного
сигнала в режиме fast PWM (при уровне регулирования 50%) может быть достигнута,
если заставить регистр OC0x переключать свой логический уровень при каждом
совпадении (COM0x1:0 = 1).
Сформированный таким
образом сигнал будет иметь максимальную частоту fOC0 = fclk_I/O/2 в том случае,
когда в регистре OCR0A записан ноль. Эта особенность позволяет переключать
регистр OCR0A таким же образом, как в режиме СТС, но при этом использовать все
преимущества двойной буферизации, которая применяется в режиме fast PWM.
5.15 ШИМ, корректный по
фазе (PhaseCorrectPWM)
Режим
phase correct PWM (WGM02:0 = 1или
5). Формирование
сигнала ШИМ происходит с большим коэффициентом пересчёта и корректного по фазе.
Корректность по фазе обеспечивается благодаря работе счётчика в режиме
пилообразного сигнала с двухсторонним наклоном.
Счётчик периодически
изменяет направление своего счёта. Сначала он считает от BOTTOM до TOP, затем
направление счёта меняется, и счётчик считает TOP до BOTTOM. Затем направление
пересчёта снова меняется, и всё повторяется сначала.
Значение TOP равно 0xFF
при WGM2:0 = 1 и определяется регистром OCR0Aпри WGM2:0 = 5.
В режиме
неинвертирующего вывода сигнал на выходе OCR0x сбрасывается в ноль в момент
совпадения содержимого регистров TCNT0 и OCR0x, если счётчик работает в прямом
направлении (на увеличение). Значение устанавливается в единицу в момент
совпадения, если счётчик работает на уменьшение.
В режиме
инвертированного вывода картина меняется на противоположную. Режим
двухстороннего наклона характеризуется более низкой максимальной частотой
выходного сигнала по сравнению с предыдущим случаем, где применяется пила с
односторонним наклоном. Благодаря симметричности по фазе при двустороннем
наклоне такие режимы предпочитаются при создании систем управления
электродвигателями.
В режиме phase correct PWM
значение счётчика увеличивается, пока не достигнет значения TOP. Когда значение
счётчика достигает TOP, направление счёта изменяется. Содержимое TCNT0 будет
равно TOP в течение одного периода тактового сигнала таймера. Флаг переполнения
таймера/счётчика (TOV0) устанавливается каждый раз, когда счётчик достигает
значения BOTTOM. Флаг прерывания может использоваться для генерации запроса на
прерывание. Такое прерывание будет вызвано каждый раз, когда содержимое
счётчика достигнет значения BOTTOM.
В режиме phasecorrect PWM
модуль совпадения используется для генерации сигнала ШИМ на выходе OC0x. При
установке битов COM0x1:0 = 3. Установка битов COM0A0 = 1заставляет сигнал на
выходе OC0A инвертироваться каждый раз в момент совпадения, если бит WGM02
установлен. Эта опция не доступна для вывода OC0B. Фактическое значение OC0x
поступает на внешний вывод порта только в том случае, если он сконфигурирован
как выход.
Сигнал ШИМ
сгенерируется путём сброса (установки) OC0xв момент совпадения содержимого
регистров OCR0xи TCNT0, когда счётчик работает на увеличение, и устанавливается
(сбрасывается) в момент совпадения, если счётчик работает на уменьшение.
Частота выходного сигнала ШИМ в режиме phase correct PWM может быть вычислена
по следующей формуле:
,
Где переменная N
представляет собой коэффициент предварительного деления (1, 8, 64, 256, 1024).
Крайние значения
содержимого регистра OCR0A при генерации сигналов ШИМ в режиме phase correct PWM
представляют собой специальные случаи. Для неинвертирующего режима при записи в
регистр OCR0Aзначения BOTTOM на выходе установиться низкий логический уровень.
При записи в OCR0Aзначения MAX на выходе установится логическая единица. Для
инвертирующего режима сигнал на выходе будет иметь противоположные значения.
6. Описание системы
команды
6.1 Система команд. Общие
сведения о системе команд
В семействе AVR система
команд у микроконтроллеров разных типов содержат от 89 до 130 команд. У
микроконтроллеров типа 2323, 2343, 2313, 4433, 8515 и 8535 в систему команд
входят 118 команд. Эту систему команд будем называть базой.
В табл. 2.1 – 2.13
описаны операции, выполняемые по командам базовой системы, и приведены мнемокоды
команд, используемые при разработке программы на языке AVR Ассемблера. В
таблицах дана сквозная нумерация команд, используемая далее в тексте.
Базовая система команд
содержит:
▪ 33 команды
регистровых операций, при выполнении которых используются только регистры
общего назначения (команды №№ 1-33);
▪ 26 команд с
обращением по адресу в адресном пространстве SRAM (команды №№ 34-59);
▪ 2 команды с
обращением к регистрам ввода-вывода (команды №№ 60 и 61);
▪ 1 команда с
обращением к FlashROM (команда № 62);
▪ 22 команды
операций с битами в разрядах регистров общего назначения и регистров
ввода-вывода (команды №№ 63-84);
▪ 34 команды
управления ходом программы (команды №№ 85-118).
В систему команд
микроконтроллеров типа t11, t12, t15, 1200, и t28, у которых нет SRAM, не
входят команды с обращением по адресу в адресном пространстве SRAM за
исключением команд с мнемокодами LDRd, Z (№ 40) и STZ, Rr (№ 41), по которым
производится обращение к регистрам общего назначения и регистрам ввода-вывода с
использованием косвенной адресации. В систему команд у этих микроконтроллеров
не входят также 2 команды регистровых операций (№№ 32 и 33) и две команды
управления ходом программы (№№ 86 и 88). У микроконтроллеров типа 1200 в
систему команд не входит также команда с обращением к FlashROM, а у
микроконтроллера типа m163, кроме того, с наличием аппаратного умножителя.
Таблица 2
№ |
Операция |
Мнемокод команды |
Признаки результата |
H |
S |
V |
N |
Z |
C |
1 |
$00→Rd
((Rd) (Rd) →Rd)
|
CKR Rd |
|
0 |
0 |
0 |
1 |
|
2 |
(Rd) →
Rd((Rd)^( Rd) → Rd) |
TST Rd |
|
+ |
0 |
+ |
+ |
|
3 |
(Rd)
→ Rd($FF-( Rd) → Rd)
|
COM Rd |
|
+ |
0 |
+ |
+ |
1 |
4 |
- (Rd) → Rd($00-( Rd) →
Rd) |
NEG Rd |
+ |
+ |
+ |
+ |
+ |
+ |
5 |
(Rd)+1→ Rd |
INC Rd |
|
+ |
+ |
+ |
+ |
|
6 |
(Rd)-1→ Rd |
DEC Rd |
|
+ |
+ |
+ |
+ |
|
7 |
0→( Rd) →C |
LSR Rd |
|
+ |
+ |
0 |
+ |
+ |
8 |
C←( Rd) ←0 |
LSL Rd |
+ |
+ |
+ |
+ |
+ |
+ |
9 |
C→( Rd) →C |
ROR Rd |
|
+ |
+ |
+ |
+ |
+ |
10 |
C←( Rd) ←C |
ROL Rd |
+ |
+ |
+ |
+ |
+ |
+ |
11 |
Rd.7→( Rd.6- Rd.0) →C |
ASR Rd |
|
+ |
+ |
+ |
+ |
+ |
12 |
Rd.4-7↔ Rd.0-3 |
SWAP Rd |
|
|
|
|
|
|
13 |
(Rr) → Rd |
MOV Rd, Rr |
|
|
|
|
|
|
14 |
(Rd)+(Rr) → Rd |
ADD Rd, Rr |
+ |
+ |
+ |
+ |
+ |
+ |
15 |
(Rd)+(Rr)+C→ Rd |
ADC Rd, Rr |
+ |
+ |
+ |
+ |
+ |
+ |
16 |
(Rd)-(Rr) → Rd |
SUB Rd, Rr |
+ |
+ |
+ |
+ |
+ |
+ |
17 |
(Rd)-(Rr)-C→ Rd |
SBC Rd, Rr |
+ |
+ |
+ |
+ |
+ |
+ |
18 |
(Rd)-(Rr) |
CP Rd, Rr |
+ |
+ |
+ |
+ |
+ |
+ |
19 |
(Rd)-(Rr)-C |
CPC Rd, Rr |
+ |
+ |
+ |
+ |
+ |
+ |
20 |
(Rd) ^(Rr) → Rd |
AND Rd, Rr |
|
+ |
0 |
+ |
+ |
+ |
21 |
(Rd)˅(Rr)
→ Rd |
OR Rd, Rr |
|
+ |
0 |
+ |
+ |
|
22 |
(Rd) (Rr)
→ Rd
|
EOR Rd, Rr |
|
+ |
0 |
+ |
+ |
|
|
d=0-31; r=0-31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 3
№ |
Операция |
Мнемокод команды |
Признаки результата |
H |
S |
V |
N |
Z |
C |
23 |
$FF→ Rd |
SER Rd |
|
|
|
|
|
|
24 |
K→ Rd |
LDI Rd, K |
|
|
|
|
|
|
25 |
(Rd)-K→ Rd |
SUBI Rd, K |
+ |
+ |
+ |
+ |
+ |
+ |
26 |
(Rd)-K-C→ Rd |
SBCI Rd, K |
+ |
+ |
+ |
+ |
+ |
+ |
27 |
(Rd)-K |
CPI Rd, K |
+ |
+ |
+ |
+ |
+ |
+ |
28 |
(Rd) ^K→ Rd |
ANDI Rd, K |
|
+ |
0 |
+ |
+ |
|
29 |
(Rd)
^K→ Rd
|
CBR Rd, K |
|
+ |
0 |
+ |
+ |
|
30 |
(Rd) ˅K→
Rd |
ORI Rd, K |
|
+ |
0 |
+ |
+ |
|
31 |
(Rd) ˅K→
Rd |
SBR Rd, K |
|
+ |
0 |
+ |
+ |
|
d=16-31(!); K=0-255 |
Страницы: 1, 2, 3
|