hi, weiß jemand durch zufall aus erfahrung, wann bei diesen i2c-expandern der /int GENAU ausgelöst wird. die doku von philips ist da leider nicht so schlüssig wie ich finde. gibt es wirklich bei jeder änderung des zuständes der i/o-ports einen INT? bzw. bei welchem ereignis tritt der INT auf (adresse wurde gelesen, ACK wurde gesendet...!?) mfg
Hallo Erdbär, ändert sich nach dem Lesen ein oder mehrer Pins, so wird ein INT ausgelöst... immer... nitraM
und beim schreiben auf den expander (vom master aus gesehen) wird definitiv kein INT ausgelöst?
Nun, wenn Du eine Pin durch Beschreiben vom Master aus von 0 auf 1 setzt, und an diesem Pin hängt eine Kapazität dran, dann dauert es einen Moment, bis der Pin seinen Pegel wechselt. Das kann der Chip dann schon als Pegelwechsel von außen erkennen und einen IRQ auslösen. Wäre eine interessante Frage, wie lange nach dem beschreiben die IRQ-Logik imun gegen Pegelwechsel ist. Markus_8051
@erdbär >und beim schreiben auf den expander (vom master aus gesehen) wird >definitiv kein INT ausgelöst? Ja! >gibt es wirklich bei jeder änderung des zuständes der i/o-ports einen >INT? bzw. bei welchem ereignis tritt der INT auf (adresse wurde gelesen, >ACK wurde gesendet...!?) Am Expander können die einzelnen I/O seperat als Ein- oder Ausgänge benutzt werden. Ein Pin, das als Eingang Initialisert wurde, löst einen Interrupt aus sobald sich dort der Pegel ändert. Bei der Benutzung als Ausgang selbstverständlich nicht. Du musst lediglich, wenn der INT auslöst, mit dem µC den Datensatz auslesen und die entsprechenden Bitstellen auswerten die als Eingänge dienen. (Ich denke Dir ist klar, dass das INT vom Expander an irgend einen Interrupt des µC verbinden musst) Nach dem lesen wird das INT im Expander zurück gesetzt wenn ich mich nicht irre. Gruß norad
@norad: > Ein Pin, das als Eingang Initialisert wurde, löst einen Interrupt aus > sobald sich dort der Pegel ändert. Wie bitteschön initialisierst Du denn einen Pin als Eingang? Ich glaube, Dir ist das Konzept der I/O-Ports dieser I/O-Expander-Bausteine noch nicht ganz klar. Es ist richtig, daß sie gemischt als Ein- und Ausgänge benutzt werden können, aber es gibt kein Datenrichtungsregister. Von daher ist es auch völliger Quatsch, sie als Ein- oder Ausgang konfigurieren zu wollen. Wie bei den Ports beim 8051 handelt es sich hier um open drain bzw open collector Ausgänge. Das heißt, wenn die Ausgänge auf Eins geschaltet sind, sind sie hochohmig mit Vcc verbunden und können in diesem Zustand AUCH als Eingang fungieren. Demzufolge kann, wenn Du auf einen Pin, der vorher low war, nun ein high ausgibst, auch ein IRQ ausgelöst werden. Wie das passiert, habe ich oben schon beschrieben. Markus_8051
@Markus gebe zu ich hab blödsinn geredet kommt davon wenn man nicht vorher ins Datenblatt glotzt. Berichtige: Im Input Modus wird bei jeder steigenden oder fallenden Flanke ein Interrupt ausgelöst. Nach der Zeit tiv ist das Signal /INT gültig. Der Interruptschaltkreis wird zurückgesetzt oder reaktiviert wenn anliegende Daten am Port die Originaleinstellungen verändern oder Daten vom Port gelesen oder geschrieben werden welcher den Interrupt generiert hat. Zurückgesetzt wird wie folgt:- -Acknowledge Bit im Lesemodus nach der ansteigenden Flanke des SCL Signals -Acknowledge Bit beim Schreiben nach der High-Low übergang des SCl Signals Da heisst es noch das jeder Wechsel an den I/O's der Interrupt Detektiert wird nach dem Rückstellen und nach der nächsten ansteigenden Flanke des Clock-Signals. Das Lesen oder Schreiben zu anderen Bausteinen hat keinen einfluss auf den Interruptschltkreis. Für Übersetzungsfehler entschuldige ich mich jetzt schon. norad
Hallo Leute, Sorry fürs ausgraben dieses Threads, aber ich finde meine Frage gehört genau hier rein und soll kein eigener Thread werden. Ich frage mich, ob der Interrupt vom PCF8574 auch ohne Mikrocontroller und I2C ausgelöst wird. Und zwar habe ich erstmal nur den PCF auf einem Breadboard verkabelt, aber die SDA und SCL Leitungen offen gelassen. Wenn ich jetzt per Spannungsquelle die Spannung an einem der Ports ändere (High / Low), dann müsste doch ein Interrupt ausgelöst werden, welchen ich dann auf dem Oszi sehen kann. Da tut sich aber nichts. Im Datenblatt steht, die Ports haben standardmäßig am Anfang den Zustand 1, was ja bedeutet sie sind auf Input gestellt. Meine Frage: Muss eine erste Kommunikation per I2C stattgefunden haben um überhaupt den ersten Interrupt auszulösen, oder geht das auch erstmal ohne Mikrocontroller? Vielen Dank schon mal im Voraus für eure Mühe.
@ Igor K. (ziesel) >Ich frage mich, ob der Interrupt vom PCF8574 auch ohne Mikrocontroller >und I2C ausgelöst wird. Nur einmal. > Und zwar habe ich erstmal nur den PCF auf einem >Breadboard verkabelt, aber die SDA und SCL Leitungen offen gelassen. Schlecht, dort müssen wenigsten 10K Pull-Ups dran. >Wenn ich jetzt per Spannungsquelle die Spannung an einem der Ports >ändere (High / Low), dann müsste doch ein Interrupt ausgelöst werden, Dort muss auch ein Pull-Up dran. >welchen ich dann auf dem Oszi sehen kann. Da tut sich aber nichts. Was siehst du denn? >Muss eine erste Kommunikation per I2C stattgefunden haben um überhaupt >den ersten Interrupt auszulösen, Nein.
@ Falk Brunner Erstmal vielen Dank für deine prompte Antwort. Ich habe das Problem ausmachen können. Ich habe zu kleine Pull-Ups benutzt. 1kOhm war wohl zu wenig für die Open Drains. Hier fliegen noch welche mit 5,6k rum. Die haben die Veränderung gebracht. Falk Brunner schrieb: >>Ich frage mich, ob der Interrupt vom PCF8574 auch ohne Mikrocontroller >>und I2C ausgelöst wird. > > Nur einmal. Bei mir nicht. Der Interrupt wird immer ausgelöst.Ich hoffe das ist richtig so?! Ich habe einen Port per Pull-Up auf High gelegt. Und an den Port halte ich dann Masse ran, woraufhin der Interrupt ausgelöst wird, und das Potential auch dort auf 0 schießt. Sobald ich die Masse vom besagten Port wegnehme kehrt auch der Interrupt Port auf High zurück. Und das jedes Mal. Es ist also nicht nur einmalig. Falk Brunner schrieb: >> Und zwar habe ich erstmal nur den PCF auf einem >>Breadboard verkabelt, aber die SDA und SCL Leitungen offen gelassen. > > Schlecht, dort müssen wenigsten 10K Pull-Ups dran. Auch hier kann man die Pull-Ups, zum Testen der Beschaltung, weglassen. Also, jetzt funktioniert hier erstmal alles. Vielen Dank. Und falls die Geschichte mit dem ständig auslösbaren Interrupt verkehrt sein sollte, bitte unbedingt bescheid geben. Dann läuft hier scheinbar doch was schief.
@ Igor K. (ziesel) >Bei mir nicht. Der Interrupt wird immer ausgelöst.Ich hoffe das ist >richtig so?! Ich habe einen Port per Pull-Up auf High gelegt. Und an den >Port halte ich dann Masse ran, woraufhin der Interrupt ausgelöst wird, >und das Potential auch dort auf 0 schießt. Sobald ich die Masse vom >besagten Port wegnehme kehrt auch der Interrupt Port auf High zurück. >Und das jedes Mal. Es ist also nicht nur einmalig. Hmmm, Ok, die Logik dahinter ist wohl nur statisch. >Auch hier kann man die Pull-Ups, zum Testen der Beschaltung, weglassen. Würde ich nicht machen. Kostet das soooooo viel Aufwand? >Also, jetzt funktioniert hier erstmal alles. Vielen Dank. Und falls die >Geschichte mit dem ständig auslösbaren Interrupt verkehrt sein sollte, >bitte unbedingt bescheid geben. Dann läuft hier scheinbar doch was >schief. Ich denke, das ist OK. Wenn man mal das Schaltbild im Datenblatt ansieht, wird der IST-Zustand vom Pin mit dem letzten gelesenen und gespeicherten Zustand statisch per XOR verlichen. "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."
Beitrag #5606776 wurde von einem Moderator gelöscht.
Beitrag #5606836 wurde von einem Moderator gelöscht.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.