Hallo zussammen erstmal,
ich bin neu in diesem Forum habe ich mal eine Verständnisfrage zum UART des Attiny 2313 unter Bascom.
Ich arbeite gerade an einem PowerLine Projekt. Die Knoten kommunizieren über das 220V Hausnetz.
Daher habe ich bezüglich der Kommunikation ein paar Probleme bzw. Fragen, die bei Verwendung von
getrennten RxD und TxD Leitungen nicht auftreten. Ich hoffe, Ihr könnt mir ein paar Tipps geben.
Zum Projekt:
Jeder Knoten verfügt über einen ATTINY 2313 und einen TDA5051A. Programmiersprache ist wie gesagt Bascom.
Die Kommunikation erfolgt bidirektional über die Phase des Hausnetzes. Der Master eröffnet die Kommunikation,
die Knoten senden nur eine Quittung. Dadurch ist sichergestellt, das immer nur ein Knoten sendet. Ich habe
mich entschlossen, für die Kommunikation das SNAP Protokoll zu benutzen: http://www.hth.com/snap/
Im Gegensatz zu den dortigen Beispielen möchte ich den Datenempfang per Interrupt abwickeln.
Jetzt die eigentlichen Fragen:
Soweit ich das Datasheet verstehe, wird bei jedem empfangenen Zeichen ein URXC Interrupt ausgelöst,
der dann durch Auslesen des Zeichens zurückgesetzt wird. Da ein gesendetes Zeichen wegen der gemeinsamen
RX / TX Leitung gleichzeitig auch empfangen wird, ist meine Idee, den URXC Interrupt beim Sendebeginn auszuschalten und nach dem Senden des letzten Zeichens wieder zu aktivieren. Ist das soweit grundsätzlich OK oder gibt es da einen besseren Weg?
Dann habe ich festgestellt, das der Interrupt auch dann am Sender anliegt, wenn während des Sendens der INT abgeschaltet und erst nachher wieder aktiviert wurde (Nach dem "Enable Uxrc"). Muss ich also den gesamten Buffer,
der ja während des Sendens gefüllt wurde, auslesen um den INT zu löschen?
Ich habe ebenfalls festgestellt, das der Interrupt nicht durch Auslesen eines (des letzten) Zeichens zurückgesetzt wird, sondern mehrere Zeichen ausgelesen werden müssen. Ich sehe das so, das im Puffer noch Zeichen stecken,
und der INT erst zurückgeset wird, wenn alle Zeichen ausgelesen wurden. Also müsste ich so viele Zeichen auslesen,
bis der INT zurückgesetzt wurde (zusätzliches Zeichen durch Störungen empfangen) oder habe ich da was anderes übersehen?
Ich hoffe auf ein paar Tipps, wie ich diese Problem lösen kann.
Mit freundlichen Grüßen
Poeler
ich bin neu in diesem Forum habe ich mal eine Verständnisfrage zum UART des Attiny 2313 unter Bascom.
Ich arbeite gerade an einem PowerLine Projekt. Die Knoten kommunizieren über das 220V Hausnetz.
Daher habe ich bezüglich der Kommunikation ein paar Probleme bzw. Fragen, die bei Verwendung von
getrennten RxD und TxD Leitungen nicht auftreten. Ich hoffe, Ihr könnt mir ein paar Tipps geben.
Zum Projekt:
Jeder Knoten verfügt über einen ATTINY 2313 und einen TDA5051A. Programmiersprache ist wie gesagt Bascom.
Die Kommunikation erfolgt bidirektional über die Phase des Hausnetzes. Der Master eröffnet die Kommunikation,
die Knoten senden nur eine Quittung. Dadurch ist sichergestellt, das immer nur ein Knoten sendet. Ich habe
mich entschlossen, für die Kommunikation das SNAP Protokoll zu benutzen: http://www.hth.com/snap/
Im Gegensatz zu den dortigen Beispielen möchte ich den Datenempfang per Interrupt abwickeln.
Jetzt die eigentlichen Fragen:
Soweit ich das Datasheet verstehe, wird bei jedem empfangenen Zeichen ein URXC Interrupt ausgelöst,
der dann durch Auslesen des Zeichens zurückgesetzt wird. Da ein gesendetes Zeichen wegen der gemeinsamen
RX / TX Leitung gleichzeitig auch empfangen wird, ist meine Idee, den URXC Interrupt beim Sendebeginn auszuschalten und nach dem Senden des letzten Zeichens wieder zu aktivieren. Ist das soweit grundsätzlich OK oder gibt es da einen besseren Weg?
Dann habe ich festgestellt, das der Interrupt auch dann am Sender anliegt, wenn während des Sendens der INT abgeschaltet und erst nachher wieder aktiviert wurde (Nach dem "Enable Uxrc"). Muss ich also den gesamten Buffer,
der ja während des Sendens gefüllt wurde, auslesen um den INT zu löschen?
Ich habe ebenfalls festgestellt, das der Interrupt nicht durch Auslesen eines (des letzten) Zeichens zurückgesetzt wird, sondern mehrere Zeichen ausgelesen werden müssen. Ich sehe das so, das im Puffer noch Zeichen stecken,
und der INT erst zurückgeset wird, wenn alle Zeichen ausgelesen wurden. Also müsste ich so viele Zeichen auslesen,
bis der INT zurückgesetzt wurde (zusätzliches Zeichen durch Störungen empfangen) oder habe ich da was anderes übersehen?
Ich hoffe auf ein paar Tipps, wie ich diese Problem lösen kann.
Mit freundlichen Grüßen
Poeler