Skocz do zawartości

[C] Przerwanie od przepełnienia, Atmega128


Marcin_56

Pomocna odpowiedź

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) {
}

}
Link do komentarza
Share on other sites

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ł.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.