RE: Přerušení časovačem na AtMega
Ondra
ebastlir na seznam.cz
Úterý Říjen 10 20:13:41 CEST 2023
A nemusíš to icr1 nastavovat znovu v přerušení ?
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Martin Záruba
Sent: Tuesday, October 10, 2023 7:52 PM
To: Martin Zaruba
Subject: Přerušení časovačem na AtMega
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/6d937658/attachment-0001.htm>
Další informace o konferenci Hw-list