Zurück zum Menü 5

5.3.5 RS232 zu I2C Umsetzter mit PureBasic


Erstellt ab 21.07.2010




Der Beitrag 5.3.4 hat den entscheidenden Nachteil, dass die dort beschriebene Platine nicht mit Gambas nutzbar ist.

Das liegt daran, dass man unter Gambas mit einfachen Mitteln nur 2 Ausgangsleitungen der RS232 ansprechen kann. Diesen Umstand bemerkte ich aber zu spät, so dass die Platine bereits fertig war und ich sie nicht mehr so einfach ändern konnte.

Ich überlegte hin und her, wie ich aus dieser Misere herauskommen würde und da fiel mir ein, dass es ja inzwischen Picaxe-Chips mit i2c-Interface gibt. Außerdem sind ja hunderte, wenn nicht tausende anderer i2c-ICs am Markt erhältlich.


i2c-Bus-Logo, © fremd

Ich habe auch schon lange einige Bücher liegen, in denen die i2C-Spezifikationen beschrieben sind. Zunächst überflog ich diese Bücher nur, aber nun werde ich sie einmal richtig lesen, um dann mit den 2 Ausgangsleitungen der RS232 und zwei weiteren Eingangspins eine eigene i2C-Schnittstelle zu ersinnen.

Zunächst einmal kann man in die Wikipedia schauen und sich schlau machen, was ein i2c-Bus eigentlich ist und wie er ungefähr arbeitet.

i2c bei Wikipedia

Ich musste aber auch herausfinden, wie ich die beiden Ausgangspins an meiner RS232-Schnittstelle vom Ubuntu Linux aus mit Gambas ansprechen kann.


Gambas-Logo

Gambas bei Wikipedia

Dazu habe ich mir eine kleine Schaltung gesteckt, die ich mit einem kleinen Batteriekasten und vier NiMh-Akkus betrieben habe:



Nach einigem Blättern in den Online-Unterlagen habe ich es dann auch geschafft, diese Pins mit einem minimalistischen Gambas-Code zu aktivieren, bzw, einzulesen:



Download Quellcode und Programm für Gambas (Ubuntu, ZIP)

Dein Test-Programm läuft nicht richtig, oder lässt sich nicht starten ?

==> Gambas muss installiert sein
==> am besten Du installierst alle Zusätze für das Gambas über die Synaptic-Paketverwaltung





Hans-Joachim Lehmann vom Gambas-Projekt.de hat  sich von mir ein wenig  inspirieren lassen und  das gleiche Programm einmal  aus seiner Sichtweise interpretiert.


Die Oberfläche ist etwas anders gestaltet ...



... und der Code ist gewiss viel besser als meiner ...

Download Quellcode und Programm "Hans" für Gambas (Ubuntu, ZIP)


Hier sieht man, dass Hans noch eine Schnittstellenauswahl mit eingebaut hat.
 
Auch das Foto der minimalistischen Steckschaltung möchte ich nicht vermissen lassen:


 

(Hmmm, wie sieht dieses Gebilde aus ? Welcher Kontinent könnte das wohl sein ... hmm ... ?)


Nun müssen wir uns Gedanken machen, wie die konkrete elektronische Umsetzung der beiden Signalleitungen eines i2c-Busses mit der RS232 des PC umzusetzen sind.

Zunächst sagt die Wikipedia Folgendes dazu:

Wikipedia-Kopie vom 21.07.2010, 3:37 Uhr:

Im Diagramm sind drei Geräte eingezeichnet. I²C benötigt zwei Signalleitungen: Takt (engl. serial clock line, SCL) und Datenleitung (engl. serial data line, SDA). Beide liegen mit den Pull-Up-Widerständen RP an der Versorgungsspannung Udd. Sämtliche daran angeschlossenen Geräte haben Open-Collector-Ausgänge, was zusammen mit den Pull-Up-Widerständen eine Wired-AND-Schaltung ergibt. Der High-Pegel soll mindestens 0,7 Volt betragen, der Low-Pegel im Bereich −0,5 bis 0,3 Volt liegen. Die im Bild nicht eingezeichneten Serienwiderstände RS an den Eingängen der Geräte sind optional und werden als Schutzwiderstände verwendet.



Aha, wir müssen also überlegen, wie wir unsere kleine Probeschaltung so umbauen können, dass wir diese beiden Datenleitungen ständig auf plus 5 Volt liegen haben und so gestalten, dass wir diese Datenleitungen mit unserem Testprogramm (siehe oben) auf Masse ziehen können. Gleichzeitig wäre es schön, dies mit den LEDs visualisieren zu können.

