SBUS-Switch

cool - dann muss ich ja mal etwas Gas mit der aktuellen Version geben.
Ich will noch eine Servofunktion einbauen.
Die Version 2.2.0 (Beitrag 54) funktioniert ja sehr gut, solange man bei den Jetiempfängern keine langen Frame-Zeiten einstellt.
Updaten kannst Du ja jetzt selbst
 
aber jetzt !

Version 2.3.1
wichtigste Neuerungen:
Frame-Erkennung überarbeitet. Erlaubt Framing 5ms bis unendlich
PWM-Frequenz einstellbar (z.B. 15Hz für Strobe-Lights)
manuelle Kalibrierung des CPU-Takt

die .zip.dat muss in .zip umbenannt werden
 

Anhänge

  • SBUS-Switch_231.zip.dat
    36,2 KB · Aufrufe: 181
  • SBUS-Switch V2.3.1.pdf
    722,2 KB · Aufrufe: 304
Moin
Wenn ich darf, würde ich etwas vorschlagen.
Habe mal für den AVRooltloader Bootloader auf das Prjekt mit den Attiny4313 angepasst. (PD6 8MHz...)
Wenn der Bootloader einmal drauf ist, kann das Ganze danach einfach über das Servokabel geflasht werden (ähnlich wie bei den Reglern), und muss nicht ständig an den ISP.
Als Adapter funktionieren naehzu alle gängen 1wire Modellbauteile, Graupner, Jeti BLHeli u.s.w.

AVRootl.png


Ein weiterer Vorteil, man könnte ein Menü für den PC über das EEprom aufbauen, um Nutzereinstellung zu machen. Für ein einfaches Menü ist alles im Programm AVRootloader schon enthalten.
Beispiel (hier ein MPP Attiny 44)
AVRootloader.png





Die angehängte Hex einmal mit den Fuses l:E4 h:9F e:FE flashen
(Das e:FE ist wegen selfprogn wichtig, der Rest muss halt auf 8MHz hinauslaufen).

Zum brennen über den ISP oder das File direkt nutze ich den AVRDUDESS, das empfinde ich auch als einfacher.
Oder direkt inkl Fuses (hier it dem 1,2€ teuren USBTiny Programmer, der für sowas bestens funktioniert).
avrdude -c usbtiny -p t4313 -b 19200 -U flash:w:"Boot_4313_PD6_lE4_h9F_eFE.hex":a -U lfuse:w:0xE4:m -U hfuse:w:0x9F:m -U efuse:w:0xFE:m

Im Anhang auch der Code für den One-Wire Adapter auf Nano/Uno Basis, One-Wire Pin ist D3.
Das .txt bei den Anhänge wegwischen ....

Ich hoffe ihr könnt es gebrauchen :-)
 

Anhänge

  • Boot_4313_PD6_lE4_h9F_eFE.hex.txt
    1,5 KB · Aufrufe: 335
  • OneWireAdapter_BLHeli_NanoUno.txt
    2,9 KB · Aufrufe: 146
Vergessen...
Der Attiny hat USI (Universal Serial Interface). USI kann auch direkt ohne viel Gewürge wunderbar SBUS auslesen, da eh über einen Pin Hardware Interrupt gesteuert wird, ist es USI egal das das SBUS-Signal aufem Kopp steht. (darum brauchts am USART ja immer den Transistor, oder mal puzzelt es ein).
Das Gewürge mit Hirnknoten ist dann das auseinanderpuzzeln der empfangenen Bytes. Es steht dann nicht wie üblich nur aufem Kopp (1 ist 0), sondern zusätzlich auch noch verkehrt herum im Byte (Bit 0 ist 7 - und Bit 7 ist Null), ansich ists egal, da es eh Bitweise auseinandergefusselt werden muss (8zu111Bit....).

Irgendwo müsste ich den Code dazu noch haben, wenn es interessiert. Für den Attiny44. (Beim Attiny4313 gab es aber USI Probleme, da hierfür der PCINT0 am DI-Pin zuständig ist, und der gerne zickig sein möchte (bekannter Fehler im Compiler beim 4312). - dafür könnte man mit einem Drähtchen zum Hardware INT0 oder INT1 legen, würde zusätzlich noch die Flankenabfrage sparen).


