Режим работы таймера - (Fast PWM)ШИМ. Прерывание по сравнению/переполнению.
В этом режиме инкреметирования счетного регистра идет до OCR0A(или 0xFF - в зависимости от WGM02). Затем происходит сброс до минимума(0x00). Затем инкрементация повторяется.
Прерывание по сравнению генерируется при достижении счетчиком значения OCR0B, по переполнению - при достижении максимального значения. Так же присутствуют устойчивые состояния.
А.В. Евстифеев, стр 243.
- Код: выделить все
/мк ATtiny2313
#include <avr/io.h>
#include <avr/interrupt.h>
//Быстрый ШИМ (Fast PWM)
SIGNAL(SIG_OVERFLOW0) //прерывание по переполнению
{
PORTA ^= 0x01;
}
SIGNAL (SIG_OUTPUT_COMPARE0B) //сравнение
{
PORTD ^= 0b01000000;
}
SIGNAL (SIG_OUTPUT_COMPARE0A) //сравнение
{
}
int main(void)
{
PORTA = 0b11111111;
DDRA = 0b00000000;
PORTB = 0b00000000;
DDRB = 0b11111111;
PORTD = 0b10011111;
DDRD = 0b01100000; //D5 - выход OCR0B
//Быстрый ШИМ (Fast PWM)
TCCR0A = 0b00110011; //7,6 и 5,4 биты отвечают за выходы OC0A и OC0B
//01 влияет только на OC0A
//10 неинвертированный ШИМ сигнал
//11 инвертированный ШИМ сигнал
//TCCR0B = 0b00000111;
TCCR0B = 0b00001111;
OCR0A = 80; //Прерывание по переполнению при достижении OCR0A
OCR0B = 40;
//TIMSK = 0b00000010;//Переполнение
//TIMSK = 0b00000101;//Сравнение
sei();
while(1)
{
PORTB = TCNT0;
}
}