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