Spektrum Sat. Empfänger am 2650

hi

ich habe mal wieder ein kleines Proplem . Ich habe folgenden code um einen Spektrum Sataliten Empfänger auszuwerten :

#include <SatelliteRecive.h>
#include <Servo.h>

#define ledPin 13
SatelliteRecive reciver;
Servo myServo;
int time = 0;

void setup(){
  pinMode(ledPin, OUTPUT);
  Serial.begin(115200);
  myServo.attach(3);
}

void loop()
{
  if (Serial.available() > 0) {
    reciver.regByte(Serial.read());
  }
  // Will fail after a while. Maby to high baudrate. Could use SoftwareSerial for this dump to pc.
  if(millis() - time > 100){
    Serial.print(reciver.getThro());
    Serial.print("\t");
    Serial.print(reciver.getAile());
    Serial.print("\t");
    Serial.print(reciver.getElev());
    Serial.print("\t");
    Serial.print(reciver.getRudd());
    Serial.print("\t");
    Serial.print(reciver.getGear());
    Serial.print("\t");
    Serial.print(reciver.getFlap());
    Serial.println();
  
    time = millis();
  }
  
  
  myServo.write(map(reciver.getAile(),RXMIN,RXMAX,0,179));
  
  if(reciver.getGear() > RXCENTER) digitalWrite(ledPin,1);
  else digitalWrite(ledPin,0);
  
}

Der code funktioniert ohne Propleme auf meinem mini pro , allerdings nicht auf dem 2650 ... meine Vermutung ist das man im code noch angeben muss an welchen der 4 uarts des 2650 der Empfänger dran hängt.
jetzt zu meiner Frage : wie bestimme ich den Uart andem der Empfänger dran kommt ? bzw. ist überhaupt das , das proplem warum es nicht geht ?

ich hoffe ihr könnt mir helfen

MfG

Serial ist der erste UART, der über den ATmega8U2 mit der USB-Schnittstele verbunden ist.
Seriel1 ist die 2te UART usw. siehe Serial - Arduino Reference.

Der Mini PRO hat kein USB-Iinterface und die Pins 0 und 1 sind frei.
Versuch mal den Satelitenempfänger am MEGA den UAR2 mit Serial1 an den ppins 19 (RX) und 18 (TX).
Sonst habe ich keine Ahnung was das Problem sein könnte.
Grüße Uwe

hi

ich hab schon alle 3 uarts getestet aber bei keinem geht es .
muss ich wenn ich uart2 (seriel1) nutzen möchte noch was im code ändern ?

MfG

edit :
so hab jezt nochmal den code geändert .... so sollte es gehen oder ? werde es morgen testen

#include <SatelliteRecive.h>
#include <Servo.h>

#define ledPin 13
SatelliteRecive reciver;
Servo myServo;
int time = 0;

void setup(){
  pinMode(ledPin, OUTPUT);
  Serial.begin(115200);
  myServo.attach(3);
}

void loop()
{
  if (Serial1.available() > 0) {
    reciver.regByte(Serial1.read());
  }
  // Will fail after a while. Maby to high baudrate. Could use SoftwareSerial for this dump to pc.
  if(millis() - time > 100){
    Serial.print(reciver.getThro());
    Serial.print("\t");
    Serial.print(reciver.getAile());
    Serial.print("\t");
    Serial.print(reciver.getElev());
    Serial.print("\t");
    Serial.print(reciver.getRudd());
    Serial.print("\t");
    Serial.print(reciver.getGear());
    Serial.print("\t");
    Serial.print(reciver.getFlap());
    Serial.println();
  
    time = millis();
  }
  
  
  myServo.write(map(reciver.getAile(),RXMIN,RXMAX,0,179));
  
  if(reciver.getGear() > RXCENTER) digitalWrite(ledPin,1);
  else digitalWrite(ledPin,0);
  
}

Überall wo Serial steht mußt Du Serial1 schreiben;
also Serial1.begin ecc.
Grüeß Uwe

hi

so habs hinbekommen ... jezt gehts :slight_smile:

hier der code falls jemand ihn nutzen möchte :

#include <SatelliteRecive.h>
#include <Servo.h>

#define ledPin 13
SatelliteRecive reciver;
Servo myServo;
int time = 0;

void setup(){
  pinMode(ledPin, OUTPUT);
  Serial.begin(115200);
  Serial1.begin(115200);
  myServo.attach(3);
}

void loop()
{
  if (Serial1.available() > 0) {
    reciver.regByte(Serial1.read());
  }
  
  if(millis() - time > 100){
    Serial.print(reciver.getThro());
    Serial.print("\t");
    Serial.print(reciver.getAile());
    Serial.print("\t");
    Serial.print(reciver.getElev());
    Serial.print("\t");
    Serial.print(reciver.getRudd());
    Serial.print("\t");
    Serial.print(reciver.getGear());
    Serial.print("\t");
    Serial.print(reciver.getFlap());
    Serial.println();
  
    time = millis();
  }
  
  
  myServo.write(map(reciver.getAile(),RXMIN,RXMAX,0,179));
  
  if(reciver.getGear() > RXCENTER) digitalWrite(ledPin,1);
  else digitalWrite(ledPin,0);
  
}

Gut!

hi

so der code funzt 1A ... allerdings hängt er sich manchmal auf wenn ich beide uarts gleichzeitig nutze . aber das ist erstmal nebensache !

