Forum: Mikrocontroller und Digitale Elektronik JETI-Protokol


von Frank (Gast)


Lesenswert?

Hallo,

ich versuche gerade per JETI Daten auf dem Rückkanal vom RX zur JETI-Box 
zu übertragen.
Ich habe dazu an meinem µC die Rx mit der Tx Leitung über eine 1n4007 
verbunden. An der Rx(Anodenseite) ist der JETI-RX(2.4EX) an den Port 
(Ext.) angeschlossen.

Zum Testen sende ich 34 Bytes 0xFE, 32 x'H', 0xFF.

Die JetiBox zeigt den gefundenen RX an und auch die RX-Spannung (3,3V). 
D.h. der RX wurde gefunden. Der TX piepst dann einmal lang, pause, usw. 
Eine Anzeige meines Textes bekomme ich nicht.

Habe ich noch was übersehen? Muss ich noch was beachten?

Frank

von Frank (Gast)


Lesenswert?

push :-)

Hat keiner 'ne Idee?

von Nils P. (ert)


Lesenswert?

Ich bin mir momentan nicht sicher ob der Anschluss richtig ist... Ich 
habe es nach der Mikrokopter-Anleitung gemacht. Ich schau wenn ich 
zuhaus bin mal in meine Unterlagen, wie ich es gelöst habe.

Gruß Termi

von Peter D. (peda)


Lesenswert?

Irgendwelche Links, Gerätebezeichnungen?

Warum soll jeder erst grübeln, was Du meinst.

von Frank (Gast)


Lesenswert?

Hallo Nils,

danke für Dein Angebot mit dem Nachschauen. Ich habe es nach dieser 
Anleitung gemacht:
http://www.mikrokopter.de/ucwiki/JetiBox


Hallo Peter,

wenn man so tief an einem Problem arbeitet fällt es (mir) schwer einen 
Schritt zurück zu machen :-)

Also:
Das RC Übertragungssystem ist ein JETI duplex (2,4EX). Sender und 
Empfänger.

Verkabelung hier abgeschaut:
http://www.mikrokopter.de/ucwiki/JetiBox

JETI-Protokol:
http://www.jetimodel.com/en/Telemetry-Protocol/JETI-Telemetry-Communication-Protocol/

Mein STM32 ist wie folgt initialisiert:
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
USART_InitStructure.USART_StopBits = USART_StopBits_2;
USART_InitStructure.USART_Parity = USART_Parity_Odd;

Baudrate passt. Das kann ich mit dem Scope sehen.

Code:
1
void SendJeti(void)
2
{
3
uint16_t i = 0;
4
  
5
  //Framebeginn
6
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
7
  USART_SendData(USART1, 0x00FE);
8
  
9
  for (i=1; i<=32; i++)
10
  {
11
    //Senden von 32 x 'H'
12
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
13
    USART_SendData(USART1, 0x0148);
14
  }
15
  
16
  //Frameende
17
  while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
18
  USART_SendData(USART1, 0x00FF);
19
  
20
  //Antwort abwarten
21
  wait_ms(50);
22
}

Gesendet wird auch, sieht man mit dem Scope.


Frank

P.S. Das mit dem Piepssignal hat sich geklärt. Es war Akkuunterspannung 
des Rx (Wegen der 3,3V Spannungsversorgung) Ich versorge den Rx jetzt 
mit 5V. Damit ist das Piepsen weg. Unter Mx an der Jetibox wird aber 
weiterhin nix angezeigt :-(

von Frank (Gast)


Lesenswert?

Hallo,

bin wieder etwas weiter.
Die gedrückten Taster an der JetiBox kann ich jetzt im µC erkennen und 
Aktionen ausführen. Leider zeigt mit die Box immer noch keinen Text an. 
Nur "Mx Connecting".

Kann es sein das es irgendeinen Konflikt mit dem "alten-" und dem neuen 
"EX"-Protokoll gibt? Ich hatte das so verstanden, das man beide parallel 
betreiben kann.

Frank

von Cyblord -. (cyblord)


Lesenswert?

Also ich mache Sensoren für MPX M-Link, aber ich kann dein Problem grade 
überhaupt nicht verstehen.
Ich kenne das Jeti Protokoll nicht. Aber reicht es die richtigen Daten 
über den UART rauszuschreiben? Gibts da keinerlei Timings-Constraints? 
Sonstige Dinge zu beachten? Bei M-Link ist das Timing wichtig. Sendest 
du exakt nach Spezifikation?

gruß cyblord

von Frank (Gast)


Lesenswert?

Hallo cyblord,

laut Scope sende ich nach Spec. Die Übertragung geht über einen Kanal 
der Rx und Tx vom µC über eine Diode zusammenfasst. Dann gibt es beim 
Protokoll 4 Varianten. Es müsste eigentlich alles passen. Eigentlich :-)

Frank

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Das Problem liegt beim USART. STM erlaubt nur insgesamt neun Datenbits, 
und zwar inklusive Parität. Deswegen bedeutet USART_WordLength_9b nicht 
etwa 9 Bit + Parität. Das Jeti-Duplex-Protokoll benötigt jedoch beides, 
d.h. echte neun Nutzdatenbits plus Parität.

Die ATmega-Prozessoren, wie sie von Jeti durchgängig eingesetzt werden, 
beherrschen jedoch die geforderte Betriebsart.

