MobiFlight Community Support

Welcome to the forum for MobiFlight! Feel free to reach out to the community in case you have questions, issues or just want to share great ideas or details about your latest home cockpit project.

You like MobiFlight? Donate via PayPal and support the MobiFlight development. Thanks! 

05/03/2024 - This forum is read-only

The community support for MobiFlight has moved exclusively over to our Discord server. Register for free and enjoy more interactive functions like image and video upload, voice chat. More than 7,000 registered users around the world make it a great experience!

See you on our MobiFlight Community Discord server.

A HUGE Thank You to everyone who participated in the forum, especially obviously to Pizman and Stephan who did an outstanding job over so many years providing an incredible service to the MobiFlight community.

The forum is still providing a lot of good content, hence we keep this information accessible.

icon
Avatar
pekair
Posts: 14
Hallo,

beim Versuch, „cold and dark“ einer A2A-C182 mittels BAT-Schalter und Relais auch für die Max7219-Displays nachzubilden, fielen zwei Merkwürdigkeiten auf:

1. Wenn MobiFlight im Start-Modus ist, leuchten die 7-Segmentanzeigen bereits, obwohl die externe 5V-Versorgung des Displays noch nicht eingeschaltet ist. Das Display wird offensichtlich über einen der drei Steueranschlüsse DIN, CS, CLK aus dem Arduino „versorgt“. Im Verdacht habe ich CS. Dort liegen 5V an, solange MobiFlight im Start-Modus ist.
Die Anzeigehelligkeit steigt etwas, wenn die externe 5V-Versorgung zugeschaltet wird.
Eine versuchsweise Trennung der CS-Leitung im Run-Modus löscht zwar die Anzeige, allerdings dauerhaft, denn nach Verbinden von CS verweigert das Display bis zum Neustart des MobiFlight-Connectors seinen Dienst.

2. Im ConfigWizard gibt es „Erweiterte Einstellungen“. Dort soll unter „Helligkeit Ref“ ein Wert von 0 – 15 für die Display-Helligkeit einstellbar sein, aber weder taucht das Display im Dropdown-Menü auf (da sind nur Servos drin, die mit Helligkeit wenig zu tun haben), noch ist eine Werteingabe möglich.

@pizman82: Deinen Vorschlag, Servos vor Erreichen eines schädlichen Nullwertes mit Relais abzuschalten, habe ich umgesetzt. Das Relais wird vom BAT-Schalter getriggert. Das funktioniert ganz gut. Leider hängen bei mir am Versorgungsbus der Servos auch einige Stepper, die natürlich nicht vorzeitig ausgeschaltet werden dürfen, weil sie dann nicht in ihre Neutralstellung zurückfahren können. Da muss ich den Bus noch auftrennen.
Gleichzeitig wollte ich mit dem Relais die Displays dunkel schalten, was nicht gelungen ist, wie ich eingangs beschrieb.

Viele Grüße

pekair
2022-07-06 14:05
Avatar
pekair
Posts: 14
... zum ersten Problem habe ich eine Lösung im Post #16766 von pizman82 gefunden und die Platzhaltermethode erfolgreich angewendet. Den Status der Spannung auf dem Bus konnte ich bei 0V zum Abschalten der Displays (Anzeige mit Leerstellen Füllen) mittels Referenz auf den Platzhalter auswerten.
Vielen Dank an pizman für seine damalige Super-Erklärung.

pekair
2022-07-06 19:15
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Hi Peter

Jetzt vermischen wir mehrere Elemente.... Und da wird es kompliziert .... Oder in dem fall sogar kritisch da du eine Grundlogik zerstörst :-)

Fakt 1.... Der Entscheidende.....
MAx7219 Chips müssen per Firmware "initialisiert" werden. Es ist nicht möglich diese per "cut" des Stroms zu pausieren oder diese "später" anzustellen.
Der Max Chip muss zum Zeitpunkt des Startens vom Arduino ( Meist beim PC Einschalten wenn der MEga an USB hängt) bereits angeschlossen sein. Also er braucht zu dem Moment 5V und GRD.
Hat er das nicht wird ihn der Mega danach nicht mehr erkennen!
Selbes problem wenn du temporär im betrieb den Strom unterbrichst ( Relais)
Einmal getrennt wird der Max7219 nicht mehr funktionieren ( Auch nicht wenn er wieder Strom hat). Erst nachdem der Arduino neu gestartet wurde ( Resetknopf, Aus/Ein stecken oder Restart des Computers) wird er ihn wieder sehen !

