ich habe hier ein Problem bei meiner Anwendung, bei der ich ein 0,96" SSD1306 Display mit einem XIAO SAMD21 Arduino verwende, und zwar erscheint bei jedem Neustart der Applikation am gesamten Bildschirm ein Rauschen/Schneebildschirm für ca. 3s. Danach funktioniert die Darstellung der Zeichen einwandfrei.
Ist dieses "Rauschen" bei Beginn des Programm unvermeidlich
Es ist vermeidbar. Bei meiner Bibliothek tritt es nicht auf. Aber ich schätze, dass die Bibliothek nicht der Knackpunkt ist, sondern wie du sie benutzt. Dennoch, probiere einfach mal meine zum Vergleich.
Vielen Dank für die Library, ich habe die eben hochgeladen auf den Arduino, allerdings erscheint hier auch dieses Rauschen zu Beginn, das muss mal an etwas anderen liegen bei mir.
Das scheint wohl was mit dem Ausschalten vorm Neustart gelegen zu haben. Ich habe dort jetzt noch die Zeile "u8x8.noDisplay();" eingefügt und jetzt sieht es so aus, als ob das Rauschen nicht mehr kommt.
Ja, es liegt tatsächlich an der Ausschaltsequenz, wenn ich die Stromversorgung abrupt unterbreche, dann startet das Display wieder mit dem Rauschen. Wenn die "Ausschaltsequenz" durchlaufen wird, kommt das Rauschen nicht.
Stefan, ich kann OCR benutzen <rofl>, aber Suchmaschinen sind in der Hinsicht noch etwas zurückhaltend. Vernünftige Durchsuchbarkeit sollte doch irgendwie Ziel eines Forums sein. Und Copy&Paste-Programmierer auszugrenzen, geht gar nicht ;-)
Das erinnert ein bisschen an die 80er Jahre des vorigen Jahrhunderts, als man zur Programmierung von Mikroprozessoren mangels Internet aus Zeitschriften "seitenweise" Intel Hex-Code abtippen konnte.
Ja, es liegt tatsächlich an der Ausschaltsequenz, wenn ich die
Stromversorgung abrupt unterbreche, dann startet das Display wieder mit
dem Rauschen. Wenn die "Ausschaltsequenz" durchlaufen wird, kommt das
Rauschen nicht.
Das "Rauschen" entsteht dadurch, dass der Display RAM beim einschalten nicht initialisiert ist (enthält willkürliche Werte).
Soll das jetzt bedeuten, wenn du deine "Ausschaltsequenz" ausführst, dann die Spannungsversorgung komplet entfernst, paar Sekunden, 1 Minute wartest und dann deine Schaltung mit Spannung versorgst, kein "Rauschen" zu sehen ist?
Das würde mich sehr stark wundern,
außer du entfernst die Spannungsversorgung nicht wirklich.
(Das würde mich jetzt echt interessieren)
Beim Einschalten könnte man erst die nötigen Init.-Befehle senden, dann den RAM z.b. mit 0 initialisieren und erst dann den Befehl "zeige RAM auf Display" ausführen.
Wie groß ist denn die u8g2 im Vergleich zum Adafruit-Dingens? Ich musste bei Adafruit jede einzelne SPI<->I2C "Abfrage" rausnehmen und auch sonst sehr viel rauslöschen, um überhaupt etwas Spielraum auf einem U32u4 zu haben.
Die Frage trägt eher rhetorischen Charakter, aber kann ja sein, dass das mal jemand vergleichen hat.
Ich muss das glatt mal ausprobieren, zumal ich GrafikFunktionen garnicht brauche, bzw. wieder rausgeschmissen hatte, eben weil es nicht in den Speicher "passte". Ich hab dann alles in Textform angepasst und quasi als Pseudografik dann umgesetzt. Am Ende sind jetzt hier noch 342Byte frei. Naja
EDIT: U32u4? naweiss ja jeder, was ich meine. Die kleinen Arduinos mit 32K Flash
Das "Rauschen" entsteht dadurch, dass der Display RAM beim einschalten
nicht initialisiert ist (enthält willkürliche Werte).
Soll das jetzt bedeuten, wenn du deine "Ausschaltsequenz" ausführst,
dann die Spannungsversorgung komplet entfernst, paar Sekunden, 1 Minute
wartest und dann deine Schaltung mit Spannung versorgst, kein "Rauschen"
zu sehen ist?
Das würde mich sehr stark wundern,
außer du entfernst die Spannungsversorgung nicht wirklich.
(Das würde mich jetzt echt interessieren)
Beim Einschalten könnte man erst die nötigen Init.-Befehle senden, dann
den RAM z.b. mit 0 initialisieren und erst dann den Befehl "zeige RAM
auf Display" ausführen.
und mit einem delay zum Anfang des Programms so lange wie möglich warten bis das Rauschen durch die Initialisierung überschrieben wird.
delay zum Anfang des Programms so lange wie möglich warten
bis das Rauschen durch die Initialisierung überschrieben wird.
Dir ist schon klar, das delay dein Programm unterbricht?
Sprich, führt die Init. einen "clear" durch, brauchst danach kein delay und tut sie es nicht, ist es egal ob davor oder danach, da du kein Multithreading hast.
Dir ist schon klar, das delay dein Programm unterbricht?
Sprich, führt die Init. einen "clear" durch, brauchst danach kein delay
und tut sie es nicht, ist es egal ob davor oder danach, da du kein
Multithreading hast.
Ich erkläre dir das nochmal ganz langsam ...
Projekt wird eingeschaltet und Müll ist im OLED Speicher -> Rauschen
Delay -> warten, es wird weiterhin Müll angezeigt weil ja nichts durch das Programm gemacht wird
Display init -> Keine Ahnung ob das den OLED Speicher initialisiert, aber angenommen ja, dann ist das der früheste Zeitpunkt an dem der Bildinhalt geändert wird.
Sorry, ich bin davon ausgegangen, dass die Ironie eindeutig wäre.
Es gibt bei allen Displays ein Display-on und ein Display-off
Kommando. Damit wird der Bildschirm abgeschaltet, aber nicht der
Display-Controller. Bevor man irgendetwas Anderes macht
(Initialisierung) gibt man also ein Kommando Display-off und
wenn alles fertig ist, ein Display-on. Dann gibt es keinen Schnee.
Mag sein dass die sogenannten Libs den (Arduino) User so
bevormunden dass es keine Möglichkeit gibt die Sequenz so wie
beschrieben auszuführen.
Das würde mich sehr stark wundern,
außer du entfernst die Spannungsversorgung nicht wirklich.
(Das würde mich jetzt echt interessieren)
Ich schalte in der Abschaltsequenz den "EN"-Pin eines StepUp-Wandlers aus, d.h. da bleibt noch eine kleine Restspannung, die dann langsam abfällt.
Beim Neustart erscheint das Rauschen nur, wenn die Sequenz nicht durchlaufen wurde. d.h. wenn z.Bsp. der Akku ausgesteckt wurde.
Ich finde deine Kommentare oft pingelig, aber die sind tatsächlich die letzte Zeit nicht mehr so schlimm und dieser hier, nicht nur lustig beschrieben, sondern auch völlig richtig.
Soll das jetzt bedeuten, wenn du deine "Ausschaltsequenz" ausführst,
dann die Spannungsversorgung komplet entfernst, paar Sekunden, 1 Minute
wartest und dann deine Schaltung mit Spannung versorgst, kein "Rauschen"
zu sehen ist?
Das würde mich sehr stark wundern,
Es ist auch für mich nicht logisch. In meinem Gerät schreibe ich "Power off" ins Display und ein paar Sekunden die Versorgung aus. Wenn ich nach Wochen oder Monaten wieder einschalte, ist das Display schwarz aus, bevor ich den Starttext ausgebe.
Wie groß ist denn die u8g2 im Vergleich zum Adafruit-Dingens? Ich musste
bei Adafruit jede einzelne SPI<->I2C "Abfrage" rausnehmen und auch sonst
sehr viel rauslöschen, um überhaupt etwas Spielraum auf einem U32u4 zu
haben.
Ich schalte in der Abschaltsequenz den "EN"-Pin eines StepUp-Wandlers
aus, d.h. da bleibt noch eine kleine Restspannung, die dann langsam
abfällt.
Beim Neustart erscheint das Rauschen nur, wenn die Sequenz nicht
durchlaufen wurde. d.h. wenn z.Bsp. der Akku ausgesteckt wurde.
Also hast du das Problem ansich ja noch nicht gelöst / verstanden.
Alles was du bis jetzt gemacht hast, war ja dann nur eine temporäre Lösung die anscheinend bei gegebenen Bedingungen funktioniert.
Ich habe in meiner verwendeten Lib keinen entsprechenden Befehl
gefunden, ich denke, das ist in Nepomuks Lib dann besser gelöst.
Hast du alles zur Ulli Kraus lib gelesen?
Das glaube ich nicht.
Es steht ganz sicher in den sehr umfangreichen Beschreibungen.
Ich geb's zu, ich habe nicht alles von vorne hin hinten durchgelesen, aber ich komme schon zum Schluss, dass die Initalisierung doch mit dem Befehl "u8x8.begin();" erfolgt und in dem Moment auch das Rauschen erscheint. Alle Befehle mit clear() o.ä. scheinenen hier keinen positiven Effekt bzgl. des Rauschbildschirms zu haben.