Hallo, die letzten Tage habe ich mit dem Installieren und der Inbetriebnahme und Einarbeitung des AVR Studios mit WinAvr beschäftigt. Ich habe vorher mit CodeVision gearbeitet und war nun einfach mal auf der Suche nach einem freien C-Compiler. Mein Fazit vorab: Ich bin sehr angetan von der aus Kombination von Studio und WinAvr entstehenden kompletten Entwicklungsumgebung. Großes Plus ist die Möglichkeit auf C-Ebene zu debuggen. Nun wollte ich den Timer1 mal zum Laufen bringen, dieser läuft aber leider nicht los. Ich denke eigentlich habe ich alle Register vernünftig initialisiert, aber wie gesagt er läuft nicht los. Vielen Dank für die Hilfe und Tips schon im voraus.
P.s.: Das Tutorial hier habe ich mir schon durchgelesen, also bitte keine Verweise darauf.
um welchen Chip gehts denn? Beim Mega8 z.B. müsste es heissen TIMSK=0x10; besser daher die entsprechende symbolische Schreibweise...
Sorry, habe ich vergessen anzugeben. Es ist ein ATMega8535 Habe die Register nach durchlesen des Datenblatt initialisiert.
Mit symbolischer Schreibweise ist gemeint: TIMSK = (1<<OCIE1A) zum Beispiel. Liest sich besser als TIMSK = 0x10; Denn TIMSK = 0x40 ist falsch. Der Timer läuft zwar, löst aber keinen Interrupt aus (denn Du hast den Overflow des Timer2 selektiert)
@thkais, hast recht, muss natürlich TIMSK=0x01 bzw. TIMSK=(1<<OCIE1A) heißen. Aber das Hauptproblem bleibt; der Timer läuft nicht an. Er müsste doch nach Init von TCCR1B anlaufen. Hier wähle ich: CS12:CS10 0b00000101 //Vorteiler 1024 Und für CTC Mode: Setzen von WGM12 bzw. CTC1. Dies ist das 3. Bit im Register, also ergibt sich doch TCCR1B=0b00001101 bzw. TCCR1B=0x0D bzw. symbolisch: TCCR1B=(1<<CS12)|(1<<CS10)|(1<<CTC1);
Woraus schließt Du eigentlich, dass der Timer nicht losläuft? Wenn Du das vom Debugger hast, in welchem Modus lässt Du den denn laufen? Bei einer Taktteilung von 1024 kriegste ja nur alle 1024 Takte ein Inkrement in TCNT1. Wenn Du in Einzelschritten simulierst, dann müsstest Du 1024 mal klicken, bevor sich da überhaupt was tut.
@johnny b Hast auch recht. Ich hab den Vorteiler auf 1 eingestellt und den Compare wert auf 10, so dass man im Simulator mehr sieht. Timer läuft, die ISR wird jedoch nicht ausgeführt. Jetzt weiß ich zumindest schon genauer wo es klemmt.
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.