Forum: Mikrocontroller und Digitale Elektronik OLED Grafik Anzeige


von peter (Gast)


Lesenswert?

http://www.ebay.de/itm/12864-0-96-Inch-OLED-LED-Display-Anzeige-Modul-fur-Arduino-51-Serie-Neu/371193175731?_trksid=p2047675.c100005.m1851&_trkparms=aid%3D222007%26algo%3DSIC.MBE%26ao%3D1%26asc%3D20140117130753%26meid%3Dbb535bbe0e244c299462c2cbc035a7a9%26pid%3D100005%26rk%3D1%26rkt%3D6%26sd%3D191168669630&rt=nc

Habe 2 von diesen Teilen geschenkt bekommen.

Da ich ein ähnliches schon seriell in betrieb genommen habe,
dachte ich es geht sehr einfach.

Aber hier ist keine Startgrafik beim einschalten.

Ist dies überhaupt ein Intelligentes Grafikdisplay,
wo schon Grafik und Textbefehle enthalten sind?
Leider habe ich auch noch kein entsprechendes Datenblatt gefunden.

Wenn einer Dieses Display kennt, wie wird es in einfachster weise in 
Betrieb genommen.

Danke

von Sebastian (Gast)


Lesenswert?

Diese spaßigen Displays haben keinerlei Grafikfunktionen oder 
Zeichensätze drin. Man beschreibt sie wie einen Speicher, dessen Bits 
halt als leuchtende Punkte zu sehen sind.

Wenn man echte Grafik machen will und viel RAM zur Verfügung hat, gibt 
es U8glib.

Ich habe so ein Display schon in Betrieb genommen und hatte nicht viel 
RAM. Meine Lösung ist zugegeben aus drei verschiedenen 
Beispielprogrammen zusammenkopiert und kann nur einen 
5x7-ASCII-Zeichensatz darstellen, und zu "schmutzig" zur 
Veröffentlichung, aber man kann unter Ausnutzung des "Page Mode" (eine 
"Seite" ist ein 8 bit hoher Streifen) sehr einfach mit wenig RAM-Bedarf 
Text und Symbole abbilden, so lange diese nicht höher als 8 Pixel sind.

SSD1306 ist übrigens der richtige Suchbegriff, aber darauf achten, daß 
die Displays im I2C-Modus betrieben werden, gibt auch welche für SPI.

von peter (Gast)


Lesenswert?

Danke für diese Inf.

Wo finde ich das Datenblatt damit ich die Zeilen und Spalten ansteuern 
kann?
Unter Anderen muss ich auch die I2C Adresse wissen.
Am besten wäre eine Minimale Startsequenz.

Danke

von spess53 (Gast)


Lesenswert?

Hi

>Wo finde ich das Datenblatt damit ich die Zeilen und Spalten ansteuern
>kann?

Gurgel: 'SSD1306 Datasheet'

MfG Spess

von peter (Gast)


Lesenswert?

Gurgeln tu ich schon, mache auch weiter.

Wie stelle ich fest ob das Teil  mit I2C betrieben wird, oder mit Spi?

Es sollte ein I2C sein ,wurde mir gesagt.....

von spess53 (Gast)


Lesenswert?

Hi

>Wie stelle ich fest ob das Teil  mit I2C betrieben wird, oder mit Spi?

Wenn das die Displays aus dem Link sind, dann steht da SCL und SDA 
drauf. Und das ist I2C.

MfG Spess

von peter (Gast)


Lesenswert?

also I2C!

Um das teil anzusteuern brauche ich also noch D/C  (Daten/Befehle) oder 
?

RST bleibt offen oder ?

von Uwe (Gast)


Lesenswert?

Reset über Pullup (der ist eventuell auch schon auf drauf) nach VCC.

von Crazy Harry (crazy_h)


Lesenswert?

peter schrieb:
> Um das teil anzusteuern brauche ich also noch D/C  (Daten/Befehle) oder
> ?

Das deutet eher auf SPI hin.

