Hallo CGrom!
Ich blicke Deine Schaltung mit zwei Versorgungspannungen ohne Schaltplan nicht durch. Kannst Du ein vereifachtes Schaltplan (Skizze) für ein Signal in jede Richtung posten ?
MfG
Hallo zusammen,
im Rahmen eines kleinen Projektes muss ich als Interface zu einem Flash von Atmel (AT49BV322DT, ebenfalls insgesamt 16I/O ports) den I2C Expander PCF8575 von TI verwenden, da mein µC nicht genug I/Os besitzt.
Nun geschiecht folgendes: möchte ich Daten schreiben, funktioniert dies einwandfrei (von den Spannungsleveln her gesehen).
Möchte ich nun aber Daten lesen vom Flash, so liegen die korrekten Daten lediglich am Port P0 des I2C Expanders an, nicht aber an P1. Eine Messung der Spannung an den einzelnen Pins ergab (mit 330Ohm Pull Up an 5V) ca. 1.8V. Ich habe einen der Pins von P1 mal wieder getrennt während ein High Pegel vom Flash aus gesehen anlag, und es ergaben sich 3.7V.
Hat jemand evtl. dieselbe Erfahrung gemacht wie ich oder kann mir sonst einige Tips geben?
Betreiben tu ich die beiden ICs übrigens jeweils mit 3.3V. (=Vccq = Vpp, für Atmel Flash).
Vielen Dank,
Christoph
Hallo CGrom!
Ich blicke Deine Schaltung mit zwei Versorgungspannungen ohne Schaltplan nicht durch. Kannst Du ein vereifachtes Schaltplan (Skizze) für ein Signal in jede Richtung posten ?
MfG
Also, wenn ich Daten in Richtung des Flashs schreiben will, habe ich wie im Schaltplan beschrieben mit 330R Pull Up an +5V eine Spannung von 4V für den High Pegel und ca. 0.3V für Low Pegel.
Funktioniert aber auch komplett ohne Pull Ups, dann eben 0 und 3.3Volt.
Jedoch wenn ich Daten vom Flash lesen möchte,
funktioniert die Sache für den Port P1x vom PCF nicht mehr. Port P0x funktioniert noch korrekt, aber für den Port P1 brauche sehr starke Pull Ups, wie hier jetzt 330R um überhaupt irgendwie in den Bereich zu kommen, wo zumindest die Bitreihenfolge auch messbar an den Pins anliegt.
Jedoch erreiche ich damit gerade mal 1.8V, und manchmal erkennt der PCF eben das als High Level an und manchmal nicht. Macht also sehr große Probleme, da eigentlcih der High Level mit 0.8xVcc spezifiert ist, also 2.64V.
Ich habe eine high Leitung mal in vom Flash aus geschalteten Zustand getrennt, da habe ich dann 3.7V am Flash Output gemessen.
Liegt also meiner Meinung nach ziemlcih eindeutig am PCF dass der die Signallevel runterzieht.
Wie kann sowas sein?
MFG Christoph
Hallo Christoph,
hast du dir das Datenblatt angesehen ?
Es müssen also alle Port's, die als Eingang benutzt werden sollen mit "1" beschrieben werden.The I/Os should be HIGH before being used as inputs. After power-on
as all the I/Os are set HIGH all of them can be used as input.
Erst dann können sie ausgelesen werden.
Und das funktioniert auch ohne externe Pullupwiderstände.
Hallo!
Genau auf das gleiche bin ich gekommen nach "Studieren" des Datenblates vom PCF8575, das ich von
http://www.datasheetarchive.com
heruntergeladen habe. Seite 8 des PDF vom Philips.
Der albundy war aber schneller.
MfG
Hi Al,
Ja, ich habe das so verstanden, dass ich wenn ich von Output nach Input umschalte, erst alle Output Ports high schalten muss und dann umschalten nach Input. Habe ich das falsch verstanden?
Muss ich evtl. zuerst von der Flashseite aus gesehen alles auf High schalten und dann umschalten? Aber dann stehen sich kurzfristig 2 Ausgänge gegenüber, und das kann ins Auge gehen!
Meine Vorgehensweise von der Programmierseite her gesehen:
Power Up: Device ist in Input Modus
Anschließend möchte ich aber sofort Daten schreiben:
=> Sende Befehl, Daten schreiben wie im Datenblatt beschrieben.
Nun möchte ich ein Status Bit vom Flash abfragen, also Daten vom PCF lesen:
=> Sende Befehl, dass alle Ports (noch im Output Mode) high sind.
=> Sende Befehl, dass Ports jetzt input und Daten gelesen werden sollen.
Ist das etwa falsch?
MFG
Ich würde es so machen:
1. Flasch auf Eigänge schalten
2. PCF auf Ausgänge schalten
3. diese Ausgänge auf High setzen
4. PCF auf Eigänge schalten
5. Flasch auf Ausgänge schalten.
Hoffentlich ist es richtig.
MfG
Coole Sache, habe den Fehler gefunden:
Lag doch an diesem Befehl mit Ausgänge erst HIGH setzen dann umschalten.
Ich hab das zwar getan, jedoch dummerweise an der falschen Stelle.
Ich habe die Ausgänge HIGH gesetzt und anschließend den Befehl
I2CTXD(OxFF00) an den I2C Expander geschickt, der den Flash in den Lesemodus versetzt. Deswegen (0xFF00) haben auch zufälligerweise die eine Seite der Ports funktioniert und die andere nicht!! Hab mich an der Stelle wohl ein wenig verhaspelt.
Vielen Dank für eure Hilfe!
Jetzt funktioniert die Sache hier, auch wenn ich nicht ganz auf die Pull Ups verzichten kann. Messe für High ohne die Pull Ups nur 1.9V aber mit den Pull Ups klappt das jetzt einwandfrei! Denke, da werden auch so 10k oder so reichen.
Vielen Dank nochmal! Jetzt muss nur ncoh der Rest laufen
MFG Christoph
Ich habe die ganze Zeit an Dich geglaubt, weil wenn für jemanden das ein kleines Projekt ist, dann muss er schon was können !
Es wäre wahrscheinlich besser die pull-up´s auf 3,3 V anzuschliessen.
Viel Spass und Erfolg mit Deinem kleinen Projekt !!!
MfG
Ja ok, klein ist schon ein wenig untertrieben, wobei es wirklich keine große Sache gewesen wäre, hätt ich nicht usw. Ihr kennt das alle.
Das mit den 3.3V an den Pull Ups habe ich schon umgesetzt.
Thx to all!
Christoph
Lesezeichen