Zurück zum Menü 4
4.0.10 i2c-Bus erkunden

Erstellt ab: 14.11.2010


Heute hatte ich einen netten Emailkontakt. Ich fragte nach, ob man mich in der Werkstatt unterstützen könnte und die Firma willigte ein. Ein wenig später lag ein Päckchen mit drei Bausätzen bei mir auf dem Tisch.

Es handelt sich dabei um

  • i2c - Modem
  • i2c - Ausgabekarte
  • i2c - Temperatursensor
Dazu noch eine Tüte voller interessanter Platinenfüße.



Dankeschön dafür :-)

Zunächst baute ich die Platine mit dem PCF8574 auf, denn das scheint mir der einfachse Bausatz zu sein:





Jetzt habe ich die Möglichkeit, diese Platine einmal an einer Picaxe zu probieren, um den i2c-Bus zu verstehen. Ich denke, zum Üben genügt eine 08M (Picaxe siehe hier). Von besonderer Bedeutung ist hierbei die Klemme am linken Rand der Platine. Auch die Jumper sind interessent.

Daher visualisiere ich das hier einmal, um dann später immer wieder nachschauen zu können:


Jetzt kommen noch die Jumper ins Spiel, die dem PCF8574 anzeigen, auf welcher Adresse er liegt:


Wir wissen jetzt also, auf welcher Adresse der PCF8574 in unserem Beispiel liegt. Nämlich auf der kleinsten, für diesen Baustein verfügbaren Adresse.

Hier noch einmal zum Nachschlagen der komplette Adressbereich der Karte:


Aha, wir können also 8 Stück dieser Karten an einem i2c-Bus betreiben. Das ergäbe dann 64 Ausgänge.

Jetzt wollen wir einmal ein wenig Theorie machen, wie denn nun dieser Chip angesteuert werden muss. Der i2C-Bus ist ein Zweidraht-bus. Wir dürfen aber die Masse nicht vergessen. Also werden drei Drähte benötigt. Eine Datenleitung "SDA" und eine Taktleitung (Clock --- SCL). Beide Signalleitungen sind über je einen Pull-UP-widerstand mit 5 Volt plus verbunden, so dass sie im Ruhezustand eine logische "1" führen:



Im Master und im Slave können wir uns dann Open-Collektor-Transistoren vortellen, die unabhängig voneinander die beiden Leitungen SDA und SCL auf logisch "0" ziehen können. Wenn wir und das gang genau betrachten, sehen wir, dass man hierbei keinerlei Kurzschluss fabrizieren kann, auch wenn der Master eine logische "1" schreibt und der Slave aber gleichzeitig eine logische "0".

Wir kennen das ja aus der TTL-Technik und auch aus der CMOS-Technik, das man nie zwei Ausgänge dirkt zusammenschalten darf, sondern immer ein Oder-Gatter dazu nehmen muss. Hier ist das anders, hier werden die bidirektionalen Ein- und Ausgänge direkt auf je eine Leitung gelegt.



Überlege einmal alle Kombinationen der Transisotren T1 bis T4 durch.
Zeichne dir dazu eine Wahrheitstabelle mit den 16 logischen Kombinationsmöglichkeiten.

Dieses ist also erst einmal die Grundüberlegung.

Ich überlegte hin und her, welches System wohl zum Lernen am einfachsten zu bedienen und zu überschauen ist. Klar, dass ich persönlich die Picaxe favorisiere. Nach einigem Probieren habe ich die Lösung erkannt.

Ich nahm eine Picaxe 20M (man kann auch eine kleinere Picaxe nehmen, aber ich habe immer ein paar 20M liegen) und baute folgende Schaltung damit auf und verband sie mit der Platine von Horter & Kalb:



Wie man hier sieht, muss man die High- und Lowpegel umkehren, damit die Logik wieder stimmt. Hinzu kommt, dass ich mir eine negierte Platine bei horter & Kalb gewünscht hatte. Das IC PCF8574 hat nämlich auch Open-Collector-Ausgänge, die  intern mit einem Widerstand mit Plus verbunden sind. Wenn also alle Ausgänge logisch Null führen, also die OC-Ausgänge gesperrt sind, so haben wir es an den Ausgängen mit High-Pegeln zu tun:



Horter & Kalb haben diese Pegel mit PNP-Transistoren logich invertirert, so dass das IC auch logisch Null führt, wenn es mit der Betriebsspannung verbunden wird.

Aber warum hat das IC diese "doofen" OC-Ausgänge, die alles scheinbar so kompliziert machen ? Nun, man kann das selbe IC sowohl als Ausgang, als auch als Eingang benutzen. Dabei funktionieren die Datenpins genau so wie die oben schon beschriebenen SCL- und SDA-Pins. Man kann trotz High-Pegel gefahrlos eine Null schreiben, indem man den betreffenden Pin einfach mit einem NPN-Transistor auf Null zieht.



Nach dem ich alles auf dem Steckbrett zusammengesteckt hatte nahm ich als Hilfe den sehr guten und erfreulich kurzen Text des genialen Elektronik-Ingenieurs Burkhard Kainka als Anleitung zur Hand und übersetzte sein Programm in ein Picaxe-Programm. Dabei musste ich sehr auf der Hut sein, denn alls SDA- und SCL-Pegel mussten ja sauber umgedreht werden, denn ich hatte ja jeweils einen NPN-Emitterfolger hinter die Picaxe-Ausgänge geschaltet.