Auf Deutsch.... Auch wenn der Max zwischenzeitlich "nichts" anzeigen soll muss er trotzdem unter Spannung sein und arbeiten.... Wir sagen ihm dann schlicht das alle Segmente jetzt AUS sein sollen.

************

Wie das geht ....

2 Wege.
Der Alte (den du vermutlich gelesen hast) sind die Spaces. So haben wir das seit Jahren gemacht und das geht auch heute noch.
Du sagst per Config Formul z.b. " Wenn Batteryswitch Config gerade "0" ist dann zeige 5 Leerzeichen .... Sonst zeige z.b. COM1"

Eine neue Methode ist die Brightness..... Die du ja bereits gefunden hast.
Brightness heist.... Wert "0" ist komplett Dunkel ( Also Blank wie du es willst) ..... Wert 15 ist höchste Helligkeit.
Alles dazsichen ( 1-14) sind Dimm Stufen falls man diese eben braucht.

Auch damit kann man "blanken" ..

Du findest in den Dropdown schlicht alle vorhandenen Output Configs ! ( In deinen Fall eben die Servos da du dafür welche hast)

Lösung:
Angenommen du willst das ALLE Displays in deinen Cockpit grundsätlich Aus sind wenn Batteryswitch OFF ist.... Und eben ALLE an sind ( 100% Helligkeit) wenn Battery switch AN ist.... Dann machst du schlicht eine Output Config.
Nenn Diese z.b. "7Seg Blank Idication" Diese Config liest den Zustand des Virtuellen Battery Switches.
Angenommen dieser Wert ist "0" für aus und "1" für an.
Dann sagst du in Transform "$*15"
Ist der Wert 0 dann 0*15=0 Er bleibt also 0 ...... Ist der Wert 1 dann 1*15 =15 Er wird zu 15.
Also 0 für Battery Aus..... 15 für Battery An
Und zu guter letzt verwendest du als "Brightness Indicator" in allen 7 Segment Configs jetzt diese Config "7Seg Blank Indicaton"

Folge: Alle Displays haben jetzt entweder Brightness "0" ( wenn BAt aus ist) oder sie haben Brightness "15" (wenn Bat An ist)


*********

Last Note:

Für ein Globales Blanken ( Battery Switch) ist das sehr nützlich. BEsonders weil dadurch auch Decimalpoints blank gehen was wir bei den Radios brauchen.
Diese Technik ist aber weniger geeignet wenn ein Display nur temporär Blank ist und andere nicht ( z.b. das SPD Display wenn VNAF in einer B737 aktiv ist)
Hier verwenden wir weiterhin das "Leerzeichen" System per Formel !
Good Luck !
2022-07-06 22:38
Avatar
pekair
Posts: 14
Hallo pizman82,

deine ausführlichen Erklärungen haben mir sehr geholfen, vielen Dank dafür.

Dass ein Max7219-Display etwas speziell ist, habe ich schon erwähnt: Zumindest die bei mir eingesetzten Exemplare funktionieren auch ohne 5V-Anschluss, wenn auch mit reduzierter Helligkeit!!! Gesund ist das sicher nicht.

Deine Erklärung zur Brightness-Steuerung hat mich mal wieder etwas Neues lernen lassen; die Methode ist klasse.

Leider lässt sich der Offset des Batterieschalters bei der A2A-Cessna nicht direkt auslesen, daher habe ich die Spannung auf dem Main-Bus ausgewertet, was mit Transform nicht geht (oder doch?), wohl aber mit Vergleichen: Wenn Spannung 0V, dann setze 0, sonst 15.

Da die Display-Helligkeit mit 15 sehr grell ist, musste ich bis auf 2 runter gehen.

Es dankt
Peter
2022-07-07 09:06
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Dieser Effekt ist mir noch immer neu. Ohne 5V auf dem Power-IN, sollte das Display nicht arbeiten soweit ich es verstehe.
Womöglich hast du einen Fehler im elektrischen System.... z.b. eine Diode Falsch gesteckt oder eine 5V Leitung hat eine Lötbrücke.

Das müsste man ausmessen.....Bzw von anderen Leuten mal Gegentesten lassen.

Womöglich ist das auch der Grund warum deine Displays so massiv hell sind weil sie doppelt versorgt werden. Brightness "2" ist für die meisten User eigentlich zu Dunkel zum Fliegen.


