noch eins: was soll ich eigentlich mit A0-A2 machen? weil obwohl ich eine von denen rausnehme, gibt es keine veränderung (auch mit dem antwort und so). Ist das nicht komisch? eigentlich sind diese ports für addressing wichtig oder?
Druckbare Version
noch eins: was soll ich eigentlich mit A0-A2 machen? weil obwohl ich eine von denen rausnehme, gibt es keine veränderung (auch mit dem antwort und so). Ist das nicht komisch? eigentlich sind diese ports für addressing wichtig oder?
Hi,
ja, 0 ist LOW und 1 ist HIGH.
Die Adresspins müssen alle auf LOW (Jumper gesetzt) sein, damit der PCF8574 mit seiner Basisadresse angesprochen wird. D.H. der I2C Chip wird doch nicht richtig angesprochen.
Hast du evtl. eine PCF8574AP?
Der hat nämlich eine andere Basisadresse, als der PCF8574P.
Sind die I2C Abschlußwiderstände R1 und R2 dran?
Auf dem Foto im AsuroWiki fehlen diese. Ich hatte diese Widerstände auf eine 2x3polige Buchsenleiste gelötet, zum Aufstecken auf die I2C Erweiterung.
nee, ich hab PCF8574P.
ich glaube das liegt daran, dass ich vergessen habe eine pullup resistor zu verbinden. Ich hab zwar noch nicht daran weitergearbeitet, aber danke für die Antwort, ich melde mich wieder wenn ich es gemacht habe.
Gruß
raid
so, muss nochmal nachfragen:
man schreibt einfach die portbits, und der rest geht von allein?
also wenn ich 0b00001111 (=15 oder 0x0F) schreibe, dann sind die ersten 4 pins low und die zweiten 4 pins high? und das sind die ports P0 bis P7 in der zeichnung oder?
dann: wofür sind A1,A2,A3? die müssen immer gesetzt sein, sofern nicht mehrere slaves angeschlossen werden oder?
und noch: wenn ich den jumper bei int0 setze, dann wird ein interrupt ausgelöst, wen WAS passiert? sehe ich das richtig, dass int0 solang wie der jumper gesetzt ist, über R3 mit vcc verbunden ist? wenn ja warum?
welche zeichnung stimmt, die der platine oder die des schaltplans?
auf dem bild der platinenoberseite kommt R1 doppelt vor und R7 fehlt. vermute ich richtig, dass R7 unten links bei R8 und R9 hin müsste?
wie lese ich den aktuellen status der pins aus? also wie kann ich erkennen, ob an einem pin (von aussen, zB einem taster) spannung anliegt oder nicht?
was passiert, wenn ich den pin low geschaltet habe und dann zB mit einem taster spannung drauf leite? kurzschluss oder gar nichts?
vielen dank für eure hilfe, ich hab die teile bestellt und komm nicht damit klar =/
=)
richtig.Zitat:
Zitat von damaltor
So ist es.Zitat:
Zitat von damaltor
Damit legt man die Adresse des I2C Chips fest. Durch unterschiedliche Adresse lassen sich theoretisch bis zu 8 I2C Chips an einem I2C Bus betreiben. Das entspricht den I2C Adressen 0x40..0x47.Zitat:
Zitat von damaltor
Man kann auch die Jumper und Pullup Widerstände R7..R9 weglassen, und die Pins 1..3 vom PCF8574 auf Masse legen. Dann wird der I2C Chip unter seiner Basisadresse 0x40 angesprochen.
Betreibt man I2C Chip im Input Mode, so löst eine Flankenänderung an einem der Eingangspins einen Interrupt aus. R3 ist ein Pullup für die Interrupt Leitung. INT ist ein open collector Ausgang.Zitat:
Zitat von damaltor
Mit Ausnahme von dem doppelten R1 im Layout sollten beide Pläne übereinstimmen.Zitat:
Zitat von damaltor
richtig. Das ist noch ein Fehler im Layoutplan.Zitat:
Zitat von damaltor
So würde ein Beispiel zum Lesen aussehen:Zitat:
Zitat von damaltor
Code:while(1)
{
ret = i2c_start(Dev8574+I2C_READ); // set device address and read mode
if ( ret )
{
/* failed to issue start condition, possibly no device found */
i2c_stop();
StatusLED(RED);
}
else
{
/* issuing start condition ok, device accessible */
val=i2c_read(0); // read value, only one Byte with nak
i2c_stop(); // set stop conditon = release bus
PrintInt(val) // print out value
StatusLED(GREEN);
}
Msleep(500); // wait a 1/2 second
Ein Mischbetrieb Input und Output am gleichen I2C Chip sollte man vermeiden, sonst peng, puff! Es sei denn, man weiss was man tut (beim Schreiben auf die Eingangspins HIGH ausgeben, nicht LOW). Oder man macht die Schaltung entsprechend robust.Zitat:
Zitat von damaltor
super, vielen dank. dann kann das alles ja nicht so schwer werden... =)
ok, wenn ich einen baustein zum lesen nutzen will, dann schreibe ich auf alle ports ein HIGH und stelle danach um auf i2c_read, oder?
reichen die 100 µA (steht weiter oben) zur dierekten ansteuerung einer LED? bestimmt nich wa...
Hallo,
wird ein bißchen zu wenig sein.
Aber bei Einsatz einer LowCurrent-LED sollte ein PullUp-Widerstand von 1,5K funktionieren.
Tido
also den port des I2C an die LED, und VCC über den Widerstand auch an die LED? oder wie meinst du das?
Ja, den PullUp von VCC an die Anode der LED und damit auch gleichzeitig an den Port des 8574. Dann wird bei Port=High die LED über den PullUp (1,2K; habe Uf der LED vergessen :-b ) mit ca. 2,75mA betrieben. Die Kathode der LED natürlich nach Masse. Bei Port=Low zieht dieser die Anode der LED auf 0V, allerdings fließen dann ständig 3mA unsinnig über der PullUp nach Masse.Zitat:
Zitat von damaltor
MfG
Tido