von spess53 (Gast)


Lesenswert?

Hi

>Das deutet eher auf SPI hin.

Nein. Das ist die Umschaltung Befehl/Daten.

MfG Spess

von Philipp K. (philipp_k59)


Lesenswert?

es gibt da 3V und 5V Module.. die 5V haben meist hinten einen 
Spannungsregler mit drauf.. ob die 3V auch ein levelshifting benötigen 
weiß ich nicht.

von Frank K. (fchk)


Lesenswert?

Das Display ist wahrscheinlich ein UG-2864AMBA oder UG-2864HSWE. Lade 
Dir die Datenblätter. Die Displays unterscheiden sich in der Anzahl der 
Kontakte auf dem Folienleiter. Google führt Dich zu den Datenblättern.

Für die Unterscheidung SPI/I2C sind die Pins BM0 und BM1. Prüfe die 
Beschaltung.

Ich habe ähnliche Displays, die nur 4 Pins VCC;GND;SCL;SDA haben. Leider 
brauchen meine Displays einen Impuls auf der Reset-Leitung, um immer 
sauber hoch zu kommen. Die Reset-Leitung ist auf der Leiterplatte nicht 
angeschlossen. Ich zapfe diesen Pin an, und nach einem ordentlichen 
Reset starten die Controller immer zuverlässig.

fchk

von Frank K. (fchk)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Das deutet eher auf SPI hin.
>
> Nein. Das ist die Umschaltung Befehl/Daten.

und wird bei I2C zur Festlegung der Adresse (0x78/0x7A) verwendet.

fchk

von peter (Gast)


Lesenswert?

Welchen Befehl müsste ich  senden damit das Teil zum Leben erwacht?
z.B  1Byte (Adr + WE Bit) 2Byte (Daten)


Frank K. schrieb:
> Für die Unterscheidung SPI/I2C sind die Pins BM0 und BM1. Prüfe die
> Beschaltung.
Die Pins gibt es bei mir nicht!

von Jojo S. (Gast)


Lesenswert?

Beitrag "Re: OLed Anzeige"

war das nicht richtig oder bist du ein anderer Peter?

von Jojo S. (Gast)


Lesenswert?

Frank K. schrieb:
> Ich habe ähnliche Displays, die nur 4 Pins VCC;GND;SCL;SDA haben. Leider
> brauchen meine Displays einen Impuls auf der Reset-Leitung, um immer
> sauber hoch zu kommen.

kurze Zwischenfrage: das Problem habe ich mit diesen Displays auch, hast 
du mal probiert ob das per Software zu lösen ist?

von peter (Gast)


Lesenswert?

Jojo S. schrieb:
> Beitrag "Re: OLed Anzeige"
>
> war das nicht richtig oder bist du ein anderer Peter?

Jo,bin ich.
Habe meinen eigenen Thread vergessen.
Nach der Antwort wäre es ein SPi ??!!!

Es fehlt mir aber eine Ansteuerung Sequenz um das Teil zum leben zu 
erwecken.

von Jojo S. (Gast)


Lesenswert?

ein googlen nach 'SSD1306' erschlägt dich mit Ergebnissen, es gibt jede 
Menge Libs für alle möglichen Platformen. Ein Befehl alleine reicht 
nicht, es ist eine Sequenz die einige Registerwerte setzt. Gut ist zB 
die Adafruit_gfx lib. Ob SPI oder I2C ist der Software egal weil die 
Kommandos/Registerwerte gleich sind und nur das write auf die Hardware 
getauscht werden muss.

von Jojo S. (Gast)


Lesenswert?

die Adafruit Lib ist in C++ für Arduino, es gibt aber auch prozedurale 
Versionen, zB 
https://github.com/microbuilder/LPC1343CodeBase/tree/master/drivers/displays/bitmap/ssd1306
Die ist für den LPC13xx, aber es sind nur wenige IO Routinen für andere 
Prozessoren anzupassen.

von Frank K. (fchk)


Lesenswert?

