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