mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LEDs blinken nicht im Takt


Autor: Onur Demir (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Olaf K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Muppets (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...und immer erst das Datenblatt lesen.
Äh nicht nur Lesen, auch verstehen.

Die 2 von der Muppets Show wink

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

Bewertung
0 lesenswert
nicht 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.

Autor: Onur Demir (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur nicht den Mut verlieren, wenn´s das erste Mal mit ´nem Programm
geklappt hat, kommt schnell die Lust auf mehr ;-).

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.