Diversity mit Videoqualität statt RSSI (wie EagleEyes oder Oracle) - selber bauen?

Mhm, mein diversity schaltet nun, aber irgendwie gehen die LEDs falsch, und auch der Buzzer piept 2 mal wenn er auf Videoeingang 1 geht und nur einmal wenn er auf Videoeingang 2 geht ... Habe jetzt die Anschlüsse 5 mal kontrolliert, VIDEO0 und VIDEO1 am Videoschalter sind richtig belegt. Laut Datenblatt nimmt der ADG794 den 1ten Eingang bei LOW und den 2ten bei HIGH, also müsste doch theoretisch bei

Code:
void switchToVideoSource(int source, int fr0,  int fr1) {
  if (source == 0) {
    digitalWrite(VSWITCH_SELECT, HIGH);
    digitalWrite(LED_1, HIGH);
    digitalWrite(LED_2, LOW);
    activeSource=0;
  } else {
    digitalWrite(VSWITCH_SELECT, LOW);
    digitalWrite(LED_1, LOW);
    digitalWrite(LED_2, HIGH);
    activeSource=1;    
  }
#ifdef SERIAL_OUTPUT_ON
  printf("Switching to source %d (%d vs %d)\n", source, fr0, fr1);
#endif
}
wenn source==0 ist, er also den ersten Eingang nehmen soll, digitalWrite(VSWITCH_SELECT, LOW); da hin, oder mach ich nen Denkfehler?

Werde das mal im Sketch ändern ...

EDIT: Ok, so einfach ist es dann doch nicht .... also das scheint tiefer zu sitzen, ist aber wohl wirklich ein Bug ...
 

nils1982ks

Erfahrener Benutzer
Hmm, kommt drauf an, was du als Video 1 und was als 2 ansiehst. Wichtig ist doch nur, dass einmal beim einen und zweimal beim anderen piept und du weißt, welcher das nun ist. Ich habe das so konfiguriert, dass 1 bei Verwendung der Cinch-Buchse der obere Anschluss ist und und die äußere LED leuchten (Glaube ich...)

Firmware ist erfolgreich drauf, ich hab Bild, aber er schaltet noch nicht um ... Und mein 7805 wird sehr heiß ... mal eben schauen ob ich den richtigen aus der Kiste genommen hab mit 1,5A und nicht einen mit 100mA ;)
Wenn der 7805 heiß wird bei 2 Empfängern, sollte das nicht all zu verwunderlich sein, vor allem wenn du keine zusätzliche Kühlfläche verwendest. So ein Empfänger zieht locker 150 mA, dazu dann noch das bisschen fürs Diversity. Bei einer Quelle von 12V führt das ordentlich Verlustleistung.
 
Naja, wenn man schon alles mit 1 und 2 beschriftet, könnte man meinen dass einmal piepen eingang 1 und led 1 heißt und 2 mal piepen eingang 2 und led 2 ist, oder?

Der Videoeingang an der oberen chinchbuchse geht auf VIDEO1 vom ADG794, und die untere auf VIDEO0, was für mich Video 1 wäre.

Wenn Du mir sagts was ich im Sketch ändern muß damit es richtig läuft wäre das ja auch ok. Ich habe nämlich jetzt Audio und Video so verlötet dass am ADG794 die Eingänge 0 immer mein Empfänger 1 ist und Eingänge 1 eben Empfänger 2 ... Sprich umlöten wäre schon mehr Aufwand als 2 Kabel zu tauschen
 
Wenn der 7805 heiß wird bei 2 Empfängern, sollte das nicht all zu verwunderlich sein, vor allem wenn du keine zusätzliche Kühlfläche verwendest. So ein Empfänger zieht locker 150 mA, dazu dann noch das bisschen fürs Diversity. Bei einer Quelle von 12V führt das ordentlich Verlustleistung.
Ajo, hatte ja nen Kühlkörper drauf, aber hab mal auf nen Schaltregler von Rene gewechselt, der 7805 ist rausgeflogen. Stabile 5V bei null Temperatur ;)

