Forum: Mikrocontroller und Digitale Elektronik I²C-mehrere Devices an einen Bus-C-Code/Reihenfolge?


von Andreas (Gast)


Lesenswert?

Hallo,

habe eine softwaremäßige Emulation eines I²C-Buses. An einen Bus können
ja bis zu 8 Devices (Temperaturfühler) dran hängen.
Die Funktion, die von bisher einem Temperaturfühler die Werte abfragt,
heißt bei mir "get_temperature();" Darin befinden sich Start,
Stop-Bedinungung, sowie die EMulation des Sendens der Temp.Daten zu
einem LCD-Display über den I²C-Bus.

Wie mache ich das jetzt mit mehreren Devices? Soll ich INNERHALB meiner
get_temperature()-Funktion alle Devices hintereinander ansprechen und,
falls sie ein Ack-Bit schicken, die Werte ans Display schicken
....oder....
soll ich für jedes Device die get_temperature()-Funktion aufrufen, also
wird für jedes DEvice neue Start-Stop-Bedinungen generiert...eigentlich
unsinnig, oder???

von Michael B (Gast)


Lesenswert?

Hi,

du musst für jedes Gerät den kompletten Frame schicken,
da sonst die Arbitrierung nicht funtioniert.

von hebel23 (Gast)


Lesenswert?

Hi Andreas,

genau wie Michael sagt, musst Du schon an alle Devices die komplette
Abfrage schicken, also Start, Adresse, Kommando, Datenempfangen,
Stopp. (Oder so ähnlich) Aber Deine Funktion get_temperature() ist ja
geradezu perfekt geeignet einen Parameter (die Adresse) mitzuübergeben.
So dass Du die nicht für jedes Device extra schreiben musst.

Gruß Andreas

von Sebastian (Gast)


Lesenswert?

Jep, genauso lese ich zwei TMP100 per I2C an einem MSP430 aus. Ich
übergebe als Parameter die I2C-Adresse des Devices und liefere den
double-Wert der Temperatur zurück:

double I2C_Auslesen(char address);

Jedes mal wird das komplette Programm (Start, Init, Auslesen, Stop usw.
gesendet).

von Andreas (Gast)


Lesenswert?

Okay, so werde ichs auch machen, danke :-))))))

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.