Forum: Mikrocontroller und Digitale Elektronik µC Roboter "Handshake" digitaler Aus-/Eingang


von Daniel D. (__daniel__)


Lesenswert?

Hallo an alle Leser!

Ich könnte einen Rat von euch brauchen.
Mein µC (ATmega128a) kommuniziert mit einem Roboter über digitale 
Ein/Ausgänge. Eine Nachricht kann maximal 5 Bit breit sein. Nun ist der 
µC so viel schneller wie die Robotersteuerung - zumindest beim 
Setzten/Sücksetzen der digitalen Ausgänge des Roboters, dass z.b. das 
Ausgangssignal Roboters "01101" vom µC auch schnell als "00001" 
interpretiert werden, kann, im Falle, dass das niedrigste Bit von der 
Robotersteuerung zuerst gesetzt wird. Andersrum also µC --> Roboter ist 
die Gefahr kleiner (da der µC die Befehle sehr schnell ausführt) aber 
dennoch vorhanden.
Bisher habe ich mir damit geholfen dass ich bei einer Änderung eines 
Bits mit über einen Timer eine definierte "sichere" Zeit warte und dann 
den Eingang nochmals abfrage. Wirklich professionell ist das jedoch 
nicht. Das Rücksetzen der Bits habe ich ebenfalls über einen Timer 
gemacht...auch über eine definierte Zeit nachder ich mir sicher war, 
dass der Roboter das Signal verarbeitet hat. Die Aufgabe ist nicht sehr 
Zeitkritisch.

Trotzdem möchte ich das jetzt professioneller machen und habe mir 
gedacht, dass ich das höchste Bit, also Bit 4 (43210) als 
"Bestätigungsbit" einsetze. D.h. Dieses wird als letztes Bit gesetzt, 
für jede zu übertragende "Nachricht". Der Empfänger wartet auf ein 
"high" dieses Bits und fragt anschließend erst die unteren 4 Bit ab. 
Dadurch halbiere die mögliche Anzahl der Nachrichten aber das würde mit 
4 Bit trotzdem noch ausreichen.
Das Problem ist jetzt dass ich dieses Bit wieder zurücksetzen muss 
nachdem der Empfänger die Nachricht erhalten hat. Der Empfänger sendet 
also ebenfalls eine Nachricht durch ein High im 5. Bit. Jetzt scheint 
das nur noch im Kreis zu gehen weil µC und Roboter nur noch damit 
beschäftigt sind sich die Bestätigung zu bestätigen usw. Ich hoffe die 
Problematik ist klar und überhaupt, dass jemand bis hier zum Ende liest 
:)

Hat jemand mit so einer Thematik schon Erfahrung bzw. einen 
Lösungsansatz/Idee für mich?

Ich würde mich jedenfalls sehr freuen!

Viele Grüße und danke,

Daniel

von Thomas Z. (tezet)


Lesenswert?

einfach Stück für Stück durchgehen

C = Computer; reagiert auf steigende und fallende Flanke B4
R = Roboter; reagiert nur auf steigende Flanke B5
B4 = 0
B5 = 0

R: schreibt Nachricht; B4=1
C: steigende Flanke B4 erkannt; Nachricht lesen; B5=1
R: steigende Flanke B5 erkannt; B4=0
C: fallende Flanke B4 erkannt; B5=0

von Daniel D. (__daniel__)


Lesenswert?

Hey Thomas!

Merci für deine Hilfe! Ja über ein toggelndes Bit müsste das gehen, 
stimmt. Ich brauch da dann eben definitiv im Roboterprogramm eine 
Hilfsvariable die gesetzt bzw. gelöscht wird und je nachdem wird auf 
High oder Low abgefragt.

Wenn ich z.b. die Kommunikation umdrehe die du oben beschrieben hast und 
der µC der Sender ist. Aber die Hilfsvariable brauche insofern ich die 
Eingangspins nicht mittels Interrupt auf dem vierten Bit abfrage...

Aber das sollte ja kein Problem sein.

Ich probier das mal so aus und melde mich falls es irgendwelche Probleme 
geben sollte :). Danke nochmal.

Viele Grüße,

Daniel

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.