Wenn er jetzt noch richtig piepen und leuchten würde, wäre es perfekt :)
 

nils1982ks

Erfahrener Benutzer
Ich habe mein Board grad nicht hier, aber so wie ich es vorhin verstanden habe, ist das Problem nur, dass Empfänger 1 als Eingang 2 angesehen wird und der Empfänger 2 als Eingang 1, oder sind die Audio Signale jetzt auch vertauscht?

Wenn es nur um Leuchten um piepen geht tausche 1 und 2 in den zwei Zeilen mit:
Code:
#ifdef BUZZER_CHANNEL_IND
         buzzerStatus = x ;
und invertiere die LED Zustände in switchToVideoSource. Wenn es gleich von Anfang richtig herum sein soll, muss auch digitalWrite(LED_1, HIGH); im Setup entfernt werden.

Versuch mal ob das klappt.

Viele Grüße
Nils
 
Ja klar, alles was an den chinch Buchsen "oben" ist, ist eben nicht Eingang 1 sondern 2 ;) ...

Da es nur 4 Kabel waren, habe ich sie nochmal neu "verlegt" und ausgetauscht. Jetzt ist es so wie die Software es erwartet. Da ich morgen in Urlaub will, muß das jetzt reichen ...

Vielen Dank auf jeden Fall! Ist bis jetzt schonmal ganz gut. Gehäuse schaffe ich dann wohl doch nicht mehr heute :(
 

QuadMax

Erfahrener Benutzer
Alle Platinen sind wie ich es verstanden habe vergeben(mit Audio ), aber von meiner Sammelbestellung sind noch 6 frei also wenn du willst schicke mir eine PN.
 
Hier noch ein kurzes Video meines Testlaufes gestern. Damit er so umschaltet mußte ich das Poti etwas gegen den Uhrzeigersinn von der Mitte weg drehen ...

https://www.youtube.com/watch?v=cWu0k1emrQ8

Gefällt mir jetzt richtig gut, und ich habe einen sehr kompakten Duo-Empfänger ...

PS: Der Copter der das Bild liefert stand nen Raum weiter, im selben Raum habe ich kein Umschalten hinbekommen ...
 

Rangarid

Erfahrener Benutzer
Danke für das Video. Man sieht ja schon noch etwas rauschen, ich vermute mal, dass das kommt weil die Umschaltsensitivität noch nicht optimal eingestellt ist. Kannst du die mal etwas runter stellen noch und dann nochmal versuchen? Weil wenn er zurückschaltet sieht man ja, dass das Bild dann relativ rauschfrei bleibt.

Hier sind dann noch ein paar Vorschläge, für eine eventuell nächste Hardwareversion wenn jemand das Layout erweitern möchte:

- Die Module direkt auf die Platine lötbar machen, sodass die Antennenstummel direkt an der Kante liegen
- Den Poti an die Kante verschieben und hochkant machen (wenn das geht) damit man bei einem Gehäuse auch noch drankommt
- Den 4-er Switch so umbauen, dass man die Kanäle damit schalten kann
- den Videoeingang wegmachen und stattdessen direkt die Empfängermodule als Quelle nutzen
- RSSI Pins entfernen und auch direkt vom Modul abgreifen

Man sollte die Platte so auf der selben Größe halten können und hat dann Empfänger direkt drin. Ist natürlich nur für die Leute, die die RC305 Empfänger benutzen, aber eventuell könnte man sich die Mühe machen eine RC305 Version zu basteln und eine Airwave Version. Die zusätzlich benötigten Kondensatoren etc sollten da ja nicht zu unterschiedlich sein.
 

nils1982ks

Erfahrener Benutzer
Mir gefällt das Video auch gut, dann mal viel Spaß im Flugurlaub damit
.

Danke für das Video. Man sieht ja schon noch etwas rauschen, ich vermute mal, dass das kommt weil die Umschaltsensitivität noch nicht optimal eingestellt ist. Kannst du die mal etwas runter stellen noch und dann nochmal versuchen? Weil wenn er zurückschaltet sieht man ja, dass das Bild dann relativ rauschfrei bleibt.
Etwas rauschen wird man nicht vollständig unterdrücken können, da ja gerade das Rauschen im Bild der Indikator für den Wechsel ist, aber im Flug hat man ja nicht gerade eine Hand die die Antenne verdeckt und damit das Bild abrupt verschlechtert. Durch die Integration sollte eine schleichende Verschlechterung erkannt werden und rechtzeitig ausgeglichen werden.
 
Hier sind dann noch ein paar Vorschläge, für eine eventuell nächste Hardwareversion wenn jemand das Layout erweitern möchte:

- Die Module direkt auf die Platine lötbar machen, sodass die Antennenstummel direkt an der Kante liegen
- Den Poti an die Kante verschieben und hochkant machen (wenn das geht) damit man bei einem Gehäuse auch noch drankommt
- Den 4-er Switch so umbauen, dass man die Kanäle damit schalten kann
- den Videoeingang wegmachen und stattdessen direkt die Empfängermodule als Quelle nutzen
- RSSI Pins entfernen und auch direkt vom Modul abgreifen
- ISP Header, evtl. auch nur smd-Pads

Für Leute die externe Empfänger einsetzen ist das doch so ganz gut ...

-Jens
 

nils1982ks

Erfahrener Benutzer
Hallo,

wie angekündigt gibt es ein neues Release. http://code.google.com/p/open-diversity/
Kleine Änderungen: zum einen ist die Sensitivität nun von 1-20 einstellbar statt von 0-20, was wohl mehr Sinn macht, zum anderen lässt sich der Buzzer über den DIP steuern. Switch 1 entscheidet ob der Alarm an ist, Switch 2 ob der Kanalwechsel akustisch signalisiert werden soll.

Gab es bei einem Benutzer schon mal den Fall, dass er den Kanal nicht wechselte, obwohl der andere ein besseres Bild haben sollte? Ich hoffe nicht und würde daher auch in Zukunft auf eine mögliche zusätzliche Auswertung der RSSI Eingänge verzichten und hier lieber RSSI Werte von anderen Empfängern einlesen, die zum Tracken genutzt werden.

Viele Grüße
Nils

Edit: da ich mit Microprozessoren alles andere als firm bin und auch trotz der tatsache, dass Arduino eh alles langsam macht, wollte ich fragen, wie aufwändig ein Modulo für den kleinen ist, bzw. ob es so, wie ich das nun gemacht habe, überhaupt sinnvoll ist.
 

Rangarid

Erfahrener Benutzer
Du machst das Mod in dem Teil des Codes, der mit am häufigsten aufgerufen wird. Es sollte reichen wenn du dort eine Variable reinmachst, die du unten in der Loop einmal pro Sekunde setzt (wie bei der Eingangsspannung). Das spart dir einige unnötige Modulos...

Und statt 2 mal xxx % yyy aufzurufen kannst du ne Variable machen, die du dann in der if-Abfrage einsetzt. Ka ob das mehr Leistung bringt, aber ich mein Division und Modulo sind mit die aufwendigsten Rechenoperationen...

Code:
if ( inputVoltage < ALARM_VOLT && abs(buzzerStatus) < 4 && dipStatus % 2 == 0)
{ 
   buzzerStatus = 10 ;
}
if ( inputVoltage > ALARM_VOLT && abs(buzzerStatus) > 4 || dipStatus % 2 != 0)
{ 
   buzzerStatus = 100 ;
}
wird zu
Code:
dipstatus = xxx % 2;
if ( inputVoltage > ALARM_VOLT && abs(buzzerStatus) > 4 || dipStatus != 0)
{ 
   buzzerStatus = 100 ;
} 
else if ( inputVoltage < ALARM_VOLT && abs(buzzerStatus) < 4 && dipStatus == 0)
{ 
   buzzerStatus = 10 ;
}
Außerdem ist es bei 2 if-Abfragen hintereinander performanter, wenn du bei dem zweiten ein else if draus machst. Er kann ja nur kleiner oder größer sein. Wenn du dann trotzdem abfragst ob er größer ist und danach ob er kleiner ist hast du nur unnötige Extraabfragen. Da die Spannung in der Regel über dem Alarmwert liegt kommt die Abfrage auch nach oben.
 

nils1982ks

Erfahrener Benutzer
Ja, das kostet dann dafür eine weitere Variable. Am Rechner sieht man beim Programmieren den Speicherverbrauch, gibt es eine Vorhersage, also woher weiß ich, wie viel Speicher für Variablen noch zur Verfügung steht, oder muss man das von Hand berechnen?
 

Rangarid

Erfahrener Benutzer
Ich denke wenn du das Mod nur einma pro Sekunde machst dann ist das von der Leistung her ok. Wenn du halt 5 mal % hintereinander in der Switch-Schleife machst ist das halt eher problematisch. Speicher für Variablen sollte momentan noch genug vorhanden sein, wenn man mal mit dem Multiwii oder Ardupilot vergleicht...

Aber hier könnte man natürlich bei dem Code auch schon einiges reduzieren:
Code:
volatile long unsigned int numSyncs[2] = {0, 0};
volatile long unsigned int lastPulses[2][HISTORY_SIZE]; 
volatile int lastPulseSlot = 0; // to use lastPulse-Array as ring buffer
volatile int numTimerEvents = 0;
unsigned int inputVoltage;
unsigned int switchFPSResist = 4 ; // How many FPS the video sources must differ to recitify a switch
volatile char buzzerStatus = 0; // 0 ^= no alarm, 1 an -1 ^= switched to source 1, 2 an -2 ^= switched to source 2 , 10,-10,5,-5 low Voltage, 100 be quiet!
volatile unsigned char dipStatus = 1; // Status Byte to control Buzzer function and ??? , here the "%2 bit" denotes the bit of the low voltage warner,  
                                      // "%3 bit" of the channel change indicator %5 %7 are free

volatile int activeSource = 0;
Code:
volatile [COLOR=#ff0000]byte[/COLOR] numSyncs[2] = {0, 0};
volatile [COLOR=#ff0000]byte[/COLOR] lastPulses[2][HISTORY_SIZE]; 
volatile [COLOR=#ff0000]byte[/COLOR] lastPulseSlot = 0; // to use lastPulse-Array as ring buffer
volatile int numTimerEvents = 0; [COLOR=#ff0000]//???? Was ist der Maximalwert?[/COLOR]
unsigned int inputVoltage;
[COLOR=#ff0000]byte[/COLOR] switchFPSResist = 4 ; // How many FPS the video sources must differ to recitify a switch
volatile char buzzerStatus = 0; // 0 ^= no alarm, 1 and -1 ^= switched to  source 1, 2 an -2 ^= switched to source 2 , 10,-10,5,-5 low Voltage,  100 be quiet!
volatile byte dipStatus = 1; // Status Byte to control Buzzer  function and ??? , here the "%2 bit" denotes the bit of the low voltage  warner,  
                                      // "%3 bit" of the channel change indicator %5 %7 are free

volatile [COLOR=#ff0000]boolean[/COLOR] activeSource = 0; [COLOR=#ff0000]//boolean reicht wenn nur 2 Videoquellen[/COLOR]
damit sparst du auch nochmal paar byte...(Wenn ich mich nicht verrechnet habe sparst du so ~39byte).

BTW was ist ein long unsigned int??? Hab ich noch nie gehört.
 
FPV1

Banggood

Oben Unten