Aber 2021:)
Es gibt die neuen Series 1/2 Attinys mit 8/14/20Pins. Die Teile kosten um die 50Cent, und habenvon Haus aus einen 1Wire Pin (UPDI) einen XMega Kern drauf. Es gibt einen Inverter für jeden Pin, den aktiviert man, und kann so direkt SBUS über den ganz normalen USART einlesen.
Wenn Interesse, kann ich mal meinen teil-fertigen Code dafür teilen (einlesen läuft bereits, das Randzeug wie Failsave u.s.w. fehlt noch).
 
Zuletzt bearbeitet:
Hallo Holger
Danke für Deine Anregungen.
das mit dem Bootloader schaue ich mir mal an.
Zum Einlesen des SBUS-Signal nutze ich die Soft-Serial von BASCOM. Da hat sich also ein anderer das Hirn verrenkt.....
Auf die neuen ATTinys habe ich auch schon einen Blick geworfen. Die gibt es leider nur in SMD-Bauweise. Ich überlege aber trotzdem das Projekt auf eine andere Plattform zu heben, da die neuen ATinys deutlich mehr Ressourcen haben, mit denen man noch einige Funktionen realisieren könnte.

Ulf
 
Moin Ulf

Mein halbfertiger SBUS-Lesecode für die neuen Attinys, Comiliert habe ich mit https://github.com/SpenceKonde/megaTinyCore

C:
uint8_t count,timeout,INBYTE[30];
uint16_t Ch[16];

void setup() {
PORTB.PIN3CTRL |= PORT_INVEN_bm;          // Rx Eingangsignale invertieren
USART0.BAUD =800;                         // 100.000bps SBUS für 20MHz
USART0.CTRLA |= USART_RXCIE_bm;           // RX ISR ON
USART0.CTRLB |= USART_RXEN_bm;            // RX aktivieren
}

void loop() {
  delay(1);
  timeout++;
  if(timeout>4){  count=0;
    for (uint8_t BBit=0, CBit=0, i=0; i<176; i++, BBit++, CBit++) {
      if(INBYTE[i/8+1] & _BV(BBit)) Ch[i/11+1] |= _BV(CBit); else Ch[i/11+1] &= ~_BV(CBit);
      if(BBit > 6) BBit=255;
      if(CBit > 9) CBit=255;
    }
} }

ISR(USART0_RXC_vect){
  INBYTE[count] = USART0.RXDATAL;
  timeout=0;
  count++;
}







Inkl Servos,
für Series 0/1 Attinys muss der Serial debug raus, da die nur ein UART haben. Der ganz neue Attiny1624 hat ja 2 x UART :-)

C:
#include <Servo_megaTinyCore.h>
Servo SERVO_1;Servo SERVO_2;Servo SERVO_3;Servo SERVO_4;Servo SERVO_5;

uint8_t count,timeout,INBYTE[30];
uint16_t Ch[16];

void setup() {    Serial1.begin(115200);  // Serialdebug nur beim Attiny 1624/3224 (mind. 2xUSART)
PORTB.PIN3CTRL |= PORT_INVEN_bm;          // Rx Eingangsignale invertieren
USART0.BAUD =800;                         // 100.000bps SBUS für 20MHz
USART0.CTRLA |= USART_RXCIE_bm;           // RX ISR ON
USART0.CTRLB |= USART_RXEN_bm;            // RX aktivieren
SERVO_1.attach(0);SERVO_2.attach(1);SERVO_3.attach(2);SERVO_4.attach(3);SERVO_5.attach(6);
}

void loop() {
  delay(1);
  timeout++;
  if(timeout>4){  count=0;
    for (uint8_t BBit=0, CBit=0, i=0; i<176; i++, BBit++, CBit++) {
      if(INBYTE[i/8+1] & _BV(BBit)) Ch[i/11+1] |= _BV(CBit); else Ch[i/11+1] &= ~_BV(CBit);
      if(BBit > 6) BBit=255;
      if(CBit > 9) CBit=255;
    }
  SERVO_1.writeMicroseconds((Ch[1]>>1)+1000);
  SERVO_2.writeMicroseconds((Ch[2]>>1)+1000);
  SERVO_3.writeMicroseconds((Ch[3]>>1)+1000);
  SERVO_4.writeMicroseconds((Ch[4]>>1)+1000);
  SERVO_5.writeMicroseconds((Ch[5]>>1)+1000);
  Serialdebug();
} }


ISR(USART0_RXC_vect){
  INBYTE[count] = USART0.RXDATAL;
  timeout=0;   count++;
}

