Forum: Mikrocontroller und Digitale Elektronik I2C to RS232 TTL


von Fridolin O. (muebau)


Lesenswert?

Hi,
ich moechte einen I2C Bus ueber RS232 (RX und TX) bedienen koennen. An 
dem I2C werden Sensoren haengen und ich moechte in Software ueber ASCII 
(RS232) mit den Sensoren sprechen koennen.

Faellt euch da was ein?

Ich habe das Projekt I2C-slave USART gefunden. Da es sich hier aber 
nur um einen I2C-Slave handelt ist es ungeeignet. Richtig?

muebau

von Klaus2m5 (Gast)


Lesenswert?

Unter Erweiterungen gibt es ein I2C-Master Tool. Das ist allerdings 
eigentlich nur zum Testen von Slaves gedacht. Der Master ist eine reine 
Softwarelösung ohne Hardwareunterstüzung (ohne USI) und ohne den 
FIFO-Puffer für die RS232-Schnittstelle. Es würde notfalls gehen.

von Coder (Gast)


Lesenswert?

Was ist mit den FTDI Chips?

von Rainer W. (rawi)


Lesenswert?

Coder schrieb:
> Was ist mit den FTDI Chips?

Hast du da eine Typenbezeichnung für einen FTDI Chip, der eine Umsetzung 
zwischen I2C und RS232 macht?

von Fridolin O. (muebau)


Lesenswert?

Hi,
das klingt ja nicht so richtig gut. Es soll ja schon verlaesslich 
funktionieren.

Was kann der FTDI denn? Das ist doch nur ein RS232 zu USB Wandler oder 
nicht?

Wie wuerdet ihr mit einem I2C Bus umgehen um diesen per Funk ueber ein 
BTM-222 zum PC zu bekommen?

Die war fuer mich die einzige Moeglichkeit um den I2C in Software zu 
benutzen.

muebau

von Fridolin O. (muebau)


Lesenswert?

Hi,
meinst du das Ding hier?

http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=35108&flv=1&bereich=&marke=

Wenn ja, kann ich dem Ding denn 3.3 V geben und er setzt fuer mich den 
I2C Bus in eine RS232 um?

muebau

von Olaf (Gast)


Lesenswert?

> Wie wuerdet ihr mit einem I2C Bus umgehen um diesen per Funk
> ueber ein BTM-222 zum PC zu bekommen?

Ich wuerde mir einen fast beliebigen Microcontroller nehmen und dem ein 
kleines Programm verpassen das genau das macht was ich will.

Du programmierst halt ein Protokoll das die eigentliche I2C 
Kommunikation etwas abstrahiert.

Beispiel:

W3:A50:30:31:32      ;Schreibt drei Byte an I2C-bus mit Adresse 0x50
R1:A50               ;Liesst ein Byte vom I2C und sendet dir das 
Ergebnis
W1R5:A50:4a          ;Schreibt Byte 4a an Adresse 50 und liesst danach
                     ;5Byte.

Also fang an. :)

Olaf

von Fridolin O. (muebau)


Lesenswert?

Hi,
nun wenn ich das Ding von ELV aber genau soetwas kann, habe ich eine 
sichere Basis mit industriell gefertigter Platine.

Wie auch bei einem ISP Programmer sollte man sich etwas nachweisslich 
Funktionierendes holen um Fehlerquellen auszuschliessen.

Kann das Ding von ELV denn genau das?

muebau

von Gerhard G. (xmega)


Lesenswert?

Hallo,

Fridolin Onteca schrieb:
> Wenn ja, kann ich dem Ding denn 3.3 V geben und er setzt fuer mich den
> I2C Bus in eine RS232 um?


> können auch SPI-, I²C- und JTAG-Schnittstellen?

- 3,3Volt funktioniert.

- Man kann mit Visual Basic, Visual C++ und MPSSE die genannten 
Schnittstellen programmieren. Aber da würdest du dich so verzetteln, 
dass das eigentliche Projekt auf der Strecke bleibt!

- An der Geschichte haben sich schon viele Experten die Zähne 
ausgebissen...


Gruß Xmega

von Oliver J. (skriptkiddy)


Lesenswert?

Fridolin Onteca schrieb:
> Kann das Ding von ELV denn genau das?

Du kriegst von FTDI eine API mit der du von Windows / Linux aus mit dem 
Chip kommunizieren kannst. UART ist das aber nicht.

Schau mal hier:
http://www.ftdichip.com/Support/SoftwareExamples/MPSSE.htm

von Coder (Gast)


Lesenswert?

@Fridolin Onteca
Wenn du Dir den Aufwand machst und auf der ftdi homepgae recherchierst, 
findest du das mpsse interface...es gibt auch application notes dafür 
anhand derer du entscheiden kannst, ob es passt oder nicht

von Coder (Gast)


Lesenswert?

Addendum
Hängt davon ab ob du einen Mikrocontroller benutzen möchtest bzw. musst 
oder nicht.

von ./. (Gast)


Lesenswert?


von Fridolin O. (muebau)


Lesenswert?


von Jens (Gast)


Lesenswert?


