Forum: Mikrocontroller und Digitale Elektronik PCF8574, Frage zum INT Ausgang


von Stefan (Gast)


Lesenswert?

Hallo,

hab eine Frage zum INT Ausgang des PCF8574

Ich möchte den Baustein zur Abfrage von 6 Tastern verwenden. Die Taster
schalten, wenn betätigt +5V zum Expander.

durch den Signalwechsel 0->1 an einem Eingang wird der INT gesetzt,
also meine INT Leitung (Pullup nach 5V) geht nach GND.

der INT  wird wieder zurückgesetzt wenn

a, der µC den Expander ausgelesen hat der den INT gesetzt hat,

oder - und da bin ich mir nicht sicher ob ich das so richtig verstanden 
hab.. -

b, der Pin der den INT ausgelöst hat, wieder auf den Signalzustand vor 
der Auslösung zurückgeht, ohne dass die Daten bislang vom µC ausgelesen 
wurden.

Ist dies so richtig?

Folgendes möchte ich damit aufbauen:
Ich habe 6 Taster, welche immer nur an bestimmten Stellen im Programm 
abgefragt werden. Das Programm wird an dieser Stelle angehalten und 
wartet bis die entsprechende Taste(n) gedrückt wurde(n).
Mit der INT - Leitung signalisiere ich meine µC das eine Taste gedrückt 
wurde (dafür verwende ich keine INT Eingang am µC, die benötige ich für 
andere Sensoren). Wenn am besagten Eingang 0 anliegt, lese ich den 
Baustein via i2c aus.

Der INT Ausgang wird dann vom Expander zurückgesetzt.

Ist meine Taste nach dem Auslesen dann aber immer noch gedrückt, wird
wenn ich die Taste loslasse ein neuer INT gesetzt, richtig?

: Verschoben durch User
von Jope (Gast)


Lesenswert?

>Ist dies so richtig?

Steht zumindest so im Datenblatt:

"Resetting and reactivating the interrupt circuit is achieved
when data on the port is changed to the original setting or
data is read from or written to the port which has generated
the interrupt."

von Peter D. (peda)


Lesenswert?

Stefan schrieb:
> Die Taster
> schalten, wenn betätigt +5V zum Expander.

Das wird nicht funktionieren, der PCF8574 hat interne Pullups, d.h. Du 
liest schon bei nicht gedrücktem Taster high.
Entweder Taster gegen GND oder einen sehr starken Pulldown, der den 
internen Pullup überstimmt.

Der INT-Ausgang ist ein EXOR zwischen dem letzten gelesenen Wert und den 
Eingängen.

von Jobst Q. (joquis)


Lesenswert?

Peter D. schrieb:
> Entweder Taster gegen GND oder einen sehr starken Pulldown

Der Pullup ist eine 100µA Stromquelle, also so stark muss der Pulldown 
garnicht sein. Schon mit 10K wären es nur 1V und damit unterhalb der 
Schaltschwelle.

von Joachim B. (jar)


Lesenswert?

Stefan schrieb:
> Folgendes möchte ich damit aufbauen:
> Ich habe 6 Taster, welche immer nur an bestimmten Stellen im Programm
> abgefragt werden. Das Programm wird an dieser Stelle angehalten und
> wartet bis die entsprechende Taste(n) gedrückt wurde(n).

ob /INT der richtige Weg ist, ich habe so eine I2C Tastatur gebaut mit 6 
Taster als Steuerkreuz

up/down
left/right
ESC/ENTER

zur Menüführung

Entprellroutine nach Dannegger 10ms Timer der den Tastenstatus 
feststellt

gelesen wird wenn ich Zeit dafür habe, kein Tastendruck entgeht mir, 
habe ich den Status gelesen wird das Tasten Bit zurückgesetzt und ich 
kann weiter machen.

An deiner Stelle würde ich dort auf den gewünschten Tastendruck warten 
bis das gewünschte Tastenflag erscheint.

Du kannst aber in der loop oder while(1) solange was anderes machen, 
z.B. die Uhr auf dem Display aktualisieren, DCF77 Bits sammeln, incoming 
Rx Kommandos einsammeln usw.
Anhalten und warten ist ja verschwendete Rechenzeit.

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

An den Eingänge habe ich je 10k Pulldown schon vorgesehen.

Das ganze soll ebenfalls eine Menüsteuerung werden. Ich kann jedoch
das Programm jederzeit unterbrechen, da wenn man im Menü ist im 
Hintergrund
sonst auch nichts passiert.

Das ganze Programm ist im Prinzip ein Schritt für Schritt Ablauf.

Also vielen Dank und einen Guten Rutsch ins neue Jahr!

von Joachim B. (jar)


Lesenswert?

wie entprellt deine Unterbrechung?


ich meine /INT aus der I2C Tastatur ist nicht brauchbar, aber mache 
es....

von Peter D. (peda)


Lesenswert?

Jobst Q. schrieb:
> Der Pullup ist eine 100µA Stromquelle

Lt. Datenblatt 30..300µA.
Ich würde sicherheitshalber max 3,3k Pulldown empfehlen.

Selber habe ich noch nie Pulldowns benutzt. Es ist dem MC herzlich egal, 
ob ne gedrückte Taste 0 oder 1 ist. Es spart auch keine Instruktion ein.

von Joachim B. (jar)


Lesenswert?

Peter D. schrieb:
> Selber habe ich noch nie Pulldowns benutzt. Es ist dem MC herzlich egal,
> ob ne gedrückte Taste 0 oder 1 ist. Es spart auch keine Instruktion ein

+1
dito

Edit: stimmt ja ich nutze deine Entprellroutine ja auch am PCF8574 mit 
I2C am A-Studio und nun am Arduino

: Bearbeitet durch User
von MahhhWa (Gast)


Lesenswert?

Peter D. schrieb:
> Selber habe ich noch nie Pulldowns benutzt. Es ist dem MC herzlich egal,
> ob ne gedrückte Taste 0 oder 1 ist. Es spart auch keine Instruktion ein.

Es geht hier aber nicht um dem MC sondern den PCF. Da der die Pullups ja 
schon drin hat schaltet man sinnvollerweise die Taster nach GND, aber 
nicht nach VCC. Damit spart man sich dann auch die Pulldowns, außer 
natürlich die Taster sind über etliche Meter Kabel im Raum verteilt.

von Jobst Q. (joquis)


Lesenswert?

Peter D. schrieb:
> Jobst Q. schrieb:
>> Der Pullup ist eine 100µA Stromquelle
>
> Lt. Datenblatt 30..300µA.
> Ich würde sicherheitshalber max 3,3k Pulldown empfehlen.
>
> Selber habe ich noch nie Pulldowns benutzt. Es ist dem MC herzlich egal,
> ob ne gedrückte Taste 0 oder 1 ist. Es spart auch keine Instruktion ein.

Die 100µA hatte ich in Erinnerung. Dass die Streuung so breit ist, hätte 
ich nicht gedacht. Ich würde ihn auch immer nur gegen GND schalten.

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.