Offline
Newbie
Karma: 0
Posts: 26
|
 |
« on: March 05, 2011, 09:13:47 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Online
Brattain Member
Karma: 160
Posts: 15631
+39 349 2158303
|
 |
« Reply #1 on: March 05, 2011, 04:52:21 pm » |
Serial ist der erste UART, der über den ATmega8U2 mit der USB-Schnittstele verbunden ist. Seriel1 ist die 2te UART usw. siehe http://arduino.cc/en/Reference/Serial. 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
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #2 on: March 05, 2011, 05:48:18 pm » |
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); }
|
|
|
|
« Last Edit: March 05, 2011, 05:57:24 pm by microller »
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Online
Brattain Member
Karma: 160
Posts: 15631
+39 349 2158303
|
 |
« Reply #3 on: March 05, 2011, 07:36:22 pm » |
Überall wo Serial steht mußt Du Serial1 schreiben; also Serial1.begin ecc. Grüeß Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #4 on: March 06, 2011, 07:40:38 am » |
hi so habs hinbekommen ... jezt gehts 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); }
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Online
Brattain Member
Karma: 160
Posts: 15631
+39 349 2158303
|
 |
« Reply #5 on: March 06, 2011, 01:50:25 pm » |
Gut!
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #6 on: March 07, 2011, 08:37:14 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Online
Brattain Member
Karma: 160
Posts: 15631
+39 349 2158303
|
 |
« Reply #7 on: March 07, 2011, 01:07:59 pm » |
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
|
|
|
|
« Last Edit: March 07, 2011, 03:32:57 pm by uwefed »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #8 on: March 07, 2011, 02:57:13 pm » |
hi danke werde es nachher mal testen ... Schönen Abend noch
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #9 on: March 09, 2011, 01:44:42 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Online
Brattain Member
Karma: 160
Posts: 15631
+39 349 2158303
|
 |
« Reply #10 on: March 09, 2011, 01:47:09 pm » |
Was verstehst Du unter Summensingnal? Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #11 on: March 09, 2011, 03:37:31 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Online
Brattain Member
Karma: 160
Posts: 15631
+39 349 2158303
|
 |
« Reply #12 on: March 09, 2011, 03:42:05 pm » |
Von welchen Pulsdauer reden wird da? Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 26
|
 |
« Reply #13 on: March 10, 2011, 12:53:54 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Online
Brattain Member
Karma: 160
Posts: 15631
+39 349 2158303
|
 |
« Reply #14 on: March 10, 2011, 02:05:46 am » |
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=mrt3vd27v6b4jn5fa40m2v6ve6oder andere für 6 bis 24 Servos. Grüße Uwe
|
|
|
|
|
Logged
|
|
|
|
|
|