Multiplex M-Link LQI in RSSI wandeln

Status
Nicht offen für weitere Antworten.

Spencer

Vollthrottle
#1
Hallo zusammen,

ich bin gerade dabei mich in das Thema einzuarbeiten und habe einige Informationen gesammelt.
Es soll das LQI Signal vom Sensorbus ausgelesen werden und in ein RSSI Signal umgewandelt werden.
Hier hat es wohl schon jemand realisiert:
http://www.rcgroups.com/forums/showthread.php?t=1713196

Zudem habe ich noch die Spezifikation des MSB.
Anhang anzeigen MULTIPLEX-Sensor-Bus_V2.pdf

Hat es jemand schon hinbekommen und könnte mir ein paar Tips geben, meine Programmierskills sind schon sehr eingerostet.

Viele Grüße
Sven
 

kopy

Neuer Benutzer
#3
Weiß nicht ob schon einer weiter gemacht hat oder ob es noch Intresse gibt, aber ich habe heute mal ein kleines Demo-Programm für den Arduino Nano geändert und konnte damit den LQI Wert auslesen und als Analogwert über den PWM Ausgang wieder ausgeben.
 

Spencer

Vollthrottle
#4
Ich habe es mittlerweile aufgegeben!
Die MPX Funken sind gut, aber es gibt viele Einschränkungen. Kaum Unterstützung für LQI und SRXL, Drehschalter nicht belegbar, Geber/Schalter Kanäle nicht umbenennbar, Headtracker nur mit Bastelarbeit realisierbar, Telemetriedisplay nicht anpassbar, mit der aktuellen Firmware kaum umrüstbar, schade ...

Die Horus X12D gefällt mir sehr gut und die Empfänger sind relativ preiswert.
Ich werde voraussichtlich zum Ende des Jahres wechseln ...
 
#5
hi,
@kopy ich habe in den letzten monaten mal den Kollegen vom rcgroups forum kontaktiert und versucht seinen code auf nen passenden pic via dem pickit 2 zum laufen zukriegen:
http://www.rcgroups.com/forums/showthread.php?t=1713196
Hab allerdings nur einen Teil seines Programms zum Laufen gekriegt, den RSSI wert konnte ich bisher nicht generieren. Das problem ist dass sein Code mittlerweile veraltet ist, mit nem alten compiler funzt u. der pickit 2 den ich mir dafür ausgeliehen habe mittlerweile auch nicht mehr in der aktuellen software mplabx unterstützt wird.

Von daher hätte ich großes Interesse an einer einfacheren Lösung, da ich abgesehen von rssi und headteacker (hier schließe ich mich meinem vorredner an, habe deswegen auch schon etwas mit frsky x9e geliebäugelt)mit meiner Senderkonfiguration sonst recht zufrieden bin. Ich verwende ein M-Link Modul in einer Graupner MC19s.

Hast du nen direkten RSSi Output hinbekommen? Mein Ziel ist es mit dem RSSi dann auf den eagletree vetor zu gehen....

Gruß,
Christian
 
Zuletzt bearbeitet:

kopy

Neuer Benutzer
#6
Hallo,
hiermit hatte ich erfolg. Ist ein Testprogramm das ich nur um den Analogausgang erweitert habe. Also nicht direkt auf meinem Mist gewachsen. Das Rssi Signal gibt der Arduino auf dem Analogausgang als Spannung von 0-5 V aus. Kann man direkt an den Empfänger anstöppeln.


#include <NewSoftSerial.h>
#include <MSBPackage.h>

MSBProcess myMSB(4); // Benutze Digital Pin 4 für die Verbindung zum MSB
//MSBPackage P1(1,3,0); // Sensor Klasse 1 (Voltage) / Adresse 3 / Startwert 0

const int analogOutPin = 9; // Analog output pin that the LED is attached to
int outputValue = 0; // value output to the PWM (analog out)

void setup()
{
Serial.begin(57600); // Nicht vergessen die Serial Monitor auch auf diese Geschwindigkeit umzustellen.
}



void monitor()
{

MSBPackage P;
char Buffer[10];
float value;
boolean inLimit;

myMSB.ReadPackage(P);

if (P.isValid()) {
// Immer bei Adresse 0 eine Linie ausgeben - dient nur der Übersicht
if (P.getAddress()==1) {

if (P.getDisplayValue(Buffer,sizeof(Buffer),value,inLimit)) {
outputValue = value * 2.55;
analogWrite(analogOutPin, outputValue);
}
}

// Nun mit der GetDisplayValue Methode die Werte für die Ausgabe aufbereiten und ausgeben
if (P.getDisplayValue(Buffer,sizeof(Buffer),value,inLimit)) {
Serial.print(int(P.getAddress())); Serial.print(": ");
inLimit?Serial.print(value):Serial.print("-.-");
Serial.println(Buffer);

}
}
}


