FrSky DR4-II RSSI an Quanton PWM Input mit ATTiny

fafnir2k

Neuer Benutzer
#1
Hallo Zusammen,

in meinem Quad mit TL Quanton möchte ich gerne den RSSI vom DR4-II auslesen.
Die Variante mit Tiefpassfilter geht nicht, da beide Analog-Eingänge bereits mit dem Atto-Pilot (V/A) belegt sind.

So ein ATTiny85 sollte doch das 110 khz Signal vom DR4 lesen können, den Logarithmischen dB Wert umrechnen
und ein "Ordentliches/funktionierendes" PWM für den Quanton erzeugen können, oder ?

Kann mir jemand erklären (Code) wie ich PWM vom DR4 erfasse (Arduino PulseIn ?) ?
Wie rechne ich den Logarithmischen dB Wert in % um ?

Gruß

Aram
 

DerCamperHB

Erfahrener Benutzer
#3
Die geht ja nicht, da er die Analog Eingänge schon belegt hat, das meinte er mit Tiefbandfilter

Die Idee ist nicht schlecht, daraus ein direktes PWM/Servosignal zu Formen, so kann man das auch gut an andere Module nutzen, wie MinNazaOSD am Throttle Eingang
 

Rangarid

Erfahrener Benutzer
#4
Ja aber er will doch das 110khz PWM Signal mit nem ATTiny in 0-100% umwandeln...Das muss ja dann auch irgendwo rein. Und am Attiny ist analog sicherlich einfacher wenn ein ADC drin ist.
 

DerCamperHB

Erfahrener Benutzer
#5
Umwandeln in ein 1000-2000 µs Signal, und das dann in ein RC In Eingang

Also bezog du dich darauf mittels des Filters die Spannung am Tiny einzulesen, und nicht die Pulseweiten einzulesen
 

Rangarid

Erfahrener Benutzer
#6
Jau. Analog ist leichter als das 110khz Signal. Ich glaub das können die 8bit AVRs nicht so gut, weil zu schnell. Mein ich mal irgendwo gelesen zu haben.
 

fafnir2k

Neuer Benutzer
#8
mhh, die Spannung (nach dem LC-Filter) geht erst runter, wenn der Sender schon fast schreit ( Reichweitenwarnung)
FLD-02 - Volt
120 - 0.95 V
90 - 0.95 V
70 - 0.95 V
55 - 0.8 V

:confused:
 

DerCamperHB

Erfahrener Benutzer
#9
hast du einen RC oder einen LC Filter gebaut
Ein LC dürfte auch kaum Unterschied machen, da es keinen Verbraucher gibt, ein RC Filter sollte schon Zeitnaher die Effektivspannung anzeigen
 

fafnir2k

Neuer Benutzer
#11
Moinmoin,
ist wohl ein RC-Filter:



den 110 kOhm aus 100k und 10k in reihe

IMAG0278.jpg

laut diesem Kollegen ist das auch nutzbar : http://www.rcgroups.com/forums/showpost.php?p=29715707&postcount=12860

Messen und eine PWM ausgeben funktioniert auch.
Nur erkennt die TL-Firmware den Wert(RSSI) immer umgekehrt (hoch=gut),
auch wenn ich die PWM ausgabe umkehre (hoch=schlecht)
Meine Programmierkenntnisse sind aber auch eher cutnpaste-mässig

Code:
// Ari RSSI Converter  V0

#include <SoftwareSerial.h>


#define rxPin 0
#define txPin 1
#define RSSI_PIN A0

#define PWM_PIN 9
#define PWM_min 1000
#define PWM_max 2000

#define REF_VOLTAGE 1.1
#define RSSImax 225
#define RSSImin 12
#define RSSIwarn 15
#define DEBUG 1


// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

void setup()
{
  if (DEBUG >0) {
    mySerial.begin(9600);
    pinMode(13, OUTPUT);
  }
  
  analogReference(INTERNAL);	// INTERNAL: a built-in reference, equal to 1.1 volts on the ATmega168 or ATmega328
  int sd_rssi;
  pinMode(PWM_PIN, OUTPUT); 
}

