Hallo zusammen Ich habe hier ein OLED mit einem SSD1306 Controller drauf. Im Datenblatt steht bei VBAT 3.5V-4.2V Auf der Herstellerwebseite: http://www.solomon-systech.com/en/product/display-ic/oled-driver-controller/ssd1306/ Steht: 3.3V-4.2V Zudem steht: VDD= 1.65V - 3.3V, <VBAT for IC Logic Ich gehe deshalb davon aus, dass man VDD kleiner als VBAT wählen sollte. Leider habe ich immoment nur 3.3V zur verfügung und habe deshalb VDD und VBAT zusammen an 3.3V. Ich habe die interne ChargePump aktiviert. Vermute ich mal. Am VCC Pin welcher über einen C gegen GND liegt messe ich leider keine Spannung. Ob das nun am VBAT oder meinem Code liegt weiss ich nicht. Das Display zeigt leider nichts an. Nun weiss ich nicht, ob das an dieser Spannung oder an meinem Code liegt. Deshalb wollte ich fragen, ob jemand bereits erfahrungen mit dem SSD1306 hat und hierzu etwas schreiben könnte. Danke
also ich habe hier das typ. 0.96" OLED mit SSD1306 an 3.3V problemlos laufen.
G. H. schrieb: > also ich habe hier das typ. 0.96" OLED mit SSD1306 an 3.3V > problemlos > laufen. Habe auch das 0.96" OLED Sprichst du von einem Modul, welches evtl. noch einen Spannungswandler drauf hat oder von einem OLED mit Controller? Ich habe dieses hier: http://www.buydisplay.com/default/datasheet-128x64-oled-module-spi-0-96-inch-graphic-displays-white-on-black Ich betreibe es, bzw. versuche es im SPI 4-Wire Mode zu betreiben. BS0,1,2 habe ich auf GND. Zur verifikation des Codes, versuche ich nach der initialisierung das Display zu invertieren mit 0xA7 und 0xA6. Genügt das oder muss ich wirklich noch Daten senden? Es geht mir im ersten Schritt lediglich darum, meine SPI Kommunikation zu verifizieren. Hier mein Init Code:
1 | GPIO_SetBits(OLED_Port,OLED_RST_Pin); |
2 | delay_ms(5); |
3 | GPIO_ResetBits(OLED_Port,OLED_RST_Pin); |
4 | delay_ms(500); |
5 | |
6 | SPI2_SendLCD(0xAE, 0); //0 bedeutet Command (DC ist auf low) |
7 | SPI2_SendLCD(0xD5, 0); |
8 | SPI2_SendLCD(0x80, 0); |
9 | |
10 | SPI2_SendLCD(0xA8, 0); |
11 | SPI2_SendLCD(0x3F, 0); |
12 | |
13 | SPI2_SendLCD(0xD3, 0); |
14 | SPI2_SendLCD(0x00, 0); |
15 | |
16 | SPI2_SendLCD(0x8D, 0); |
17 | SPI2_SendLCD(0x14, 0); |
18 | |
19 | SPI2_SendLCD(0x40, 0); |
20 | SPI2_SendLCD(0xA6, 0); |
21 | |
22 | SPI2_SendLCD(0xA4, 0); |
23 | |
24 | SPI2_SendLCD(0xA1, 0); |
25 | SPI2_SendLCD(0xC8, 0); |
26 | |
27 | SPI2_SendLCD(0xDA, 0); |
28 | SPI2_SendLCD(0x12, 0); |
29 | |
30 | SPI2_SendLCD(0x81, 0); |
31 | SPI2_SendLCD(0xCF, 0); |
32 | |
33 | SPI2_SendLCD(0xD9, 0); |
34 | SPI2_SendLCD(0xF1, 0); |
35 | |
36 | SPI2_SendLCD(0xDB, 0); |
37 | SPI2_SendLCD(0x40, 0); |
38 | |
39 | SPI2_SendLCD(0xAF, 0); |
40 | |
41 | |
42 | .....
|
43 | |
44 | while(1) |
45 | {
|
46 | |
47 | SPI2_SendLCD(0xA7,0); |
48 | GPIO_SetBits(GPIOB,GPIO_Pin_7); |
49 | delay_ms(500); |
50 | SPI2_SendLCD(0xA6,0); |
51 | GPIO_ResetBits(GPIOB,GPIO_Pin_7); |
52 | delay_ms(500); |
53 | }
|
Leider geschieht nichts...
Hi, hier mal der InitCode aus der Lib die ich verwende (12c oder isp ist da ja egal)
1 | #if defined SSD1306_128_64 |
2 | // Init sequence for 128x64 OLED module |
3 | ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE |
4 | ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5 |
5 | ssd1306_command(0x80); // the suggested ratio 0x80 |
6 | ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8 |
7 | ssd1306_command(0x3F); |
8 | ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3 |
9 | ssd1306_command(0x0); // no offset |
10 | ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 |
11 | ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D |
12 | if (vccstate == SSD1306_EXTERNALVCC) |
13 | { ssd1306_command(0x10); } |
14 | else |
15 | { ssd1306_command(0x14); } |
16 | ssd1306_command(SSD1306_MEMORYMODE); // 0x20 |
17 | ssd1306_command(0x00); // 0x0 act like ks0108 |
18 | ssd1306_command(SSD1306_SEGREMAP | 0x1); |
19 | ssd1306_command(SSD1306_COMSCANDEC); |
20 | ssd1306_command(SSD1306_SETCOMPINS); // 0xDA |
21 | ssd1306_command(0x12); |
22 | ssd1306_command(SSD1306_SETCONTRAST); // 0x81 |
23 | if (vccstate == SSD1306_EXTERNALVCC) |
24 | { ssd1306_command(0x9F); } |
25 | else |
26 | { ssd1306_command(0xCF); } |
27 | ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9 |
28 | if (vccstate == SSD1306_EXTERNALVCC) |
29 | { ssd1306_command(0x22); } |
30 | else |
31 | { ssd1306_command(0xF1); } |
32 | ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB |
33 | ssd1306_command(0x40); |
34 | ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4 |
35 | ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6 |
36 | #endif |
im angehängten Bild (i2c) kannst du die Beschaltung am breakoutboard erkennen.
Man sollte zuvor den RST freigeben... Asche auf mein Haupt. Ich habe Hi-Low anstelle Low-Hi gemacht. Nun funktioniert alles! Danke euch trozdem :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.