Zitat von
damaltor
man schreibt einfach die portbits, und der rest geht von allein?
richtig.
Zitat von
damaltor
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?
So ist es.
Zitat von
damaltor
dann: wofür sind A1,A2,A3? die müssen immer gesetzt sein, sofern nicht mehrere slaves angeschlossen werden oder?
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.
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.
Zitat von
damaltor
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?
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 von
damaltor
welche zeichnung stimmt, die der platine oder die des schaltplans?
Mit Ausnahme von dem doppelten R1 im Layout sollten beide Pläne übereinstimmen.
Zitat von
damaltor
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?
richtig. Das ist noch ein Fehler im Layoutplan.
Zitat von
damaltor
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?
So würde ein Beispiel zum Lesen aussehen:
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
Zitat von
damaltor
was passiert, wenn ich den pin low geschaltet habe und dann zB mit einem taster spannung drauf leite? kurzschluss oder gar nichts?
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.
Lesezeichen