Forum: Mikrocontroller und Digitale Elektronik kein I2C-Ack von Display, eZ430-F2013


von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,


Ich versuche seit Tagen vergebens (wenigstens) mal ein Ack von einem 
LC-Display zu bekommen.
Bei dem Display handelt es sich um ein 3x12 I2C Display. 
http://www.lcd-module.de/pdf/doma/t123-i2c.pdf

Als µC-Plattform benutze ich den eZ430-F2013.

Code-Grundlage bildet die Applicationnote von TI zur Verwendung des 
USI-Moduls. 
http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=slaa368a

Ich habe schon erfolgreich einen i2c temperatursensor damit angesteuert. 
Funktioniert also grundsätzlich.


Zu meinem Problem:

Nach compilieren und flashen des angehängten Codes liefert das Display 
kein Ack. Heist in diesem Fall die LED blinkt ewig weiter.

Zunächst habe ich vermutet, dass die 3,6V Highpegel des MSP nicht 
ausreichen um dem Display "high" zu signalisieren. Also Pegelwandler 
eingebaut (2x MOSFET, I2C Specification, S. 42). Der I2C pegel beträgt 
jetzt auf der Displayseite 4,08V. Nicht gerade 5V wie erwartet, aber die 
Pegelhürde sollte genommen sein.

Risetime beträgt ~600ns. Sollte reichen oder?

Ein Angeschlossener Logicanalyzer und auch mein Oszi bestätigen das 
richtige datenformat. Wo ist also mein Problem?

Mir ist aufgefallen, dass die "Target Voltage"-Option in der 
IAR-Workbench keinerlei auswirkung auf meinen Controller hat. ich messe 
immer 3,97 V was bedenklich nahe am maximumrating ist. was kann daran 
schuld sein?


Ich bin für jeden Tipp dankbar!


VG
Peter

von Peter (Gast)


Lesenswert?

Hallo,

nach einigen Stunden Probieren und analysieren bin ich weiter gekommen.

Ich bekomme ein ACK vom Display unter verwendung der im Datenblatt 
angegeben Adresse 0x74.
ABER ich muss dafür in der I2C-Bibliothek von TI diese Zeile 
auskommentieren:
1
  rla.b   R12                     ; Slave address < 1

diese rotiert das Register mit der Slaveadresse einmal nach Links.

Ich gehe davon aus, dass diese Operation durchaus Sinn macht, sonst wäre 
sie wohl kaum in der Bibliothek enthalten.

Der niedrige Ausgangspegel vom Pegelwandler (4,08 statt 5V) kam durch 
den angeschlossenen Logicanalyser, der hat wohl sowas wie z-dioden an 
den eingängen...

Kann mir jemand Licht ins Dunkle bringen was die Registerrotiererei 
angeht?
Ich werde wohl kaum von vornherein so etwas wie:
1
#define LCD_ADDR 0x74/2
schreiben müssen oder?

Vielen Dank
Gruß
Peter

von avrGerd (Gast)


Lesenswert?

Hallo Peter,

ohne jetzt das Display zu kennen kann ich folgendes sagen.
Das LSB ist das R/W Bit. Vorher kommt die Adresse.
somit ist die Rotation (*2 nicht /2!) richtig. Das kannst Du aber im 
Detail in der I2C Spec. nachlesen.

Es kommt nun darauf an, wie genau die Bezeichnung 0x74 im Datenblatt zum 
Display zu verstehen ist. Nicht alle Hersteller haben hier richtige 
Bezeichungen im Datenblatt. Manche geben eine Lese und eine 
Scheibadresse an, manche nur die Basisasdresse, wobei man dann das 
Lese/Schreib Bit erst noch mit einrechnen muss.


Gruss,
avrGerd

von Steffen H. (avrsteffen)


Angehängte Dateien:

Lesenswert?

Lass die Zeile
1
 rla.b   R12                     ; Slave address < 1
drin und setze lieber die Slave Adresse richtig.
1
#define LCD_ADDR 0x3A
So sollte es jetzt funktionieren. Wie es Aussieht ist da ein PCF2103 - 
PCF2116 verbaut. Also Address-Group7 wie hier zu sehen:
[[http://www.classic.nxp.com/acrobat_download2/selectionguides/SELGUIDE.PDF]]

LG Steffen

von Peter (Gast)


Lesenswert?

hi,

vielen Dank für die Antworten. Mit
#define LCD_ADDR 0x74/2

wollte der späteren shift operation entgegenwirken. Ist natürlich 
unnötig, wenn ich die asm anweisung auskommentiere.


Im LCD arbeitet ein PCF2116.

Die Adresse des LCD habe ich aus dem Datenblatt.
BTW das schlechtestes Datenblatt, dass ich jemals gesehen habe :D


VG
Peter

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.