Timer/Counter0 (Таймер/счётчик0) в ATtiny2313. Режимы работы.
Номер режима | WGM02 | WGM01 | WGM00 | Режим работы таймера/счётчика T0 | Модуль счёта (TOP) | Обновление регистров OCR0A/ OCR0B | Момент установки флага TOV0 |
0 | 0 | 0 | Normal | $FF | Немедленно | $FF | |
1 | 0 | 0 | 1 | Phase Correct PWM | $FF | При TOP | $00 |
2 | 0 | 1 | 0 | CTC | OCR0A | Немедленно | $FF |
3 | 0 | 1 | 1 | Fast PWM | $FF | При TOP | $FF |
4 | 1 | 0 | 0 | — | — | — | — |
5 | 1 | 0 | 1 | Phase Correct PWM | OCR0A | При TOP | $00 |
6 | 1 | 1 | 0 | — | — | — | — |
7 | 1 | 1 | 1 | Fast PWM | OCR0A | При TOP | TOP |
Режим Normal
Это самый простой режим работы таймера/счётчика. В нём он работает как обычный счётчик. По каждому импульсу тактового сигнала clkT0 счётный регистр увеличивает своё значение на единицу.
При переходе через максимально возможное значение (255 в десятичной или 0xFF в шестандцатеричной системах) возникает переполнение счётного регистра TCNT0 и счёт начинается с 0.
В том же такте, что и обнуление, устанавливается 1 во флаге прерывания по переполнению.
Если глобально разрешены прерывания (бит I в регистре SREG) и прерывание по переполнению таймера/счётчика T0 (бит TOIE0 в регистре TIMSK), то генерируется прерывание, то есть вызывается соответствующая подпрограмма.
При совпадении счётного регистра TCNT0 и регистров сравнения OCR0A или OCR0B устанавливается соответствующий флаг прерывания OCF0A или OCF0B, а при разрешённых прерываниях вообще (бит I в регистре SREG) и прерывании по событию «Совпадение» (биты OCIE0A и OCIE0B регистра TIMSK) запускается подпрограмма-обработчик соответствующего прерывания.
Также при совпадении счётного регистра TCNT0 и регистров сравнения OCR0A/OCR0B может изменятья состоянии выводов OC0A/OC0B. Характер этого изменение определяется битами COM0A1/COM0B1 и COM0A0/COM0B0 регистра управления TCCR0A.
COM0A1 (COM0B1) | COM0A0 (COM0B0) | Описание |
0 | 0 | Нормальная работа вывода. Вывод OC0A (OC0B) отключен от таймера/счётчика T0. |
0 | 1 | Инвертировать состояние вывода. |
1 | 0 | Сбросить при совпадении в 0. |
1 | 1 | Установить 1 при совпадении. |
Если необходимо, состояни выводов OC0A/OC0B можно изменить принудительно установкой 1 в биты FOC0A/FOC0B регистра управления TCCR0B. Прерывание при этом не генерируется.
Режим CTC (сброс при совпадении)
Вэтом режиме счётный регистр также работает как обычный счётчик, где по каждому импульсу тактового сигнала clkT0 счётный регистр увеличивает своё значение на единицу. Однако сбрасывается он при достижении значения, записанного в регистре сравнения OCR0A, в этом же такте установится флаг OCF0A и при разрешённых глобально прерываниях (бит I в регистре SREG) и разрешённом прерывании по событию «Совпадение» таймера/счётчика T0 (бит OCIE0A регистра TIMSK) генерируется прерывание.
Одновременно с установкой флага может изменяться состояние выводов OC0A/OC0B микроконтроллера, что определяется битами COM0A1/COM0B1 и COM0A0/COM0B0 регистра управления TCCR0A.
COM0A1 (COM0B1) | COM0A0 (COM0B0) | Описание |
0 | 0 | Нормальная работа вывода. Вывод OC0A (OC0B) отключен от таймера/счётчика T0. |
0 | 1 | Инвертировать состояние вывода. |
1 | 0 | Сбросить при совпадении в 0. |
1 | 1 | Установить 1 при совпадении. |
Режим Fast PWM
В режиме Fast PWM (Быстродействующий ШИМ) микроконтроллер может генерировать сигнал высокой частоты с широтно-импульсной модуляцией.
Вэтом режиме счётный регистр также работает как обычный счётчик, где по каждому импульсу тактового сигнала clkT0 счётный регистр увеличивает своё значение на единицу.
При переходе через максимально возможное значение (0xFF при WGM02=0 или заданное регистром OCR0A при WGM02=1) возникает переполнение счётного регистра TCNT0, устанавливается флаг прерывания по переполнению TOV0 регистра TIFR и счёт начинается с 0.
При равенстве содержимого счётного регистра и регистра сравнения OCR0A/OCR0B устанавливается флаг прерывания по событию «Совпадение» OCF0A/OCF0B.
Также может изменяться состояние выводов OC0A/OC0B микроконтроллера, что определяется битами COM0A1/COM0B1 и COM0A0/COM0B0 регистра управления TCCR0A.
COM0A1 (COM0B1) | COM0A0 (COM0B0) | Описание |
0 | 0 | Нормальная работа вывода. Вывод OC0A (OC0B) отключен от таймера/счётчика T0. |
0 | 1 | OC0A: WGM02 = 0 — Вывод OC0A отключен от таймера/счётчика T0. WGM02 = 1 — Инвертирование состояния вывода. OC0B: — |
1 | 0 | Сбрасывается при совпадении в 0. Устанавливается в 1 при достижении счётчиком максимального значения (неинвертированный ШИМ сигнал). |
1 | 1 | Устанавливается 1 при совпадении. Сбрасывается в 0 при достижении счётчиком максимального значения (инвертированный ШИМ сигнал). |
Режим Phase Correct PWM
Режим Phase Correct PWM (ШИМ с точной фазой) так же как и Fast PWM предназначен для генерации ШИМ сигнала. Однако в этом режиме счётный регистр функцианирует как реверсивный счётчик — сначала от считает от нулевого значения до максимального, а затем обратно до нулевого. В связи с этим максимальная частота сигнала в этов режиме в 2 раза меньше, чем в Fast PWM.
В зависимости от бита WGM02 максимальное значение равно 255 ($FF), либо задаётся регистром OCR0A.
При достижении счётчиком минимального значения устанавливается флаг прерывания по переполнению TOV0 (регистр TIFR). При равенстве счётного регистра и регистра сравнения OCR0A/OCR0B устанавливается флаг OCF0A/OCF0B и, в зависимости от битов COM0A1/COM0B1 и COM0A0/COM0B0 (регистр TCCR0A), может изменяться состояние вывода OC0A/OC0B.
COM0A1 (COM0B1) | COM0A0 (COM0B0) | Описание |
0 | 0 | Нормальная работа вывода. Вывод OC0A (OC0B) отключен от таймера/счётчика T0. |
0 | 1 | OC0A: WGM02 = 0 — Вывод OC0A отключен от таймера/счётчика T0. WGM02 = 1 — Инвертирование состояния вывода. OC0B: — |
1 | 0 | Сбрасывается в 0 при прямом счёте. Устанавливается в 1 при обратном счёте. |
1 | 1 | Устанавливается 1 при прямом счёте. Сбрасывается в 0 при обратном счёте. |
Занятие №8. Реализация ШИМ — Микроконтроллеры и Технологии
Под режимом работы 16-разр. таймера понимается его алгоритм счета и поведение связанного с ним выхода формирователя импульсов, что определяется комбинацией бит, задающих режим работы таймера (WGMn3-0) и режим формирования выходного сигнала (COMnx1:0). При этом биты задания режима формирования выходного сигнала не влияют на алгоритм счета, т.к. алгоритм счета зависит только от состояния бит задания режима работы таймера. В режимах с ШИМ биты COMnx1:0 позволяют включить/отключить инверсию на генерируемом ШИМ-выходе (т.е. выбрать ШИМ с инверсией или ШИМ без инверсии). Для режимов без ШИМ биты COMnx1:0 определяют, какое действие необходимо выполнить при возникновении совпадения: сбросить, установить или инвертировать выход (см. также “Блок формирования выходного сигнала” и «Временные диаграммы 16-разр. таймеров-счетчиков»).
Нормальный режим работы
Самым простым режимом работы является нормальный режим (WGMn3-0 = 0b0000). В данном режиме счетчик работает как суммирующий (инкрементирующий), при этом сброс счетчика не выполняется. Переполнение счетчика происходит при переходе через максимальное 16-разр. значение (0xFFFF) к нижнему пределу счета (0x0000). В нормальном режиме работы флаг переполнения таймера-счетчика TOVn будет установлен на том же такте синхронизации, когда TCNTn примет нулевое значение.
Фактически, флаг переполнения TOVn является 17-ым битом таймера-счетчика за тем исключением, что он только устанавливается и не сбрасывается. Однако программно это свойство может быть использовано для повышения разрешающей способности таймера, если использовать прерывание по переполнению таймера, при возникновении которого флаг TOVn сбрасывается автоматически. Для нормального режима работы не существует каких-либо особых ситуаций, поэтому запись нового состояния счетчика может быть выполнена в любой момент.
В нормальном режиме можно использовать блок захвата. Однако при этом следует соблюдать, чтобы максимальный интервал времени между возникновениями внешних событий не превысил периода переполнения счетчика. Если такое условие не соблюдается, необходимо использовать прерывание по переполнению таймера-счетчика или предделитель.
Блок сравнения может использоваться для генерации прерываний. Не рекомендуется использовать выход OCnx для генерации сигналов в нормальном режиме работы, т.к. в этом случае будет затрачена значительная часть процессорного времени.
Режим сброса таймера при совпадении (СТС)
В режиме СТС (WGM01, WGM00 =0b10) регистр OCR0 используется для задания разрешающей способности счетчика. Если задан режим CTC и значение счетчика (TCNT0) совпадает со значением регистра OCR0, то счетчик обнуляется (TCNT0=0). Таким образом, OCR0 задает вершину счета счетчика, а, следовательно, и его разрешающую способность. В данном режиме обеспечивается более широкий диапазон регулировки частоты генерируемых прямоугольных импульсов. Он также упрощает работу счетчика внешних событий.
В режиме сброса таймера при совпадении (WGMn3-0 = 0b0100 или 0b1100) разрешающая способность таймера задается регистрами OCRnA или ICRn. В режиме СТС происходит сброс счетчика (TCNTn), если его значение совпадает со значением регистра OCRnA (WGMn3-0 = 0b0100) или с ICRn (WGMn3-0 = 0b1100). Значение регистра OCRnA или ICRn определяет верхний предел счета, а, следовательно, и разрешающую способность таймера. В данном режиме обеспечивается более широкий диапазон регулировки частоты генерируемых прямоугольных импульсов. Он также упрощает работу счетчика внешних событий. Временная диаграмма работы таймера в режиме СТС показана на рисунке 1. Счетчик (TCNTn) инкрементирует свое состояние до тех пор, пока не возникнет совпадение со значением OCRnA или ICRn, а затем счетчик (TCNTn) сбрасывается.
Рисунок 1 – Временная диаграмма для режима СТС
По достижении верхнего предела счета может генерироваться прерывание с помощью флагов OCFnA или ICFn, соответствующим используемым регистрам для задания верхнего предела счета. Если прерывание разрешено, то процедура обработки прерывания может использоваться для обновления верхнего предела счета. Однако, задание значения вершины счета близкого к значению нижнего предела счета, когда счетчик работает без предделения или с малым значением предделения, необходимо выполнять с особой осторожностью, т.к. в режиме СТС нет двойной буферизации. Если значение, записанное в OCRnA или ICRn, меньше текущего значения TCNTn, то сброс счетчика по условию совпадения наступит, когда он достигнет максимального значения (0xFFFF), затем перейдет в исходное состояние 0x0000 и достигнет нового значения OCRnA или ICRn. Во многих случаях возникновение такой ситуации не желательно. В качестве альтернативы может выступить режим быстрой ШИМ, где регистр OCRnA определяет верхний предел счета (WGMn3-0 = 0b1111), т.к. в этом случае OCRnA имеет двойную буферизацию.
Для генерации сигнала в режиме CTC выход OCnA может использоваться для изменения логического уровня при каждом совпадении, для чего необходимо задать режим переключения (COMnA1, COMnA0 = 0b01). Значение OCnA будет присутствовать на выводе порта, только если для данного вывода задано выходное направление. Максимальная частота генерируемого сигнала равна fOC0 = fclk_I/O/2, если OCRnA = 0x0000. Для других значений OCRn частоту генерируемого сигнала можно определить по формуле:
где переменная N задает коэффициент деления предделителя (1, 8, 32, 64, 128, 256 или 1024).
Также как и для нормального режима работы, флаг TOV0 устанавливается на том же такте таймера, когда его значение изменяется с 0xFFFF на 0x0000.
Режим быстрой ШИМ (FAST PWM)
Режим быстрой широтно-импульсной модуляции (ШИМ) (WGMn3-0 = 0b0101, 0b0110, 0b0111, 0b1110, 0b1111) предназначен для генерации ШИМ-импульсов повышенной частоты. В отличие от других режимов работы в этом используется однонаправленная работа счетчика. Счет выполняется в направлении от нижнего к верхнему пределу счета.
Если задан неинвертирующий режим выхода, то при совпадении TCNTn и OCRnx сигнал OCnx устанавливается, а на верхнем пределе счета сбрасывается. Если задан инвертирующий режим, то выход OCnx сбрасывается при совпадении и устанавливается на верхнем пределе счета. За счет однонаправленности счета, рабочая частота для данного режима в два раза выше по сравнению с режимом ШИМ с фазовой коррекцией, где используется двунаправленный счет. Возможность генерации высокочастотных ШИМ сигналов делает использование данного режима полезным в задачах стабилизации питания, выпрямления и цифро-аналогового преобразования. Высокая частота, при этом, позволяет использовать внешние элементы физически малых размеров (индуктивности, конденсаторы), тем самым снижая общую стоимость системы.
Разрешающая способность ШИМ может быть фиксированной 8, 9 или 10 разрядов или задаваться регистром ICRn или OCRnA, но не менее 2 разрядов (ICRn или OCRnA = 0x0003) и не более 16 разрядов (ICRn или OCRnA = 0xFFFF). Разрешающая способность ШИМ при заданном значении верхнего предела (ВП) вычисляется следующим образом:
В режиме быстрой ШИМ счетчик инкрементируется до совпадения его значения с одним из фиксированных значений 0x00FF, 0x01FF или 0x03FF (если WGMn3:0 = 0b0101, 0b0110 или 0b0111, соответственно), значением в ICRn (если WGMn3:0 = 0b1110) или значением в OCRnA (если WGMn3:0 = 0b1111), а затем сбрасывается следующим тактом синхронизации таймера. Временная диаграмма для режима быстрой ШИМ представлена на рисунке 2. На рисунке показан режим быстрой ШИМ, когда для задания верхнего предела используется регистр OCRnA или ICRn. Значение TCNTn на временной диаграмме показано в виде графика функции для иллюстрации однонаправленности счета. На диаграмме показаны как инвертированный, так и неинвертированный ШИМ-выходы. Короткой горизонтальной линией показаны точки на графике TCNTn, где совпадают значения OCRnx и TCNTnx. Флаг прерывания OCnx устанавливается при возникновении совпадении.
Рисунок 2 – Временная диаграмма для режима быстрой ШИМ
Флаг переполнения таймера-счетчика (TOVn) устанавливается всякий раз, когда счетчик достигает верхнего предела. Дополнительно тем же тактовым импульсом вместе с флагом TOVn могут установиться флаги OCnA или ICFn, если для задания верхнего предела используется регистр OCRnA или ICRn, соответственно. Если одно из этих прерываний разрешено, то в процедуре обработки прерывания может быть выполнено обновление верхнего предела счета и порогов сравнения.
Если изменяется значение верхнего предела счета, то необходимо соблюдение условия, чтобы записываемое новое значение верхнего предела было больше или равно значений во всех регистрах порога сравнения. В противном случае совпадение между TCNTn и OCRnx никогда не возникнет. Обратите внимание, что при использовании фиксированных значений верхнего предела во время записи в регистры OCRnx происходит маскирование к 0 неиспользуемых разрядов.
Механизм модификации регистра ICRn отличается от OCRnA в том случае, если он используется для задания верхнего предела. Регистр ICRn не имеет двойной буферизации. Это означает, что если в ICRn записывается малое значение во время работы счетчика с малым предделением или без него, то имеется опасность записи в регистр ICRn значения, которое окажется меньше текущего значения TCNTn. Как результат, в такой ситуации будет пропущено совпадение на вершине счета. В этом случае счетчик дойдет до максимального значения (0xFFFF), перезапустится со значения 0x0000, а только затем возникнет совпадение. Регистр OCRnA содержит схему двойной буферизации, поэтому, его можно модифицировать в любой момент времени.
Если выполняется запись по адресу OCRnA, то фактически значение помещается в буферный регистр OCRnA. Если же возникает совпадение между TCNTn и вершиной счета, то следующим тактом синхронизации таймера происходит копирование буферного регистра в регистр порога сравнения OCRnA. Обновление регистра выполняется тем же тактом, что и сброс TCNTn и установка флага TOVn.
Рекомендуется использовать регистр ICRn для задания верхнего предела, если верхний предел счета является константой. В этом случае также освобождается регистр OCRnA для генерации ШИМ-сигнала на выходе OCnA. Однако, если частота ШИМ динамически изменяется (за счет изменения верхнего предела), то в этом случае выгоднее использовать регистр OCRnA для задания верхнего предела, т.к. он поддерживает двойную буферизацию.
В режиме быстрой ШИМ блоки сравнения позволяют генерировать ШИМ-сигналы на выводах OCnx. Если COMnx1:0 =0b10, то задается ШИМ без инверсии выхода, а если COMnx1:0 = 0b11, то задается режим ШИМ с инверсией на выходе (см. таблицу 59). Фактическое значение OCnx можно наблюдать на выводе порта, если для него задано выходное направление (DDR_OCnx). ШИМ-сигнал генерируется путем установки (сброса) регистра OCnx при возникновении совпадения между OCRnx и TCNTn, а также путем сброса (установки) регистра OCnx вместе со сбросом счетчика (переход с верхнего предела на нижний предел).
Частота ШИМ выходного сигнала для заданного значения верхнего предела (ВП) определяется выражением:
где N – переменная, которая задает значение коэффициента предделения (1, 8, 32, 64, 128, 256 или 1024).
Запись предельных значений в регистр OCRnx связана с особыми случаями в генерации ШИМ-импульсов. Если OCRnx установить равным нижнему пределу (0x0000), то на выходе будет возникать короткий импульс каждый (ВП+1)-ый такт синхронизации таймера. Запись в OCRnx значения равного верхнему пределу приведет к установке постоянного уровня лог. 1 или 0 на выходе (зависит от выбранной с помощью бит COMnx1:0 полярности выходного сигнала).
Если требуется генерация меандра (прямоугольные импульсы со скважностью 2 или заполнением 50%) высокой частоты, то необходимо использовать режим быстрой ШИМ с установкой бит COMnA1:0 = 0b01, которая вызывает переключение (инвертирование) логического уровня на выходе OCnA при каждом совпадении. Данное применимо, только если OCRnA используется для задания верхнего предела (WGMn3-0 =0b1111). Максимальная генерируемая частота меандра в этом случае fOCnA = fclk_I/O/2, если OCRnA =0x0000. Данная особенность аналогична переключению OCnA в режиме СТС за исключением двойной буферизации, которая имеется в режиме быстрой ШИМ.
Режим широтно-импульсной модуляции с фазовой коррекцией (Phase Correct)
Режим широтно-импульсной модуляции с фазовой коррекцией (ШИМ ФК) (WGMn3-0 = 0b0001, 0b010, 0b0011, 0b1010 или 0b1011) предназначен для генерации ШИМ сигнала с фазовой коррекцией и высокой разрешающей способностью. Режим ШИМ ФК основан на двунаправленной работе таймера-счетчика. Счетчик циклически выполняет счет в направлении от нижнего предела (0x0000) до верхнего предела, а затем обратно от верхнего предела к нижнему пределу. Если задан неинвертирующий режим выхода формирователя импульсов, то выход OCnx сбрасывается/устанавливается при совпадении значений TCNTn и OCRnx во время прямого/обратного счета. Если задан инвертирующий режим выхода, то, наоборот, во время прямого счета происходит установка, а во время обратного – сброс выхода OCnx. При двунаправленной работе максимальная частота ШИМ-сигнала меньше, чем при однонаправленной работе, однако, за счет такой особенности, как симметричность в режимах ШИМ с двунаправленной работой, данные режимы предпочитают использовать при решении задач управления приводами.
Разрешающая способность ШИМ в данном режиме может быть либо фиксированной (8, 9 или 10 разрядов) либо задаваться с помощью регистра ICRn или OCRnA. Минимальная разрешающая способность равна 2-м разрядам (ICRn или OCRnA = 0x0003), а максимальная -16-ти разрядам (ICRn или OCRnA =0xFFFF). Если задан верхний предел, то разрешающая способность ШИМ в данном режиме определяется следующим образом:
В режиме ШИМ ФК счетчик инкрементируется пока не достигнет одного из фиксированных значений 0x00FF, 0x01FF или 0x03FF (соответственно для WGMn3-0 = 0b0001, 0b0010 или 0b0011), а также значения равного ICRn (если WGMn3-0 = 0b1010) или OCRnA (если WGMn3:0 = 0b1011). Далее, при достижении верхнего предела, счетчик изменяет направление счета. Значение TCNTn остается равным верхнему пределу в течение одного такта синхронизации таймера. Временная диаграмма для режима ШИМ ФК представлена на рисунке 3. На рисунке показан режим ШИМ ФК с использованием регистра OCRnA или ICRn для задания верхнего предела. Состояние TCNTn представлено в виде графика функции для иллюстрации двунаправленности счета. На рисунке представлены, как неинвертированный, так и инвертированный ШИМ-выход. Короткие горизонтальные линии указывают точки на графике изменения TCNTn, где возникает совпадение со значением OCRnx. Флаг прерывания OCnx устанавливается при возникновении совпадения.
Рисунок 3 – Временная диаграмма для режима ШИМ ФК
Флаг переполнения таймера-счетчика (TOVn) устанавливается всякий раз, когда счетчик достигает нижнего предела. Если для задания верхнего предела используется регистр OCRnA или ICRn, то, соответственно устанавливается флаг OCnA или ICFn тем же тактовым импульсом, на котором произошло обновление регистра OCRnx из буферного регистра (на вершине счета). Флаги прерывания могут использоваться для генерации прерывания по достижении счетчиком нижнего или верхнего предела.
При изменении значения верхнего предела счета необходимо следить, чтобы оно было больше или равно значениям во всех регистрах сравнения. В противном случае совпадение между TCNTn и OCRnx никогда не возникнет. Обратите внимание, что при использовании фиксированных значений верхнего предела счета во время записи в регистры OCRnx неиспользуемые разряды обнуляются. Третий период на рисунке 53 иллюстрирует случай, когда динамическое изменение верхнего предела счета приводит к генерации несимметричного импульса. Данная особенность основывается на времени обновления регистра OCRnx. Поскольку, обновление OCRnx возникает на вершине счета, то и период ШИМ начинается и заканчивается на вершине счета. Это подразумевает, что длительность обратного счета определяется предыдущим значением верхнего предела, а прямого – новым значением верхнего предела. Если два этих значения разные, то и длительность прямого и обратного счета будет также отличаться. Различие в длительности приводит несимметричности выходных импульсов.
Если стоит задача изменения верхнего предела при работающем счетчике, то вместо этого режима рекомендуется использовать режим ШИМ ФЧК (фазовая и частотная коррекция). Если используется статическое значение верхнего предела, то между данными режимами практически нет отличий.
В режиме ШИМ ФК блоки сравнения позволяют генерировать ШИМ-сигналы на выводах OCnx. Если установить COMnx1:0 = 0b10, то выход ШИМ будет без инверсии, а если COMnx1:0=0b11, то с инверсией. Фактическое значение OCnx можно наблюдать на выводе порта, если в регистре направления данных для данного вывода порта задано выходное направление (DDR_OCnx). ШИМ-сигнал генерируется путем установки (сброса) регистра OCnx при совпадении значений OCRnx и TCNTn во время прямого счета, а также путем сброса (установки) регистра OCnx при совпадении между OCRnx и TCNTn во время обратного счета. Результирующая частота ШИМ-сигнала в режиме ШИМ ФК при заданном верхнем пределе (ВП) может быть вычислена по следующему выражению:
где N – коэффициент деления предделителя (1, 8, 32, 64, 128, 256 или 1024).
Запись предельных значений в регистр OCRnx связано с особыми случаями в генерации ШИМ-сигналов в режиме ШИМ ФК. Если задать режим ШИМ без инверсии и OCRnx установить равным нижнему пределу, то на выходе непрерывно будет установлен лог. 0, а если равным верхнему пределу, то на выходе постоянно присутствует лог. 1. Для ШИМ с инверсией указанные уровни необходимо заменить противоположными.
Если задать использование OCnA в качестве верхнего предела (WGMn3:0 = 0b1011) и установить COMnA1:0 =0b01, то на выходе OCnA будет генерироваться меандр.
Режим широтно-импульсной модуляции с фазовой и частотной коррекцией (Phase and Frequency Correct)
Режим широтно-импульсной модуляции с фазовой и частотной коррекцией (ШИМ ФЧК) (WGMn3-0 = 0b1000 или 0b1001) предназначен для генерации ШИМ-импульсов высокой разрешающей способности с фазовой и частотной коррекцией. Также как и режим ШИМ ФК режим ШИМ ФЧК основан на двунаправленной работе счетчика. Счетчик циклически считает от нижнего предела (0x0000) до верхнего предела, а затем обратно от верхнего предела к нижнему пределу. Если задан неинвертирующий режим ШИМ, то выход OCnx сбрасывается, если возникает совпадение между TCNTn и OCRnx во время прямого счета, и устанавливается, если возникает совпадение во время обратного счета. В инвертирующем режиме работа инверсная. Двунаправленная работа, по сравнению с однонаправленной, связана с генерацией более низких частот. Однако, благодаря симметричности в режимах ШИМ с двунаправленным счетом, их применение предпочтительно в задачах управления приводами.
Основное отличие между режимами ШИМ ФК и ШИМ ФЧК состоит в моменте обновления регистра OCRnx из буферного регистра OCRnx (см. рисунок 3 и рисунок 4).
Разрешающая способность ШИМ в этом режиме может задаваться с помощью регистра ICRn или OCRnA. Минимальная разрешающая способность равна 2-ум разрядам (ICRn или OCRnA = 0x0003), а максимальная разрешающая способность — 16-ти разрядам (ICRn или OCRnA = 0xFFFF). Разрешающая способность ШИМ в разрядах может быть вычислена по следующему выражению:
В режиме ШИМ ФЧК счетчик инкрементируется до совпадения со значением в ICRn (WGMn3:0 = 0b1000) или в OCRnA (WGMn3:0 = 0b1001). Это означает достижение вершины счета, после чего происходит изменение направления счета. Значение TCNTn остается равным вершине счета в течение одного такта синхронизации таймера. Временная диаграмма для режима ШИМ ФЧК показана на рисунке 54. На рисунке показан режим ШИМ ФЧК, когда вершину счета задает регистр OCRnA или ICRn. Значение TCNTn показано в виде графика функции для иллюстрации двунаправленности счета. На диаграмме показан как неинвертирующий, так и инвертирующий ШИМ выходы. Короткие горизонтальные линии указывают на точки график TCNTn, где возникает совпадение между OCRnx и TCNTn. Флаг прерывания OCnx устанавливается после возникновения совпадения.
Рисунок 4 – Временная диаграмма режима ШИМ с фазовой и частотной коррекцией
Флаг переполнения таймера-счетчика (TOVn) устанавливается тем же тактом, когда произошло обновление регистров значением из буферного регистра (на нижнем пределе счета). Если для задания верхнего предела используется регистр OCRnA или ICRn, то по достижении счетчиком верхнего предела устанавливается флаг OCnA или ICFn, соответственно. Флаги прерывания могут использоваться для генерации прерывания при достижении счетчиком верхнего или нижнего предела.
При изменении верхнего предела необходимо следить, чтобы новое значение было больше или равно значениям во всех регистрах порога сравнения. В противном случае, если задано значение верхнего предела меньше любого из значений регистров порога сравнения, совпадение между TCNTn и OCRnx никогда не наступит.
На рисунке 4 показано, что в отличие от режима ШИМ ФК, генерируемый выходной сигнал симметричен на всех периодах. Поскольку, регистры OCRnx обновляются на нижнем пределе счета, то длительности прямого и обратного счетов всегда равны. В результате выходные импульсы имеют симметричную форму, а, следовательно, и откорректированную частоту.
Использование регистра ICRn для задания верхнего предела рекомендуется, если значение верхнего предела является константой. В этом случае также освобождается регистр OCRnA для широтно-импульсной модуляции импульсов на выводе OCnA. Однако если требуется динамическое изменение частоты ШИМ за счет изменения верхнего предела, то для задания верхнего предела рекомендуется использовать регистр OCRnA за счет наличия у него двойной буферизации.
В режиме ШИМ ФЧК блоки сравнения позволяют генерировать ШИМ-импульсы на выводе OCnx. Если COMnx1:0 = 0b10, то задается неинвертирующий ШИМ выход, а, если COMnx1:0=0b11, то инвертирующий (см. таблицу 60). Значение OCnx будет присутствовать на соответствующем выводе порта только в случае, если для него задано выходное направление. ШИМ сигнал генерируется путем установки (сброса) регистра OCnx при совпадении между OCRnx и TCNTn во время прямого счета и сброса (установки) регистра OCnx при совпадении между OCRnx и TCNTn во время обратного счета. Частота ШИМ в данном режиме при заданном верхнем пределе (ВП) счета определяется следующим образом:
где N – коэффициент деления предделителя (1, 8, 32, 64, 128, 256 или 1024).
Запись предельных значений в регистр OCRnx связана с особыми случаями в генерации ШИМ-сигналов в данном режиме. Если задать OCRnx равным нижнему пределу (0x0000), то в неинвертирующем режиме на выходе будет постоянного присутствовать низкий логический уровень, а при записи значения равного верхнему пределу на выходе будет длительно присутствовать высокий логический уровень. В инвертирующем режиме приведенные уровни будут противоположными.
Если OCRnA используется для задания верхнего предела (WGMn3:0 = 0b1001) и COMnA1:0 = 0b01, то на выходе OCnA будет генерироваться меандр.
Аттини2313 | Хакадей | Страница 5
20 сентября 2011 г., Брайан Бенчофф
Читая на этой неделе сборки на тему ATtiny, [Томас] вспомнил одну из своих самых крутых сборок. В его проекте midi808 использовался ATtiny2313 для синхронизации винтажной драм-машины Roland 808 с его рабочей станцией Logic.
Несмотря на то, что MIDI существовал уже несколько лет, когда производились 808-е, процессор в 808-м не совсем справляется с задачей обработки MIDI. Вместо этого в 808 использовался интерфейс, известный как DIN Sync, который был разработан для синхронизации 808, 707 и 303 друг с другом. Блоки синхронизации MIDI в DIN до действительно существовали, но даже вспомогательное оборудование для использования 808 становится трудно найти.
Сборка принимает MIDI-сигнал и пропускает его через оптоизолятор в соответствии со спецификацией MIDI.
Продолжить чтение «Roland 808 синхронизирован с MIDI» →
Posted in Музыкальные хакиTagged 808, attiny2313, dinsync, midi, roland18 сентября 2011 г., Майк Щис
[Кирилл] написал, чтобы поделиться своим хаком ATtiny, светодиодным кубом 4x4x. 64-светодиодный дисплей — отличный выбор для полного использования оборудования, которое он выбрал. Он мультиплексирован по уровням. Каждый из четырех уровней соединен с общими катодами, коммутируемыми 2Н39.04 транзистор. Аноды управляются двумя регистрами сдвига 595, что обеспечивает в общей сложности 16 адресуемых контактов, что идеально соответствует сетке 4 × 4.
Возможно, вы заметили порт USB на изображении выше. Он служит источником регулируемой мощности вместо собственного оборудования для регулирования напряжения и вообще не используется для передачи данных. Оцените анимации, которые [Кирилл] использует на дисплее, посмотрев видео после перерыва. Там же вы найдете ссылку на исходный код.
Читать далее «ATtiny Hacks: 2313 Управление светодиодным кубом 4x4x4» →
Posted in LED HacksTagged attiny2313, LED куб, сдвиговый регистр6 апреля 2011 г. Майк Щис
Микросхемы AVR удобны тем, что их можно запрограммировать в схеме при их рабочем напряжении. То есть, если вы не испортите настройки предохранителей, и они больше не будут слушать системного программиста. Если вы обнаружите, что столкнулись с этой проблемой, просто соберите эту схему на макетной плате и «разблокируйте», удерживая нажатой кнопку.
Схема, показанная выше, представляет собой высоковольтный последовательный программатор. Это один из двух протоколов высокого напряжения, используемых чипами AVR; HVSP предназначен для микросхем, у которых недостаточно контактов для использования высоковольтного параллельного программирования. В этом исполнении используется источник питания 12 В, что является уровнем, необходимым для метода высокого напряжения. Линейный стабилизатор 7805 обеспечивает рабочее напряжение вместе с одним транзистором, ATtiny2313 для управления схемой, четырехразрядным 7-сегментным дисплеем для обратной связи и одной кнопкой для управления.
Посмотрите видео после перерыва, чтобы увидеть, как ATtiny13 запрограммирован на отключение контакта сброса с помощью макетного программатора. Затем этот чип можно легко спасти, поскольку он автоматически распознается с помощью подписи устройства.
Продолжить чтение «AVR HVSP на крошечной макетной плате» →
30 марта 2011 г., Майк Щис
[Пол] написал, чтобы рассказать нам об этой плате управления светодиодами, над которой он работал с несколькими друзьями. Соавторы были недовольны рейтингом люменов на ватт (или отсутствием рейтинга) для маломощных светодиодов и решили найти лучшее решение. Они взяли мощный ASMT-MT00, в котором все три диода размещены в одном корпусе, со всеми контактами на одной стороне корпуса для поверхностного монтажа, с отводящим тепло язычком на другой стороне, и выдали 30 люмен на ватт. Имея это в руках, они приступили к разработке основной платы для ослепительно яркого света.
Плата имеет радиатор на нижней стороне. Для управления светодиодами [Пол] взял драйвер постоянного тока LM3407. Производитель рекомендует использовать по одному такому чипу для каждого из цветов в светодиодном корпусе. [Пол] построил схему, которая позволяет ему направлять питание вокруг каждого светодиода, заставляя систему работать только с одним драйвером нижнего плеча. Оттуда ATtiny2313 обеспечивает адресное управление по протоколу RS485. Винтовые клеммы на обоих концах печатной платы позволяют соединить ее с другими модулями, и они уже разработали базовую программу PureData, которая сможет обращаться к нескольким платам после их завершения.
4 февраля 2011 г., Майк Щис
Это не совсем хак ввода MIDI; [Furrtek] применил альтернативный входной хак для Kaossilator, который он в настоящее время использует с MIDI-соединением. В своем невзломанном виде Kaossilator представляет собой небольшой инструмент для управления звуком на основе сенсорной панели. [Furrtek] выяснил, как данные тачпада считываются и используются на маленьком устройстве. Затем он выбрал ATtiny2313 в качестве ядра схемы, которая имитирует эти сигналы. Теперь микроконтроллер прослушивает входящие MIDI-данные, ищет правильные преобразования сигналов в таблице, а затем выводит их на Kaossilator.
На видео после перерыва видно, что работает отлично, без лагов и заметных проблем. Как мы упоминали выше, с этим можно было бы сделать гораздо больше. Поскольку ATtiny2313 просто переводит MIDI в сигналы сенсорной панели, ввод может быть любым. Первое, что приходит на ум, — это танцпол, который меняет музыку в зависимости от того, сколько людей ее рвет. Продолжить чтение «MIDI-вход для Kaossilator» →
Posted in Музыкальные хакиTagged attiny2313, kaoscillator, midi, TouchPadПодделка магнитных карт [Крейга] проста и гениальна. Подделка этих карт состоит из двух частей, и он позаботился о них обеих. Первая часть — это получение фактических данных карты. Для этого он разработал плату спуфера с разъемом, который подключается к устройству чтения карт. Вторая часть — это сам спуфинг, который делается с помощью электромагнита. Как и в случае с прошлыми спуферами, он обмотал прокладку магнитной проволокой с эмалированным покрытием. Лезвие старого ножа было выбрано из-за его толщины и ферромагнетизма. Этот магнит управляется ATtiny2313, который хранит данные, и защищен транзистором, управляющим катушкой. В его плате было несколько конструктивных недостатков, но [Крейг] смог получить те же данные дорожки из подделки, что и оригинальная карта, несмотря на то, что светодиод использовался в качестве защитного диода, а «вторичный» резистор на базе транзистора.
22 октября 2010 г., Майк Щис
Evil Mad Scientist Laboratories готовятся к Хэллоуину с этой тыквой в режиме ожидания. Внутри есть светодиод, закрывающий отверстие, просверленное прямо в кожуре овоща, похожего на тыкву. Он появляется и исчезает, как спящий Mac, используя то, что, как мы думаем, является чрезвычайно мощной схемой на основе ATtiny2313 (1 КБ памяти для программирования для этого?). Но нам по-прежнему нравится эта идея, и мы хотели бы увидеть, как ее масштабируют до полной светодиодной матрицы.
Мы привыкли ожидать от EMSL хаков с тыквой, и они нас не разочаровывают. В прошлом году была механизированная версия, а позапрошлым схематический светодиодный символ. Так что насчет твоего творения? Осталась примерно неделя, оглянитесь вокруг и посмотрите, не сможете ли вы создать что-то столь же замечательное, как пирог Саурона.
Posted in домашние хакиTagged attiny2313, злой безумный ученый, реквизит для Хэллоуина, светодиод, mac, тыква, режим ожиданияХирин Шим
- Читать техническое описание ATtiny
- Запрограммируйте плату так, чтобы она что-то делала
Чтение спецификации микроконтроллера
Благодаря моему опыту у меня был некоторый опыт чтения таблицы данных. Хотя я прочитал только несколько страниц таблицы данных, а не 300–400 страниц. Кажется, так сложно прочитать их все. Наш местный преподаватель призвал студентов прочитать хотя бы до страницы 70. И рекомендовал эту книгу. Я только начал смотреть и люблю закончить книгу в ближайшее время!
Чему я научился
Мощность и скорость
Основные сведения изложены на первых трех страницах в разделе «Возможности». Первое, что следует проверить перед включением питания, это проверка рабочего напряжения. Если вы используете недостаточно мощности, он не будет работать, а если вы используете слишком высокое напряжение, это приведет к поломке платы.
Как указано в описании, Attiny 44 работает между 1,8 В и 5,5 В
Теперь мы знаем, что ATtiny44 работает как с 1,8 В, так и с 5,5 В. Тогда кто-то может подумать, что использование более низкого напряжения имеет преимущества, потому что мы можем сэкономить электроэнергию. Но у всего есть плюсы и минусы, чаще говорят обмен . Блок питания рассчитан на скорость. Таким образом, если Attiny44 включен на 1,8, он работает только до 4 МГц. Для 5,5 В скорость увеличивается до 20 МГц. Таким образом, мощность и скорость связаны друг с другом, и разработчик схемы должен учитывать, какие функции (высокая скорость или низкое энергопотребление) необходимы и какие из них более важны.
Ввод/вывод
Следующие данные, на которые мы должны обратить внимание, — это вывод ввода-вывода микроконтроллера. Как следует из его названия, он чем-то управляет с помощью контактов ввода-вывода. Я еще не уверен, что означают некоторые из их названий (например, XTAL, AREF, MOSI и т. д.), но я могу сосредоточиться на основных функциях выводов ввода-вывода для задания на этой неделе. Давайте проверим номер контакта для программирования позже. Как я сделал плату hello-world 2 недели назад, светодиод (выход) подключен к , контакт 7 , а переключатель (вход) подключен к штифт 3 .