OLED Display SSH1106 - u8glib Problem mit I2C

OP #5225895
Lesenswert?

Hallo,

ich möchte ein OLED Display (SSH1106) mit I2C Schnittstelle testen
http://www.icstation.com/13in-white-oled-display-module-interface-128x64-arduino-p-10987.html

Ich verwende einen ATMega328 und die AVR u8glib mit der ich bereits 
erfolgreich ein Display mit SPI Schnittstelle zum Laufen gebracht habe.

Nur mit I2C klappt es noch nicht.
Das Display bietet folgende Anschlüsse:
- Vcc
- GND
- SDA
- SCL

Aus der u8glib verwende ich für die Initialisierung:
1
i2c = u8g_InitI2C(&u8g, &u8g_dev_sh1106_128x64_i2c, U8G_I2C_OPT_NONE);

sowie
PB5 für SCL
PB3 für SDA
OP #5227181
Lesenswert?

Arduino F. schrieb:
> Nein!
> I2C liegt auf PC4 und PC5
>
> Alternativ: Soft I2C

Ja, Hardware-I2C wäre auf PC4 und PC5.
Die Frage ist, wie ich in der u8glib das PORT für I2C auf z.B. PORTB 
oder PORTC umstellen kann.

Für HW-SPI gäbe es z.B. diese Funktion:
1
u8g_InitSPI(&u8g, &u8g_dev_sh1106_128x64_hw_spi, PN(1, 5), PN(1, 3), PN(1, 2), PN(1, 1), U8G_PIN_NONE);

Als Parameter z.B. PN(1, 5) steht 1 für PORTB und 5 für den Pin.

Diese Parameter kann ich aber für I2C nicht übergeben da sie nicht zur 
Verfügung stehen.
1
i2c = u8g_InitI2C(&u8g, &u8g_dev_sh1106_128x64_i2c, U8G_I2C_OPT_NONE);
(Firma: Flk Consulting UG) #5227206
Lesenswert?

Hallo,

SPI ist nicht gleich I2C. Für SPI ist PB4 und PB5 korrekt.

Für I2C musst Du PC4 (SDA) und PC5 (SCL) nehmen. Zusätzlich benötigst Du 
noch zwei Pullup-Widerstände pro Port von ca. 4,7K.

Hier kannst Du zum Thema noch weitere Informationen nachlesen:

https://www.mikrocontroller.net/articles/I²C

Du musst keine Ports in der Lib anpassen, die macht das schon richtig.

Gruß
Frank
(Firma: Flk Consulting UG) #5227338
Lesenswert?

Hallo,

die Frage ist nicht eindeutig zu beantworten.

1. Ob die Lib das per Funktion unterstützt, kann ich nicht sagen
2. Generell kannst Du falls das Display ein I2C Kommando dafür hat, 
dieses Kommando auch direkt per I2C an das Display übergeben.

Da ich das Display und seine Kommandos nicht kenne, kann ich Dir da 
nicht weiterhelfen.

Gruß
Frank
Gast #5227364
Lesenswert?

> Gibt es mit der u8glib auch die Möglichkeit die Helligkeit des
> Displays zu steuern?

Das hatte neulich schon mal jemand gefragt und damals lautete die 
Antwort, daß die Lib dazu eine Funktion enthält.

"helligkeit" wird im Datenblatt "contrast" genannt. Vielleicht hilft 
diese Info.
OP #5228268
Lesenswert?

Die Funktion setContrast ist wie folgt beschrieben:

C: uint8_t u8g_SetContrast(u8g_t *u8g, uint8_t contrast)

Description:
Assigns a new contrast value (0..255) to the display. Not all displays 
or driver support the setting of the contrast value (see devices table).

Arguments:
u8g : Pointer to the u8g structure (C interface only).
contrast: New contrast value (0..255).

**Returns:**The value 1, if the contrast value has been assigned.
Use: Inside and outside picture loop. It is a good practice to use this 
procedure not inside the picture loop.
Note: Available with v1.02

Example:
1
contrast = u8g_SetContrast(&u8g, 255);

Wobei ich bei meinem Display leider keine Veränderung bei 
unterschieldlichen Kontrastwerten feststellen konnte.
#5228309
Lesenswert?

M. G. schrieb:
> Wobei ich bei meinem Display leider keine Veränderung bei
> unterschieldlichen Kontrastwerten feststellen konnte.

Wie gesagt, schick dem Display mal den Befehl 0x81 und anschließend 
einen Wert zwischen 0 und 255, das sollte den Kontrast einstellen beim 
SSH1106.

Ich hab mal zur Alternative meine Lib für SSH1106/SSD1306 angehangen, 
vielleicht hilft dir das ja.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren