Hallo, ich möchte einen PCF8574 per Software-TWI ansprechen, weil ich die lt. Manual vorgesehenen Ports später nicht verwenden möchte. Mein Problem: bei der Übermittlung der Adresse erhalte ich immer eine Bestätigung (Ack), aber leider auch dann, wenn ich eine falsche Adresse angebe. Zugegeben, ich bin mit den Clock-Frequenzen ganz unbedarft umgegangen, außer den Prescaler auf 64 zu stellen, habe ich nichts weiter eingestellt. Bei der Ack-Abfrage ist ein stabiler Zustand von CLK nötig, aber da wird von einer leeren Operation bis zu einer Millisekunde kein Unterschied gemacht, also ist es wohl nicht zeitkritisch. Vielleicht enthält mein Testprogramm gravierende Fehler? Es soll durch zwei LED's signalisieren, ob ein Ack gesendet wird. Ob sich das vielleicht jemand mit besseren Kenntnissen als ich mal ansehen könnte? Wurde mir sehr helfen, weil ich einfach nicht sehe, was da falsch ist. Vielen Dank schon mal! Alexander
Hallo, ein Fehler der mir sofort auffällt ist, dass du SCL als auch SDA sowohl auf Low als auch auf High schaltest. Lasse den Port-output immer auf Low und schalte nur die Datenrichtung. Überlasse das High-Signal den Pullup-Widerständen Output ist dann Low und Input bedeutet High (bzw. bei SDA das was der Slave sagt) Damit hast du dann ein anständiges "wired OR" wie es bei I2C verlangt wird!
Hallo Stefan ich habe, wie Du geschrieben hast, weitgehend die Ports nicht mehr direkt geschaltet. An einigen Stellen, z.B. Adressübertragung, pulse() usw. geht es aber wahrscheinlich nicht anders. Ist es wirklich so, daß ein Port, den ich als low schalte, durch den Pullup high wird? Wird die interne Stromsenke damit nicht fertig? Bei i2cstart habe ich einfach nur die Ports als Ausgänge gesetzt, ob das richtig ist? Gruß Alexander PS trotz der Änderungen ist das mißliche Verhalten geblieben.
Moin, du musst die Pins für High-Pegel als Eingang (Tri-State) konfigurieren, ansonsten bleiben die ständig auf Low.
Hallo, es muss gehn, alles andere ist Mist !!!! Probiers mal nach angehängtem Vorbild
Stefan schrieb: > Hallo, > > es muss gehn, alles andere ist Mist !!!! > > Probiers mal nach angehängtem Vorbild Hallo Stefan Hand aufs Herz - bist Du sicher, daß Deine Version wirklich funktioniert? (mir erscheint es auch plausibel). Da ich aber immer noch kein Ack bekomme, muß es doch an der Hardware liegen. Ich hatte, bevor ich mich an das Forum gewandt habe, geprüft, ob die Eingangssignale SCL und SDA bis zum PCF8574 gelangen ( sie taten es) und auch zweimal die PCF's getauscht und dann vermutet, es läge an meinem verunglückten Testprogramm. Aber nachdem auch mit Deiner korrigierten Version kein Ack kommt, bleibt nur noch weitere Suche an der Hardware. Vielleicht muß ich einen separaten Teststand aufbauen. Also, ich suche weiter. Viele Grüße Alexander
Vorsicht, es gibt zwei Versionen vom PCF8574, die sich in ihrer Adresse unterscheiden. PCF8574 und PCF8574A!
Rudolf schrieb: > Vorsicht, es gibt zwei Versionen vom PCF8574, die sich in ihrer Adresse > unterscheiden. PCF8574 und PCF8574A! Ja, ich weiß, ich habe beide. Ich hatte in meiner Verzweiflung schon mal eine Programmversion geschrieben, wo die Adressen von 0 bis 255 hochgezählt werden - hat aber auch nichts gebracht. Vielen Dank und viele Grüße Alexander
Hallo, ich hab die Version nicht selbst ausprobiert ob sie funktioniert oder nicht. Es sollte nur eine Vorlage dafür sein wie man die Signale SCL/SDA erzeugt (Stichwort: "wired OR"). Der I2C Bus hat aber auch noch weitere Stolpersteine. Du verwendest z.B. in deinem Program die Adresse 124 für den PCF8574, dies ist aber, gleich wie du ihn beschaltest, keine gültige Adresse. Sie muss laut Datenblatt lauten L,H,L,L,A2,A1,A0,R/W (das ist irgendwas zwischen 40h-4fh, entsprechend 64-79 Dezimal) Ferner ist das Timing (Anzahl der NOPs) nicht unbeding für deine Hardware passend!!! Und, Und .... Ein bisschen musst du schon noch arbeiten !!! Gruss Stefan
Hallo, noch eine Anmerkung noch zur Auswertung von SDA if( (PINC & (1<<SDA)) !=0) // ist SDA low ??? beachte (1<<SDA) !!!
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.