Moin,
ich nutze gern diese kleinen Displays für Text und kleine Grafiken, die
sich nicht bewegen. I2C Bus, Software von Adafruit, fertig. Laufen prima
an Arduino, ESP8266 und STM32.
Am STM32F103 auf welchen ich die Textausgabe portiert habe passiert es
leider immer wieder, dass das Display beim Einschalten nicht aufwacht
oder nach dem Watchdog Reset, wenn alles neu initialisiert wird nicht
mehr ansprechbar ist. Die Befehle werden einfach verschluckt, die
Fehlerroutine wird nicht aktiviert.
Da hilft nur den Kippschalter ein paar Mal zu betätigen, bis es da ist.
Bei Wärme steigert sich das Fehlverhalten außerdem, da das Gerät im Auto
eingebaut ist.
An was ich gedacht habe:
- 500ms warten, bis Vcc stabil vom DC/DC anliegt
- I2C Frequenz 100khz
Init Sequenz ist die die im Netz überall zu finden ist.
Display schaltet sich aus, wenn CPU auch schläft, es wird eingeschaltet
wenn was los ist. Das sind eingebaute Funktionen, die nur als Befehl
gesendet werden.
Nach einem CPU Reset wird I2C komplett neu aufgesetzt.
Gibt es vielleicht eine Abhilfe dafür, die sich bewährt hat? Ich möchte
das Display ungern dauernd eingeschaltet lassen, da es rund 25mA
braucht. Man kann die Pixel alle löschen, dann verbraucht es nur noch ca
5ma aber das wäre nur die letzte Lösung.
1
uint8_tssd1306_Init()
2
{
3
// Wait for the screen to boot
4
DelayMs(500);
5
intstatus=0;
6
7
// Init LCD
8
status+=ssd1306_writeCommand(0xAE);// Display off
9
status+=ssd1306_writeCommand(0x20);// Set Memory Addressing Mode
Christian J. schrieb:> dass das Display beim Einschalten nicht aufwacht> Init Sequenz ist die die im Netz überall zu finden ist.
Jetzt noch ein mal mehr...
Wenn die bei allen anderen geht, aber bei dir nicht, dann ist an deiner
unbekannten Schaltung irgendwas anders als bei den anderen, die da ihr
Zeug ins Netz gestellt haben. Insofern wäre es sinnvoll genau diesen
Aufbau, der da Probleme macht, Informationen zu beschreiben (Schaltplan,
Layout, Fotos...).
Lothar M. schrieb:> Insofern wäre es sinnvoll genau diesen> Aufbau, der da Probleme macht, Informationen zu beschreiben (Schaltplan,> Layout, Fotos...).
DC/DC 3.3V + 47uf ..... 5cm Leitung... 100nf direkt davor. I2C PU 4.7
kOhm.
Also alle anderen I2C Teilnehmer spielen wunderbar.
Und ob das bei allen anderen auch immer funktioniert weiss ja niemand.
Ok, glaube das hat sich - wenn Info richtig ist - erledigt. Der Reset
wird ja nicht heraus geführt aber genau das scheint das Problem zu sein,
dass die Dinger nach einem Sleep nicht richtig aufwachen.
https://github.com/adafruit/Adafruit_SSD1306/issues/106
Also wird die einzige Lösung wohl sein, den Sleep zu vermeiden und nur
die Pixel zu löschen :-( Oder dem Display einen TRansistor zu verpassen,
der Vcc abklemmt.
Ist das I²C Signal absolut sauber, Timingverhalten? ich setze auch hin
und wiedermal solche Displays ein und kann dir nur die 4 Tips geben:
1.) unsauberes Timing und Spannung verhalten des I²C bus kann das
Display zum Hängen bringen
2.) Kein Kerko (ca 4.7µF) in der Speiseleitung unmittelbar beim Display
macht oft Probleme
3.) Nach einschalten der Spannungsversorgung MUSS SCL und SDA auf
sauberen VCC liegen, ist einer auf 0V Hängt das Display auch gerne.
4.) Nach Stromversorgung On erst nach frühstens 100mS Befehle am Bus
bringen
Das sind so die Erfahrungen die ich gemacht habe
Patrick L. schrieb:> Ist das I²C Signal absolut sauber, Timingverhalten? ich setze auch hin> und wiedermal solche Displays ein und kann dir nur die 4 Tips geben:> 1.) unsauberes Timing und Spannung verhalten des I²C bus kann das> Display zum Hängen bringen
I2C ist eine Hardware Einheit, viel kann man da nicht machen. 4.7k und
das Signal sieht zumindest nicht schlecht aus. Den Rest erledigt das IC
und alle anderen kommen damit ja zurecht. Ich löte jetzt erstmal einen
PNP Transistor ein, der Vcc vom Display abklemmt bzw hat mein DC/DC
3.3V ja einen Enable Eingang der die gesamte Hardware steuert. Nur das
Display eben nicht, weil mir das anfangs besser passte. Nur wenn nix
läuft muss man ja auch nix sehen.
Christian J. schrieb:> Den Rest erledigt das IC> und alle anderen kommen damit ja zurecht.
Ja dann scheint Punkt 1. wohl weggefallenen :-)
Ich verwende diese Diese Displays mit dem Internen I²C UCSI des
MSP430Fxxxx
und habe einfach schon probleme gehabt wenn ich die Punkte die ich oben
beschreibe nicht beachte (oder von Mitarbeiter nicht beachtet werden)
deshalb die Tipps.
Das mit dem Sleepmodus, ich sende vor Aufwachsequenz immer zuerst 2
Stoppbefehle gefolgt von 9 Clocks am I²C Bus bevor ich die Sequenz
sende.
Falls die anderen Tipps von mir nicht helfen, versuche es mal damit ;-)
Diese Displays sind Massenware und nicht alle gleich gut.
Hast du schon mal ein anderes Exemplar probiert?
PS: ich habe hier gerade eines auf einem Steckbrett an einem Nucleo L432
ohne irgendwelche zusätzliche Beschaltung, einfach 1:1 verbunden - läuft
einwandfrei.
Klaus W. schrieb:> PS: ich habe hier gerade eines auf einem Steckbrett an einem Nucleo L432> ohne irgendwelche zusätzliche Beschaltung, einfach 1:1 verbunden - läuft> einwandfrei.
Das kann sein, muss aber nicht. In diversen Foren wird berichtet, dass
diese Displays einen Reset benötigen, dessen Leitung der Bequemlichkeit
natürlich nicht rausgeführt ist. Arduino freundlich soll es sein. Aus
dem Sleep wachen sie dann wohl eher zufällig mal auf, mal auch nicht. So
ca 1/3 aller Vorgänge bei mir scheitert.
Lasse das Ding jetzt dauerhaft an, die 5ma machen den Kohl auch nicht
fett bei 2x18650 Zellen mit 6000mA. In 10h sind das 50mah mehr...
Peanuts für eine Hobbyanwendung, die eh ständig nachgeladen wird. Klappt
bisher einwandfrei, 10 Mal ging die CPU in den Sleep, 10x aufgewacht und
das Teil war da. Dass man manchmal 2-3 Mal den Kippschalter umlegen muss
ist halt so. Andere Displays haben das nicht die ich verwende.
> Lasse das Ding jetzt dauerhaft an, die 5ma machen den Kohl auch nicht> fett bei 2x18650 Zellen mit 6000mA. In 10h sind das 50mah mehr...
WArum schaltest du dann dem Display nicht einfach mit einem Transistor
den Strom komplett ab? Mich wuerden 5mA schon sehr stoeren. Ich kenne
Schaltungen mit mehreren Microcontroller und Display die im Vollbetrieb
weniger verbrauchen.
Olaf
Olaf schrieb:> WArum schaltest du dann dem Display nicht einfach mit einem Transistor> den Strom komplett ab?
Will er ja Versuchen:
Christian J. schrieb:> Ich löte jetzt erstmal einen> PNP Transistor ein, der Vcc vom Display abklemmt
[Ironie ON]
Das passiert gerne wenn mann meine Tipps ignoriert ....LOL
[Ironie OFF]
Christian J. schrieb:> In diversen Foren wird berichtet, dass> diese Displays einen Reset benötigen
Ich habe einige leicht unterschiedliche Wifi-Kit-8 Module. Bei allen
muss ich die Reset Leitung per Software ansteuern.
Ich habe aber auch eine Hand Voll einzelner Displays unterschiedlicher
Größe (als Modul mit Spannungsregler) gekauft, die haben keinen Reset
Eingang und funktionieren auch ohne.
Die Lage ist also nicht eindeutig.
> Die Lage ist also nicht eindeutig.
Naja, wie immer wenn man glaubt einen Fehler in anderleuts Hardware
erkannt zu haben ist das in 90% Quatsch und man ist selber schuld.
Besonders da die meisten hier ja gar nicht selber programmieren sondern
nur Libaries aus dem Internet zusammenklauen. Andererseits sind ja
offensichtlich auch die unterschiedlichsten Displaytreiber auf den
Displays verbaut und selbst aehnliche Displays koennen dann noch von
unterschiedlichen Herstellern kommt, sich als in Layout und
Huehnerfutter unterscheiden. Zum basteln ist das ja auch voll in
Ordnung. Man kann dann die Loesung dieser Probleme als intellektuelle
Herausforderung sehen welche man mit Freude meistert. .-)
Olaf
Olaf schrieb:> Besonders da die meisten hier ja gar nicht selber programmieren sondern> nur Libaries aus dem Internet zusammenklauen
Du kannst dir ja gern das Datenblatt des SSD1306 zu Gemüte führen, es
komplett durchlesen. Und dann deine eigene Init schreiben. Die Register
und Fachausdrücke sind ja gut erklärt. Du musst nur noch rausfinden
welche Zahlen da rein müssen, weil der Chip ja zig Displays steuern
kann...
Und nächstes Jahr, wenn Du fertig bist sag Bescheid ;-)
Olaf schrieb:> WArum schaltest du dann dem Display nicht einfach mit einem Transistor> den Strom komplett ab? Mich wuerden 5mA schon sehr stoeren.
Sobald ich das Bedürfnis habe, dass die Schaltung länger als 1 Woche im
Auto liegen muss, bevor ich den USB Pröppel reinstecke und nachlade.
5,6mA sind es, schalte ich ab falle ich auf <1mA.
Sobald es etwas kühler ist ;-) Freibad wartet.....
Hast du auch ein 3V Modul angeschlossen ?
Ich habe so was ähnliches mit Bascom-Prog erlebt. Ursache war, das ich
ein 5V Modul in einer 3V Schaltung betrieben habe.
Ich habe bisher noch nie den Rest-Pin vermisst bzw gebraucht.