Guten Tag zusammen :) Ich habe vor mit einem AVR (Atmega32) eine Matrixtastatur auszulesen, und über UART die Daten mit an ein Funkmodul zu übertragen. Wie das mit dem Auslesen der Tastatur funktioniert und die Uart übertragung funktioniert weiß ich schon, und ist im Testaufbau auch schon erfolgreich ausprobiert worden. Ich habe mir ein passendes einfaches Protokoll dazu einfallen lassen das der Senderteil sendet; Adresse, Datenblock1, Datenblock2, Prüfsumme gebildet aus der Adition der Quersumme von der adresse dem Datenblock1 und Datenblock2. sieht dann etwa so aus: Adresse Datenblock1 Datenblock2 Resultierende Prüfsumme 14DEZ 15DEZ 22DEZ 15DEZ Der Empfängerteil rechnet sich die Prüfsumme erneut aus Adresse, Datenblock1 und Datenblock2 aus und vergleicht sie mit der mitübertragenden Prüfsumme. So wird ausgeschlossen das Empfangender Umweltfunkmüll verarbeitet wird. -Klappt supi Mein Problem ist folgendes: Wenn eine Taste gedrückt gehalten wird soll das vom empfänger auch so aufgenommen werden. Ich habe keine Idee wie ich das Softwaretechnisch realisieren soll. Ich könnte in einem der Datenblöcke ein bit für eine gedrücktgehaltene taste setzen und zyklisch senden. Problem ist wenn dann die Funkverbindung abbricht (Entfernung oder störende Signale) bleibt der letzte übertragene Wert zur Auswertung, was dem Empfänger eine immernoch gedrückte Taste mitteilen würde. Timer käme für mich vom Gedanken her nicht in Frage (korrigieren wenn falsch) da ja sowieso "ab und an" mal eine übertragung misslingt. jemand eine Idee ? Ich programiere in Assebler von daher falls Codeschnippsel kommen bitte nur in Assembler :) Mfg Christian
Beim PS2 Protokoll wird zum Beispiel "Make" und "Break" gesendet, also Anfang und Ende eines Tastendrucks haben einen eigenen Datenblock.
Christian schrieb: > Wenn eine Taste gedrückt gehalten wird soll das vom empfänger auch so > aufgenommen werden. > Ich habe keine Idee wie ich das Softwaretechnisch realisieren soll. Mach's doch so, wie es in den Infrarot Fernbedienungen gemacht wird - mit dem Togglebit. Jeder neue Tastendruck dreht ein Bit im Telegramm um. Bei wiederholten Telegrammen mit gleichem Tastendruck, hat das Bit den gleichen Wert, wie im Vorgänger Telegramm.
Klaus2m5 schrieb: > Beim PS2 Protokoll wird zum Beispiel "Make" und "Break" gesendet, also > Anfang und Ende eines Tastendrucks haben einen eigenen Datenblock. Hätte zur Folge das bei Datenabriss nach drücken der Taste die Taste immernoch als gedrückt gilt. BirgerT schrieb: > Mach's doch so, wie es in den Infrarot Fernbedienungen gemacht wird - > mit dem Togglebit. Jeder neue Tastendruck dreht ein Bit im Telegramm um. > Bei wiederholten Telegrammen mit gleichem Tastendruck, hat das Bit den > gleichen Wert, wie im Vorgänger Telegramm. hast du das jetzt versehentlich vertauscht ? Wird der bit bei gedrücktgehaltener Taste NICHT gedreht? macht jetzt für mich so in der Form keinen Sinn. Aber der ansatz ist glaube ich ganz gut.
Christian schrieb: > hast du das jetzt versehentlich vertauscht ? > Wird der bit bei gedrücktgehaltener Taste NICHT gedreht? Zitat von http://www.opendcc.de/info/rc5/rc5.html " Die Daten werden solange gesendet, wie die Taste auf der Fernbedienung gedrückt ist. Das Toggle Bit wechselt bei jedem erneuten Drücken der Taste seinen Zustand. Dadurch kann der Empfänger Doppeldruck von einem langen Tastendruck unterscheiden. "
Vielen Dank erstmal. Ich werde michda mal durchlesen. Ich melde mich wenn was explodiert ist :D mfg Christian
Hi, man könnte es so machen: -bei einer gedrückten Taste in einem definierten Zeitabstand senden, sagen wir 200ms, warum auch nicht? Sonst nach Anforderung festlegen. -der Empfänger zieht beim Empfang einen Timer für diese Taste(n) mit 200ms*N auf. Schlägt der Timer zu, gilt/gelten die Taste(n) als ausgeschaltet. N > 2, einfach testen, welche Werte am Besten funktionieren und wie groß der "Überhang" sein darf.
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.