Hallo,
vor einigen Jahrzehnten, als auch PCs nur wenige KB RAM hatten, kannte ich solche Dinger 'mal auswendig. Mal schauen, an was ich mich noch erinnern kann:
Das Stichwort heißt "Ringpuffer". Es handelt sich um eine beliebige Anzahl Bytes im RAM und zwei Zeiger. Der eine dient als Schreibzeiger, der andere als Lesezeiger.
Beim Schreiben wird an die Stelle geschrieben, auf die der Schreibzeiger zeigt. Danach wird der Zeiger inkrementiert. Kommt er ans Ende des Puffers, wird er auf den Anfang gesetzt (daher der Name Ringpuffer). Trifft der Schreibzeiger auf den Lesezeiger, ist der Puffer voll.
Asynchron hierzu (z.B. durch Interrupt) kann gelesen werden (und z.B. dann an die USART geggeben werden). Es wird das Zeichen gelesen, auf das der Lesezeiger zeigt. Anschließend wird der Lesezeiger inkrementiert. Trifft der Lesezeiger auf den Schreibzeiger, ist der Puffer leer.
Solch einen Puffer kann man sowohl zum Senden als auch zum Empfangen einsetzen. Nützlich sind ein paar Routinen zum Lesen oder Schreiben aus dem Puffer und solche, die Auskunft über seinen Zustand, z.B. Anzahl freie Bytes, Anzahl noch zu sendender Bytes, etc.
Mögliche Interrupts wären:
Serial Transfer Complete
USART, Rx Complete
USART Data Register Empty
USART, Tx Complete
Hier müsste man nachschauen, welches die geeigneten sind.
Zu beachten: jedesmal wenn man eneut beginnt, Zeichen in den Puffer zu schreiben, d.h. es läuft gerade keine Übertragung, muss das Senden durch die schreibende Funktion erneut angestossen werden. Die nächsten Byte werden dann per Interrupt gesendet.
Zum Echo: Man muss schon eindeutig zwischen Sende- und Empfangzustand unterscheiden (halbduplex). Wenn man sendet, kann man nicht empfangen und während des Empfangens, muss man strikt das Senden unterbinden. Die Kommunikationspartner müssen sich per Protokoll darüber einigen, wer senden und wer empfangen soll.
Man muss auch damit rechnen, dass beide Stationen gleichzeitig mit dem Senden beginnen. Deshalb ist eine Kollisionserkennung sinnvoll.
Aber solange man nur mit der IR-Ausrüstung arbeitet, ist das sowieso nicht besonders prickeld (Reichweite 20-100 cm (max.) und 2400 Baud). Oder habt ihr da eine andere Technik?
Gruß Red Baron
Lesezeichen