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
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
...und immer erst das Datenblatt lesen. Äh nicht nur Lesen, auch verstehen. Die 2 von der Muppets Show wink
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.
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
Nur nicht den Mut verlieren, wenn´s das erste Mal mit ´nem Programm geklappt hat, kommt schnell die Lust auf mehr ;-).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.