Forum: Mikrocontroller und Digitale Elektronik 2 Interrupts (Timer0 und Rx)


von Markus Wagner (Gast)


Lesenswert?

Hi Leute!

Also ich programmiere grade einen ATMega 128 auf dem STK500 (mit 
STK501-Zusatzboard) und habe Probleme damit auf 2 Interrupts zu 
reagieren. Ich benötige den Timer0-Interrupt um ein Rechteckssignal zu 
erzeugen und den Receive-Interrupt vom USART1, um mit dem PC zu 
kommunizieren. Leider funktioniert letzterer überhaupt nicht mehr seit 
ich den Timer0-Interrupt enabled und die Routine geschrieben habe. Die 
logische Schlussfolgerung für mich war, dass durch die höhere Wertigkeit 
des Timers (und das ständige Kommen des Interrupts, alle 1ms) der 
Receive-Interrupt nicht mehr durchkommt. Könnt ihr mir meine Vermutung 
bestätigen und mir zu einem Lösungsweg verhelfen oder könnte dies an 
einem komplett anderen Problem liegen? Bin leider ein Anfänger bei 
AVR-Controllern aber trotzdem über jeden Tipp dankbar.

mfg
markus

von Christian Schifferle (Gast)


Lesenswert?

Hallo Markus

Wenn du nicht mit allzu hohen Baudraten arbeitest, kannst du den UART 
auch in deiner normalen Programmschleife pollen, also gar nicht über den 
Interrupt steuern.
Dazu musst du lediglich das RXC-Bit im USR-Register prüfen und, falls 
gesetzt, das UART-Datenregister UDR auslesen. Mit dem Auslesen des 
UDR-Registers wird das RXC-Bit automatisch wieder gelöscht.

Gruss
Christian

von mikki merten (Gast)


Lesenswert?

Von der Hardware ist der Mega128 problemlos in der Lage mehrere 
Interrupt-Routinen zu bearbeiten. Es dürfte wohl eher ein Logikfehler in 
deinem Programm vorliegen. So beliebte Fehler wie 
Prozessor-Statusregister nicht retten oder auch fehlerhafte PUSH / POP 
Sequenzen sind recht häufig.

von Markus Wagner (Gast)


Lesenswert?

Hallo ihr beiden, vielen Dank für eure Antworten. Ich habe es jetzt mal 
so versucht, dass ich im Timer-Interrupt den Befehl #asm("sei") einbaue, 
sodass dieser Interrupt unterbrochen wird, sobald der Rx-Interrupt 
kommt. Für die Zählung macht das im Prinzip keinen Unterschied.

danke nochmal!
markus

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
Noch kein Account? Hier anmelden.