Ich versuche mal ein wenig System in das Ganze zu bringen. Jeder Chip braucht eine Versorgung. Ich hab jetzt die PCA9555 nicht nachgesehen, aber ich vermute sie brauchen 5V, der ATmega16 auch. Wenn sie miteinander kommunizieren sollen, sollten sie eine gemeinsame Masse haben.
Und nun der Bus. I2C hat 2 Leitungen, die müssen an alle Beteiligten gehen, es ist ja ein Bus. Der Bus ist OC, daher werden Pullups an beiden Leitungen gebraucht. Die I2C Spec sagt, jeder Ausgang muß 3mA treiben können, also darf der Pullup nicht so klein sein, daß mehr als 3mA fließen. Von der Physik ist das schon alles. Von der Logik muß man noch beachten, das alle Knoten am Bus eine eigene Adresse haben. Der µC ist der Master, die beiden PCA9555 müssen auf unterschiedliche Adressen gesetzt werden.
Ein Interrupt gehört nicht zum I2C Bus. Wenn ich aber als Master nicht dauernd die Slaves pollen will, kann mir ein Interrupt die Arbeit erleichtern. Dazu wird jeder Interruptausgang eines PCA9555 an einen Interrupteingang des µC gelegt. Wenn dann ein Interrupt auftritt, weiß der µC an welchem PCA ein Ereigniss aufgetreten ist, um das er sich kümmern muß.
MfG Klebwax
Lesezeichen