void loop()
{ 
  // get Data
  int sd_rssi = analogRead(RSSI_PIN) / 4;
  float rssi =  constrain(sd_rssi, RSSImin, RSSImax);		// Ensure we stay in range

    // mach %
   //float rssipro = (int16_t)((float)(rssi - RSSImin)/(float)(RSSImax-RSSImin)*100.0f);
 
   // skaliere auf max
   float rssid = (int16_t)((float)(rssi - RSSImin)/(float)(RSSImax-RSSImin)*255.0f);
   
   // invertieren für taulabs rssi
   rssid = (255 - rssid);
  
  
  // mk PWM 490 hz ?
  analogWrite(PWM_PIN, rssid); 

  if (DEBUG >0) {
    mySerial.print("Raw: ");
    mySerial.println(sd_rssi); 
    mySerial.print("D skaliert: ");
    mySerial.println(rssid); 
    //mySerial.print(rssipro);
    mySerial.println(" %");
    analogWrite(13, rssid); // beiom nano hängt hier ne LED 
  delay(300);
  }
  
}
 

lysie

Erfahrener Benutzer
#12
So ich habe es nun anders gelöst. Da ich sowieso noch einen Channel auf meinem d4r-ii frei hatte sende ich nun einfach diesen RSSI Wert wieder nach oben zur FC... Bei cleanflight kann ich den RSSI Wert dann über den Kanal einfach auslesen.

Sollte bei Taulabs übrigens auch gehen : https://github.com/TauLabs/TauLabs/wiki/User-Guide:-Using-MinimOSD-with-Taulabs
"In the Tau Labs GCS 1. System -> Settings -> ManualControlSettings: a. RssiType- Choose between PWM, PPM or ADC ... etc."

Wenn du also noch einen freien Kanal hast erspart dir das den ganzen RC filter + arduino kram :)

Einfach auf Tab 5/12 einen neuen input erstellen mit rssi als eingang ( scale 100 / weight 100) und im Tab 6/12 den entsprechenden Kanal mit dem rssi input belegen ( weight 200 / offset -100 )

Funktioniert bei mir wunderbar. Die Skalierung entspricht dann 0-100 dbm -> 0-100% bzw. 1000-2000us Signal

edit:
Hier noch die cleanflight doku : https://github.com/cleanflight/cleanflight/blob/master/docs/Rssi.md
ich verwende rssi via ppm / set set rssi_channel = 6 --> entspricht AUX2
 
Zuletzt bearbeitet:

cnwund

Erfahrener Benutzer
#16
Kann mir jemand nochmals erklären wie ich das rssi aus dem d4r bekomme. Ich dachte der kann das rssi nicht in den pwm / ppm stream leiten
 

cnwund

Erfahrener Benutzer
#18
Hallo Rangarid,

Danke, dies ist mir schon klar. Meine Frage zielt eher auf den Unterschied zwischen PWM / PPM und ADC. Ich weiß, dass PPM und PWM Streams aus Bits sind ( 0 und 1 ). Worin liegt genau der Unterschied. Ich dachte immer PPM ist PWM, aber das ist wohl falsch. Was genau ist dann ADC? Liegt hier eine 0 - 5 V Spannung an und bei PPM / PWM nur 3.3? Warum kann man nicht wie bei dem ezUHF das RSSI direkt in den PWM Stream inkludieren?
 

Rangarid

Erfahrener Benutzer
#19
PPM hat alle 8 Kanäle als PWM Signal, PWM eben nur den einzelnen.:

Der Aufbau der Signale an sich ist bei PPM und PWM etwas anders, das Prinzip aber das selbe. Es wird ein Puls für eine bestimmte Zeit geschickt. Die Zeit wird dann gemessen und in den Servowert umgerechnet.

ADC ist Analog-Digital-Converter. Damit kannst du Spannung messen - also nicht nur 0 und 1 sondern z.B. 0-5V. Wenn du so ein PWM Signal durch den Kondensator jagst wird das geglättet. Du musst dir das so vorstellen, dass umso öfter das Signal reinkommt im Kondensator sich umso mehr Spannung ansammelt. Umso seltener das Signal reinkommt, umso weniger Spannung wird gesammelt. Dadurch ist bei 100% RSSI die Spannung hoch und bei 0% niedrig.

EzUHF hat irgend ne komische eigene Methode RSSI auszugeben, ist mein ich auch kein PWM.
 
Zuletzt bearbeitet:

lysie

Erfahrener Benutzer
#20
"Warum kann man nicht wie bei dem ezUHF das RSSI direkt in den PWM Stream inkludieren?"

Genau das habe ich ja gemacht und geht mit einer Taranis/OpenTx - es weiß nur so gut wie keiner. Zumindest hab ich nicht wirklich etwas darüber in Google gefunden :) . Nur verlierst du dann eben einen der 8 Kanäle.

Edit:
EzUHF macht das genauso - da kannst du das RSSI Signal einfach auf einen Kanal legen. Es verhält sich dann wie ein Servo PWM/PPM Signal (zwischen 1000µs und 2000µs)
 
Zuletzt bearbeitet:
FPV1

Banggood

Oben Unten