//Nur beim Attiny 1624/3224 (mind. 2xUSART)
void Serialdebug(){ //nur At1624
  for (uint8_t i=1;  i<5; i++) {
    Serial1.print((Ch[i]>>1)+1000);
    Serial1.print("\t");}
    Serial1.println();
}
 
Zuletzt bearbeitet:

ttt126

User
Ich hab da noch eine Frage. Wie ist die Belegung des Codeschalter. Hab so ein Ding noch nie benutzt. Habe einen
KMR 16 Rotary encoder switch besorgt.
Hat 6 Pins, die Mittleren 2 sind wohl zusammen geschaltet. In der Anleitung ist dazu keine Belegung deffiniert. Oder ist es egal welche Ausgänge wie auf den Attiny gehen ? Grüße Thomas
 
Hallo Thomas,
ist natürlich nicht egal.
Der Code-Switch gibt auf den 4 Pins einen Binär-Code aus 0-15 / 0000-1111
Ich konnte Deinen Code-Switch nicht auf die Schnelle finden. Musst mal ins Datenblatt schauen. Die 4 Pins sind mit 1,2,4,8 bezeichet.
In meinem Schaltplan:
Code 0 = 1
Code 1 = 2
Code 2 = 4
Code 3 = 8
GND = C (Deine beiden Mittleren)

Werde ich für die nächste Version der Anleitung mal anpassen
 

ttt126

User
So, habe erfolgreich einen Switch am laufen. Hat alles gut geklappt. Da ich ihn für ein Schiff gebaut habe ist er etwas größer geworden. Wenn man ihn im Betrieb an der Unterseite berührt hat ein kurz ein Schluckauf. Alle Schaltkänale gehen aus, wenn man loslässt fängt er sich gleich. Evt. kann man da noch etwas zur stabilität machen . Erst mal vielen Dank für die tolle Anleitung und Arbeit.
 
schön zu hören, dass es geklappt hat.
Kannst ja mal Bilder vom fertigen Modell im Einsatz hier posten

Wenn man ihn im Betrieb an der Unterseite berührt hat ein kurz ein Schluckauf.

so was macht man ja auch nicht !
Vermutlich hast Du auf Pin 1 des AVR herumgetatscht. Verbinde mal Pin 1 über einen 10K-Widerstand mit Pin 20 (+)
Im "normalen" Betrieb läuft der auch ohne zusätzlichen Widerstand absolut stabil.
 
ziemlich ruhig hier geworden......
Ich habe aber ein bisschen weiter an der Software gestrickt.
Hauptgrund ist ein Bug bei den Multi Protokoll Modulen. Diese können nicht die volle Bandbreite (Servoausschläge) nutzen. Dafür gibt es jetzt einen "Kompatibilitäts-Mode" im SBUS-Switch.
Wenn Interesse besteht, stelle ich auch diese Version hier ein. Einfach hier anfragen.

Die Bullet-Points für 2.4.x:
• Schaltmodul für RC-Modellbau mit 8 Schaltausgängen
• Anschluss via SBUS
• alle 8 Ausgänge über einen einzigen Kanal steuerbar oder
• jeder Ausgang über seperaten Kanal steuerbar
• verschiedene Treiberstufen möglich (Plus- oder Minuspol geschaltet)
• einfache Hardware
• beliebig kaskadierbar (limitiert durch max Anzahl Kanäle oder Mischer)
• optimiert für OpenTX und EdgeTX Sender
• 2 Ausgänge dimmbar (PWM 15Hz - 16kHz) - neu: Dimmfunktion einzeln aktivierbar und Kanalzuordnung unabhängig voneinander
• neu: Kompatibilitäts-Mode für Multi-Module und andere
• neu: Bedienung überarbeitet
• neu: Test-Mode zum prüfen der Maximalausschläge
 

onki

User
Hallo,

ich nutze den Switch in einem Auto mit der Radiomaster TX16s mit MPM, konnte bis dato aber kein Problem feststellen.
Danke nochmal für das Tolle Projekt.
Dennoch würde ich die neue Version bei Gelegenheit mal ausprobieren.

Wenn ich noch einen Wunsch äußern dürfte wäre ein Ausgang mit einer Blitzsequenz (50ms Länge; 3 Pakete hintereinander) versehen zu können.
So könnte man ACLs via SBus anschließen wenn schon alle Steuerkanäle belegt sind.

Gruß
Onki
 
Hallo,

