stm32 - mehrere i2c teilnehmer

OP #3101390
Lesenswert?

hallo,

ich habe drei i2C teilnehmer, habe ich immer nur ein i2c teilnehmer 
angeschlossen dann funktioniert es ohne probleme. aber sobald ich mehr 
als einen anschließe funktioniert der i2c nimmer.
ich hab jetzt herrausgefunden dass das SB bit im SR1 nicht gesetzt wird 
nachdem ich die Start Condition gesendet habe. weis jemand woran das 
liegen könnte? die adressen der i2C teilnehmer sind unterschiedlich
(Firma: matzetronics) #3101454
Lesenswert?

Mit zu starken Pullups ist das ACK des angesprochenen Teilnehmers evtl. 
zu hoch, so das es vom STM nicht als low erkannt wird, dieser ist ja in 
3V3 Technik, und erkennt ein Low bei max. 0,3VDD (Datenblatt des 
STM32F4, Table 44, CMOS Input), bzw. bei max. 0,8 Volt bei einem TTL 
Input. Mit zu schwachen Pullups werden die Flanken nicht steil genug 
sein, siehe die Screenies von Frank M.
(Firma: matzetronics) #3101502
Lesenswert?

peter müller schrieb:
> aber mit den teilnehmern getrennt funktioniert ja alles ohne probleme,
> also mit einem teilnehmer, egal welchen

Das bedeutet eben, das du an 'der Kippe' bist, entweder mit 
Buskapazitäten (Flankensteilheit) oder mit Pegeln. Jeder Teilnehmer 
addiert da ein wenig Last. Ist das ein 400kHz Bus oder beschränkst du 
dich auf 100kHz oder weniger?
OP #3101548
Lesenswert?

Matthias Sch. schrieb:
> peter müller schrieb:
>> aber mit den teilnehmern getrennt funktioniert ja alles ohne probleme,
>> also mit einem teilnehmer, egal welchen
>
> Das bedeutet eben, das du an 'der Kippe' bist, entweder mit
> Buskapazitäten (Flankensteilheit) oder mit Pegeln. Jeder Teilnehmer
> addiert da ein wenig Last. Ist das ein 400kHz Bus oder beschränkst du
> dich auf 100kHz oder weniger?

also als clock speed hab ich 100kHz. hab jetzt festgestellt wenn ic alle 
teilnehmer angeschlossen hab und nur den programm code auskommentiere 
dass dann der andere Teilnehmer funktioniert
#3101568
Lesenswert?

Du rückst ja auch nicht mit Infos raus, weder Hardwareaufbau noch 
Softwarecode. Wir wissen, dass es bei einem funktioniert, bei allen 
angeschlossen aber nicht. Nur daraus wird man nicht schlauer.

Gibt es einen Grund, dass du die ICs mit 5V betreibst, obwohl der STM 
mit 3.3V läuft (oder?) Hast du versucht sie einmal mit 3.3V anzusteuern?
Welchen Widerstandswert hast du momentan? Hast du schon einmal einen 
anderen probiert?
Oder eben ein Softwarefehler, nur wäre das ein komischer bei dem wir dir 
wohl kaum helfen können. Da heist es dann, nur I2C implementieren sodass 
es mit allen ICs gleichzeitig funktioniert und nach und nach Dinge 
dazupacken bis es nicht mehr funktioniert.
#3101569
Lesenswert?

Bitte tu folgendes:

- Klemm alle Slaves an den Bus

- Schau dir den Bus mit einem Oszi an
Nur so kannst du sicher sein, dass die Signale dort überhaupt etwas mit 
I2C zu tun haben.

- Nimm alle Sende- und Empfangsgeschichten erstmal raus. Fang an einen 
Slave abzufragen

- Wenn das funktioniert, frag den zweiten ab, usw

- Schau, dass bei vielen Nachrichten noch "Platz" auf dem Bus ist - der 
STM32 als Busmaster sollte das ja prima "steuern" können.
OP #3101605
Lesenswert?

hey,

vielen dank für eure hilfe, aber hab den fehler gefunden. bei der 
initialisierung hatte ich den falschen modus. es gibt bei der standart 
lib die Moden
I2C_Mode_I2C, I2C_Mode_SMBusDevice, I2C_Mode_SMBusHost

hierbei hatte ich I2C_Mode_I2C gewählt. kann mir aber noch jemand sagen 
was die Mode bedeuten? also I2C_Mode_I2C ist denk ich mal so das man nur 
ein i2c device am bus hat, und die anderen mit mehreren i2c devices. 
oder?
#3101860
Lesenswert?

Der SMBus ist ein anderer Bus der halt teils kompatibel mit I2C ist. Der 
richtige Modus für dich um I2C zu verwenden ist es aber nicht. Du 
verwendest nun nicht mehr I2C sondern SMBus
http://www.maximintegrated.com/app-notes/index.mvp/id/476

Du hast einen Fehler, den hast du nun irgendwie umschifft, behoben aber 
noch lange nicht, aber du machst ja auch nichts um den Fehler irgendwie 
finden zu können. Ich frage mich warum du hier überhaupt gepostet hast 
wenn du jegliche Antworten ignorierst und dein Ding einfach weiter 
machst. Komisch.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren