Skocz do zawartości

ATmega324P [c] problem z przerwaniem


sarnecki

Pomocna odpowiedź

Cześć, mam problem z ustawieniem przerwania od przepełnienia Timer2 na ATmedze324P.

Rejestry ustawiłem zgodnie z datasheetem jednak licznik nie kręci. Sprawdzałem w debugerze i także nie działa.


void ustawienia_TIMERA2(void){
TCCR2B |= (1<<CS20);
TIMSK2 |= (1<<TOIE0);
TCNT2=0;
sei();
}

ISR(TIMER2_OVF_vect)
{
PORTA^=0xff;
}

Link do komentarza
Share on other sites

Cześć, Po pierwsze ustaw jakis preskaler, bo jeśli przerwanie będzie sie odbywać to z taką czestotliwością, że nawet jej nie zobaczysz chyba, że masz oscyloskop. Jeśli chcesz ustawic przerwanie od przepełnienia:

*tak jak wczesniej napisałem, ustaw preskaler;

*wpisz w rejestr TCNT2 jakąs liczbe(to zalezy od tego z jaką czestotliwością ma odbywac sie przerwanie

*ustaw bit od przepełnienia na wartośc 1 (chyba TOIE lub TOV sprawdz w Datasheet)

*w obsłudze przerwania musisz przepisywać wartość rejestru TCNT2 taką wartością jak podczas koniguracji.

Link do komentarza
Share on other sites

"..bo jeśli przerwanie będzie sie odbywać to z taką czestotliwością, że nawet jej nie zobaczysz.."

Operację zmiany polaryzacji pinów portu A można wykryć nawet woltomierzem. Zamiast stałego 0 lub 5V będzie tam 2.5V jeśli "wypełnienie" będzie ok. 50%

"ustaw preskaler"

Czy prescaler = 1 jest wg Ciebie ustawiony czy nie? Timer z pewnością chodzi, bo zegar dostaje - jest to warunek wystarczający.

"wpisz w rejestr TCNT2 jakąs liczbe"

Po co? Być może pomyliło Ci się z rejestrem OCR2 - tam wpisana liczba rzeczywiście definiuje okres zliczania. Wpisywanie wartości początkowej do licznika jest eleganckie, bo nie wydłuża pierwszego okresu ale w tym przykładzie jest to bez znaczenia.

"w obsłudze przerwania musisz przepisywać wartość rejestru TCNT2 taką wartością jak podczas koniguracji"

Chyba, że ktoś oczekuje okresu zliczania = 256 a w tym prostym przykładzie właśnie tak mogło być.

Spróbuj dawać bardziej konstruktywne rady zamiast opisywać odstępstwa od podręcznikowych przykładów.

Sarnecki, nie pokazałeś całego kodu. Moim zdaniem timer pracuje poprawnie bo załączyłeś mu zegar. Miałeś trochę szczęścia bo używasz bitu z timera 0 - TOIE0, ale jest on na tej samej pozycji co poprawny TOIE2. Używasz operacji |= na rejestrach timera. Może coś wcześniej już tam nawpisywałeś i zostały śmiecie? W szczególności myślę tu o rejestrze ASSR. Czy PORTA jest wyjściem? Czy gdziekolwiek wołasz funkcję ustawienia_TIMERA2()? Pokazuj cały kod który może mieć wpływ na działanie a nie tylko ten, który Tobie się wydaje, że jest niepoprawny.

Link do komentarza
Share on other sites

O ile mnie pamięc nie myli, to osoba pisząca post, prosiła o ustawienie przerwania od przepełnienia, a nie od przerwania w trybie CTC. Po zamieszczonym kodzie pomyslałem, że osoba chciała podłączyc pod cały port diody i patrzeć jak będa migać. Dlatego przekazałem o ustawieniu rejestru TCNT2, oraz ustawieniu preksalera aby mozna było organolepytcznie stwierdzić, że przerwanie działa i diody migają 😋. W przerwaniach typu CTC uzywa sie OCR2, więc nic mi sie nie pomyliło i że te rady mogą pomóc, pod warunkiem, że nikt nie będzie się czepiał co do ich "konstruktywności" 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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

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.