Microcontroller hängt sich auf und fängt sich wieder

Gast #2720005
Hallo an alle.

Ich bin gerade dabei eine Lichtsteuerung mit dem ATtiny13 zu 
programmieren.

Ich habe zwei Lichtkreise und einen Taster über den alles laufen soll.

Wenn ich den Taster einmal drücke soll Kreis 1 angehen und nach einer 
gewissen Zeit ausgehen, dafür gibt es einen extra Kreis der das 
erledigt.

Bei zwei mal drücken geht der Kreis 1 an oder alle aus beu drei mal 
drücken geht Kreis 2 ein oder alle aus und bei vier mal drücken, gehen 
beide Kreise an oder aus.

Das funktioniert auch alles. Nur irgendwann hängt sich alles auf und ich 
kann drücken wie ich will, aber nichts geschieht. Wenn ich dann eine 
Zeit warte fängt er sich wieder und die Zeit geht an.

Was habe ich falsch gemacht. Anbei der Code in einer Datei.

ICh hoffe auf eure Hilfe.
Angehängte Dateien:
Gast
Ein Nachtrag noch,

nach 5 Sekunden wird geschaut wie oft gedrückt wurde und dann wird das 
auch gemacht.

Diese 5 sekunden bekomme ich durch die 15 Interrupts die ich zähle.

ICh vermute das es irgendwie daran liegt.
Gast
Hi

>benötige ich das com A?

Wozu? Wird doch nur bei der Initialisierung benutzt.

Allerdings scheint dir der Unterschied zwischen rjmp und rcall nicht so 
richtig klar sein. Mit einem rjmp kannst du an beliebige Stellen 
springen. Geht mit rcall auch. Aber auf ein rcall muss zwingend früher 
oder später ein ret folgen. Sonst läuft dir der Stack über. Da sind wir 
gleich beim nächsten gravierenden Fehler: dein Stack ist nicht 
initialisiert. Wird auch für die Benutzung von Interrupts benötigt.

MfG Spess
Gast
Okay danke für die Hilfe das RJMP das hab ich mal geändert aber wie muss 
ich den Stack ininalisieren?

In dem Buch steht darüber nichts aus dem ich mir das mit dem Timer 
rausgelesen habe.
Gast
Hi

>Okay danke für die Hilfe das RJMP das hab ich mal geändert

In deinem Programm sollten eher die RCALLs geändert werden. Oder hast du 
passende Stellen für das RET?

>...aber wie muss ich den Stack ininalisieren?

Entschuldige. Ich habe gerade im Datenblatt gesehen, das der ATTiny13 
das schon selbst macht. Ist aber nicht bei allen AVRs so. Dort wird das 
z.B. so gemacht:
1
 ldi r16,high(RAMEND)
2
 out SPH,r16
3
 ldi r16,Low(RAMEND)
4
 out SPL,r16

Bei AVRs mit <=256 Byte RAM entfällt das Laden von SPH.

MfG Spess

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.