Hallo, ich habe das Problem, dass ich zwei Timer in einem Programm auf einem Atmega8 starten will (Timer0 und Timer1), dies auch gelingt, wenn ich sie einzeln starte, nicht jedoch wenn ich ich beide zusammen starte. Es folgt ein Ausschnitt aus Meinem Programm: ... .ORG OVF1addr ;Timerinterrupt Timer1 rjmp timer .ORG OVF0addr ;Timerinterrupt Timer0 rjmp timera .ORG $2A start: ldi akku, LOW(RAMEND) ;Stapelzeiger laden out SPL, akku ldi akku, HIGH(RAMEND) out SPH, akku ldi akku,0b101 ;Systemtaktteiler : 1024 out TCCR0, akku in akku, TIMSK ori akku, 1 << TOIE0 out TIMSK, akku ldi akku, 256 - 255 out TCNT0, akku lds akku, low(65536) out TCNT1l, akku lds akku, high(65536) out TCNT1h, akku ldi akku,0b011 ;Systemtaktteiler 64 out TCCR1B, akku in akku, TIMSK ori akku, (1 << TOIE1) out TIMSK, akku ... Ich habe schon eineige Zeit damit verbracht selbst auf meinen Fehler zu kommen - hab auch schon etwas hier im Forum geschaut - bin jedoch nicht sonderlich erfolgreich gewesen, deshalb würde ich mich über eure Hilfe freuen... Andy
@Andy ich kann dir zwar nicht helfen aber mich würde Interessieren waru Du bei der Zeile ldi akku, 256 - 255 nicht gleich ne 1 einträgst! Ich beginne erst mit AVR und muss mich noch einarbeiten, da ich 8051er gewöhnt bin und bitte um Nachsicht.
>
lds akku, low(65536)
out TCNT1l, akku
lds akku, high(65536)
out TCNT1h, akku
<
Meinst Du "ldi" oder willst Du die Daten aus einer SRAM-Zelle holen, die
es nicht gibt???
...
oho - das mit dem "lds" habe ich total übersehen - soll natürlich ldi heißen - da war mal eine SRAM Variable drin, allerdings dürfte hier nicht mein eigentliche Problem entstehen. wegen der Frage von norad: natürlich könnte da auch 1 stehen, ich hatte da nur verschiedene Werte getestet und so ist das dann aus bequemlichkeit entstanden :)
Auch global freigeschaltet! - Wie gesagt einzeln funktionieren die Timer! Nochmal allgemein: ist es überhaupt möglich so ohneweiteres zwei Timer gleichzeitig laufen zu lassen? Und wenn (wie es ja scheint), muss noch etwas besonderes Beachtet werden? schon jetzt danke für mitdenken!
Andy wrote: > Nochmal allgemein: ist es überhaupt möglich so ohneweiteres zwei Timer > gleichzeitig laufen zu lassen? Ja klar. Ich wüsste nichts was dagagen spricht. > > Und wenn (wie es ja scheint), muss noch etwas besonderes Beachtet > werden? Zermartere mir schon die ganze Zeit das Hirn. Aber mit fällt nichts ein. Könntest du mal ein komplettes, vollständiges Pgm hier reinstellen.
Andy wrote: > Nochmal allgemein: ist es überhaupt möglich so ohneweiteres zwei Timer > gleichzeitig laufen zu lassen? Ja sicher doch, sonst würde Vieles ja nicht laufen, z.B.: http://www.hanneslux.de/avr/zuenduhr/index.html http://www.hanneslux.de/avr/zuenduhr/ZndUhr01.asm ...
Nebenbei bemerkt, müssen bei 16-Bit Registern erst die High-Register, dann die Low-Register geschrieben werden. Deine Timer-Init ist recht konfus (durcheinander), mach´s doch mal so, wie die Codebeispiele im Datenblatt zeigen. Also beginnen mit TCCRxA über TCCRxB und TCCRxC (falls vorhanden) und nach allen Registerzuweisungen erst dann die Interruptfreigabebits setzen. Das "sei" erst nach allen Initialisierungen aller benutzten Peripherie ausführen. Ach und eine komplette Interrupt-Vektorentabelle sollte Pflicht sein. Nichtbenutzte Interruptvektoren werden dann auf Reset oder auf eine Abhandlungsroutine zur Fehlerdiagnose geschickt.
> Ach und eine > komplette Interrupt-Vektorentabelle sollte Pflicht sein. Das ist auch meine Meinung. Da ich damit aber immer auf Widerspruch stoße, lasse ich es bleiben, darauf hinzuweisen. > Deine Timer-Init ist recht > konfus (durcheinander) Das ist wohl wahr. Da kommt man schon beim Lesen durcheinander. ...
Mit 'ldi' statt 'lds' (wie erwähnt) läuft der Timer1 bei 0 los, dann noch *64; ist das Absicht?
senex24 wrote: > Mit 'ldi' statt 'lds' (wie erwähnt) läuft der Timer1 bei 0 los, dann > noch *64; ist das Absicht? Glaub' nicht, dass das Absicht war, eher "zusammengefunden"... Duck&wech... ...
Na ja, 65536 == 0x10000. Klar dass da bei einer 16 Bit Variablen nur noch 0 übrigbleibt. Das 17te "Bit" trinkt ja der Programmierer ;-)
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.