Таймер в микроконтроллере AVR

Пример 10. Fast PWM. Compare/Overflow.

Сообщение EgorovAD MEPhI » 22 фев 2012, 22:32

Пример 10. Fast PWM. Compare/Overflow.

Режим работы таймера - (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;
   }
}
EgorovAD MEPhI
Администратор
 
Сообщений: 155
Зарегистрирован: 04 ноя 2011, 11:49

Пред.

Вернуться в Микроконтроллеры - Дополнительный материал

Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 0