Um mit einem STM32 arbeiten zu können, muss man zu anderen Tricks 
greifen, z.B. zu einem Software-UART mit DMA. Das funktioniert in 
unseren Fernsteuerungen (iVol 2G16 usw.) mit Jeti-Modul(en) und 
Jetibox-Anschluss einwandfrei.

von Nils P. (ert)


Lesenswert?

Ich habe mir mal ein Menü für einen Multiwii-Kopter gebaut... FÜr ein 
AIO Pro V1. Da sitzt aber ein Atmega drauf... Habe mir dafür mehrere 
Arduino Libs zusammenkopiert ;-). Wenn du mir deine Emails als PM 
schickst mach ich dir das Projekt als Zip fertig, evtl kannst du 
abkupfern.

Auf der Empfänger Seite geht auch die Anleitung von Jeti nicht, da muss 
man sich an die von mikrokopter halten (hast du ja schon gemacht)

Auf der Senderseite hab ich es damals aber anders gelöst (kp warum):
Rx---->100Ohm-------+------->4k7Ohm ----> Jeti TG2 Pin D
tx------------------^

So lief es bei mir.

Gruß
Ert

von Frank (Gast)


Lesenswert?

Hallo Andreas,

danke für Deine Antwort.

Du meinst also die USART_WordLength_9b sind inklusive der 
USART_Parity_Odd? Das wäre ja ultradämlich :-(

USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_9b;
USART_InitStructure.USART_StopBits = USART_StopBits_2;
USART_InitStructure.USART_Parity = USART_Parity_Odd;

Ich kann das 0xFO des Rx empfangen und auswerten!?


Gruß
Frank

von Frank (Gast)


Lesenswert?

Hallo Niels,

danke für Dein Angebot mir dem Sourcecode. Da ich einen STM32 verwende 
wird mir das laut Andreas leider nichs nützen. Danke trotzdem.

Frank.

von Frank (Gast)


Lesenswert?

Hallo,

so. Wieder etwas weiter gekommen.
Ich habe mir jetzt erstmal über einen 104µs Timerinterupt eine eigene 
USART-Senderoutine gebaut. Die Bits sind 104µs lang und ich kann jetzt 1 
startbit, 9 daten bits, 1 parity(odd) und 2 stoppbits senden. Laut Scope 
ist alles toll! Leider zeigt die verd* JetiBox immer noch nichts an :-(. 
Nur "Mx Connecting".

Am Rx kann ich auf der Zusammengefassten D-Leitung alle 200ms ein 0xF0, 
das den Tastenzustand der Box wiedergibt, ablesen (Scope). Ich sende 
dann auf Tastendruck (Rechts) ein Datenpacket mit den 32 Byte Nutzdaten. 
Demnach bin ich (µC)Slave?

Bei Start- und Ende"byte" ist das 9. Bit = 0 und bei den 32 Daten"bytes" 
ist das 9. Bit = 1. Dies kann ich auch alles auf dem Scope sehen und ich 
bekomme das Protokoll mit dem Scope auch entschlüsselt. Er zeigt mit 
zwar Parityfehler an, was aber auch nicht verwunderlich ist, da ich beim 
Scope dieses besch* Sonderformat auch nicht genau einstellen kann.

Auf Senderseite scheinen die Daten auch gar nicht erst anzukommen 
(Scope). Muss ich im Tx oder Rx noch irgendwas parametrieren, damit die 
Daten auch an die Box gesendet werden? habe in der Anleitung nichts dazu 
gefunden (oder überlesen)

Frank

von Moritz M. (avrprogger)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hab auch mal Daten mit einem Mikrcontroller auf der JetiBox 
ausgegeben. Ich musste alle Info mühselig aus dem Internet zusammen 
kramen und selber messen. Hab dann per Mail Jeti gefragt ob sie nicht 
die Daten veröffentlichen wollen. Jetzt suche ich im Internet und finde 
gleich das passende PDF.
Vllt. bringt es dir was.

mfg.
Moritz

von Frank (Gast)


Lesenswert?

Hallo Moritz,

danke für Deine Antwort. Das Dokument kenne ich. Es ist meine 
Arbeitsgrundlage :-)

Nachdem ich mit dem 9 Bit Modus beim STM32 meine Probleme hatte sende 
ich jetzt Spec. konform.
Muss man beim Einschalten noch irgendeine Initialisierung anstossen oder 
müssten die "Simple Text" Daten unter "Mx" sofort angezeigt werden?

Ich sende jetzt nach jeder 0xF0 oder Tastensendung der Box einen 34 
"Byte"Frame. Gibt es noch irgendetwas anderes zu beachten?

Frank

von Frank (Gast)


Lesenswert?

Hallo,

leider immer noch keinen Erfolg:-( Kann es sein, das der Jeti Rx nicht 
mit den 3,3V des STM32 zurechtkommt? Die Sofwareusart arbeitet vom 
Timing her perfekt. Laut Spec. müsste es gehen:

Logic levels:
Maximum level of logical zero “0”: 1,5V
Minimum level of logical one “1”: 3,0V

Muss man die Verbindung noch initialisieren?

Frank

von Moritz M. (avrprogger)


Lesenswert?

Hallo,

ich hab mit 5V gearbeitet. Weiß aber nicht genau wie das jetzt ist, neue 
version oder so. Vllt mal mit nem Oszi am Sender messen oder so.

mfg
Moritz

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.