Přerušení časovačem na AtMega

Martin Záruba swz na volny.cz
Úterý Říjen 10 19:52:17 CEST 2023


Nastavil jsem

   TCCR1A = 0;// Vynulování registru TCCR1A
   TCCR1B = 0;// Vynulování registru TCCR1B
   // Nastavení režimu Fast PWM (TOP = ICR1)
   TCCR1A |= (1<< WGM11);
   TCCR1B |= (1<< WGM13)| (1<< WGM12);
   // Nastavení hodinového děliče na 64 (frekvence časovače = frekvence 
CPU / 64)
   TCCR1B |= (1<< CS11)| (1<< CS10);
   // Nastavení intervalu pro generování přerušení (100 us) - pro 
frekvenci CPU 16 MHz
   // ICR1 = (F_CPU / (časový interval * hodinový dělič)) - 1
   ICR1 = 24;// 100 us při frekvenci CPU 16 MHz a hodinovém děliči 64
   // Povolení přerušení od časovače Timer/Counter1
   TIMSK1 |= (1<< TOIE1);
a rutina přerušení je zatím zcela triviální
ISR(TIMER1_OVF_vect){
cli();// Vypnutí globálních přerušení
  PORTA=0;
  PORTA=0xFF;
sei();// Zapnutí globálních přerušení
}
Na všech bitech portu A jsou krásné obdélnikové pulzy. Ale perioda 
vyvolání pulzů je sice cca 100uS ale chaoticky kolísá. Co dělám blbě?

-- 

Martin Záruba
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20231010/00371c66/attachment.htm>


Další informace o konferenci Hw-list