LEDs blinken nicht im Takt

Gast #268768
Lesenswert?
• ▲
▼
Hallo,

nachdem ich meine ersten Gehversuche mit dem ATMega8515 (auf STK500)
absolviert habe, widmete ich mich den Timern zu. Das Programm, welches
ich beigefügt habe, hat den simplen Auftrag, bei einem Overflow ein
Interrupt auszulösen, und den PortB Zustand zu invertieren. Die
Realisierung erfolgt über den Timer0. Eigentlich easy.

Problem: Bei derzeitiger Einstellung sollen alle LEDs an PortB mit
einer Freq. von 7Hz leuchte (also deutlich zu erkennen). Interner
Oszillator bei 1MHz, per Fuse eingestellt.

Das Problem ist, dass nicht alle LEDs im Takt blinken. Erwartet hätte
ich ein synchrones blinken aller LEDs. Bei dieser Freq. leuchten die
LEDs 0 und 1 asynchron zu den anderen.

Kennt einer dass von euch?

MFG

Onur
Angehängte Dateien:
Gast #268769
Lesenswert?
• ▲
▼
Am Anfang fehlen die Interrupt-Vektoren (siehe Datenblatt). Bei einem
TOV0-Interrupt springt er irgendwo in den Code hinein. Es sei denn, Du
hast die Bytes am Anfang so abgezählt, daß die TOV0-Routine genau an
der richtigen Stelle beginnt...

Außerdem sieht Deine main-Loop seltsam aus: Du pollst das TOV0-Flag,
und falls es gesetzt sein sollte, läuft der Code unkontrolliert in die
ISR-Routine hinein. Ich weiß nicht genau, ob man in der Loop überhaupt
jemals ein gesetztes Bit vorfindet (der Interrupt dürfte dem immer
zuvorkommen), falls ja, dann wird wohl ziemlich schnell der Stack
überlaufen (wegen reti ohne zugehörigem call).

Am Ende das ret ist überflüssig.

MfG Olaf
Gast #268771
Lesenswert?
• ▲
▼
Hier hast du mal einen von meinen ersten "Gehversuchen", allerdings
mit dem ATMega8. Du musst nur die Include-Zeile anpassen (.INCLUDE
"m8515def.inc"), dann sollte das bei dir laufen.

Deine ISR ist schon richtig, sie wird nur nicht aufgerufen, weil du am
Anfang deines Programmes keinen Vektor definiert hast.
So etwa:
.org   $006
    rjmp ISR_TOV0  ;Timer0 OV
Damit sagst du dem Controller, er soll in deine ISR_TOV0 springen
sobald ein Timer0 Overflow auftritt.
Du musst deinen Programmstart allgemein etwas sauberer schreiben.
Angehängte Dateien:
Gast #268772
Lesenswert?
• ▲
▼
Hallo,

Ihr habt Recht. Das Grundgerüst meines Programms ist fehlerhaft. Beim
Programm selber habe ich mich eigentlich an das Applikationssheet von
Atmel gehalten.

Naja, sind noch Gehversuche. Ich hoffe dass ich die LEDs synchron zum
blinken bekomme.

MFG

Onur

Antwort schreiben

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