Arduino Library für Jeti EX Bus
- Sepp62
- Offline Autor
- Elite Mitglied
- Beiträge: 294
- Dank erhalten: 153
So, nach einigem Kampf mit dem ESP32 steht diese Version nun auch zum Download bereit:
github.com/Sepp62/JetiExBus
Getestet mit dem Adafruit ESP32 Feather-Board mit UART2.
github.com/Sepp62/JetiExBus
Getestet mit dem Adafruit ESP32 Feather-Board mit UART2.
von Sepp62
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- nightflyer88
- Offline
- Premium Mitglied
- Beiträge: 137
- Dank erhalten: 143
Super deine EX Bus Lib !! Besten Dank für deine mühe !!
Habe noch ein paar fragen dazu:
Du hast bereits eine Version für den ATmega32u4, demnach sollte die Lib eigentlich problemlos auch auf einem ATmega328 laufen ?
Gemäss Jeti Spezifikation ist beim EX Bus der Sensor der Slave und nichtmehr der Master. Wie sieht das ganze nun vom Timing her aus ? Könnte es Probleme geben, wenn die CPU Sensorenwerte per HW i2c einliest oder per UART GPS Daten verarbeiten muss ? Beides wird in der Regel mit Interrupts bewerkstelligt. Könnte ich die Lib nun problemlos in meinem VarioGPS einbauen ?
Habe noch ein paar fragen dazu:
Du hast bereits eine Version für den ATmega32u4, demnach sollte die Lib eigentlich problemlos auch auf einem ATmega328 laufen ?
Gemäss Jeti Spezifikation ist beim EX Bus der Sensor der Slave und nichtmehr der Master. Wie sieht das ganze nun vom Timing her aus ? Könnte es Probleme geben, wenn die CPU Sensorenwerte per HW i2c einliest oder per UART GPS Daten verarbeiten muss ? Beides wird in der Regel mit Interrupts bewerkstelligt. Könnte ich die Lib nun problemlos in meinem VarioGPS einbauen ?
von nightflyer88
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Sepp62
- Offline Autor
- Elite Mitglied
- Beiträge: 294
- Dank erhalten: 153
Ja, eigentlich sollte die Lib auch auf einem ATMega328 laufen. Der Code hat sich prinzipiell in der EX-Library bewährt, aber ich habe es nicht explizit getestet (ich habe inzwischen eine gewisse Aversion gegen die "Single-UART-CPUs" von AVR entwickelt).
Bei I2C habe ich leider zu wenig Erfahrung, um genau zu wissen, wie lange dort Interrupts gesperrt werden. Der Teensy hätte als zusätzlichen Vorteil, dass dort einer der UARTs ein Fifo besitzt, d.h. der ist in dieser Hinsicht noch unkritischer. Zudem kann er I2C über DMA.
Generell denke ich, dass die Chance aber ganz gut ist, dass Dein Code auch auf dem AtMega328 läuft.
Für Masochichsten gibt es nun auch eine ESP32-Version
VG Bernd
Bei I2C habe ich leider zu wenig Erfahrung, um genau zu wissen, wie lange dort Interrupts gesperrt werden. Der Teensy hätte als zusätzlichen Vorteil, dass dort einer der UARTs ein Fifo besitzt, d.h. der ist in dieser Hinsicht noch unkritischer. Zudem kann er I2C über DMA.
Generell denke ich, dass die Chance aber ganz gut ist, dass Dein Code auch auf dem AtMega328 läuft.
Für Masochichsten gibt es nun auch eine ESP32-Version
VG Bernd
von Sepp62
Folgende Benutzer bedankten sich: nightflyer88, HuHu
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Sepp62
- Offline Autor
- Elite Mitglied
- Beiträge: 294
- Dank erhalten: 153
Hier noch ein paar Worte zum Timing:
Mein Empfänger arbeitet prinzipiell auf 125kBit/s. Ich habe noch nicht rausgefunden, in welchen Fällen 250kBit/s verwendet werden. Daher unterstützt die Library im Moment nur 125 kBit/s. Alle Angaben beziehen sich daher auf diese Geschwindigkeit.
Der Empfänger schickt seine Servopositionen ungefähr alle 20ms.
Meist schickt er 2 Servopositionspakete und fordert dann ein Telemetriepaket oder ein Jetibox-Paket an. Ein Servopositionspaket dauert rund 4ms.
Fordert der Empfänger ein Telemetrie- oder Jetibox-Paket an, schaltet er den "Bus" für mindestens 4ms frei (sagt die Spec). Ein Telemetrie- oder Jetibox-Paket ist aber meist in 2ms draussen. Bis zum nächsten Paket hat man dann ca. 13ms Pause.
Wie die empfangenen Pakete aussehen, kann man sich anschauen, wenn man in der Protokoll-Implementierung "DumpPacket" auskommentiert (aber natürlich nicht auf AtMega328 ).
Die Library genehmigt sich genug Puffer für jeweils ein vollständiges Paket. Ein Zeichen wird in 8us übertragen. Solange können die Interrupts im Mittel gesperrt sein, wenn der UART kein Fifo besitzt.
Falls ich mich zu später Stunde verrechnet haben sollte, bitte ich um Entschuldigung.
VG Bernd.
PS: Habe gerade gesehen, dass Du AltSoftSerial für das GPS verwendest. Das wird in der Tat spannend, ob das noch funktioniert.
Mein Empfänger arbeitet prinzipiell auf 125kBit/s. Ich habe noch nicht rausgefunden, in welchen Fällen 250kBit/s verwendet werden. Daher unterstützt die Library im Moment nur 125 kBit/s. Alle Angaben beziehen sich daher auf diese Geschwindigkeit.
Der Empfänger schickt seine Servopositionen ungefähr alle 20ms.
Meist schickt er 2 Servopositionspakete und fordert dann ein Telemetriepaket oder ein Jetibox-Paket an. Ein Servopositionspaket dauert rund 4ms.
Fordert der Empfänger ein Telemetrie- oder Jetibox-Paket an, schaltet er den "Bus" für mindestens 4ms frei (sagt die Spec). Ein Telemetrie- oder Jetibox-Paket ist aber meist in 2ms draussen. Bis zum nächsten Paket hat man dann ca. 13ms Pause.
Wie die empfangenen Pakete aussehen, kann man sich anschauen, wenn man in der Protokoll-Implementierung "DumpPacket" auskommentiert (aber natürlich nicht auf AtMega328 ).
Die Library genehmigt sich genug Puffer für jeweils ein vollständiges Paket. Ein Zeichen wird in 8us übertragen. Solange können die Interrupts im Mittel gesperrt sein, wenn der UART kein Fifo besitzt.
Falls ich mich zu später Stunde verrechnet haben sollte, bitte ich um Entschuldigung.
VG Bernd.
PS: Habe gerade gesehen, dass Du AltSoftSerial für das GPS verwendest. Das wird in der Tat spannend, ob das noch funktioniert.
Last Edit:14 Feb. 2018 22:25
von Sepp62
Letzte Änderung: 14 Feb. 2018 22:25 von Sepp62.
Folgende Benutzer bedankten sich: nightflyer88
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- HuHu
- Offline
- Neues Mitglied
- Beiträge: 3
- Dank erhalten: 0
Für Masochisten gibt es nun auch eine ESP32-Version
{OK - wusste bis jetzt noch gar nichts von dieser Neigung }
Habe für das kleine Problemchen (TX-Pin abziehen) eine Übergangslösung gefunden:
nach ... exBus.Start("EX Bus", sensors, 2);
pinMatrixOutDetach(17, true, true);
Läuft wunderbar - nochmals ganz herzlichen Dank für dein "Kunstwerk".
{OK - wusste bis jetzt noch gar nichts von dieser Neigung }
Habe für das kleine Problemchen (TX-Pin abziehen) eine Übergangslösung gefunden:
nach ... exBus.Start("EX Bus", sensors, 2);
pinMatrixOutDetach(17, true, true);
Läuft wunderbar - nochmals ganz herzlichen Dank für dein "Kunstwerk".
Last Edit:15 Feb. 2018 14:25
von HuHu
Letzte Änderung: 15 Feb. 2018 14:25 von HuHu. Begründung: wichtige Zeile vergessen
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- HuHu
- Offline
- Neues Mitglied
- Beiträge: 3
- Dank erhalten: 0
Wollt's mal auf die Schnelle mit dem 328 probieren --> bringt leider diese Fehlermeldungen:
Arduino: 1.8.5 (Windows 10), TD: 1.40, Board: "Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)"
HardwareSerial0.cpp.o (symbol from plugin): In function `Serial':
(.text+0x0): multiple definition of `__vector_18'
libraries\JetiExBus-master\JetiExBusAtMegaSerial.cpp.o (symbol from plugin).text+0x0): first defined here
HardwareSerial0.cpp.o (symbol from plugin): In function `Serial':
(.text+0x0): multiple definition of `__vector_19'
libraries\JetiExBus-master\JetiExBusAtMegaSerial.cpp.o (symbol from plugin).text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board Arduino Pro or Pro Mini.
LG HuHu
Arduino: 1.8.5 (Windows 10), TD: 1.40, Board: "Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)"
HardwareSerial0.cpp.o (symbol from plugin): In function `Serial':
(.text+0x0): multiple definition of `__vector_18'
libraries\JetiExBus-master\JetiExBusAtMegaSerial.cpp.o (symbol from plugin).text+0x0): first defined here
HardwareSerial0.cpp.o (symbol from plugin): In function `Serial':
(.text+0x0): multiple definition of `__vector_19'
libraries\JetiExBus-master\JetiExBusAtMegaSerial.cpp.o (symbol from plugin).text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board Arduino Pro or Pro Mini.
LG HuHu
von HuHu
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.961 Sekunden