Hallo, ich habe einen Atmega8 und einen externen Quarz mit 4MHz. In meinem Code habe ich Timer0 (Overflow,Vorteiler64) und Timer1 (CTC,Vorteiler 1 + OCR) initialisiert. Im Timer0-Overflow ist meine Entprellroutine. Der CTC-Modus toggelt PIN OC1A. Mein Problem ist, daß Timer0 nicht funktioniert. Ich habe nun die Entprellroutine probehalber in Timer2. Und da klappt es. Ich habe das Datasheet durchgelesen. Da steht: Timer0 und Timer1 haben das gleiche Vorteilermodul, können aber unterschiedliche Vorteilereinstellungen haben. Was könnte die Ursache sein? Julius
Man sollte es dem Helfer nicht unnötig schwer machen. Nur wenige schauen sich ein .txt an. Sie wollen schon die Programmierspache wissen, d.h. ein .c, .cpp, .asm, .bas sieht sich viel besser an. Und das der Quelltext alle nötigen Include und Defines zum fehlerfreien Compilieren enthält, versteht sich natürlich von selbst.
Bitte poste den vollständigen Quelltext.
> Mein Problem ist, daß Timer0 nicht funktioniert.
Was hast du erwartet, was tut er stattdessen? Warum bist du der Meinung,
dass er nicht funktioniert?
Hallo, im Anhang nun mein Code in asm. Im Timer0 habe ich die Tastenentprellroutine. Und die funktioniert nicht, bzw der Overflow Interrupt wird nicht aufgerufen. Zur Kontrolle lasse ich im Interrupt eine Variable hochzählen und im LCD ausgeben. Wenn ich den Code der ISR nun in den Interrpt des Timers2 kopiere, funktioniert es einwandfrei. Ich könnte ja die Entprellroutine im Timer2 belassen. Aber ich will einfach wissen, warum das so ist. Und vielleicht brauche ich den Timer0 ja doch noch... Julius P.S. Peter, deine Entprellroutine ist super! Habe ich bisher in allen meinen Projekten eingebaut.
Timer1 wird im CTC Modus gestartet und der Compareinterrupt zugelassen. Ich kann nirgends entdecken, daß OCR1A gesetzt würde. Demnach tritt der Compareinterrupt irre oft auf (hat übrigends auch nur ein RETI in der Vektortabelle) Der Timer2_Overflow ist vor Compare Match A Interrupt in der Vectortabelle und hat Chancen dran zu kommen. Der Timer0_Overflow Vector steht nach den irre oft Compare Match A Interrupts und kommt einfach nicht dran. Disable mal den Compare Match A und schau ob es dann mit Timer0 klappt. Print aus der ISR ist auch keine gute Idee.
Hallo Seeger, das war der richtige Hinweis. Mein Gedanke war, mit zwei Tastern einen Schrittmotor zu starten (rechts/Links) und dabei den OCR-Vergleichswert zu laden. Aber bis zum ersten Tastendruck ist noch kein Vergleichswert geladen. Habe jetzt in der Init OCR 0xffff geladen und jetzt geht auch der Timer0. Das bit OCIE1 habe ich aus dem Code entfernt. Im Timer1 soll es keinen Interrup geben, sondern nur der Ausgabe-Pin getoggelt werden. Danke für deine Tipps! Julius
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.