Forum: Mikrocontroller und Digitale Elektronik MCP23017 und Arduino Nano


von Name (Gast)


Lesenswert?

Ich habe momentan 7 MCP23017 an einem Arduino Nano (für einen 
RGB-LED-Würfel).Das Problem was ich nun habe ist, dass anfangs bei den 
ersten Tests alles lief. Nun können zwei MCP23017 nicht mehr 
angesprochen werden. Auf einem Steckbrett laufen sie aber. Die 
Verkabelung hab ich jetzt schon mehrmals überprüft.Hab allerdings den 
Reset-Pin nicht angeschlossen.Hat jemand ne Idee warum bei gleicher 
Beschaltung, gleichem Code und funktionierenden ICs trotzdem zwei nicht 
ansprechbar sind?

von Falk B. (falk)


Lesenswert?

Name schrieb:
> Ich habe momentan 7 MCP23017 an einem Arduino Nano (für einen
> RGB-LED-Würfel).Das Problem was ich nun habe ist, dass anfangs bei den
> ersten Tests alles lief. Nun können zwei MCP23017 nicht mehr
> angesprochen werden. Auf einem Steckbrett laufen sie aber. Die
> Verkabelung hab ich jetzt schon mehrmals überprüft.Hab allerdings den
> Reset-Pin nicht angeschlossen.

Das klingt nicht gut. Der baumelt der in der Luft, in Fachkreisen 
"floating input" genannt und macht je nach Wetterlage einen Reset. Klemm 
den auf ein festes Potential. Bei ALLEN ICs!

von S. Landolt (Gast)


Lesenswert?

Aus dem Datenblatt:
"RESET 18 14 I Hardware reset. Must be externally biased."

von Christian S. (roehrenvorheizer)


Lesenswert?

Der Reset sollte immer mittels einem Widerstand beschaltet sein. 
CMOS-Eingänge niemals offen lassen!

Schöne Feiertage!

von Einer K. (Gast)


Lesenswert?

Name schrieb:
> Hat jemand ne Idee warum bei gleicher
> Beschaltung, gleichem Code und funktionierenden ICs trotzdem zwei nicht
> ansprechbar sind?

Mein Glaskugel sagt: Das typische I2C Problem
Ja, die Verbindungen sind länger/anders und darum reichen die internen 
Pullup nicht.

von Name (Gast)


Lesenswert?

Hab jetzt testweise den reset pin einer der ICs die nicht ansprechbar 
sind mit 1k auf 5v gelegt. Trotzdem lässt er sich immer noch nicht 
ansprechen. Der IC ist sogar der der am wenigsten kabelweg hat und die 
anderen weiter weg liegen funktionieren daran kann es also nicht liegen

von Einer K. (Gast)


Lesenswert?

Name schrieb:
> daran kann es also nicht liegen
Offensichtlich hast du nur unwesentlichste meiner Ansage verstanden.

Zumindest ist dir die verdeckte Frage zu den Pullup durch die Lappen 
gegangen.

Tipp:
Ausblenden ist nicht immer zielführend.

von Name (Gast)


Lesenswert?

SDA und SCL sind über 2,4k mit 5v verbunden falls du das meinst. Statt 
"verdeckte fragen" zu stellen kannst du auch einfach so eine frage an 
deinen text anhängen. Das macht die sache vermutlich einfacherer

von Karl M. (Gast)


Lesenswert?

@TO,

wie lang ist dein I2C Bus, mit welcher Frequenz läuft er und wie groß 
ist seine Kapazität [F]?

Es gibt dafür jeweils maximale Werte, die auch nicht, für sich alleine, 
erreicht werden müssen.

von S. Landolt (Gast)


Lesenswert?

Also ich beschreibe mal, wie ich das Ganze verstanden habe (und bin 
ziemlich sicher, dass es sich so nicht verhält):

- Arduino & Steckbrett mit 7 MCP: lief (trotz offener RESETs)
- Arduino & Platine mit 7 MCP (in Fassungen!): lief
- jetzt plötzlich laufen bei Letzterem 2 der MCP nicht
- setzt man diese beiden MCP zurück auf das Steckbrett, laufen sie
- einen einzigen RESET auf der Platine auf Vcc zu legen bringt nichts

von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

dann müßte eigentlich alles korrekt sein. Pullups und Reset sind OK.
Die Adresseingänge sind bestimmt auch korrekt angeschlossen?
Jedes IC erfreut sich an einem eigenen keramischen Abblockkondensator?

Hast Du mal bei eingeschalteter Schaltung Reset ausgelöst an den MCPs?
"The maximum VDD rise time is specified in Section 2.0 “Electrical 
Characteristics”."

Schöne Feiertage!

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

> Schöne Feiertage!

Zürcher (simmer froh, simmer Zürcher!) - Berchtoldstag? Also ich hier im 
Schwarzwald sehe nur noch den Dienstag vor mir, selbst Dreikönig fällt 
auf einen Sonntag.

von Christian S. (roehrenvorheizer)


Lesenswert?

Schöne normale Wintertage zwischen Weihnachten und Neujahr, auch wenn 
Werktage dabei sind!

MfG

von MiWi (Gast)


Lesenswert?

Name schrieb:
> Hab jetzt testweise den reset pin einer der ICs die nicht ansprechbar
> sind mit 1k auf 5v gelegt. Trotzdem lässt er sich immer noch nicht
> ansprechen. Der IC ist sogar der der am wenigsten kabelweg hat und die
> anderen weiter weg liegen funktionieren daran kann es also nicht liegen

Ach ja, daran kann es nicht liegen... hast Du schon einmal mit dem Oszi 
und einem richtig angeschlossenen Tastkopf so eine Leitung angeschaut - 
dann wenn der Clk wackelt?

Ja?



Und wie es daran liegen kann... ausreichendes Klingeln auf den langen 
Leitungen und fertig ist das Problem.

iaW:
welche IC2-Clk benutzt Du?
wie lang sind die I2C-Leitungen?
wie sieht die Masseführung aus?
wo sind die Pullupwiderstände platziert?
und welchen Wert haben die?

von Roth (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Offensichtlich hast du nur unwesentlichste meiner Ansage verstanden.

Nö. Die war einfach falsch. Weil du -oft- keine ahnung hast. Unt 
trotzdem den Mund nicht halten kannst. Woran liegt das, Kindheitstrauma?

von Stoer P. (stoerpeak)


Angehängte Dateien:

Lesenswert?

S. Landolt schrieb:
> - Arduino & Steckbrett mit 7 MCP: lief (trotz offener RESETs)

Wenn die Port-Expander MCP23017 ohne beschalteten Reset-Pin laufen, 
dürfte das reiner Zufall sein. Die Lernkurve habe ich schon durch, z.B. 
alle Resets miteinander verbunden aber vergessen sie an "high" zu legen. 
Da haben dann manche funktioniert und manche nicht. Beim abgebildeten 
Projekt liegen sie fest auf 5V und das I2C läuft problemlos trotz wilder 
Verdrahtung.

von MiWi (Gast)


Lesenswert?

Stoer p. schrieb:
> S. Landolt schrieb:
>> - Arduino & Steckbrett mit 7 MCP: lief (trotz offener RESETs)
>
> Wenn die Port-Expander MCP23017 ohne beschalteten Reset-Pin laufen,
> dürfte das reiner Zufall sein. Die Lernkurve habe ich schon durch, z.B.
> alle Resets miteinander verbunden aber vergessen sie an "high" zu legen.
> Da haben dann manche funktioniert und manche nicht. Beim abgebildeten
> Projekt liegen sie fest auf 5V und das I2C läuft problemlos trotz wilder
> Verdrahtung.


Nett.

Wie schauen die I2C-Signale und die Versorgung an den jeweiligen IC-Pins 
aus (GND ist der jeweilige Massepin vom IC)?

von Stoer P. (stoerpeak)


Angehängte Dateien:

Lesenswert?

MiWi schrieb:
> Wie schauen die I2C-Signale und die Versorgung an den jeweiligen IC-Pins
> aus

Im Bild sind die Signale am Letzten der sechs Portexpander zu sehen.

von Stefan F. (Gast)


Lesenswert?

Das SCL Signal sieht mir grenzwertig aus. Zu kurze Verweildauer auf 
High. Versuche es mal mit etwas geringerer Taktfrequenz.

von Stoer P. (stoerpeak)


Lesenswert?

Stefanus F. schrieb:
> Das SCL Signal sieht mir grenzwertig aus. Zu kurze Verweildauer auf
> High.

Es ist nicht nur grenzwertig sondern außerhalb der Spezifikation.
Das zeigt wie robust der I2C-Empfang der Expander ist.
Der Clockpuls wird hier gesetzt und wieder gelöscht, ohne Pause 
dazwischen.
Hinzu kommt noch dass die Flanken durch den Aufbau und den 3k3 Pull-Up 
langsam ansteigen.
Laut Datenblatt muss die "Clock High Time" im 100kHz Modus mindestens 
4µs sein, was hier deutlich nicht der Fall ist. Bei den schnelleren Modi 
reichen auch 600ns oder 120ns. Das dürfte der Grund sein, warum der 
Parameter hier wohl nicht so kritisch ist.
Der Testaufbau dient mir momentan nur zum Ausprobieren der Nixie-Röhren.

von Stefan F. (Gast)


Lesenswert?

Stoer p. schrieb:
> Bei den schnelleren Modi reichen auch 600ns oder 120ns.

Und da frage ich mich, woher weiss der Chip, in welchem Modus er ist? 
Dazu habe ich im Datenblatt nichts gefunden.

von Stoer P. (stoerpeak)


Lesenswert?

Stefanus F. schrieb:
> Und da frage ich mich, woher weiss der Chip, in welchem Modus er ist?

Ich vermute dass ihm das egal ist und er intern einfach so schnell wie 
möglich arbeitet.
Wenn ich ihn im 100kHz Bereich betreibe müsste er ja sonst schon bei 
Clockpulsen kleiner 4µs streiken was er aber scheinbar nicht macht.
Die vorgeschriebenen Zeiten werde ich trotzdem wieder korrekt einstellen 
um später unnötige Fehlersuche bei der Weiterverwendung der I2C-Routinen 
zu vermeiden.

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.