Heute Nacht ist es mir gelungen,  zumindest die  Bedingungen so einzuhalten, dass der PC die beiden Datenleitungen erkennt. Dies habe ich nach der berühmten "Try-And-Error-Methode" herausgefunden. Man sagt auch, ich habe das "empirisch im Versuch ermittelt".

Daraus ergibt sich erstmal folgende Probe-Schaltung, die ich auf dem Steckbrett erst einmal gesteckt habe:



Wenn wir diese Schaltung nun wieder "an unser Gambas-Programm anklemmen", so werden wir sehen, dass die beiden LEDs in Ruhestellung leuchten. Das soll ja auch so sein, laut i2c-Spezifikationen.

Wenn wir nun eine logische "1" auf einen der Pins geben, erlischt die entsprechende LED. Auch ist in der Programmoberfläche zu sehen, dass die RS232-Eingänge in der Ruhestellung ständig auf logisch "1" sind.

Auch das soll so sein.

Wenn wir nun einen der beiden Taster drücken, sehen wir sowohl an den LEDs als auch in der Programmoberfläche die entsprechende Änderung ==> Die betreffende Datenleitung wird auf logisch "0" gezogen.

Mit den beiden Tastern haben wir nichts weiter gemacht, als den Open-Collektor-Ausgang (OC) eines Slaves simuliert. Man kann sich gut vorstellen, wie die Kollektoren der beiden Slave-Ausgänge an den beiden Datenleitungen hängen:



Jetzt müssen wir nur noch sehen, ob wir die elektrischen Spezifikationen einhalten, um mit dieser Schaltung weiter arbeiten zu können.

So sagte die Wikipedia:

"Der High-Pegel soll mindestens 0,7 Volt betragen, der Low-Pegel im Bereich −0,5 bis 0,3 Volt liegen."

Nun, das lässt sich ja leicht mit einem Multimeter ausmessen:



Betätigung der  probeweisen SCL- und SDA-Leitungen per Software ==>

Ergebnis:

Der gemessene Highpegel betrug: 4,27 Volt ==> i.O.
Der gemessene Lowpegel betrug: 0,0204 Volt ==> i.O

Also sollte unsere Schaltung wohl mit einem i2c-Chip zusammenarbeiten können.

Was mir noch dazu auffällt, ist ein Überschwingen auf ca. 8 Volt. Das sollte aber kein großes Problem sein, denn die Pins an den i2c-Chips sind ja Open-Collektor-Ausführungen (Open-Drain-Ausführungen, was vom Prinzip das Gleiche ist)  und diese sind im Allgemeinen doch recht robust.


So ging der erste i2c-Abend ins Land ...






Um nun die Spezifikationen ein wenig zu lernen, ist es gewiss sehr gut, ein IC vom Erfinder des Busses "Phillips" zu kaufen und dessen Datenblatt schon einmal zu studieren. Ich habe hier einmal ein Datenblatt für dieses IC herausgesucht und stelle es hier schon einmal zum Download bereit:

Download Datenblatt PCF 8574 (PDF)

Dieses IC stellt 8 Ausgangspins und 8 Eingangspins am i2c-Bus bereit. Ich habe es ausgewählt, weil man damit die ersten Versuche gewiss schön nachvollziehen kann.

Hierzu können wir einen kleinen Exkurs machen:

Artikel 4.0.10 "i2c-Bus erkunden" in einem neuen Tab öffnen.

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

Bevor wir jetzt am PC weiter machen, müssen wir möglichst einfach die RS232-Signale in die i2c-Signale umsetzen.

Nach einigen Wochen entschied ich mich für folgende Variante:


Man könnte meinen "prima, das mache ich jetzt so", aber ein Versuch ergab, dass Eingangspins  DSR und CTS der RS232 zu niederohmig sind.

Jedenfalls konnte ein PCF8574 mit dieser Schaltung NICHT angesteuert werden. Es müssen also die Pins DSR und CTS von den SDA und SCL Signalen noch entkoppelt werden.

Ich ersann also folgende kleine Schaltung:



Diese Schaltung hat nun zwar keine LEDs mehr, aber die Signale können ja mit der entsprechenden Software visualisiert werden. Diese Schaltung muss nun also einmal überprüft werden, ob auch alle Signale richtig dargestellt werden.

Fortsetzung folgt, Stand 23.06.2001




Viel Erfolg beim Nachbau,





Nach oben            Zurück zum Menü 5