Forum: Mikrocontroller und Digitale Elektronik PCF8574 mit LM3S8938 per I2C auslesen


von Hummelmann (Gast)


Angehängte Dateien:

Lesenswert?

Hi an alle!

Ich möchte mit dem µC LM3S8938 per I2C unter anderem einen PCF8574 
ansteuern. Ich verwende zur Programmierung StellarisWare und IAR.
An den PCF sind sowohl Taster als auch eine LED angeschlossen. Das 
senden von Befehlen funktioniert ohne Probleme und ich kann die LED 
steuern. Allerdings will ich natürlich auch einlesen welche Pegel gerade 
anliegen um die Taster abfragen zu können. Und da liegt das Problem...
Wenn ich dem PCF z.B. 0xFF sende, messe ich auch an allen Pins einen 
HighPegel von 3,3V. Wenn ich nun direkt einlese welche Pegel anliegen 
sollte er mir doch auch genau diesen Wert zurückliefern?! Um 
herauszufinden welchen Wert der µC zurückgeliefert bekommt, habe ich 
einen weiteren PCF mit 8 LEDs angeschlossen um mir so den Wert anzeigen 
zu lassen! Jetzt sende ich den eingelesenen Wert direkt an den zweiten 
PCF und es bleiben alle LEDs aus...
Die Adressen der PCF sind durch Jumper verschieden und ich kann auch 
beide ohne weiteres mit meinem Programm ansteuern! Es muss also irgendwo 
bei der Programmierung des Einlesens ein Fehler sein, ich weiss nur 
einfach nicht wo!
Ich hoffe ihr könnt mir helfen!

Der Fehler müsste meiner Meinung nach in diesem Bereich des Codes 
liegen,
da ich mit diesen Zeilen versuche die Pegel zu lesen.

I2CMasterSlaveAddrSet(I2C0_MASTER_BASE, SLAVE_ADDRESS, true);
I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);
ulDataRx[0] = I2CMasterDataGet(I2C0_MASTER_BASE);

Im Anhang ist eine *.pdf in der die Befehle für den µC erklärt sind! Ab 
Seite 153 sind die I2C Befehle zu finden.

von Falk B. (falk)


Lesenswert?

@  Hummelmann (Gast)

>steuern. Allerdings will ich natürlich auch einlesen welche Pegel gerade
>anliegen um die Taster abfragen zu können. Und da liegt das Problem...

Warum? Lies doch einfach vom PCF.

http://www.mikrocontroller.net/articles/Port-Expander_PCF8574

Die Pins, welche als Eingang dienen sollen, müssen auf High setzt 
werden.

>HighPegel von 3,3V. Wenn ich nun direkt einlese welche Pegel anliegen
>sollte er mir doch auch genau diesen Wert zurückliefern?!

Ja, wenn dein Taster gegen Masse schaltet.

MfG
Falk

von Hummelmann (Gast)


Lesenswert?

Hi, Danke für die schnelle Antwort erst schonmal!

Falk Brunner schrieb:
> Warum? Lies doch einfach vom PCF.

Ja, ich meine ja das ich den PCF abfragen will. Ich möchte also mit dem 
LM3S8938 den PCF abfragen und das eingelesene Byte dann als variable 
weiterverwenden.


Bei den Tastern handelt es sich um eine Matrix-Tastatur.
Link: http://www.conrad.de/ce/de/product/709840/TASTATUR-MATRIX-3X4
Sie hat für jede Spalte und für jede Zeile 1 Pin-Anschluss an der 
Rückseite. Ich habe mir das jetzt so vorgestellt, dass ich auf dem 
Zeilen-Pin eine 0 ausgebe, während die Pins der Spalten mit einem 10k 
Pull-Up-Widerstand auf 1 liegen. Wird nun in der Zeile in der ich die 0 
ausgebe eine Taste gedrückt, wird auch die entsprechende Spalte auf 0 
gezogen. Ich frage also per Polling dauerhaft den PCF ab... Allerdings 
lese ich nur 0en ein, obwohl ich etwas anderes ausgebe...

MfG
Hummelmann

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.