Seite 1 von 2
#1 XIAO zum SBUS auswerten von Xenton 11.09.2021 21:53

avatar

Moin,

ich habe ja nun auch mit dem Seeeduino XIAO und Arduino angefangen. und wie das so ist, hat man ja im Kopf, was es mal werden soll.
Bei mir eine SBUS Auswertung.
Ich habe einen X6R Empfänger mit SBUS Ausgang. Dort hängt über einen Inverter mit Level-Shifter an PIN7 (UART, RX) der XIAO.
Nun wäre die erste Aufgabe eine LED umzuschalten wenn Kanal 1 einen bestimmter Wert annimmt.
Bislang scheitere ich daran grandios.
Hier ist der Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 

#include "SBUS.h"
 
// a SBUS object, which is on hardware
// serial port 1
SBUS x8r(Serial1);
 
// channel, fail safe, and lost frames data
uint16_t channels[16];
bool failSafe;
bool lostFrame;
 

 
void setup() {
 
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(0, OUTPUT);
 
// begin the SBUS communication
x8r.begin();
 
digitalWrite(0, LOW);

digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
delay (1000);
digitalWrite(0, HIGH);
}
 
void loop() {
 
// look for a good SBUS packet from the receiver

// if(x8r.read(&channels[1], &failSafe, &lostFrame)){
 
// digitalWrite(0, LOW);
 
// write the SBUS packet to an SBUS compatible servo
if (channels[1] > 200 && channels[1] < 1000 ) {
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
}
else {
digitalWrite(1, HIGH);
digitalWrite(2, LOW);
}
// }
}
 
 



Hat jemand dazu eine Idee?

Ach ja, ist es eigentlich möglich Daten über den Serial Monitor auszugeben, die vom seriellen Anschluß (pin7) eingelesen werden? Oder stört sich das?

Mir raucht ein wenig der Schädel...

#2 RE: XIAO zum SBUS auswerten von marcedi 12.09.2021 12:45

avatar

Hallo Martin,
in ermangelung eines XIAO kann ich Dir nicht sagen, ob die SBUS library kompatibel mit dem neuen Controller ist. Die Uart am XIAO hört auf den Namen Serial1 - der USB Anschluss auf Serial oder SerialUSB. Wenn Du Daten von einem zum anderen schicken wilst, musst Du beide Schnittstellen initialisiere (Serial.begin) und dann in Deinem Fall an Serial1 auf Daten überprüfen (if Serial1.available) und diese dann in einer Endlosschleife an die andere Schnittstelle senden (SerialUSB.print)

Gruss
Marco

#3 RE: XIAO zum SBUS auswerten von Xenton 12.09.2021 14:54

avatar

Danke für die schnelle Antwort.
Das heißt, so ganz auf dem falschen Dampfer bin ich scheinbar nicht.

So sieht der Sketch jetzt aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 

#include "SBUS.h"
 
// a SBUS object, which is on hardware
// serial port 1
SBUS x8r(Serial1);
 
// channel, fail safe, and lost frames data
uint16_t channels[16];
bool failSafe;
bool lostFrame;
 
void setup() {
 
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(0, OUTPUT);
 
Serial.begin(115200);
 
// begin the SBUS communication
x8r.begin();
digitalWrite(0, LOW);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
Serial.println("SBUS"); //damit ich überhaupt eine Reaktion bekomme
delay (1000);
digitalWrite(0, HIGH);
}
 
void loop() {
 
// look for a good SBUS packet from the receiver
// if(x8r.read(&channels[1], &failSafe, &lostFrame)){
if (Serial1.available()) {
Serial.println(channels[0]);
digitalWrite(0, HIGH);
if (channels[1] > 200 && channels[1] < 1000 ) {
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
}
else {
digitalWrite(1, HIGH);
digitalWrite(2, LOW);
}
}
else {
digitalWrite(0, LOW);
Serial.println("Serial1 not available");
}
}
 
 



Scheinbar ist serial1 nicht available...
Der Serial Monitor funktioniert aber.

Jetzt ist die Frage warum?
Leider kann ich, in Ermangelung eines Scopes oder Logic Analysers, nicht nachprüfen, ob am Eingang des XIAO überhaupt was ankommt.

Wenn Du Interesse hättest, Dich ein wenig mehr in Materie einzuarbeiten kann ich Dir gerne einen XIAO zukommen lassen.
Das Projekt soll eine Auswertung des SBUS Signals sein, um die Lichter fürs Boot zu schalten und evtl noch einen Motor oder ein Servo.

#4 RE: XIAO zum SBUS auswerten von marcedi 12.09.2021 17:37

avatar

Hallo Martin,

Ich würde erst einmal ganz von vorne anfangen. Vergiss erst einmal die librarys.

1
2
3
4
5
6
7
8
9
10
11
12
13
 

Int incomingByte =0;
Void setup() {
Serial1.begin(100000);
Serial.begin(115200);
}
void loop() {
If(Serial1.available() > 0) {
IncomingByte= Serial1.read();
Serial.print(incomingByte, HEX);
}
}
 
 



Da ich im Urlaub bin, habe ich das aus dem Kopf geschrieben. Damit sollte aber der SBUS Datenstrom vom Serial1 auf dem USB ausgegeben werden.

