Bidirektionale Kommunikation / Textübertragung
Bidirektionale Kommunikation / Textübertragung
Hallo,
ich hatte bei mir das Problem, dass die Anzeige an der MX-12 teilweise gar nichts mehr anzeigt hat.
Nun habe ich mal die Kommunikation mittels HTerm und einem FT232 RL USB-RS232 Konverter zwischen meinem Empfänger und einem Original Vario
mitgehört und den Code um die bidirektionale Kommunikation erweitert, somit läuft es bei mir zuverlässiger. Den RX und TX Anschluss des uC´s
habe ich mit je 510 Ohm auf den Signalpfad zum Telemetrieeingang des Empfängers geführt -> macht Jeti mit seinen AVR´s wohl auch so... Einen
zusätzlich Baustein benötigt man normalerweise nicht. Für den Kollisionsfall hängt der Widerstand dazwischen.
Hier habe ich übrigens eine (teilweise) Dokumentation des HOTT Protokolls gefunden:
http://forums.openpilot.org/topic/7282-free-transmission-of-telemetry-with-voice-feedback/ -> siehe: Sensorenschnittstelle_V3.doc
Hier der Codeauschnitt in dem zuvor auf die Anfrage vom Empfänger gewartet wird und nur zum Senden die TX Leitung als Ausgang geschaltet wird:
void GMessage::send()
{
int incomingByte = 0;
UCSR0B &=~(1<<TXEN0); // Set TX output as input
pinMode(0,INPUT); // 0 = tx;
if (Serial.available() > 0)
{
// read the incoming byte:
incomingByte = Serial.read();
}
if (incomingByte == 0x8d) //0x8d) // Wait for Sensorrequest from receiver ; 0x89 -> vario; 0x8d -> General Moudule
{
UCSR0B |=(1<<TXEN0); // Switch TX to Output only for transmitting the sensor string
pinMode(0,OUTPUT); // 0 = tx
// Varioteststring (zuvor vom original Vario mitgeloggt, incl. Checksumme):
//uint8_t message_array[36] = {
//0x7C, 0x89, 0x00, 0xF5, 0x01, 0xF6, 0x01, 0xF4, 0x01, 0x26, 0x75, 0x4E, 0x75, 0x30, 0x75, 0x00, 0x7D, 0x67 }; // Vario Teststring...
// Chechsumme auskommentieren und LENGTH gleich 18 setzen zum testen...
message_array[MESSAGE_CHECKBYTE_POS] = checksumme(message_array);
for(int i = 0; i < LENGTH; i++) // LENGTH; i++) für Varitest LENGTH gegen 18 ersetzen
{
Serial.print(message_array
, BYTE);
delay(PROZESSOR_GESCHWINDIGKEITS_TYP);
}
UCSR0B &=~(1<<TXEN0); // Set TX output as input again
pinMode(0,INPUT); // 0 = tx;
}
}
Interessant finde ich auch, dass Hott eine Textübertragung mit eingebaut hat, mit der die Sensoren konfiguriert werden können -> fände ich
besonders interessant um z.B. meinen WII Copter per HOTT zu konfigurieren...
Hier noch einige meiner bisherigen Erkenntnisse durch das Mitloggen und der Doku auf http://forums.openpilot.org:
Empfänger sendet ohne Sensor, Sender aus:
00 00 00 00 0x7f 00,
dann:
0x7F 0xFF fortlaufend
Empfänger sendet ohne Sensor, Sender an, kein Sensor im Sender ausgewählt:
00 00 00 00
dann 0x80 0x80 fortlaufend
0x80 ist wohl um den Empfänger selbst zu addressieren..
Sensoren im Sender ausgewählt:
nach Einschalten des Empfängers immer zuerst
00 00 00 00
..jedoch mit "General Moudul" ausgewählt:
0x80 0x8d fortlaufend
..jedoch mit Electric Air Moudul" ausgewählt:
0x80 0x8e fortlaufend
..jedoch mit Vario Moudul" ausgewählt:
0x80 0x89 fortlaufend
..jedoch mit "GPS Moudul" ausgewählt:
0x80 0x8A fortlaufend
Kein Sensor Angeschlossen, Vario im Senser ausgewählt, Menü "Einstellen, Anzeigen" aufgerufen:
Empfänger sendet "7F FF" fortlaufend
... nun wird das Vario angesteckt:
ASCII:
??????????<\n>??{?<\0>
Vario Sensor <> Altitude : 0.0m Min. : 0.0m Max. : 0.0mDiff./Sec : 0.0mDiff./ 3S
: 0.0mDiff./10S : 0.0m }??{?<\0>
HEX:
7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 0A 7F FF 7F FF 7B 80 00 20 20 20 20 56 61 72 69 6F 20 53 65 6E 73 6F 72 20 20 20 3C
3E 20 41 6C 74 69 74 75 64 65 20 3A 20 20 20 20 20 20 30 2E 30 6D 20 20 20 20 4D 69 6E 2E 20 20 3A 20 20 20 20 20 20 30 2E 30 6D 20 20 20 20 4D
61 78 2E 20 20 3A 20 20 20 20 20 20 30 2E 30 6D 44 69 66 66 2E 2F 53 65 63 20 3A 20 20 20 20 20 20 30 2E 30 6D 44 69 66 66 2E 2F 20 33 53 20 3A
20 20 20 20 20 20 30 2E 30 6D 44 69 66 66 2E 2F 31 30 53 20 3A 20 20 20 20 20 20 30 2E 30 6D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 7D C4 7F FF 7B 80 00
reines Packet:
ASCII:
Vario Sensor <> Altitude : - 0.1m Min. : - 0.1m Max. : 0.0mDiff./Sec : 0.0mDiff./ 3S : 0.0mDiff./10S :
0.0m }??{?<\0>
bzw. HEX:
20 20 20 20 56 61 72 69 6F 20 53 65 6E 73 6F 72 20 20 20 3C 3E 20 41 6C 74 69 74 75 64 65 20 3A 20 20 2D 20 20 20 30 2E 31 6D 20 20 20 20 4D 69
6E 2E 20 20 3A 20 20 2D 20 20 20 30 2E 31 6D 20 20 20 20 4D 61 78 2E 20 20 3A 20 20 20 20 20 20 30 2E 30 6D 44 69 66 66 2E 2F 53 65 63 20 3A 20
20 20 20 20 20 30 2E 30 6D 44 69 66 66 2E 2F 20 33 53 20 3A 20 20 20 20 20 20 30 2E 30 6D 44 69 66 66 2E 2F 31 30 53 20 3A 20 20 20 20 20 20 30
2E 30 6D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7D E0 7F FF 7B 80 00
Vario angesteckt, Menü verlasse, Messwerte vom Vario werden fortlaufend gesendet:
7C 89 00 F5 01 F6 01 F4 01 26 75 4E 75 30 75 00 7D 67
7C 89 00 F5 01 F6 01 F4 01 30 75 4E 75 30 75 00 7D 71
Umschaltung Menü -> Messwertübertragung:
ASCI:
Diff./10S : 0.0m }???|?<\0>?<1>?<1>?<1>0uNu0u<\0>}q??|?<\0>?<1>?<1>?<1>&uNu0u<\0>}g??|?
HEX:
44 69 66 66 2E 2F 31 30 53 20 3A 20 20 20 20 20 20 30 2E 30 6D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7D DF 80 89 7C
89 00 F5 01 F6 01 F4 01 30 75 4E 75 30 75 00 7D 71 80 89 7C 89 00 F5 01 F6 01 F4 01 26 75 4E 75 30 75 00 7D 67 80 89 7C 89
Lesen vom Vario mittels Hterm:
Vermutlich richtig so: 0x80 (Emfpfängerbyte) 4ms Pause 0x89 (Adressierung Vario)
da keine Delays mit Hterm erzeugt werden können:
PC: 0x80 0x80 0x89
Vario:
ASCII: |?<\0>?<1>?<1>?<1>Nu&u0u<\0>}g
HEX: 7C 89 00 F5 01 F6 01 F4 01 4E 75 26 75 30 75 00 7D 67
-> 80 80 89 wird natürlich als Echo dargestellt, da RX und TX über Wid. verbunden ist, die Antwort ist ohne PC Echo dargestellt
Textausgabe des Varios starten:
Vermutlich richtig so: 0x7F 4ms Pause 0xFF (im letzen FF sind die Tastendrücke codiert!)
da keine Delays mit Hterm erzeugt werden können:
Experimentell vom PC gesendet:
7F FF FF
Antwort vom Vario:
ASCII:
{?<\0> Vario Sensor <> Altitude : - 2.4m Min. : - 3.0m Max. : 2.5mDiff./Sec : 0.5mDiff./ 3S : 0.1mDiff./10S :
- 0.2m }<3>
HEX:
7B 80 00 20 20 20 20 56 61 72 69 6F 20 53 65 6E 73 6F 72 20 20 20 3C 3E 20 41 6C 74 69 74 75 64 65 20 3A 20 20 2D 20 20 20 32 2E 34 6D 20 20 20
20 4D 69 6E 2E 20 20 3A 20 20 2D 20 20 20 33 2E 30 6D 20 20 20 20 4D 61 78 2E 20 20 3A 20 20 20 20 20 20 32 2E 35 6D 44 69 66 66 2E 2F 53 65 63
20 3A 20 20 20 20 20 20 30 2E 35 6D 44 69 66 66 2E 2F 20 33 53 20 3A 20 20 20 20 20 20 30 2E 31 6D 44 69 66 66 2E 2F 31 30 53 20 3A 20 20 2D 20
20 20 30 2E 32 6D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7D 03
Tasten (Menünavigation Überprüft mittels 2 Varios, eines am PC eines am Emfänger):
FF: 1111 1111: Keine Taste gedrückt
FE: 1111 1110: rechts
FD: 1111 1101: down
FB: 1111 1011: up
F9: 1111 1001: set
F7: 1111 0111: links
Grüße,
Jochen