Den super Text darf ich ja leider nicht scannen und hier einstellen, deshalb mache ich hier einen ausführlichen Quellennachweis, damit Interessierte sich das betreffende Buch kaufen können:

Titel des Buches: "Messen steuern und regeln mit dem C-Control BASIC System"
Verfasser: Burkhard Kainka
Verlag: Franzis` Verlag, GmbH 85586 Poing
ISBN 3-7723-7635-6

Seite: 160 bis 165

Herausgekommen ist folgendes Picaxe-Programm:


PICAXE-Demo-Programm für die
Horter & Kalb - Karte:

23.04.2011 --- von Stephan Mischnick nach einer Anleitung von Burkhard Kainka. Beispiel für eine PICAXE 20M.


 
symbol SDA_ = 0
symbol SCL_ = 1
symbol datenbit = b0
symbol adresse = b1
symbol byyte = b4
 
low SCL_
low SDA_

gosub Startbedingung
gosub Adresse_schreiben
gosub Byte_schreiben
gosub Stoppbedingung
 
end
 
Adresse_schreiben:
adresse = %01000000
high SDA_
for b3 = 1 to 8 
high SDA_
b2 = adresse and %10000000
if b2=128 then
low SDA_
low SCL_
high SCL_
else
high SDA_
low SCL_
high SCL_
endif
adresse = adresse*2
next b3
low SCL_
high SCL_
return
 
Byte_schreiben:
for b5 = 0 to 255
byyte = b5
high SDA_
for b3 = 1 to 8
b2 = Byyte and %10000000 
if b2=0 then
low SDA_
low SCL_
high SCL_
else
high SDA_
low SCL_
high SCL_
endif
Byyte = Byyte*2
next b3
low SCL_
high SCL_
next b5
return
 
Stoppbedingung:
high SDA_
low SCL_
low SDA_
return
 
Startbedingung:
high SDA_
high SCL_
return




Dieses Programm zählt die Ausgänge 8-Bit-binär von Null bis 255 hoch, ganz wie das Original von Burkhard Kainka. Anhand dieses Beispielprogramms sollte es dann auch möglich sein, andere Anwendungen in die Picaxe zu programmieren.

=============================================

Inzwischen schreiben wir September 2013 und es sind ungefähr 2 Jahre vergangen. Wie es schon fast zu erwarten war, gibt es die Picaxe 20M nicht mehr und wurde durch das Nachfolgemodell 20M2 ausgetauscht. Natürlich war ich dadurch gezwungen, das von mir entwickelte Lernboard neu zu machen.

Hier also eine Version des Programmcodes mit dem sich die Horter & Kalb Karte auch ohne die zusätzlichen Transistoren ansteuern lässt:

;PICAXE-Demo-Programm für die
;Horter & Kalb - Karte:

;14.09.2013 --- von Stephan Mischnick nach einer Anleitung von Burkhard Kainka. Beispiel für eine PICAXE 20M2.

;Wenn es mal schneller sein muss ==>
;setfreq m32
 
symbol SDA_ = b.0
symbol SCL_ = b.1
symbol datenbit = b0
symbol adresse = b1
symbol byyte = b4
 
high SCL_
high SDA_

gosub Startbedingung
gosub Adresse_schreiben
gosub Byte_schreiben
gosub Stoppbedingung
 
end
 
Adresse_schreiben:
adresse = %01000000
low SDA_
for b3 = 1 to 8
low SDA_
b2 = adresse and %10000000
if b2=128 then
high SDA_
high SCL_
low SCL_
else
low SDA_
high SCL_
low SCL_
endif
adresse = adresse*2
next b3
high SCL_
low SCL_
return
 
Byte_schreiben:
for b5 = 0 to 255
byyte = b5
low SDA_
for b3 = 1 to 8
b2 = Byyte and %10000000
if b2=0 then
high SDA_
high SCL_
low SCL_
else
low SDA_
high SCL_
low SCL_
endif
Byyte = Byyte*2
next b3
high SCL_
low SCL_
next b5
return
 
Stoppbedingung:
low SDA_
high SCL_
high SDA_
return
 
Startbedingung:
low SDA_
low SCL_
return


Wir müssen die Horter & Kalb Karte dazu folgendermaßen vorbereiten:

Die Adresse des PCF 8574P muss zum Probeprogamm passen. Dazu stecken wir die drei Jumper so, dass diese alle in Richtung Relais schauen.

Beim Anschluss der Versogungsspannung dürfen wir die Polarität bei der Karte keineswegs vertauschen, denn sonst wird der PCF 8574 schnell beschädigt.

Die zwei Leitungen SDA und SCL müssen wir richtig an die Klemmen B.0 und B.1 anschießen.

Dann ergibt sich beispielsweise folgendes Bild:




Auf diese Weise ist es schonmal möglich, bis zu 16 Stück der Horter & Kalb Karten an die Picaxe anschließen zu können. Das egäbe dann schonmal 128 Ausgänge, die alle einzeln schaltbar wären. Das Tolle daran ist, dass an der Picaxe nur 2 Portleitungen dazu belegt werden müssen.

Es ist es also nun an der Zeit, das Lesen über den PCF 8574 zu studieren.

Es gibt also noch eine Fortstzung dieses Baublogs.


Ich bedanke mich, dass Du mich auf diesem kleinen "Lehrgang" begleitet hast,


viele Grüße,




Dieser Artikel wurd druch eine freundliche Spende von Horter & Kalb ermöglicht.


Horter & Kalb
, Bayreuth


Nach oben            Zurück zum Menü 4