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:
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?
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:
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.
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
Frank L. schrieb:> 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.
Vielen Dank Frank! es funktioniert :-)
Gibt es mit der u8glib auch die Möglichkeit die Helligkeit des Displays
zu steuern?
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
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.
> 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.
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.
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.