OLED Display SSH1106 - u8glib Problem mit I2C

OP #5225895
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 #5227169
Wie kann ich die entsprechende Pin-Zuordnung für I2C einstellen?

Standardmäßig ist in der Library PORTA für SCL=Pin4 und SDA=Pin5 
vorgesehen.
Ich verwende den ATMega328, hier gibt es kein PORTA.

Gibt es eine Funktion wo ich z.B. PORTB einstellen kann?
Angehängte Dateien:
OP #5227181
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
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
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
#5227360
Frank L. schrieb:
> 2. Generell kannst Du falls das Display ein I2C Kommando dafür hat,
> dieses Kommando auch direkt per I2C an das Display übergeben.

Einen Befehl dafür gibt es, erst schickt man dem Display ein 0x81, die 
nachfolgende Zahl stellt dann den Kontrast ein. 0x00 ist minimaler 
Kontrast, 0xff ist maximaler Kontrast.
Gast #5227364
> 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
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
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

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.