Jojo S. schrieb:
> Frank K. schrieb:
>> Ich habe ähnliche Displays, die nur 4 Pins VCC;GND;SCL;SDA haben. Leider
>> brauchen meine Displays einen Impuls auf der Reset-Leitung, um immer
>> sauber hoch zu kommen.
>
> kurze Zwischenfrage: das Problem habe ich mit diesen Displays auch, hast
> du mal probiert ob das per Software zu lösen ist?

Ja. Der I2C-Bus hängt, SDA ist permanent low. Keine Chance. Ich habs mit 
Pulsen auf SCL probiert, aber das Anzapfen der Reset-Leitung war das 
einzige, was wirklich zuverlässig half.

fchk

von Frank K. (fchk)


Lesenswert?

peter schrieb:
> Welchen Befehl müsste ich  senden damit das Teil zum Leben erwacht?
> z.B  1Byte (Adr + WE Bit) 2Byte (Daten)
>
>
> Frank K. schrieb:
>> Für die Unterscheidung SPI/I2C sind die Pins BM0 und BM1. Prüfe die
>> Beschaltung.
> Die Pins gibt es bei mir nicht!

Doch, gibt es. Sind sogar drei Pins, BM0..BM2 bzw BS0..BS2, je nach 
Datenblattversion. Nicht auf der Leiterplatte herausgeführt, aber als 
Eingänge direkt am Folienleiter des Displays. Schau auch ins Datenblatt 
des SSD1306

fchk

von peter (Gast)


Lesenswert?

@Frank K.
Du bist also der Meinung das mit den vorgesehenen
4 Datenleitungen nichts zu machen ist!

SCL,SDA,RST,D/C Diese reichen also nicht!

Ist also gleich besser ein Intelligentes Display über die serielle 
(RS232)
anzusteuern.
http://www.ebay.de/itm/Serial-UART-I2C-SPI-128x64-12864-OLED-LED-LCD-Module-White-for-Arduino-PIC-AVR-/251233903648?pt=LH_DefaultDomain_0&hash=item3a7eb52420

von peter (Gast)


Lesenswert?


von Frank K. (fchk)


Lesenswert?

peter schrieb:
> @Frank K.
> Du bist also der Meinung das mit den vorgesehenen
> 4 Datenleitungen nichts zu machen ist!
>
> SCL,SDA,RST,D/C Diese reichen also nicht!

Doch, sofern es I2C ist, reicht das. D/C auf Ground oder VCC setzen, 
nach dem Power On einmal RST auf Low und wieder High ziehen, und los 
gehts.

Die BS0..BS2 Pins am Folienleiter dienen dem Einstellen des 
Schnittstellenmodus (SPI 3W, SPI 4W, I2C,...). Damit kannst DU 
eineindeutig verifizieren, dass Deine Module auf I2C eingestellt sind. 
SPI wäre auch denkbar, und viele Module haben bei SPI keinen SDO Pin, 
d.h. Du kannst nichts zurücklesen. Das Fehlen eines SDO-Pins deutet also 
nicht zwangsläufig auf I2C als Protokoll hin.

Das hier ist das Datenblatt des eigentlichen Displays:
http://www.adafruit.com/datasheets/UG-2864HSWEG01.pdf

fchk

von peter (Gast)


Lesenswert?

Das bedeutet..
Seite 3

Pin10 BS0    0
Pin11 BS1    1
Pin12 BS2    0

Dann ist es ein I2C

Da zu messen ist für mich nicht einfach, so tief in die Materie wollte 
ich nicht wieder einsteigen,aber nun isses so!

von r_u_d_i (Gast)


Angehängte Dateien:

Lesenswert?

peter schrieb:
> Jojo S. schrieb:
>> Beitrag "Re: OLed Anzeige"
>>
>> war das nicht richtig oder bist du ein anderer Peter?
>
> Jo,bin ich.
> Habe meinen eigenen Thread vergessen.
> Nach der Antwort wäre es ein SPi ??!!!

Ist es auch - die Anschlüsse hab ich dir schon im vergessen Thread 
genannt.

Es scheint so , dass du es noch nicht versucht hast? oder wo eckt es 
jetzt?

>
> Es fehlt mir aber eine Ansteuerung Sequenz um das Teil zum leben zu
> erwecken.

Für welchen Einsatz brauchst du eine Ansteuerung Sequenz?

Arduino
PIC ( 18, 24 )
AVR sonstiges
SoC ESP8266


SSD1306 wird doch sauber beschrieben:

https://www.adafruit.com/datasheets/SSD1306.pdf


SPI oder IIC / I2C

hier mal IIC
wenn du SPI hast
dann mach
Write_SPI_... daraus
der AdressSatz ist beim SSD1306 gleich
1
void Initial_LY096BG30()
2
{
3
  Write_IIC_Command(0xAE);   //display off
4
  Write_IIC_Command(0x20);  //Set Memory Addressing Mode  
5
  Write_IIC_Command(0x10);  //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
6
  Write_IIC_Command(0xb0);  //Set Page Start Address for Page Addressing Mode,0-7
7
  Write_IIC_Command(0xc8);  //Set COM Output Scan Direction
8
  Write_IIC_Command(0x00);//---set low column address
9
  Write_IIC_Command(0x10);//---set high column address
10
  Write_IIC_Command(0x40);//--set start line address
11
  Write_IIC_Command(0x81);//--set contrast control register
12
  Write_IIC_Command(0x7f);
13
  Write_IIC_Command(0xa1);//--set segment re-map 0 to 127
14
  Write_IIC_Command(0xa6);//--set normal display
15
  Write_IIC_Command(0xa8);//--set multiplex ratio(1 to 64)
16
  Write_IIC_Command(0x3F);//
17
  Write_IIC_Command(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content
18
  Write_IIC_Command(0xd3);//-set display offset
19
  Write_IIC_Command(0x00);//-not offset
20
  Write_IIC_Command(0xd5);//--set display clock divide ratio/oscillator frequency
21
  Write_IIC_Command(0xf0);//--set divide ratio
22
  Write_IIC_Command(0xd9);//--set pre-charge period
23
  Write_IIC_Command(0x22); //
24
  Write_IIC_Command(0xda);//--set com pins hardware configuration
25
  Write_IIC_Command(0x12);
26
  Write_IIC_Command(0xdb);//--set vcomh
27
  Write_IIC_Command(0x20);//0x20,0.77xVcc
28
  Write_IIC_Command(0x8d);//--set DC-DC enable
29
  Write_IIC_Command(0x14);//
30
  Write_IIC_Command(0xaf);//--turn on oled panel 
31
}

lg

rudi ;-)



Schau auch mal da rein

Beitrag "MSP430 SSD1306 über I2C"

von Frank K. (fchk)


Angehängte Dateien:

Lesenswert?

peter schrieb:
> Das bedeutet..
> Seite 3
>
> Pin10 BS0    0
> Pin11 BS1    1
> Pin12 BS2    0
>
> Dann ist es ein I2C
>
> Da zu messen ist für mich nicht einfach, so tief in die Materie wollte
> ich nicht wieder einsteigen,aber nun isses so!

Das kannst Du vielleicht auch an den Leiterbahnen sehen. Eine Lupe oder 
ein USB-Mikroskop sollte helfen. So sieht das bei mir aus (siehe Bild). 
Ich muss immer noch an den Reset-Pin einen Draht anlöten - bei Deinen 
Modulen ist der Pin zum Glück herausgeführt. Weiß man aber alles erst 
hinterher.

fchk

von peter (Gast)


Lesenswert?

Ich will über einen USB to I2C/SPI  Wandler aus VB.Net das Teil
ansteuern!

Auch mit den C- Pro 32 möchte ich es versuchen,solche Dinger liegen noch
rum.
Ein einfacher Basisdialekt ist das Beste.
Habe ja auch Andere 128/65 zum Leben erweckt.