ich nutze den Switch in einem Auto mit der Radiomaster TX16s mit MPM, konnte bis dato aber kein Problem feststellen.
Danke nochmal für das Tolle Projekt.
Dennoch würde ich die neue Version bei Gelegenheit mal ausprobieren.

Wenn ich noch einen Wunsch äußern dürfte wäre ein Ausgang mit einer Blitzsequenz (50ms Länge; 3 Pakete hintereinander) versehen zu können.
So könnte man ACLs via SBus anschließen wenn schon alle Steuerkanäle belegt sind.

Gruß
Onki

Hallo Onki
Mit der Dimmfunktion erreicht man keine 100% Helligkeit. Allerdings ca 99,5% und daher in der Praxis nicht wirklich relevant.
Nutzt Du den Einzelkanal Mode - also alle Ausgänge über einen Kanal steuern ?
Damit gibt es die Probleme.

Über einen Sequenzer habe ich auch schon nachgedacht. Ist nicht ganz trivial. Da die Ressourcen des verwendeten Microcontroller sehr begrenzt sind, ist man auf jeden Fall in in dem Zeitraster des SBUS-Framing gefangen. (bei FrSky ACCST 9ms, bei ACCESS 7ms.)
Bedeutet LED an, 9, 18, 27....ms warten, LED aus, 9, 18, 27....ms warten usw.

Task für Dich: such doch mal raus was an Sequenzen so sinnvoll ist. 1fach, 2fach, 3fach-Blitz usw. Wie lange zwischen 2 Blitzen usw.
Einfaches blinken kann man problemlos in openTX einrichten.

Ich mache mir schon mal ein paar Gedanken zur Umsetzung.....

Ulf
 

onki

User
Hi Ulf,

hier mal ein paar Vorschläge meiner Lieblings-Blitzsequenzen (Sequenz wird alle 1,3s wiederholt):

Doppelblitz:
acl3.jpg

Dreifachblitz:
acl2.jpg

Dreifach mit Vorblitz:
acl1.jpg

Blitzlänge jeweils 40ms (langer Blitz 80ms)
Pause 80ms, bei den schnellen Dreifachblitzen nur 40ms.

Sorry wegen der schlimmen Signale. War nur mit der heißen Nadel gestrickt.

Gruß
Onki
 
sieht doch ganz gut aus!
Ich weiss aber noch nicht, ob das noch in den Speicher des SBUS-Switch passt - oder passen soll.
Es wird eher eine externe Lösung, die man dann an den SBUS-Switch anflanschen kann.
Ich werde die nächsten Tage mal ein bisschen tüfteln .....
 
Hallo Voodoo-68
bin neu hier und durch diese Projekt auf das Forum aufmerksam geworden.
Im Moment steuere ich meine Beleuchtung in einem TRX-4 über einen Arduino der von einem SBUS-Signal eines FrSky Archer Empfängers versorgt wird. Nun möchte ich gerne versuchen, den SBUS-Switch nachzubauen. Leider habe ich so gut wie keine Erfahrung mit Microcontrollern und daher weiss ich nicht, wie ich mit der Programmierung des ATTiny umgehen muss.
Würde die Programmierung gerne mit meinem Arduino Nano machen.
Wie ich festgestellt habe, ist in deinem Download eine .bin Datei vorhanden.
Kannst du mir sagen, wie ich diese Datei nun mit der Arduino IDE flashen kann?
Die Library für die ATTiny-Boards habe ich bereits hinzugefügt.
Arduino_IDE.png
Vielen Dank schon im Voraus.
Und übrigens, super Projekt hast du hier auf die Beine gestellt.
 
Hallo Nobody,
Danke für die Blumen.

Deine Arduio IDE ist das falsche Tool.
Das Binary ist direkt der Code, der auf dem ATTiny läuft.
Du brauchst also nur einen ISP Programmieradapter. Da gibt es viele, auch sehr günstige.
Ich benutze seit Jahren diesen:

Der Hersteller hat auch ein einfaches Tool zum flashen.

Dort findest Du auch viele Informationen was Du zum programmieren brauchst.

Entweder du baust dir eine einfache Platine und verdrahtest den ISP-Port zum programmieren oder Du nimmst einen Universaladapter:

Für meine Basteleien habe ich mir sowas gebaut. Damit kann ich programmieren und gleich testen

Entwicklungsboard.jpg
 
Ansicht hell / dunkel umschalten
Oben Unten