void loop()
{
monitor();
}
 
#7
Cool, danke ich glaube dass probier ich mal...
Arduino betreffend habe ich nur leider bisher noch keine Erfahrung mit, deswegen noch zwei kurze Fragen:
Was brauch ich außer dem arduino nano noch und welchen Compiler muss ich verwenden?
An welchen Pins genau muss ich dann die folgenden Kabel anschließen? Habe dann am empfänger ja MSB GND, MSB +, MSB Signal und am Vector RSSI In (Signal)...

Edit: habe gerad gesehen dass mein RSSI Input maximal 3.3V haben darf (ist das nicht der RSSI Standard?), weil du schreibst dass dein signal von 0-5 V geht. Dann kann ich deine Lösung nämlich leider nicht verwenden...

Gruß,
Christian
 
Zuletzt bearbeitet:

kopy

Neuer Benutzer
#8
doch das geht schon mit 3,3 Volt.
Mußt nur die Zeile

outputValue = value * 2.55;

gegen

outputValue = value * 1.68;

ersetzen. Dann sollte das passen.

Die Arduinosoftware gibt es kostenlos im Netz. Einfach mal nach Arduino googeln.
An Pin4 des Nano kommt der MSB Anschluss des Empfängers.
Und Natürlich Masse des Empfängers an den Arduino anschliessen.

An Pin 9 kommt die RSSI-Spannung raus. (ebenfalls gegen Masse gemessen, also auch anschliessen)
Und dann fehlt nur noch die Spannungsversorgung von 5V für den Arduino
 
#11
Vielen Dank für die ganzen Infos!:)
Habe mir gerade einen bestellt und bin mal gespannt ob ich das hinkriege...
Eine Frage noch: Wo muss ich den Serial Monitor auf die Geschwindigkeit 57600 ändern?
 
Zuletzt bearbeitet:

kopy

Neuer Benutzer
#12
Der 'Monitor' ist nur zum überprüfen und ist ein Teil der Arduino Software, und in der kann man die Schnittstelle auch einstellen. Brauchst Du nicht, und wird auch in dem Programm nicht gebraucht. Ich habe es aber erstmal drin gelassen zum Experimentieren. Und stört auch nicht weiter.
 
#13
So habe schonmal die Software angeschmissen und die MSB Library integriert
Dann habe ich deinen Code in die aktuellle sketch kopiert und wollte diesen nun erstmal verifizieren. Dabei bekomme ich leider folgende fehlermeldung:

Arduino: 1.6.4 (Windows 8.1), Platine: "Arduino Uno"

LQI_RSSI_sketch_may12a.ino: In function 'void monitor()':
LQI_RSSI_sketch_may12a:31: error: 'inL' was not declared in this scope
LQI_RSSI_sketch_may12a:38: error: 'inL' was not declared in this scope
'inL' was not declared in this scope
 
Zuletzt bearbeitet:

kopy

Neuer Benutzer
#14
Hallo, ich habe eben gesehen das sich in einer Zeile ein Leerfeld eingeschmuggelt hat.

if (P.getDisplayValue(Buffer,sizeof(Buffer),value,inL imit)) {

richtig ist es so

if (P.getDisplayValue(Buffer,sizeof(Buffer),value,inLimit)) {

ich hoffe das war es dann

Hallo, ich weiß nicht warum, aber wenn ich den Text hier speichere taucht immer ein Leerzeichen in dem Wort 'inLimit' auf. das muss Du weg lassen.

Habe es jetzt 3 mal versucht, und beim speichern des Textes ist das Leerzeichen wieder da???
 
Zuletzt bearbeitet:
#17
Nochmals Danke, habe meinen Arduiono Nano heute bekommen und konnte alles implementieren, funktioniert jetzt am Vector einwandfrei :).
Einzig den Skalierfaktor musste ich noch von 1,68 auf 1,64 anpassen um die 3,3 Volt nicht zu überschreiten (Bei 1,68 habe ich 3,35 -3,37 V gemessen).
 

kopy

Neuer Benutzer
#18
Super, freut mich.
Mein Arduino ist jetzt auch auf dem Copter, bin vorher nicht zu gekommen.
Und, Du hast bestimmt gesehen das der noch mehr kann, ich werde dann irgendwann noch die Spannungsmessung aktivieren und mir auf dem Display der Fernsteuerung anzeigen lassen. Wenn mal Zeit ist
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten