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
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 busy und ich weis nicht wieso, versuch jetzt auch immer wieder den bus neu zu initialisieren
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.
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
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.
aber mit den teilnehmern getrennt funktioniert ja alles ohne probleme, also mit einem teilnehmer, egal welchen
Hallo, kannst du den Bus mit einem Oszi beobachten? Dort muesste ja ein Unterschied zu sehen sein, wenn die Teilnehmeranzahl varriiert!? Gruss
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?
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
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..
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.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.