Die Antwort war in einen Anderen Thread gelandet.

von Jojo S. (Gast)


Angehängte Dateien:

Lesenswert?

>> Frank K. schrieb:
>>> Ich habe ähnliche Displays, die nur 4 Pins VCC;GND;SCL;SDA haben. Leider
>>> brauchen meine Displays einen Impuls auf der Reset-Leitung, um immer
>>> sauber hoch zu kommen.
>> kurze Zwischenfrage: das Problem habe ich mit diesen Displays auch, hast
>> du mal probiert ob das per Software zu lösen ist?
> > Ja. Der I2C-Bus hängt, SDA ist permanent low. Keine Chance. Ich habs mit
> Pulsen auf SCL probiert, aber das Anzapfen der Reset-Leitung war das
> einzige, was wirklich zuverlässig half.

ich konnte mein Problem lösen, das Löschen de GDRAM Start Adresse (0xb0) 
hat geholfen. Vorher sah das Display nach CPU Reset (kein HW Reset am 
Display) wie im Anhang aus.

von peter (Gast)


Angehängte Dateien:

Lesenswert?

Habe auch ein Foto gemacht!
Pin10/11/12   sind frei!
Wie erkenne ich nun ob es ein I2C Display ist?

von Frank K. (fchk)


Lesenswert?

peter schrieb:
> Habe auch ein Foto gemacht!
> Pin10/11/12   sind frei!
> Wie erkenne ich nun ob es ein I2C Display ist?

Messen. Die Pins sollten ja mit GND oder VCC verbunden sein.

von peter (Gast)


Lesenswert?

Auf dem Bild sieht man keine Kontaktierung zum + oder -

von Frank K. (fchk)


Lesenswert?

peter schrieb:
> Auf dem Bild sieht man keine Kontaktierung zum + oder -

Die kann auch unter dem Folienleiter sein.

fchk

von Sebastian (Gast)


Lesenswert?

Natürlich ist das der I2C Typ, Standardadresse sollte 0x78 sein.
Zum Vergleich: Der SPI Typ des gleichen Moduls hat mehr Anschlusspins:
http://www.ebay.de/itm/Blue-0-96-IIC-I2C-Serial-128-x-64-OLED-LCD-LED-Display-Module-for-Arduino-R3-/191168669630?pt=LH_DefaultDomain_77&hash=item2c828a67be

von peter (Gast)


Lesenswert?

Habe ein wenig gemessen.
http://www.adafruit.com/datasheets/UG-2864HSWEG01.pdf
Pin 13 CS   minus
Pin10/11/12  alles an minus.Das sollte es doch nicht geben.
Was nun?

von Frank K. (fchk)


Lesenswert?

Aha. BS0..2=[000] ist 4 wire SPI, wo der /CS nicht herausgeführt ist. 
Das Display ist also immer selektiert und braucht einen eigenen 
SPI-Port.

von peter (Gast)


Lesenswert?

Ich habe es als I2C Teil bekommen.
..ob man das Teil auf I2C um codieren kann?
Folienleiter ablöten?

von Jojo S. (Gast)


Lesenswert?

peter schrieb:
> Folienleiter ablöten?

wird schwer zerstörungsfrei gehen. Und dann? Andere Adapterplatine 
bauen? Ein bischen viel Aufwand für ein Teil das du beim Chinesen für 
ca. 3€ bekommst. Und die Ansteuerung fehlt dann immer noch. Dann eher 
einen billigen Arduino als Controller anschliessen, da kannst du die 
Intelligenz für das Display reinpacken.
Google mal nach SSD1306, da wirst du erschlagen mit Projektchen und 
YouTube Demos.

von peter (Gast)


Lesenswert?

Was ich alles bestellen kann ist mir klar.
Ich bestelle nur noch intelligente,kosten 10Euro mehr, aber sehr 
einfache Ansteuerung,seriell(RS232)
Grundbefehle Text,Grafik schon enthalten.