Zur Formel Idee.

Natürlich geht das :-)

Technisch ist der Compare (Vergleich in der Deutschen Version) nichts anderes als ein IF Statement .... Nur eben Grafisch Dargestellt, damit der Anfänger keine Formel braucht.
Es bleibt aber ein schlichtes WENN ---> DANN ---->SONST oder eben IF, THEN, ELSE.
Ob du nun Sagst "Wenn Wert = 0 , Dann 0 , Sonst 15 ist das das gleiche als wenn du im Transform sagst : if($=0,0,15)

Du kannst auch in beiden fällen Placeholder verwenden. $ bezieht sich immer auf den Wert der Config selbst.... Nimmst du den Wert einer anderen Config ( Config Refferences) mit sagen wir Symbol "A" dann kannst du auch diesen mit verwenden.... z.b. if(A+$=100,555,0) So kann man komplexere Dinge bauen die mehrere Werte checken müssen.
Und natürlich kannst du im Compare Feld neben Werten auch dort Formeln verwenden wenn es verschachtelter werden muss.

Zum Ende..: Beide Tools haben ihre Vor und Nachteile.
Formeln zu verwenden erlaubt mehr tiefe.... Der Compare hat nur IF ELSE THEN. Mit ner Formel kann man auch beliebig viele ELSEIF einbauen.

Der Compare wiederrum ist die einzige Stelle (bis jetzt) an dem Strings gehen. Also wo man Buchstaben anstatt Integer Zahlen verwenden kann.
Willst du z.b. das ein Display "OFF" anzeigt dann kannst du Im Compare sagen " Wenn 1 Dann 'On' Sonst 'Off' ( Nützlich für LCD Displays)
Versuchst du das im Transform wie if($=1,'On','Off') wird dir MF einen Error bringen denn das ist aktuell nicht erlaubt.
ABER Du kannst wie oben gesagt im Compare für Complexere sachen Formeln mitverwenden..... Dort würde diese Beispielformel funktionieren weil dort Strings erlaubt sind.
Good Luck !
2022-07-07 14:46
Avatar
pekair
Posts: 14
Hallo pizman82,

um der dubiosen Max7219-Geschichte auf den Grund zu gehen, habe ich ein neues Exemplar auf einem Entwicklungsboard in Betrieb genommen: Sobald der Flusi läuft, verhält sich das Display wie beschrieben - Anzeige funktioniert auch ohne 5V an Vcc!
Wenn MobiFlight ohne Flusi betrieben wird, funktioniert der Test nur mit angeschlossenem Vcc. Das ist schon merkwürdig.

Deine Erklärungen zur Formelerstellung habe ich dankbar zur Kenntnis genommen.

Einen ruhigen Abend wünscht

Peter
2022-07-07 19:37
Avatar
pekair
Posts: 14
... ein kleiner Nachtrag zum Max7219-Display:
Der Chip Select Pin (genau "Load") liegt im Ruhezustand auf +5V und wird beim Ansprechen des Displays kurz auf LOW gezogen. Das passiert im Testbetrieb von MobiFlight regelmäßig für je 3 ms am Anfang und am Ende eines 1 Sekunde langen Anzeigeintervalls, beim Betrieb mit dem Flugsimulator jedoch nur bei Änderungen der anzuzeigenden Daten und das auch nur für 0,3 -0,7 ms.
Da der CS-Eingang des Max7219 mit negativer Logik arbeitet, im Ruhezustand also HIGH-Pegel hat, wird es im Inneren des Chips einen Pullup-Pfad geben, über den im Flusi-Betrieb quasi "rückwärts" die Versorgung des Chips über das CS-Niveau übernommen wird, wenn Vcc (5V Power) unterbrochen wird. Das Display leuchtet weiter und bezieht seine Energie jetzt nicht aus dem 5V-Netzteil, sondern aus dem Arduino-Pin, der Für CS vorgesehen ist. Im Testbetrieb von MF reicht die "Versorgung" über CS nicht aus, da zu lange LOW-Abschnitte vorkommen (3 ms statt 0,3 ms) und sich naturgemäß im CS-Pfad kein Speicherkondensator befindet, der die "Pausen" überbrücken könnte.
So weit meine Vermutungen, die sich auf Oszi-Messungen stützen.

Peter
[Last edited by pekair, 2022-07-08 11:31]
2022-07-08 10:41
icon