Matrixtastenfeld per UART "gedrückt halten" (AVR)

Gast #4249564
Lesenswert?

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
Gast #4249598
Lesenswert?

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.
Gast #4249608
Lesenswert?

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.
Gast #4249651
Lesenswert?

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. "
Gast #4251162
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren