Skocz do zawartości

[C] Przerwanie od przepełnienia, Atmega128


Pomocna odpowiedź

Napisano

Cześć,

mam problem z wywołaniem przerwania od przepełnienia w atmedze128.

atmega jest taktowana 16MHz.

Chciałbym osiągnąć częstotliwość pętli, która wynosi 100Hz i użyć preskalera równego 256.

Napisałem taki oto kod, i nie jestem pewny czy faktycznie wszystko jest ok. Chciałbym poprosić o zerknięcie i zweryfikowanie 😉

#include <avr/io.h>
#include <avr/interrupt.h> //obsluga przerwan

ISR(TIMER1_COMPA_vect) {
PORTB ^= (1<<PB1);
OCR1A = 624;
}

int main(void)
{
DDRB |= (1<<PB1);

       sei(); //Globalne uruchomienie przerwan

       TCCR1B |= (1 << WGM12); //tryb ctc
TIMSK |= (1 << OCIE1A); //zezwolenie na przerwanie
TCCR1B |= (1 << CS12); //preskaler 256
OCR1A = 624;

while(1) {
}

}

Tak, to będzie generować zmianę na pinie PB1 100 razy na sekundę, czyli wytworzy sygnał o częstotliwości 50Hz.

Zaopatrz się co najmniej w jakiś analizator stanów logicznych, to będziesz mógł to zweryfikować. Klony Saleae na allegro kosztują jakieś 40zł.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...