mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Interrupt auf Atmega48


Autor: MacGoever (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

ich bin grad stark am verzweifeln. Ich programmiere den angehängten Code 
auf einen Atmega48. Ich habe den problematischen Code aus dem 
Gesamtprogramm extrahiert und vereinfacht um alle möglichen 
Programmierfehler auszuschließen.
Im Prinzip wird ein register ausgegeben und in bestimmten 
Zeitintervallen über einen Timer geschiftet und wieder ausgegeben. 
Ansonsten läuft der Atmel in einer Endlosschleife. In der Endlosschließe 
werden 2 Bit des Registers pro  Durchlauf gekippt, so dass man noch 
erkennen kann, ob der Controller noch läuft.

Ich habe jetzt an die Ausgangsports LEDs angeklemmt. Die beiden 
"KontrollLEDs" leuchten deutlich schwächer, da sie zwischendurch immer 
wieder an und ausgeschaltet werden. Das entscheidende Problem ist jetzt, 
dass der Schift nur einmal durchgeführt wird. Der Interrupt wird also 
einmal ausgeführt und danach nie wieder. Gibt es da ein Bit, das man so 
ein Verhalten einstellen kann? Habe meiner Meinung nach alles versucht 
und ausprobiert.

Im Debugger läuft alles einwandfrei. Habe auch schon einen anderen Chip 
versucht.

Hat jemand eine Idee?

Danke im Vorraus für jede Anregung!

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Problemlösung kann ich dir nicht anbieten, aber ein paar Sachen die 
mir aufgefallen sind:

- Es wäre vielleicht besser, TCCR1B erst zu setzen wenn die beiden 
anderen
  Timer-Register gesetzt sind, dadurch verhindert man dass direkt beim 
Start
  schon ein Overflow erkannt wird

- Kann es sein dass die LEDs den Controller überlasten, die Spannung 
einbricht
  und der Controller dadurch resettet?

- Was mir gerade noch bei "Spannung einbricht" einfällt: 
Abblockkondensator?

Autor: MacGoever (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Dennis,

erstmal Danke für die Ideen. Deinen Vorschlag mit dem TCCR1B habe ich 
eingebaut, gab aber keine Veränderung. Einen Reset halte ich für 
unwahrscheinlich, da der Atmel ja nach dem Starten immer dasselbe 
Verhalten zeigt und dann auch weiterläuft. Es wird ja auch ein einziges 
Mal ein Interrupt ausgelöst. Aber danach nie wieder.

Ein Schaltungsproblem schließe ich aus, da ich die Tests in einem STK500 
mache. Oder könnte das einen Knacks haben?

Gruß aus Münster

MacGoever

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

1. Mit deiner Einstellung CS10=1 läuft dein Timer mit voller 
Geschwindigkeit.
ein Blinken wirst du da nicht sehen.

2. Bei WGM12 und WGM13=1 (Mode12) ist Top vom Timer ICR1. An deiner 
Stelle würde ich Timermode 4 (nur WGM12=1) nehmen. Da dort Top vom Timer 
OCR1A ist macht das mehr Sinn.

Die Simulation im AVR-Studio ist bei Timern nicht immer fehlerfrei.

Noch zu deinem Programm: dein Konstrukt mit dem rol... in der 
Interruptroutine wird nur bei deinem einfachen Programm funktionieren. 
Bei rol wird Bit7 ins Carryflag geschoben und beim nächsten rol nach 
Bit0. Wenn das Carryflag im Hauptprogramm verändert wird geht diese 
Information verloren.

MfG Spess

Autor: MacGoever (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jaaa!

Danke an Spess! Du hattest total recht! Ich hatte den falschen Timermode 
genommen. Hutzieh. Vielen Dank. Du hast den ostwestfälischen 
Hochleistungskegelsport unterstützt, denn das Ganze Projekt soll eine 
Kegelbahn <-> Laptop Schnittstelle werden.

Gruß aus Münster

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.