Die Dinger wurden als I2C bestellt ,sind sie nun wirklich nicht I2C.
Es gibt widersprüchliche Meinungen.

Jetzt liegen die Dinger auf den Tisch und ich wollte sie zum Leben 
erwecken,
ob ich das Nutzen werde ,noch keine Ahnung.

von peter (Gast)


Lesenswert?

Wenn es wirklich SPI ist, muss eine Mindesttaktfrequenz eingehalten 
werde?
Könnte man das  Teil zur Funktionskontrolle auch mit einen z.B. 
C-Control ansteuern.
Da SPI zu Fuß programmiert wird und sehr langsam ist?

von Jojo S. (Gast)


Lesenswert?

einfach mal ins Datenblatt schauen? Beim Clock gibt es nur eine min 
cycle time von 100 ns, keine max. Also als Frequenz max 10 MHz.

https://www.adafruit.com/datasheets/SSD1306.pdf

Und SPI ist doch erstmal noch einfacher, du brauchst nur 3 Ausgänge von 
deinem Controller oder am PC würde auch ein FTDI im Bitbang Mode gehen: 
Daten/Command Leitung setzen, Datenbit setzen, Clock High, Clock Low und 
das 8 mal. Das in zwei Routinen die entweder Daten oder Kommando 
schreiben und schon können alle genannten Bibliotheken hier darauf 
aufsetzen.

von peter (Gast)


Lesenswert?

S.52
Ein Takt muss mindestens 100 ns sein,Datenübertragung nicht schneller 
wie 10MHz.
Das Teil kann also sogar statisch betrieben werden.
Es ist also möglich die Bits per Hand reinzuhacken. :-))
..macht kaum jemand.

jetzt müsste ich nur sicher wissen, I2C oder nicht?:-(

von Jojo S. (Gast)


Lesenswert?

peter schrieb:
> ..macht kaum jemand.

Soviel diskutieren und das Teil so anzubeten macht kaum jemand :-/
Du hast doch schon nachgemessen, danach ist es eindeutig 4-wire SPI. Und 
wenn es I2c ist funktioniert es einfach nicht. Wichtig ist nur mit 3,3 V 
Pegeln dranzugehen.

von Philipp K. (philipp_k59)


Lesenswert?

hab ich ja auch schon gepostet.. habe eins mit einmal 5V geschrottet.. 
mein zweites 5 V hatte einen Spannungsregler und shifting Transistoren.. 
diese konnte ich auf dem TE seinen fotos nunmal nicht finden.

von peter (Gast)


Lesenswert?

nun ja, jetzt kenne ich das Teil und werde es erst einmal weglegen oder 
weiter verschenken.
Werde mir serielles (Rs232) intelligentes zulegen, damit habe ich recht 
gute Erfahrung gemacht.

von peter (Gast)


Lesenswert?


von peter (Gast)


Angehängte Dateien:

Lesenswert?

http://www.digole.com/index.php?productID=844
Habe Dies und auch das True Color!

Laufen sehr gut und sind denkbar einfach anzusteuern.

Nur was sind die nicht bezeichneten Lötpunkte?

von Wo ist BS0 (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, das ich diesen alten Thread wieder ausgrabe, aber ich habe eine 
Frage bezüglich des SSD1306.

Es gibt 3 Pins, die das Interface auswählen: BS0, BS1, BS2.
In der Pinbelegung aus dem Datenblatt fehlt allerdings BS0 vollständig.

Wie kommt man an BS0, bzw. was mache ich falsch?

von Der Mitleser (Gast)


Lesenswert?

Nun, der BS0 wird dann bereits fest an + oder - angeschlossen sein. Das 
Datenblatt sollte eigentlich darüber Auskunft geben. Wie sieht es bei 
BS1 und BS2 aus? Welche Pegel haben die? Oder kannst Du das auswählen?

von Wo ist BS0 (Gast)


Lesenswert?

Habe diese Info noch nicht gefunden, aber er sollte dann auf Low 
liegen.
Ansonsten wäre nur 3er SPI Möglich.

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.