www.mikrocontroller.net

Forum: Codesammlung I2C-Master mit FTDI FT232R im Bit-Bang-Modus

Autor: Bernhard Mayer (bernhard84)
Datum:
Angehängte Dateien:

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
Autor: Maxx (Gast)
Datum:

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.
Autor: Bernhard84 (Gast)
Datum:

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.
Autor: Gerd (Gast)
Datum:

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
Autor: Bernhard Mayer (bernhard84)
Datum:

@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
Autor: Bernhard Mayer (bernhard84)
Datum:
Angehängte Dateien:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net