ich hab noch eine andere frage :
weiss jemand wie das Protokoll des satempfänger´s aussieht oder kann mir jemand sagen wie ich das was an seriell 2 ankommt an seriell 1 ausgebe ?

mit
serial.println(serial2);

funktioniert es nicht

MfG

mit serial.println(serial2); funktioniert es nicht

Glaube ich Dir gerne
So müßte es gehen:

 if (Serial2.available() > 0) {
    serial.print(Serial2.read());
  }

2 Auchtungen:

  • Habs nicht ausprobiert;
  • Auf diese Weise kanst Du die Daten nicht mitlesen; alles was an serial2 reinkommt wird an serial rausgeschrieben und ist somit gleich wieder verschwunden.
    Zur Datenanalyse reichts aber.

Grüße Uwe

hi

danke :slight_smile:
werde es nachher mal testen ...

Schönen Abend noch

hi

hab mal eine frage :

unzwar habe ich den code jezt auf 5 kanäle erweitert , und gebe sie einzeln als servo singnal aus .
Jezt möchte ich das ganze als Summensingnal ausgeben , kann mir jemand sagen wie ich das ganze programmiere bzw kann mir jemand ein code beispiel geben ?

were super

Danke

Schönen Abend noch

Was verstehst Du unter Summensingnal?
Grüße Uwe

hi
summensingnal ist ein singnal was aus den einzelnen kanälen besteht bsp . :

Summensingnal :
+---+ +--+ +------+ +-+
| | | | | | | |
---+ +-+ +-+ +-+ +----------------

+---+
Kanal 1 | |
---+ +---------------------------------------

+---+
Kanal 2 | |
----------+ +--------------------------------

+------+
Kanal 3 | |
-----------------+ +---------------------

+--+
Kanal 4 | |
----------------------------+ +----------------

also muss man die 4 kanäle auf ein singnal quetschen ....... ich hoffe ihr könnt mmir helfen

Von welchen Pulsdauer reden wird da?
Grüße Uwe

hi

hier mal ein post aus einem anderen forum (nich von mir )

Auf jedem Kanal wiederholt sich der Puls alle 20 Millisekunden aber die
Pulse sind zueinander versetzt.
Der Grund dafür ist:
Es gibt keinen Grund allen Servos einen Signalpuls anzubieten, der bei
allen Servos gleichzeitig die steigende Flanke aufweist.
Da das nicht notwendig ist, muss man auch den ganzen Aufwand dafür nicht
treiben.
Da man den Aufwand nicht treiben muss, ist die Aufteilung des
Summensignals auf die einzelnen Kanäle trivial
Trivial ist gut, da es dann zuverlässig läuft.

Um also diese 4 Kanäle wieder zu einem Summensignal zusammenzubringen,
genügt es völlig die einfach alle miteinander zu verodern und man erhält
...


               +----+ +----+ +--------+ +--+
               |    | |    | |        | |  |
            ---+    +-+    +-+        +-+  +----------------

... das Summensignal (in genau der Form, wie es über die Funkstrecke
übertragen wurde)

vllt hilft dir ja das weiter :slight_smile:

Aha Du redest von Servoansteuerung.
Du willst mehrere Kanäle auf einer Leitung übertragen und dann wieder trennen.
Da rate ich Dir eine Servosteuerung zb die von Pololu. Da mußt Du nicht die Kanäle vereinen um sie dann wieder zu trennen.
zB: http://www.watterott.com/de/Pololu-Micro-Serial-Servo-Controller?xca2d4=mrt3vd27v6b4jn5fa40m2v6ve6
oder andere für 6 bis 24 Servos.
Grüße Uwe

hi

naja nich ganz :slight_smile: .... das summensingnal brauch ich für meinen quadrocopter um alle 6 kanäle über eine datenleitung auszuwerten .
deswegen geht nur das summensingnal .....

troz dem danke

Grüße

Erklär bitte mal Dein gesamtes Projekt.
Ich habe mal das Gefühl Du machst da etwas unnötig kompliziert.
Grüße Uwe

hi

also :

ich möchte einen seriell zu ppm (summensingnal) wandler bauen/programmieren ....
die seriellen daten vom sat empfänger von spektrum werden ins summensingnal umgewandelt welches wiederrum dan in die hauptplatine des quadrokopter geht .

es gibt keine andere variante , nur das summensingnal wird erkannt

MfG

microller:
ich möchte einen seriell zu ppm (summensingnal) wandler bauen/programmieren ....

Hab ich schon verstanden.
was ist ein "sat empfänger von spektrum" GPS-modul?

es gibt keine andere variante , nur das summensingnal wird erkannt

Bitte Dokumentation.
Um das zu programmieren brauchen wir die Spezifikation des Signals. Irgendwie muß der Empfänger das Summensignal ja synchronisieren damit jeder Kanal dem richtigen Ausgang zugeordnet wird.

Nochmal die frage Bitte presetiere Dein gesamtes Projekt, nicht Teilprobleme bei denen Du nicht weiterweißt. Solche probleme kann man auch lösen indem man einen anderen Weg geht.
Grüße Uwe

hi

das ist ein sat. empfänger von Spektrum : https://www.mikrocontroller.com/images/spektrumSatellit.jpg
das ist ein empfänger von einer Modellbaufernsteuerung ...

mein Projekt ist ganz einfach ein Quadrokopter ... der Fliegt auch schon aber der empfänger muss halt noch optimiert werden

MFG