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