Forum: Mikrocontroller und Digitale Elektronik stm32 - mehrere i2c teilnehmer


von peter m. (bastler788)


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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Was sind denn das für Teilnehmer und wie ist dein Bus 
angeschlossen/terminiert? Hast du Pegelwandler oder betreibst du den Bus 
mit 3,3 Volt?

von Frank M. (frank_m35)


Lesenswert?


von peter m. (bastler788)


Lesenswert?

der bus ist busy und ich weis nicht wieso, versuch jetzt auch immer 
wieder den bus neu zu initialisieren

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Frank M. schrieb:
> Vielleicht:
> http://dsscircuits.com/articles/effects-of-varying...

Kann gut sein. Zumal in den unteren Screenies ja mit vollen 5 Volt 
gearbeitet wird, bei den oberen mit 3V3 sieht das ja noch schlechter 
aus. Aber solange der TE keine Fragen beantwortet, werden wir das nicht 
rausfinden.

von peter m. (bastler788)


Lesenswert?

Matthias Sch. schrieb:
> Was sind denn das für Teilnehmer und wie ist dein Bus
> angeschlossen/terminiert? Hast du Pegelwandler oder betreibst du den Bus
> mit 3,3 Volt?

der bus ist über pull ups an 5V und die teilnehmer ist ein mcp3422 ad 
wandler und ein port expander pcf

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

von peter m. (bastler788)


Lesenswert?

aber mit den teilnehmern getrennt funktioniert ja alles ohne probleme, 
also mit einem teilnehmer, egal welchen

von Christoph S. (mixer) Benutzerseite


Lesenswert?

Hallo,

kannst du den Bus mit einem Oszi beobachten? Dort muesste ja ein 
Unterschied zu sehen sein, wenn die Teilnehmeranzahl varriiert!?

Gruss

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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?

von peter m. (bastler788)


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

von STM_ (Gast)


Lesenswert?

Wie wäre es mit Errata Sheet STM32xx lesen.. I2C Teil! I2C Bugs auf dem 
STM32 sind bestens bekannt !Evtl. Massnahmen aus der Appnote übernehmen 
!
Viel Erfolg..

von Frank M. (frank_m35)


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.

von Phantomix X. (phantomix)


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.

von peter m. (bastler788)


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?

von Frank M. (frank_m35)


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.

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.