PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software UART ICP1 -> INT0



EDatabaseError
30.10.2009, 09:45
Hallo. In dem RN-Wissen Beispiel (http://www.rn-wissen.de/index.php/Software-UART_mit_avr-gcc) wird der ICP Timer Interrupt genutzt um das Empfangen zu ermöglichen.

Hat schon jemand das ganze mit dem INT0 Interrupt gemacht? Was muss man anpassen um INT0 anstelle des Timer Eingangs zu nutzen bzw. um über INT0 zu empfangen.

Gruß

chientech
30.10.2009, 12:41
Hi,

ich kann mich täuschen aber der IPC interrupt ist ein Input Capture d.h. wenn der Interrupt auslöst wird der Zählerstand in ein spezielles Register 'Gerettet' und kann anschließend ausgewertet werden.

Du müsstest also in der ISR vom INT0 lediglich den Zählerstand eines Timers abspeichern. Du hast den Vorteil, dass du dir den Timer aussuchen kannst und den Nachteil, dass der Timer nach auslösen von INT0 ja weiterläuft evtl. bevor du den Timerwert in der ISR auslesen konntest aber der Fehler ist unter umständen zu vernachlässigen bzw. wenn es immer die gleiche Anzahl Takte ist ohne Auswirkung.

Gruß christoph

Besserwessi
30.10.2009, 14:37
ICh hab so etwas schon mal gemacht (Tiny26) allerdings in ASM.
Wenn man einen normalen ext. Interrupt nimmt, fehlt einem der Zählerstand. Man kreigt dadurch einen etwas größeren Fehler, aber bei nicht zu hoher Baudrate geht es. Beim Startbit, kann man entweder den Zähler auslesen, so ähnlich wie mit ICP, oder man Startet den Timer zur Abfrager der Bitwerte erst mit dem Startbit, und zwar mit einem Vorgabewert, damit die erste Verzögerung nur halb so lange ist wie die normalen.