Hallo zusammen,
ich versuche gerade an meinem MSP einen PCF8574 ans Laufen zu bekommen.
Später soll darüber mal ein Display gesteuert werden.
Ich habe hier im Forum schon einige Beiträge dazu gefunden auch schon
einen, bei dem anscheind jemand das gleiche Problem hatte wie ich, aber
leider habe ich noch keine Lösung gefunden.
Ich nutze die I2C-Bibliothek von mathar.com Die funktioniert auch prima.
Ich steuere damit schon erfolgreich einen Temperatursensor an, doch den
PCF8574 bekomme ich irgendwie nicht zum laufen.
Hier einmal die Funktionsaufrufe zu Ansprechen des Bausteins:
1 | int main(void)
|
2 | {
|
3 | WDTCTL = WDTPW + WDTHOLD;// Watchdog Timer stoppen
|
4 |
|
5 | InitPorts(); // Ports initialisieren
|
6 |
|
7 | I2C_start(); // START senden
|
8 | I2C_init(0x40, 'w');
|
9 | while (!(I2C_gotACK()));
|
10 | I2C_sendbyte(0x40);
|
11 | while (!(I2C_gotACK()));
|
12 | I2C_stop(); // STOP senden
|
13 |
|
14 | }/* int main(void) */
|
Nun meine Frage, ob das erst einmal die richtige Reihenfolge ist. Das
habe ich so aus den Angaben aus dem Datenblatt verstanden.
Das Problem scheint nun zu sein, dass kein Ack nach dem Senden der
Adresse kommt. Das Programm bleibt beim ersten while (!(I2C_gotACK()));
hängen. Dabei habe ich festgestellt, dass die Clock weiterläuft und SDA
die ganze Zeit auf HIGH ist.
Hat jemand eine Idee, woran das liegen könnte?
Bin für jeden Tip dankbar. Ich habe auch leider keinen Logik-Analyser
oder so etwas, nur eine Oszi.
Vielen Dank.
Gruß
Florian