von ./. (Gast)


Lesenswert?

guggle: realterm
guggle: bl233

von Fridolin O. (muebau)


Lesenswert?

Hi,
wo bekomme ich den BL233 denn her?

Gibt es da evtl. denn einen Bausatz oder eine PCB Layout?

muebau

von Peter Kranl (Gast)


Lesenswert?

NXP SC18IM700 setzt RS232 um zu I2C - Master

von Michael S. (Gast)


Lesenswert?

Hallo Fridolin,

schau doch einfach mal in die  Codesammlung.

Da gibt es mindestens 2 Vorschläge, wie man mit einem einfachen ATMEGA8 
Dein Problem löst.

Woher ich das weiß ?

Weil ich selbst einmal gesucht habe.
Und mindestens eine Lösung gefunden habe, die mir aber zu umständlich 
war.

Daraufhin habe ich einen eigenen Ansatz geschrieben (Achtung: sehr 
frühes Frühwerk - aber gut funktionierend und seit Jahren ständig in 
Benutzung) und in der Codesammlung bereitgestellt.

mfg

Michael s.

von Fridolin O. (muebau)


Lesenswert?

Hi,
nun ich habe die Loesungen mit dem Atmega8 schon gesehen. Da es hier 
fuer das Projekt einen moeglichst einfachen Ansatz braucht ist der BL233 
(als DIL) genau richtig.

Auch den SC18IM700 kann ich nicht finden. Laut Datenblatt ist der aber 
nicht als DIL verfuegbar.

Wo kann ich den BL233 oder den SC18IM700 kaufen?

Gesucht:
Reichelt
ELV
Conrad (nur der Vollstaendigkeit halber)

muebau

von Rudi (Gast)


Lesenswert?

http://i2cchip.com/shop.html (unter Integrated Circuits)

da gibt es auch komplette Schaltungen zu kaufen.

Sonst wirst Du das Teil wohl nicht bekommen, das sieht nach einem custom 
Chip aus.

Wenn Du Basteln (sparen) willst, empfehle ich die Codesammlung (das 
Beispiel von Michael habe ich aber auch nicht gefunden, außer er hat es 
unter anderem Namen eingestellt)

Oder das Teil von ELV, falls es Deine Anforderungen erfüllt. Da ist viel 
Zeit und Nerven gespart ;-)

Rudi

von robo (Gast)


Lesenswert?

Ich habe vor einiger Zeit diese Schaltung nachgebaut,
funktioniert gut.

http://www.horter.de/download/i2c_1.html

von Michael S. (Gast)


Lesenswert?

Hallo Rudi,

das Programm steht unter dem Betreff "Terminal/TWI-Adapter ..." in der 
Codesammlung (ich musste selbst suchen).

Diese Version wird sich auf die einseitige Kommunikationsrichtung vom PC 
zum TWI-Bus + Verarbeitung der Antworten beschränken.

Den umgekehrten Weg habe ich später implementiert, mangels erkennbarem 
Interesse aber niemanden damit belästigt:

Der Adapter fungiert im Ruhezustand als TWI-Slave und alle an ihn 
gerichteten Nachrichten (Bytes) werden hexadezimal an die serielle 
Schnittstelle durchgereicht (das wird zum Debuggen genutzt).

In Verbindung mit einem USB-Seriell Adapter beschränkt sich die 
notwendige Hardware auf einen ATMEGA8 in Verbindung mit einem Quarz und 
2 Kondensatoren.
Alles also Teile, die man normalerweise in der Bastelkiste hat.

mfg

Michael S.

von Rudi (Gast)


Lesenswert?

@Michael:
ja, jetzt wo Du es sagst... mit der SW hab ich auch schon 
experimentiert. Hätte ich vermutlich nicht mehr gefunden ;-)
Danke,
Rudi

von Fridolin O. (muebau)


Lesenswert?

Hi,
da ich mit dem Bus reden muss und ihm auch zuhören muss genügt der Code 
vermutlich nicht.

Zu der Lösung von Horter & Kalb (horter.de):

Oft werden die Leitungen RTS, CTS, DTR, DSR in I2C-Schaltungen 
verwendet. Dies funktioniert toll wenn man eine native RS232 hat.

Ist das BTM222 in der Lage diese Leitungen ebenfalls zu nutzen. Es 
scheint hier nur RTS und CTS zu geben.

muebau

von Fridolin O. (muebau)


Lesenswert?

Hi,

Michael S. schrieb:
> das Programm steht unter dem Betreff "Terminal/TWI-Adapter ..." in der
> Codesammlung (ich musste selbst suchen).

ich habe das hier gefunden:
Beitrag "Terminal / TWI-Adapter für Mega8 in C"

Dieser Code scheint aber schon die Kommunikation in beide Richtungen zu 
unterstützen. Nicht?

muebau

von old-school-offline (Gast)


Lesenswert?

schau mal hier

http://www.coptonix.com/html/produkte.html

habe ich verwendet vor dem IOWarrior(USB)

Grus Ralf

von Fridolin O. (muebau)


Lesenswert?

