uC wird immer wieder zurückgesetzt

Gast #1319337
Lesenswert?

Hallo @all,

ich arbeite mich gerade in die AtMEGA16 Familie von Atmel rein und habe 
mit meinem Code Probleme.

Der uC geht immer wieder zur ersten Anweisung (ganz an den Anfang) 
zurück das schaut nach einem RESET für mich aus und ich weiß nicht 
warum.

Ich arbeite mit AVR Studio. Das Programm soll ledigleich im der ISR den 
Zustand von PINA_1 ändern.

Kann mir jemand sagen was ich falsch mache?

Der Quellcode lautet:


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

int n = 0;
int main (void){

sei();

DDRA  = 0xff;
PORTA = 0x00;

DDRB  = 0xff;
PORTB = 0x00;

DDRC  = 0xff;
PORTC = 0x00;

DDRD  = 0b11111011;
PORTD = 0b01000000;

TCCR1B   =   0b00000001;
TIMSK   =  0b00001000;
TIFR  =  0b00001000;

OCR1A  = 0x5F;

//////////////////////////////////////////////////////////////////////// 
/
//////////////////////////////////////////////////////////////////////// 
/


while (1) {
PORTA  =  0x00;
}


}


/////////////////////   end main   ////////////


///////////// ISR(TIMER1_COMPA_vect)  /////////

ISR(TIMER1_COMPA_vect)
{

PORTA = 0b00000001;

while (n<10)
{
n++;
}

n=0;

}

/////////////  end ISR(TIMER1_COMPA_vect)  //////
#1319358
Lesenswert?

Hallo,

was soll der arme AVR auch machen, wenn Du den Timerinterrupt für 
Compare B freigibst und eine ISR für COMPA schreibst...

Es liest sich merklich einfacher, wenn man statt

TIMSK   =  0b00001000;
TIMSK = (1<<OCIE1B);

schreibst. Dann sieht man auch den Fehler sofort.

PS: su spät... ;-)

Gruß aus Berlin
Michael
Gast #1319366
Lesenswert?

Mit welchen Mitteln stellst du fest, dass sich der Controller reseted?

In der ISR weist du PORTA einen neuen Wert zu, welcher nach dem 
Verlassen der ISR sofort von der Main wieder auf 0 gesetzt wird.
Gast #1319393
Lesenswert?

ich habe vor der while (1) { } schleife einen Breakpoint gesetzt. Dieser 
darf bei korrektem Ablauf nur ein einziges mal auftreten. Der Trat 
jedoch immer wieder auf. Daher habe ich einen RESET vermutet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren