Przerwania od przepełnienia timerów ATMega16 - problem

Witam!

Problem tego typu, że po przepełnieniu licznika (T0 lub T1) procesor resetuje się zamiast wykonać instrukcje umieszczone w swojej funkcji. Przerwania od przetwornika ADC działają poprawnie. Oto kawałek programu:

#include <avr/io.h>

#include <avr/pgmspace.h>

#include <stdlib.h>

#include <avr/interrupt.h>

#include <avr/signal.h>

INTERRUPT (SIG_OVERFLOW0) { cbi(TIFR,TOV0); cli(); /* + pare prostych instrukcji */ sei(); }

void Timer0Init() { TCNT0=0; //wartość początkowa timera TCCR0=4; //preskaler CK/256 sbi(TIMSK, TOIE0); // zezwolenie na przerw. od przepełnienia }

void main(void) //program główny { DDRB=0xF1; //konfiguraja portów DDRD=0xFF; DDRC=0xFF; PORTD=0xFF; PORTB=0xF1; PORTC=0x00; Timer1Init(); //inicjuje timer

while(1) { sei(); /* + pare prostych instrukcji bez większego znaczenia */ } } Nie ma znaczenia czy zadeklaruje INTERRUPT (SIG_OVERFLOW0) czy też SIGNAL (SIG_OVERFLOW0). Nie ma znaczenia czy w podprogramie przerwania znajdują się (lub nie) instrukcje: cbi(TIFR,TOV0);cli();sei; nie ma też znaczenia stopień preskalera. Reakcja zawsze ta sama: w momencie wystapienia przerwania-> reset procka. O czym zapomniałem? Co robie źle?

Pozdrawiam. dielektrykus

Reply to
dielektrykus
Loading thread data ...

Użytkownik "dielektrykus" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:opsmai8cauqfyyhy@pervolt...

nie wnikalem zbytnio w kod

to co mi sie na szybko kojarzy to moze masz procedure obslugi przerwania od T0 a zainicjowales T1

Reply to
Andy

Sprawdź, czy aby na pewno sbi(TIMSK, T0IE0) ustawia ten bit co trzeba. Gdy wywołuesz przerwanie, do którego nie ma procedury obsługi program leci do resetu. Poza tym mam nadzieję, że te głupie błędy w kodzie (widzisz je?) powstały przy przepisywaniu i skracaniu na potrzeby posta.

Reply to
bartek

^^^^^ sam też popełniam...

Reply to
bartekbosowiec.SKASUJ

^^^^^ sam też popełniam...

Reply to
bartek

dlaczego nie SIGNAL?

po wejsciu w obsluge przerwania flaga sie sama resetuje z tego co pamietam ....

Reply to
Pawel Kurzawa

Wed, 16 Feb 2005 13:49:14 +0100, na pl.misc.elektronika, dielektrykus napisał(a):

Zobacz jeszcze czy jest wstawiony dobry typ uP w opcjach (-mmcu=). Jeśli wektor jest pod innym adresem to właśnie tak zadziała - reset ( domyślna obsługa błędnego przerwania ).

Reply to
Jurek Szczesiul

Dnia Wed, 16 Feb 2005 13:07:33 +0000 (UTC), bartek snipped-for-privacy@gazeta.pl napisał:

Witam!

sbi(TIFR,TOV0); /* w środku jest duże_o ( kiedy patrze na swój post widze zero, ale kiedy kopiuje ten fragment i wklejam gdzieś indziej to widze duże_o */ Po kompilacji wygląda tak (wycięte z pliku *.lst): sbi(TIMSK, TOIE1); ac: 89 b7 in r24, 0x39 ; 57 ae: 84 60 ori r24, 0x04 ; 4 b0: 89 bf out 0x39, r24 ; 57 więc chyba działa.

Każde wytknięcie błędów będzie mile widziane. Jestem początkujący więc z wielu rzeczy nie zdaję sobie sprawy.

Pozdrawiam. dielektrykus

Reply to
dielektrykus

Dnia Wed, 16 Feb 2005 16:16:37 +0100, Pawel Kurzawa snipped-for-privacy@kpw.qs.pl> napisał:

Próbowałem obu - bez pozytywnego rezutatu.

Tak podaje manual, poprostu dla pewności wklepałem. Rezultaty podobne, czyli nie takie jakbym chciał (z i bez tej instrukcji).

Reply to
dielektrykus

Dnia Wed, 16 Feb 2005 16:50:50 +0100, Jurek Szczesiul snipped-for-privacy@wycin.ep.com.pl> napisał:

Witam! Używam środowiska AVRSide już od 2 m-cy i tylko do procka ATMega16. Jakież było moje zdziwienie gdy w ustawieniach procka znalazłem ATMega8!! Nie mam pojęcia w jaki sposób się to zmieniło. Ale nareszcie działa!!! (po dwóch dniach kombinatoryki) :-)

Dziękuję Tobie Jurku i wszystkim, którzy odpowiedzieli na moje zapytanie.

Pozdrawiam. dielektrykus

Reply to
dielektrykus

Wed, 16 Feb 2005 18:21:47 +0100, na pl.misc.elektronika, dielektrykus napisał(a):

Może nie przestawiłeś przy zakładaniu nowego projektu ? W nowym zawsze jest domyślna Atmega8.

Reply to
Jurek Szczesiul

Dnia Wed, 16 Feb 2005 19:56:20 +0100, Jurek Szczesiul snipped-for-privacy@wycin.ep.com.pl> napisał:

Dzięki wielkie. Nie miałem o tym pojęcia. Informacja została zapamiętana :-)

Pozdrawiam. dielektrykus

Reply to
dielektrykus

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.