Forum: Mikrocontroller und Digitale Elektronik 0,96 Oled mit STM32F407


von Hendrik (Gast)


Angehängte Dateien:

Lesenswert?

Hello,

ich versuche gerade ein 0.96 Oled mit dem STM32F407 zum laufen zu 
kriegen. Es handelt sich um folgendes Display:
http://www.dx.com/p/bonatech-0-96-inch-display-screen-module-blue-display-black-blue-295842#overview

Verbunden wie folgt:
GND->GND
VCC->5V
D0->PB13 (CLK)
D1->PC3 (MOSI)
RST->PE4 (RST)
DC->PE2 (Data/Cmd)
CS->PE1 (Chipselect)

Anbei mein "Treiber". Die Befehle für die Initialisierung habe ich aus 
der adafruit-lib genommen, aber auch wenn ich nur ein "displayon" 
schicke, passiert nichts. Das Display bleibt einfach schwarz. Zumindest 
leuchten müsste es doch mal, oder?

Leider habe ich keinen Logic analyzer. Im Keil habe ich schon geschaut, 
ob hier alles gesetzt wird wie gewünscht - eigentlich ja...

Wäre super, wenn ihr euch das mal ansehen könntet. Ich sitze seit 2 Uhr 
Nachmittag (nun 10h mit Unterbrechungen...) an dem Ganzen und kriege 
kein Murren aus dem Display.

In der Main rufe ich dann die Funktionen spiInit & oledInit auf und 
erwarte eigentlich, dass das Ding zumindest mal leuchtet - oder sehe ich 
das falsch?

Danke!

von Marcus W. (marcusaw)


Lesenswert?

Danke dafür. Hab noch so ein Ding aus Arduino-Zeiten rumfliegen...

von Hendrik (Gast)


Lesenswert?

Jetzt müsste es halt nur noch laufen. Hast du es hinbekommen?

von OLED (Gast)


Lesenswert?

Die u8g-Lib finde ich ganz praktisch und kann auch verdammt viele 
Controller. Hier gibts auch einen Port für den STM32
http://blog.bastelhalde.de/?p=759

von Hendrik (Gast)


Lesenswert?

Hab's mal schnell verglichen aber akut auch keinen Fehler gefunden...:-(

von Hendrik (Gast)


Lesenswert?

Ich weiß auch nicht ob es vll doch am spi liegt....

von Hendrik (Gast)


Angehängte Dateien:

Lesenswert?

So, das ließ mir jetzt keine Ruhe. Ich hab jetzt mal nen Logic Analyzer 
besorgt und das Ganze getestet. SPI hatte einen kleinen Fehler, der ist 
jetzt raus (verbessert im Anhang -TI Mode war falsch und CPHA muss 
gesetzt sein.). Jetzt siehts so aus, wenn ich 0xAF (Display ON) schicke, 
siehe "8.jpg" im Anhang.

Eigentlich doch Mustergültig, wenn ich mit dem SSD1306 Datenblatt Seite 
18 Figure 8-5 vergleiche, oder irre ich?

Eigentlich müsste das dumme Ding doch zumindest mal leuchten, oder? :D

Die Initialisierung mit den vielen Commandos habe ich auch mal gemacht 
(siehe Anhang, "5.jpg" - die stimmen auch, der letzte übertragene 
command ist das besagte 0xAF, wo ich ja das display einschalte), aber da 
geht auch nix an.

Ich bin ABSOLUT ratlos und langsam auch echt am verzweifeln..

Grüße Hendrik

von G. G. (g_g447)


Lesenswert?

Hallo,


Achtung!!

Das Display zeigt nach der Initialisierungsphase keine besonderen 
Merkmale.
Es leuchtet nicht und flackert nicht!

Erst ein gesendetes Pixel zeigt die eigentliche Display-Funktion an!

Hast du was an das Display gesendet?


Gruß G.G.

von Hendrik (Gast)


Angehängte Dateien:

Lesenswert?

Habe das mal probiert. Heißt ja - so wie ich das verstehe - nur "Daten" 
schreiben, dann sollte ja mal irgendwas leuchten, oder?

oledSendData(0x55);
oledSendData(0xFF);
oledSendData(0x55);
oledSendData(0xFF);
oledSendData(0x55);
oledSendData(0xFF);

wird zu dem Bild im Anhang, sieht ja soweit gut aus. Display trotzdem 
dunkel.

Neue Tipps?

Die Initialisierung stimmt?
  oledSendCmd_enum(DisplayOff);
  oledSendCmd_enum(ClockDivide);
  oledSendCmd(0x80);
  oledSendCmd_enum(Multiplex);
  oledSendCmd(0x3F);
  oledSendCmd_enum(DisplayOffset);
  oledSendCmd(0x0);
  oledSendCmd_enum(StartLine0);
  oledSendCmd_enum(ChargePump);
  oledSendCmd(0x10); //externalVCC, otherwise 0x14
  oledSendCmd_enum(MemoryAddressing);
  oledSendCmd(0x0);
  oledSendCmd_enum(SegRemap127);
  oledSendCmd_enum(ComScanDec);
  oledSendCmd_enum(ComPins);
  oledSendCmd(0x12);
  oledSendCmd_enum(Contrast);
  oledSendCmd(0x9F); //externalVCC, otherwise 0xCF
  oledSendCmd_enum(PreCharge);
  oledSendCmd(0x22); //externalVCC, otherwise 0xF1
  oledSendCmd_enum(DeselectLevel);
  oledSendCmd(0x40);
  oledSendCmd_enum(EntireDisplayOnResume);
  oledSendCmd_enum(DisplayNormal);
  oledSendCmd_enum(DisplayOn);

wobei ja, auch wenn die falsch ist, das Ding doch irgendwas anzeigen 
müsste oder?

Grüße, der langsam verzweifelte hendrik.

von G. G. (g_g447)


Angehängte Dateien:

Lesenswert?

Hallo,


oledSendData(0x55);
oledSendData(0xFF);


sind zwar Daten die man per SPI senden kann, sie zeigen aber auf den 
Display wenig Wirkung!

Nochmals, das Display bleibt bei richtiger Initialisierung schwarz. Es 
wird nicht wie ein TFT-Display "blau", grün oder mit sonstiger Farbe 
angesteuert. Erst der richtig angesteuerte Font-Satz  erzeugt ein 
lesbares Schriftbild.

Als Anlage eine ATXMEGA-Anwendung zum Studieren. SPI- und 
Transfer-Protokolle sin ja nahezu  identisch!


Gruß G.G.

von Hendrik (Gast)


Lesenswert?

es lebt! ;)

Scheinbar war die Initialisierung falsch. Sonst habe ich meine Sachen 
soweit übernehmen können.

Jetzt wird mal getestet. Danke!!

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Bei mir läuft jetzt das 1.3" Sainsmart OLED (SPI Version) auch auf einem 
STM32F072 Discovery unter Verwendung von STM32 Cube.
Leider hab ich die u8g lib nicht zum laufen gebracht :-/
Aber geht auch so.....

von Frank B. (f-baer)


Lesenswert?

Ich habe vor ein paar Jahren mal was mit dem Displaycontroller gemacht, 
und hatte immer Probleme, wenn ich das CS in Hardware gelassen habe. 
Dann funktionierte die Initialisierung nicht richtig, weil zwischen den 
einzelnen Argumenten der Befehle Wackler am CS waren.
Mit Software-CS gings dann einwandfrei.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.