Forum: Mikrocontroller und Digitale Elektronik SSD 1306 I2C Datenpakete


von Mathias G. (motze)


Angehängte Dateien:

Lesenswert?

Hallo Forengemeinde,

Ich habe ein kleines Verständnis Problem mit dem I2C Datenpaket,
es handelt sich um ein SSD1306 Controller für OLED.

Ich möchte den Command Befehl aus dem Angehangenen Bild SSD1306_1 zu dem 
Controller schicken. Ich würde es in dem Format schicken wie ich es 
"Skizziert" habe in InkedSSD1306_2_LI.
Einzelne Command befehle kann ich ohne Probleme versenden, aber bei 
Command Befehlen die in mehreren Registern schreiben habe ich 
anscheinend so meine Problem.
Die Slave Adresse des SSD1306 ist 0x78 für Command befehle.

Ich freue mich auf eure Antworten.
mfg Mathias

von JimKnopf (Gast)


Lesenswert?

Schau dir einfach die Funktion 'lcd_gotoxy' in dem File 'lcd.c' aus 
folgendem Beitrag an:

Beitrag "SSD1306/1309 Library zum Darstellen von Text auf OLED Displays"

Da wird die Startadresse und Endadresse nacheinander geschrieben.

von OLED Schreiber (Gast)


Lesenswert?

Mathias G. schrieb:
> aber bei
> Command Befehlen die in mehreren Registern schreiben habe ich
> anscheinend so meine Problem.

Fehlt noch die Beschreibung wie sich dein(e) Problem(e) äussert(n).

von Mathias G. (motze)


Lesenswert?

Das OLED zeigt leider nicht das an was es soll. Also ich möchte immer in 
der ersten Page schreiben und den ersten column. leider wandert mein 
Text immer über das Display hier mal ein bissel c Code von meinen 
Programm.
1
void Display_cursor(uint8_t x, uint8_t y)
2
{
3
  uint8_t data[8];
4
  
5
  x = x * 6;
6
  
7
  data[0] = 0x00;
8
  data[1] = 0xb0 + y;
9
  data[2] = 0x00;
10
  data[3] = 0x21;
11
  data[4] = 0x00;
12
  data[5] = x;
13
  data[6] = 0x7F;
14
  data[7] = 0x00;
15
16
  HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)0x78, data, 8, 1);
17
}

Das ist das was ich zum OLED schicke.

Das hier habe ich auch schon probiert:
1
void Display_cursor(uint8_t x, uint8_t y)
2
{
3
  uint8_t data[8];
4
  
5
  x = x * 6;
6
  
7
  data[0] = 0x00;
8
  data[1] = 0xb0 + y;
9
  data[2] = 0x21;
10
  data[3] = x;
11
  data[4] = 0x7F;
12
13
  HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)0x78, data, 5, 1);
14
}
Funktioniert leider auch nicht.

von Harry L. (mysth)


Lesenswert?

1ms Timeout bei  HAL_I2C_Master_Transmit dürfte sehr knapp sein.
Der bricht vermutlich bereits ab, bevor alle Bytes raus geschoben sind.

Stell das mal auf 20ms!

von Harry L. (mysth)


Lesenswert?

Hier hab ich meinen Code für HAL & SSD1306 veröffentlicht:
Beitrag "Universelles Oled-Libary (SSD1306) für AVR(8bit) und STM32/HAL"

von Mathias G. (motze)


Angehängte Dateien:

Lesenswert?

Leider keine Veränderung. Hier ist mal der ganze Code den ich benutze um 
das OLED anzusteuern.
Text, Kontrast usw. Funktioniert ich gehe mal davon aus das es ein 
Config Problem ist.

von OLED Schreiber (Gast)


Lesenswert?

JimKnopf schrieb:
> Schau dir einfach die Funktion 'lcd_gotoxy' in dem File 'lcd.c' aus
> folgendem Beitrag an:

Und ich vermisse die längliche Init-Sequenz die in anderen
Beispielen gebracht wird. Ob es die braucht? Ich habe es
nicht ohne ausprobiert.

von Harry L. (mysth)


Lesenswert?

Mathias G. schrieb:
> ich gehe mal davon aus das es ein
> Config Problem ist.

Ich sehe in deinem Code keine Init-Sequenz.

Ohne wird das nix....

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.