uC wird immer wieder zurückgesetzt

Gast #1319337
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)  //////
Gast
>Kann mir jemand sagen was ich falsch mache?

TIMSK   =  0b00001000;

Das ist falsch. Benutze nicht die binäre Schreibeweise.
So sind Fehler vorprogrammiert. Nimm:

TIMSK   =  (1<<OCIE1A);
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.