Hallo, ich bin schon kurz vorm Verzweifeln mit diesem Timer1. Zum Test wollte ich einfach nur Timer1 beim Overflow einen Interrupt auslösen lassen. Das ganze gibt mir einen Puls auf dem Oszi. Mit Timer0 geht alles blendend. Ich führe folgendes aus: TCCR1B := 1; // Non Prescaler , f_IO verwenden TIMSK := 128; // Timer1 Overflow Event aktivieren EnableInts; // I-Flag setzen Nunja, ein Interrupt wird nie ausgelöst. Wenn man das ganze mit Timer0 (TIMSK=4,TCCR0B=1) macht, dann läufts bestens. Was könnte denn da falsch sein? Es steht kein weiterer Code in der Datei ;-). MfG Christoph
Christoph wrote: > Hallo, > > ich bin schon kurz vorm Verzweifeln mit diesem Timer1. Zum Test wollte > ich einfach nur Timer1 beim Overflow einen Interrupt auslösen lassen. > Das ganze gibt mir einen Puls auf dem Oszi. Mit Timer0 geht alles > blendend. > Ich führe folgendes aus: > TCCR1B := 1; // Non Prescaler , f_IO verwenden > TIMSK := 128; // Timer1 Overflow Event aktivieren > EnableInts; // I-Flag setzen > > Nunja, ein Interrupt wird nie ausgelöst. Woher weißt Du das? Wo ist der Interrupt Handler? Und was ist das für eine Programmiersprache? Pascal? > Wenn man das ganze mit Timer0 > (TIMSK=4,TCCR0B=1) macht, dann läufts bestens. Was könnte denn da falsch > sein? Es steht kein weiterer Code in der Datei ;-). Also gar kein Interrupt-Handler da? Dann kann es nicht funktionieren.
Selbstverständlich ist der Interrupthandler da, den hab nur nicht mit hier gepostet. Ich habe hier nur die Timerinitialisierung geschrieben. Also einfach nur welche Register ich gesetzt habe. Wenn die gesetzt sind müsste doch eigentlich der Interrupt ausgelöst werden nach jedem Timer1Overflow. Programmiersprache ist in dem Falle Pascal. Reichen die Register die ich gesetzt habe oder fehlt da noch irgendwas wichtiges was ich bei meinen x-maligen Studien des Datenblatts übersehen habe? MfG Christoph
Und ich weiß, dass der Interrupt nicht ausgelöst wird, weil ich mir die Aktion, nämlich einen Pin am PortD auf High setzen, auf dem Oszi ausgeben lasse. Das ganze 1:1 übertragen auf Timer0 hat bestens funktioniert.
1.: Du hast oben geschrieben, dass in der Datei kein weiterer Code steht. Und jetzt ist da plötzlich doch noch was? Was soll ich jetzt glauben? 2.: Das setzen von Registern, in denen es auf einzelne Bits ankommt, mit Dezimalzahlen solltest Du Dir schnellstens abgewöhnen! 3.: Schick bitte den kompletten Code, und nicht irgendwelche nichtssagenden Schnipsel.
Ok alles klar, dann habe ich mich undeutlich ausgedrückt. Und hier der ganze Code in Pascal: program timertest; {$NOSHADOW} { $W+ Warnings} {Warnings off} Device = tiny2313, VCC=5; Import SysTick; From System Import ; Define ProcClock = 8000000; {Hertz} SysTick = 10; {msec} StackSize = $0020, iData; FrameSize = $0010, iData; Implementation {$IDATA} interrupt Timer1; begin DisableInts; PortD:=4; PortD:=0; EnableInts; end; { Main Program } {$IDATA} begin DDRD:= %00000100; TCCR1b:=1; TIMSK:=128; EnableInts; loop endloop; end timertest. Auf dem Oszi müsste man nun also aller 256 Takte einen Strich sehen. Mit Timer0 klappts wie gesagt. MfG Christoph
Du weißt aber schon, dass Timer 1 ein 16-Bit-Timer ist und nur alle 65536 Takte überläuft?
DANKE!!!!!!!! ;) Auf diese Idee bin ich nicht gekommen , dass man einen Puls zwischen 65534 Takten Pause einfach gar nicht sieht G. Puls ein wenig verlängert und schwups... Es ist sichtbar! ;) Vielen Dank MfG Christoph
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.