PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C... bitte noch mal genau



siroks
02.01.2008, 14:09
Hey,
Also, ich habe mir jezt einige Artikel im Wissensbereich angeschaut, aber irgendwie immer noch nicht so ganz geblickt, wie ich mehrere Geräte per I2C anschließe, und getrennt anspreche. Wie ist zum beispiel eine Kommunikation zwischen RN-control und RN-Mega8 per i2c möglich, wo gleichzeitig noch ein kompassmkodul dranhängt?

mfg Olaf

PicNick
02.01.2008, 14:46
Ganz simpel, wie in der Schule
Der Lehrer (Master) spricht, alle Schüler (Slaves) hören zu
Zuerst kommt immer ACHTUNG (Start), dann der Name (Adresse), dann die Nachricht und dann STOP
Dadurch weiss jeder wer gemeint ist und wer nicht. Und nur der Angesprochene gibt Antwort oder tut was. Alle anderen warten, bis wieder mal START kommt.

oberallgeier
02.01.2008, 16:20
Hallo PicNick, hallo siroks,


Ganz simpel, wie in der Schule ...... das ist recht trivial. Ich muss sagen, dass es mir genauso wie siroks geht - schlimmer: ich bin tagelang über I2C und TWI gesessen und ich habe es noch immer nicht geschafft einen kurzen String oder drei, vier getrennte Werte vom Master an einen Slave zu senden oder umgekehrt. Dabei habe ich zwar vorzugsweise das ganze softwaremässig versucht, aber das sollte keine so grosse Rolle spielen. Ich habe ETLICHE Beispiele durchgekaut, hatte alles nix geholfen - es scheint doch ein Vorgehen zu sein, das mit so allgemeinen Hinweisen NICHT erklärt ist.

PicNick
02.01.2008, 16:33
Jetzt machst du mich betroffen. WAS ist so geheimnisvoll ? wie das TWI technisch funktioniert oder wie man das programmiert ?

siroks
02.01.2008, 16:42
ja schön,... Aber woher weiß ich wie die Schüler heißen, bzw. die Adressen der Slaves?

PicNick
02.01.2008, 17:00
Versuchen wir's

TWI Part I
Die Adressen weißt du, weil jeder I2C-Chip das in der Beschreibung stehen hat. Ist wie mit einer Internet URL. Die MUSST du wissen, sonst geht nix.

Der Kompass hat zB normalerweise die Adresse &HC0 (192)
Der LM75 (Temperatur) hat z.B &H90 (144)
Bei manchen der I2C Geräte kann man die Adresse auch ändern bzw. modizieren

Genaugenommen hat jeder I2C Chip aber zwei Adressen:
bei der geraden adresse ( &HC0) will man was zum Slave schicken,
bei der ungeraden ( &HC1) will man vom gleichen Gerät Daten abholen.
(in den Beschreibungen steht aber immer nur die gerade adresse)

ein Sonderfall ist die Adresse &H00 (0). Das ist eine "Broadcast"-Adresse, d.h. das geht an alle (aber nicht alle hören darauf)
beim TWI-Protocol heißt das "GENERAL CALL"

Schreiben oder Lesen:
Der Master schreibt IMMER (Start) und die Adresse, erst danach ist ein Unterschied.
Beim Schreiben schickt er den Takt und die Daten
Beim Lesen schickt er nur den Takt und liest die Daten

(to be continued)

siroks
02.01.2008, 17:43
das klingt doch mal toll....also sind die 8bit-adressen als 2stellige Hex-Zahl angegeben........das hatte mich bishersehr verwirrt.....
danke

(Bei den Rn-Boards ist die Adresse auch angegeben?)


mfg Olaf

PicNick
02.01.2008, 17:49
Ja, da gibt's Listen
https://www.roboternetz.de/wissen/index.php/RN-Slave_ID_%C3%9Cbersicht

siroks
02.01.2008, 17:58
wo sehe ich jezt, welche die richtige Adresse fürs RnMega8 ist?

PicNick
02.01.2008, 18:06
Der RnMega8 (und auch jeder andere µC) ist frei programmierbar, d.h. wenn man ihm die TWI-Slave Funktionen einbaut, kann man (muss man) sich die Adresse völlig frei aussuchen.
Es liegt dann an dir, dem Programmierer des TWI-Masters die Adresse auch mitzuteilen (bist du wahrscheinlich eh selber).

In der Praxis heißt das, du siehst, was du schon für Geräte am Bus hast und welche adressen die haben, und nimmst dann irgendeine Hausnummer, Hauptsache, es kann keine Verwechslung geben.

siroks
02.01.2008, 22:33
klingt logisch...danke

oberallgeier
04.01.2008, 15:40
Grüß Dich, PicNick,

erstmal alles Gute im Neuen Jahr. Und dann gleich herzlichen DANK für Deine Erklärungen - jetzt weiss ich z.B. dass eben
jeder I2C Chip aber zwei Adressen hat.


Jetzt machst du mich betroffen. WAS ist so geheimnisvoll ? wie das TWI technisch funktioniert oder wie man das programmiert ?Wie es technisch funktioniert, weiss ich (dachte ich bisher). Nur die Programmiererei bekam ich nicht hin.

Ich werde erstmal meine aktuelle Arbeit fertigstellen und mich hier später nochmal melden - irgendwie werd ich das schon in meinen Kopf bekommen :)