Hi,
ein Baustein der an dem I2C betrieben werden soll ist der BMA020. 
Dieser verkündet im Datenblatt einen I2C mit 3,4 Mbit/s zu bedienen.

Ist:
Beitrag "Terminal / TWI-Adapter für Mega8 in C"

denn damit kompatibel? Es können ja "nur" 100/400 Kbit/s behandelt 
werden. Findet die Kommunikation dann einfach nur bei 100 Kbit/s statt?

muebau

von Michael S. (Gast)


Lesenswert?

Hallo Fridolin,

wenn du nicht mehr willst, als einen "normalen" TWI-Slave zu bedienen, 
dann kannst Du das problemlos mit dem "Terminal / TWI-Adapter" machen.

Genau diese Dinge mache ich mit dem Programm ständig:
Daten auf einen Slave übertragen oder Daten aus dem Slave auslesen.

Wobei das Programm dazu dient, die Kommunikation im Grundsatz zu testen 
und zu verstehen - um anschließend eines eigenständiges Programm auf 
einem Controller laufen zu lassen.

Zur Frage des TWI-Taktes:
Im Datenblatt ist der maximale (ggf. auch der minimale) TWI-Takt 
angeben, mit dem ein Slave arbeiten kann.

Mit 100 kHz kommen alle zurecht.
Bei langen Leitungen ist es hilfreich, den Takt herabzusetzen.

Im Gegensatz zur Seriellen Datenübertragung, bei der beide Parteien 
exakt das selbe Timing haben müssen, wird beim TWI der Takt durch das 
SCL-Signal vorgegeben.

Die maximale TWI-Takt-Frequenz meines Programmes ist durch den Takt des 
Controllers vorgegeben.
Da ich mit 3.686400 MHz arbeite, liegt (wenn ich es - ohne ins 
Datenblatt zu schauen - recht erinnere), der maximal erreichbare Takt 
bei 100kHz.

Aber was solls, das ist schon reichlich schnell (fast 10x schnell als 
eine serielle Übertragung mit 9600Baud.


mfg

Michael S.

von Fridolin O. (muebau)


Lesenswert?

Hi,
vielen Dank fuer die Ausfuehrungen.

Dann scheint es ja das Richtige zu sein.

Zu den 9600 Baud und dem 3.xxxx Takt:

Laut Beschreibung soll ich ja einen 4 MHz Quarz verwenden. Dieser wuerde 
mir 100 KHz I2C Takt zur Verfuegung stellen.
Die 9600 Baud wollte ich auf 19200 erhoehen indem ich in der *.h das 
#define auf 19200 stelle. Stehen mir da Probleme bevor?

muebau

von Michael S. (Gast)


Lesenswert?

Hallo Fridolin,

eine Baudrate von 19200 Baud sollte keine Probleme bereiten.

Allerdings stellt das Programm vermutlich nicht die dauerhafte Lösung 
Deines Problemes dar:
Denn Du wirst ja nicht ständig am Terminal sitzen und "TWI-Kommandos" 
eintippen wollen, um dem Sensor Messwerte zu entlocken.

Wenn Du den richtigen Weg gefunden hast, wie Du den Sensor in Deine 
Dienste nehmen kannst, dann wirst Du wohl oder übel ein Programm 
schreiben müssen, das selbstständig den Slave adressiert, Messwerte 
abholt und dann irgendwie weiterverarbeitet.

mfg

Michael

von Fridolin O. (muebau)


Lesenswert?

Hi,
ich hatte genau das vor. Messwert holen und das Ergebnis in Software 
auswerten. Dies entsprechend schnell (ca. 50-100/s).

Siehst du hier ein Problem?

Wenn ich mich nicht irre scheint der BMA020 auch "Trigger" zu 
unterstützen. Sollte es eng mit dem Timing werden so würde es auch 
genügen die "Trigger" geschickt zu setzen und sich von dem BMA020 die 
Werte schicken zu lassen, so der Fall eintritt.

Das mit dem I2C ist dann doch Neuland für mich.

muebau

von Fridolin O. (muebau)


Lesenswert?

Hi,
nachdem ich den Atmega8 mal aufgebaut habe und die RS232 auf 19200 Baud 
gesetzt habe geht das schon ganz gut.

Schalte ich das Echo aus und verwende ++ für die Anfragen sollte das 
gehen. Ich warte mal auf das Eintreffen des BMA020.

muebau

von G. S. (varda)


Lesenswert?

I2C Anschaltung an den PC ....

warum den Umweg über RS232 gehen ?

Geht doch viel einfacher.

http://www.harbaum.org/till/i2c_tiny_usb/index.shtml


Läuft prima unter Windows und Linux. Nativer I2C Speed > 100kHz möglich, 
gute API vorhanden und im Selbstbau für ein paar Euro zu haben.

von Fridolin O. (muebau)


Lesenswert?

Hi,
nun die Möglichkeit der Funkübertragung ist nicht optional. Bis jetzt 
mache ich das mit dem BTM-222 (siehe oben).

Dies führte zu der Notwendigkeit der Wandlung von I2C auf RS232.

muebau

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.