Gruss
Marco

#5 RE: XIAO zum SBUS auswerten von Xenton 12.09.2021 17:46

avatar

Oh Mann...
wenn man SBUS-in am Empfänger nutzt kann es natürlich nicht gehen.
Mit SBUS-out bekommt er immerhin ein serielles Signal. Allerdings liest er immer noch "0"

Mit Deinem Code kommen wunderschöne Hexadezimalzahlen im Monitor an. Das funktioniert jedenfalls schon mal. Vielen Dank dafür.

#6 RE: XIAO zum SBUS auswerten von Xenton 12.09.2021 17:50

avatar

Nächster Versuch:
Mit einem fertigen SBUS->PWM Converter lässt sich ein Servo ansteuern.
Die Ausgabe des SBUS am Empfänger funktioniert also.

#7 RE: XIAO zum SBUS auswerten von marcedi 12.09.2021 17:59

avatar

Hallo Martin,
Schön das es jetzt klappt. Nun muss das SBUS Protokoll analysiert werden und in Funktionen gewandelt werden. Das mache ich aber nicht vom iPad aus dem Urlaub.

Auf dieser Seite ist das SBUS Protokoll gut beschrieben ( https://github.com/bolderflight/sbus ). Du kannst natürlich auch noch einmal die library testen
Gruss
Marco

#8 RE: XIAO zum SBUS auswerten von Xenton 12.09.2021 18:56

avatar

Moin Marco,

ich habe die library nochmal mit dem Beispiel-Sketch getestet und siehe da, ich bekomme vernünftige Werte zurück!
Es geht also. Der Rest ist Fleißarbeit.

Vielen dank nochmal und einen schönen Urlaub.

#9 RE: XIAO zum SBUS auswerten von Xenton 12.09.2021 19:12

avatar

So, jetzt habe ich den Beispielsketch (Bolderflight SBUS) noch ein wenig frisiert und bekomme nun alle aktuellen Werte der ersten vier Kanäle über den Monitor ausgegeben.
Den Code will ich Euch nicht vorenthalten:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 

#include "SBUS.h"
 
// a SBUS object, which is on hardware
// serial port 1
SBUS x8r(Serial1);
 
// channel, fail safe, and lost frames data
uint16_t channels[16];
bool failSafe;
bool lostFrame;
 
void setup() {
// begin the SBUS communication
x8r.begin();
Serial.begin(115200);
}
 
void loop() {
 
if(x8r.read(&channels[0], &failSafe, &lostFrame)){
Serial.print(channels[0]); Serial.print("\t");
Serial.print(channels[1]); Serial.print("\t");
Serial.print(channels[2]); Serial.print("\t");
Serial.print(channels[3]); Serial.print("\t");
Serial.print(channels[4]); Serial.print("\t");
Serial.print(channels[5]); Serial.print("\t");
Serial.print(channels[6]); Serial.print("\t");
Serial.println(channels[7]);
}
}
 
 



Und hier die Schaltung des Inverters mit Levelshifter (Der Empfänger läuft auf 5V, der XIAO kann aber nur 3.3V ab. Außerdem muß das Signal eben invertiert werden):

Bild entfernt (keine Rechte)

Angeschlossen wird der Inverter an PIN7 des XIAO.

#10 RE: XIAO zum SBUS auswerten von marcedi 12.09.2021 19:39

avatar

Hallo Martin,
das sind doch prima Neuigkeiten. Kleiner Tipp: als Levelshifter eignen sich auch gut kleine MosFETs. Das hat den Vorteil, das selbst bei kleinsten Signal Spannungen (3,3V) der MosFET sauber durchschaltet.

Gruss
Marco

#11 RE: XIAO zum SBUS auswerten von Xenton 12.09.2021 19:50

avatar

Moin Marco,

Ich habe hier einzelne, 5V tolerante, CMOS Gatter (Inverter) in SMD (SOT23-5) liegen. Die wollte ich später einsetzen. Aber MosFET klingt auch gut.

#12 RE: XIAO zum SBUS auswerten von marcedi 12.09.2021 19:54

avatar

Wenn Du eh auf SMD gehst: IRLML2502

Den nutze ich bei allen Schaltungen als Eingangspuffer

#13 RE: XIAO zum SBUS auswerten von Xenton 14.09.2021 22:42

avatar

Es ist mir jetzt außerordentlich peinlich, daß ich diese Frage stellen muß. Ich habe den Kram immerhin gelernt. Aber über 30 Jahre ohne Praxis hinterlassen eben ihre Spuren...
Also: Wie schließt Du die FETs an?

#14 RE: XIAO zum SBUS auswerten von marcedi 15.09.2021 11:30

avatar

Hallo Martin,
anbei der Schaltplan von meiner Eingangsstufe.

Bild entfernt (keine Rechte)

Gruss Marco

#15 RE: XIAO zum SBUS auswerten von Xenton 16.09.2021 17:27

avatar

Super, vielen Dank.
Die FETs sind noch auf dem Postwege.
Die müssten sich doch auch als bidirektionaler Levelshifter nutzen lassen, oder ?
ungefähr so:

Bild entfernt (keine Rechte)

Xobor Forum Software von Xobor
Datenschutz