Forum: Mikrocontroller und Digitale Elektronik STM32G071G8 I2C schickt keine Bytes?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von RH (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich habe folgendes Problem:
Ich möchte ein ST7032 Displaymodul über I2C ansteuern. Grundsätzlich 
soweit so einfach. Leider verschickt der uC die Bytes nicht so per I2C 
wie er es sollte. Genauer gesagt geht nur das Adressbyte raus welches 
vom Display-Controller auch aknowledged wird. Anschließend ist aber tote 
Hose.

im Code erzeuge ich zum Testen einfach erstmal nur ein Datenarry mit 
zwei Einträgen. Dieses versuche ich dann mit HAL_I2C_Master_Transmit() 
zu verschicken.

Hier der Code-Schnipsel:
1
 buffer[0] = 0x40;
2
 buffer[1] = 0x06;
3
 HAL_I2C_Master_Transmit(&hi2c1, 0x7C<<1, buffer, sizeof(buffer), 1)

Im Anhang ist zu sehen wie das ganze dann auf der Leitung aussieht.

Weiß jemand eventuell weiter und hat eine Idee was schieflaufen könnte? 
Das Versenden über I2C mit der HAL-Funktion hat schonmal bei einem 
anderen Projekt bei einem ADC funktioniert.

Vielen Dank schonmal.

von Jim M. (turboj)


Bewertung
1 lesenswert
nicht lesenswert
RH schrieb:
> Genauer gesagt geht nur das Adressbyte raus welches
> vom Display-Controller auch aknowledged wird.

Nö, wird es nicht. Jedenfalls ist da im Bild ein NAK. Der Dekoder 
markiert das sogar rot.

Versuche das mal ohne den Linksshift, im Datenblatt steht was von 
0111110 als binäre Adresse drin.

von RH (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das hat geholfen!

Vielen Dank. Manchmal sieht man den Wald vor lauter Bäumen nicht. ;)

von RH (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Prinzip nicht mehr ganz dem Thementitel entsprechend aber vielleicht 
ist es ja doch in Ordnung nicht direkt einen neuen Thread zu eröffnen. 
(?)

Über I2C gelingt es mir nun das Displaymodul anzusprechen und wohl auch 
zu Initieren. Den Kontrast kann ich variieren und sehe so, dass ich 
grundsätzlich schonmal mit dem Display kommunizieren kann.

Leider ist es nicht möglich irgendwelche Daten an das Display zu senden, 
bzw. Text anzeigen zu lassen und ich komme einfach nicht darauf wieso 
nicht.

In der While Schleife versuche ich zum Testen ein Zeichen zu Schreiben 
und setze jeweils mit einer Sekunde Delay dazwischen den Kontrast auf 
unterschiedliche Werte.

Meine Funktion ST7032_SetCursor() soll das Schreiben in die richtige 
DDRAM-Stelle ermöglichen. Geschrieben wird dann über 
ST7032_TransmitData().

Eigentlich sollte alles bei der Initalisierung passen, wenn ich mich 
nicht an irgendeiner Stelle schon wieder im Datenblatt vertan habe.

Im Anhang mal der Code vielleicht weiß ja einer von euch weiter...

vielen Dank :)

von Adam P. (adamap)


Bewertung
0 lesenswert
nicht lesenswert
RH schrieb:
> ST7032_TransmitData()

Ansich sollte der Ablauf passen,
hast es mal mit einer Lib verglichen, z.B.:
https://github.com/olkal/LCD_ST7032

https://www.newhavendisplay.com/resources_dataFiles/excode/txt/CoGLCD/C0216CiZ.txt

von RH (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Adam P. schrieb:
> https://github.com/olkal/LCD_ST7032

Mit der Lib hatte ich es schon verglichen. Im Prinzip tue ich das Selbe 
und im Oszi sehe ich auch, dass entsprechende Bytes gesendet und ACK 
werden. Ich vermute, dass ich bei der Initialisierung einen Fehler mache 
aber bei den ganzen Instructions ist es schwierig den Überblick zu 
behalten.

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Bist du sicher, dass 0x06 ein sichtbares Zeichen ist? Im ASCII Code wäre 
es das jedenfalls nicht.

von RH (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Tatsächlich ist es das nicht. 0x82 für zu einem é auf dem Display. Nun 
ist es aber so, dass einige Zeichen nicht anerkannt werden, obwohl doch 
eigentlich laut dem Datenblatt alle Werte zugeordnet sein müssten oder? 
Auch 0x06 zum Beipiel. Im Anhang habe ich die Tabelle aus dem Datenblatt 
mal beigefügt.

von Stefan ⛄ F. (stefanus)


Bewertung
1 lesenswert
nicht lesenswert
RH schrieb:
> Tatsächlich ist es das nicht. 0x82 für zu einem é auf dem Display.
> Nun
> ist es aber so, dass einige Zeichen nicht anerkannt werden, obwohl doch
> eigentlich laut dem Datenblatt alle Werte zugeordnet sein müssten oder?
> Auch 0x06 zum Beipiel. Im Anhang habe ich die Tabelle aus dem Datenblatt
> mal beigefügt.

Dann probiere doch mal alle 256 Werte durch. Dann siehst du, welche 
zeichen nicht implementiert sind oder ob da ein bestimmtes Muster im 
Fehler erkennbar ist.

von spess53 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi

>obwohl doch
>eigentlich laut dem Datenblatt alle Werte zugeordnet sein müssten oder?
>Auch 0x06 zum Beipiel. Im Anhang habe ich die Tabelle aus dem Datenblatt
>mal beigefügt.

Die gilt aber nur für OPR1=1 und OPR2=1. Weißt du wie diese Anschlüsse 
verschaltet sind? Der Code für 0x06 kann bei anderer Beschaltung genauso 
gut im CG-Ram liegen (siehe Zeichensätze unterhalb der Tabelle).

MfG Spess

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.