Forum: Projekte & Code I2C-Master mit FTDI FT232R im Bit-Bang-Modus


von Bernhard M. (bernhard84)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Ich habe einen I2C-Master mit einem FTDI FT232R im CBUS Bit-Bang-Modus 
gemacht.
Als Anhang habe ich ein kleines Programm angefügt, das einen LM75 
ausliest.

Die Schaltung ist minimal, es muss nur an den FT232R die Beschaltung für 
die USB Schnittstelle angeschlossen werden. Die CBUS-Pins 0 und 1 dienen 
als SCL und SDA (SDA=CBUS0; SCL=CBUS1). Beide Pins müssen jeweils mit 
ca. 2 kOhm nach VCC gezogen werden. Schaltbild reiche ich bei 
Gelegenheit noch nach.

Die I2C-Software ist sehr rudimentär. Die I2C-Zyklen müssen aus Start- 
und Stopbedingungen und den zu übertragenen Bytes zusammengesetzt 
werden. Aber es funktioniert. Allerdings ist der Bus erwartungsgemäß 
sehr langsam. Ich komme auf ca. 100 Hz. Das Auslesen eines 
Temperaturwertes vom LM75 dauert damit ca. 300 ms. Das wird auch vom 
Programmbeispiel gemessen. Diese Zeit ist auch relativ konstant, wie man 
durch die 5 Wiederholungen im Programm sehen kann.

Den Code könnte man beim Errorhandling noch verbessern. Ebenso den 
I2C-Code. Wenn ich dazu Zeit habe, werde ich den nochmal überarbeiten.

Über Rückmeldungen würde ich mich freuen.

Bernhard

von Maxx (Gast)


Lesenswert?

Interessanter Ansatz, Dein Programm...

Der CBUS-Bitbang ist nicht besoners schnell, was wohl ehr an Windows 
bzw. der ftd2xx.dll von FTDI liegt.

Mit "Mprog" muß vorher noch der CBUS0 und CBUS1 Pin in den I/O-Mode 
programmiert werden, sonst gehts nicht.

von Bernhard84 (Gast)


Lesenswert?

oh ja, danke. Die Pins müssen natürlich noch in den IO-Mode gesetzt 
werden.

Das Problem mit der Geschwindigkeit kommt vom USB. USB hat nämlich eine 
"Turnaround"-Zeit von 1 ms und es kann maximal in jedem durchgang ein 
Befehl übertragen werden. Ich brauche pro I2C-Takt 3 Befehle (Datenbit 
setzen, clock high, clock low).
Somit kommt man hiermit maximal auf einen Takt von 333 Hz. Das ganze 
kann dann durch das Betriebsystem und den Treiber usw. noch beliebig 
ausgebremst werden. und deshalb ist es so langsam.

von Gerd (Gast)


Lesenswert?

Hallo Bernhard,

schau Dir mal den Thread Beitrag "mehr Speed in FT245 BitBang" an; 
gleiche Problemstellung, geringe Speed am Bus.
Schneller wurde es, als ich alle Sende-Befehle in einem Rutsch gesendet 
hatte. Mit meiner Ansteuerung über VB6 könnte ich damit einen ADS7828 
(12Bit ADC) komplett initialisieren und auslesen in ca. 100msek. Zwar 
noch immer nicht das Geschwindigkeitswunder, aber deutlich schneller...



Gerd

von Bernhard M. (bernhard84)


Lesenswert?

@Gerd

Das funktioniert bei mir nicht, da ich den CBUS-Bit-Bang-Mode verwende. 
Dabei behalten die UART-Pins ihre eigentliche funktion, d.h. 
gleichzeitig ist das senden über den UART auch noch möglich. Dafür 
erlauben die verbliebenen 4 IO-Pins nur sehr einfache IO-Aufgaben ohne 
eigenen Takt.

Deshalb kann deine Methode bei mir nicht funktionieren.

Bernhard

von Bernhard M. (bernhard84)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich habe jetzt noch ein kleines Blockschaltbild nachgereicht. Daraus 
dürfte eigentlich klar werden, was wo wie angeschlossen werden muss.

Der FT232R benötigt natürlich noch die weitere zusätzliche Beschaltung, 
die zu seiner Funktion notwendig ist. Diese kann aus seinem Datenblatt 
entnommen werden.

Bernhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.