Moin moin! Ich möchte mehrere Displays über je einen MCP23008 per I²C von meinem Raspberry Pi aus ansteuern. Ich habe eine Platine gebaut, auf der die Expander sitzen und gleich Buchsenleisten angebracht, in die ich die Displays (HD44780 20x4) einstecken kann. Die Displays haben RGB-Hintergrundbeleuchtung, die über einen auch auf dem Board befindlichen PCA9685 (ebenfalls via I²C) gesteuert wird. Leider hindert mich folgendes Problem am Weiterkommen: Wenn ich über den Befehl "i2cdetect -y 1" im Terminal die I²C-Geräte anzeigen lasse, sind mal beide (zwei Chips sind auf dem Board), mal nur einer und meistens aber keiner der MCPs zu sehen. Wenn sie auftauchen, haben sie auch die per Jumper eingestellte Adresse, aber das passiert ja leider meistens nicht. Was ich bereits überprüft habe: Ist der I²C-Bus in Ordnung? - Ja, andere Geräte funktionieren problemlos Ist das Kabel zur Platine in Ordnung? - Höchstwahrscheinlich, da der PCA9685 immer erkannt wird. Ist der RESET-Kontakt (denkt euch nen Strich drüber) des MCP23008 auf HIGH? - Grundsätzlich sollte er das sein, kann es leider nicht nachmessen, da mein Multimeter leer ist. Auf dem Breadboard ganz sicher. Sind irgendwelche Leiterbahnen defekt? - Nicht auszuschließen, aber auf dem Breadboard tritt das gleiche Problem auf. Kalte Lötstellen vorhanden? - siehe vorheriger Punkt Was ist mit dem INT-Kontakt? - Eigentlich nicht verbunden, habe aber das Gefühl, dass es etwas besser geht, wenn er auf GND liegt. Mir ist aufgefallen, dass scheinbar alle Geräte unter Spannung (120 V) zu stehen scheinen. Wenn ich das Gehäuse meines Displays, das HDMI-Kabel, den Raspberry Pi oder einen beliebigen +5V oder GND Kontakt meiner Platine(n) mit etwas empfindlicherer Haut (Nein, nicht das, was ihr jetzt denkt) berühre, kann ich einen leichten bis mittleren Stromfluss spüren. Soll ja angeblich nicht schlimm sein und häufig vorkommen, aber kann es sein, dass es dem PCA9685 egal ist, während die MCPs aber davon gestört werden? Habe allerdings noch vier mal den MCP23016 dranhängen und die funktionieren wunderbar. So, ich hoffe das war ausführlich und klar genug... ;) Bin für sämtliche Ratschläge dankbar! Viele Grüße Marlon
120V können es nicht sein, das hält diese Electronik nicht aus.
Wenn ich mich richtig erinnere, dann hat der Raspi nur sehr schwache Pullups an den I²C-Leitungen. Damit könnte evtl. der Anstieg für die MCPs zu langsam sein, der PCF schaltet etwas früher und geht damit noch... Mach halt testweise mal an SCL und SDA jeweils 5k nach Vcc und kuk ob es hilft, dauert keine 2 minuten und ist ne idee wert....
Danke das wäre ne Idee... Aber die Chips werden ja mit 5V betrieben, während der Raspberry Pi nur 3,3V an seinem Bus verträgt. Habe mal gelesen, dass man keine zusätzlichen Pullups verwenden darf, wenn man mit 5V-Geräten arbeitet. Hab mir schon LogicLevel-Converter bestellt, brauchen aber noch ca. 2 Wochen. Fachmann schrieb: > 120V können es nicht sein, das hält diese Electronik nicht aus. Doch, das ist wie gesagt sehr häufig so. Hat was damit zu tun, dass das Gerät nicht geerdet ist, viel mehr weiß ich auch nicht. Da es quasi statisch ist, macht es den Geräten nix aus. Kannst ja mal dein Handgelenk an das Gehäuse einer Mikrowelle (wenns aus Metall ist) halten, dann weißt du was ich meine. Ist halt nur ein schwaches Kribbeln, da der Strom meist im µA-Bereich bleibt.
Das mit den 5V an den Chips macht die Sache nicht besser. Mach die Pullups von SDA und SCL nach 3,3 V (gibts ja auch am Raspi header)
Wie wäre es, wenn Du mal Deinen Schaltplan hier postest? Sonst kann man nur raten, was die Ursache sein kann: - Abblockkondensatoren vergessen - Stromversorgung zu gering? - 5V an 3V? - Mehrere Bauteile auf gleicher I2C Adresse Marlon S. schrieb: > Habe mal > gelesen, dass man keine zusätzlichen Pullups verwenden darf, wenn man > mit 5V-Geräten arbeitet. Dann schau Dir das Datenblatt an und glaube nicht irgendwelchem Geschreibsel im Internet :-)
:
Bearbeitet durch User
Du kannst einen PCA9517A zwischen PI und Deiner Schaltung setzen. Das ist ein Level-Translating I2C Bus Repeater", d.h. der vermittelt zwischen 3.3V des PI und den 5V vom Rest, und er enthält Buffer und entlastet die schwachen Ausgänge des PI. fchk
Als Levelshifter reichen im Normalfall zwei MOSFETs und vier Pullups Hier ( http://www.adafruit.com/datasheets/an97055.pdf ) auf Seite 10 wird gezeigt wie ....
Pete K. schrieb: > Wie wäre es, wenn Du mal Deinen Schaltplan hier postest? > > Sonst kann man nur raten, was die Ursache sein kann: > - Abblockkondensatoren vergessen > - Stromversorgung zu gering? > - 5V an 3V? > - Mehrere Bauteile auf gleicher I2C Adresse Nen konkreten Schaltplan hab ich leider nicht, weil ich das Layout direkt mit SprintLayout gemacht habe... Abblockkondensatoren habe ich in der Tat nicht verbaut, das wollte ich "nachträglich" noch machen. Allerdings ist mir nicht so ganz klar, wo man die dann setzen muss und vor allem was für Werte die haben müssen. Stromversorgung ist mehr als ausreichend, wird alles über nen 4-Pin MOLEX-Stecker und ein 60W-Netzteil versorgt. Der Raspberry Pi hat aber sein eigenes Netzteil. Habe keine Pullups an 5V gelegt, daher sollten auf dem Bus nur 3,3V liegen. Kann es wie gesagt gerade nicht nachprüfen...Ist ein größerer oder kleinerer Widerstand besser für das Signal? Jeder zusätzliche Pullup verringert ja den Gesamtwiderstand. Gleiche I²C-Adresse ist nicht das Problem, da hab ich drauf geachtet. Philipp M. schrieb: > Ggf. die i²c Frequenz mal runtersetzen. Das werd ich gleich mal ausprobieren! Frank K. schrieb: > Du kannst einen PCA9517A zwischen PI und Deiner Schaltung setzen. Das > ist ein Level-Translating I2C Bus Repeater", d.h. der vermittelt > zwischen 3.3V des PI und den 5V vom Rest, und er enthält Buffer und > entlastet die schwachen Ausgänge des PI. Das hört sich ja ziemlich gut an! Ich glaub, den bastel ich mir dann direkt an die Hauptplatine vor die I²C-Anschlüsse, da ich vom Raspi abgesehen sowieso eigentlich nur mit 5V arbeite Ich hab in den Anhang mal nen Screenshot von SprintLayout hochgeladen, vielleicht kann man damit wenigstens ETWAS anfangen... Die blauen Hauptleitungen sind von links nach rechts [+5V,SDA,SCL,GND]. Die rechten grünen Leitungen kommen vom PCA und steuern die Beleuchtung. Die blaue Seite ist die, auf die man von oben draufguckt. Der MCP ist gespiegelt, weil er auf der anderen Seite sitzt!
Abblockkondensatoren gehören so dicht wie möglich an alle VDD-Pins des bauteils. Wenn nicht anders erwähnt reichen 100nF Kerkos. Hast Du beide GND-Stränge von Raspi-Netzteil und separater Versorgung verbunden? Wenn nicht könnte das die unterschiedliche Potenzialdifferenz erklären. Auf Deinem Layout-Bild sieht man leider nix. Schaltplan muss her. 60W Netzteil? Na hoffentlich wird das nicht zu gering belastet...
Hi, Die PCA9685 sind mit 5V versorgt, korrekt? In dem Fall hast du folgendes Problem: Logisch HIGH erkennt der PCA9685 spätestens ab 0,7VCC (High Level Input voltage, S37): VIH = 0,7*VDD = 0,7*5V = 3,5V Du gibst im 3,3V, brauchen tut er aber > 3,5V, damit er sicher ein HIGH erkennen kann. Das ist zu wenig. Manchmal reichts dann gerade noch (Reserven der Hersteller) manchmal nicht. --> die oben erwähnten Pegelshifter sind nötig, außer der Raspberry PI hat 5V-tolerante Eingänge (muss im Datenblatt stehen). Dann täten es Pullups auf 5V auch.
Ich würde (wenn du wirklich keine mosis hast) testweise den MCP auch aus 3,3 V versorgen (auch wenn das Disp dann vlt. nicht gut lesbar ist). Er sollte dann immer auftauchen beim suchen.....
Marlon S. schrieb: >Das hört sich ja ziemlich gut an! Ich glaub, den bastel ich mir dann >direkt an die Hauptplatine vor die I²C-Anschlüsse, da ich vom Raspi >abgesehen sowieso eigentlich nur mit 5V arbeite Bevor du dich in weitere Basteleien stürtzt, solltest vielleicht die Erratas des MCP23008 lesen. http://ww1.microchip.com/downloads/en/DeviceDoc/80251A.pdf
Ich hoffe mal das die Adresspins A0 bis A2 nicht offen in der Luft rumhängen.
Hi, sorry, dass ich mich erst so spät wieder melde! Hatte heute viel um die Ohren... Pete K. schrieb: > Abblockkondensatoren gehören so dicht wie möglich an alle VDD-Pins des > bauteils. Wenn nicht anders erwähnt reichen 100nF Kerkos. 100 nF hab ich leider nicht... Hab nur einige im pF-Bereich, ne 1000er Großpackung mit verschiedensten Werten ist aber unterwegs. Pete K. schrieb: > Hast Du beide GND-Stränge von Raspi-Netzteil und separater Versorgung > verbunden? Wenn nicht könnte das die unterschiedliche Potenzialdifferenz > erklären. Ja, das könnte sein. Als Lösung könnte ich ja einfach auf der Hauptplatine die 5V und GND-Leitungen verbinden, oder? Theroretisch könnte ich eigentlich auch den Raspi über die Hauptplatine versorgen und mir das Handy-Netzteil sparen... Pete K. schrieb: > 60W Netzteil? Na hoffentlich wird das nicht zu gering belastet... Das regelt sich selbst, soweit ich weiß... Hat auch nur 2A für 12V und 2A für 5V, hab das mit nem anderen verwechselt. Humpfdidumpf schrieb: > Die PCA9685 sind mit 5V versorgt, korrekt? > In dem Fall hast du folgendes Problem: > > Logisch HIGH erkennt der PCA9685 spätestens ab 0,7VCC (High Level Input > voltage, S37): > VIH = 0,7*VDD = 0,7*5V = 3,5V > > Du gibst im 3,3V, brauchen tut er aber > 3,5V, damit er sicher ein HIGH > erkennen kann. Das ist zu wenig. Manchmal reichts dann gerade noch > (Reserven der Hersteller) manchmal nicht. Der PCA funktioniert ja ohne Probleme, deswegen wunderte ich mich, dass es die MCPs nicht tun. Aber ich tippe auch auf den Pegel. Max D. schrieb: > Ich würde (wenn du wirklich keine mosis hast) testweise den MCP auch aus > 3,3 V versorgen (auch wenn das Disp dann vlt. nicht gut lesbar ist). Er > sollte dann immer auftauchen beim suchen..... Hab ein paar rumliegen, die sich auch mit geringen Pegeln schalten lassen, aber als Fertigchip finde ich's irgendwie handlicher, da warte ich dann halt noch ein bisschen. Testweise mal auf 3,3V runterschalten würde allerdings vielleicht etwas mehr Klarheit verschaffen, werd ich morgen mal machen. Irgendwer schrieb: > Ich hoffe mal das die Adresspins A0 bis A2 nicht offen in der Luft > rumhängen. Die hängen entweder an Vdd oder GND, da hab ich drauf geachtet ;) Vielen Dank für die vielen anregenden Antworten! Hatte (und habe) heute leider absolut keine Zeit, deshalb werd ich mich erst morgen dransetzen können...
Marlon S. schrieb: > Als Lösung könnte ich ja einfach auf der > Hauptplatine die 5V und GND-Leitungen verbinden, oder? NEEEIIIINNN!!! Das gibt einen Kurzschluss! Du musst die beiden GND-Pole (also 3V3 GND mit 5V GND) miteinander verbinden! Kondensatoren (100nF) nicht vergessen. Wo bleibt der Schaltplan?
:
Bearbeitet durch User
Ich habe 2 x MCP23017 auf einem Shield (kostet 12 GBP als Bausatz von ModMyPi-Shop in UK), das auf dem Raspi sitzt und mit 3 V betrieben wird (120V???) . Es gab keinerlei (elektrische) Probleme, die MCP's erscheinen als 0x20 und 0x21.
Hi, die MCP23008 haben das gleiche Problem, nur noch viel schlimmer: VIH=0,8VDD = 4V Datenblatt S24 Du wirst das bei den PCA9685 aber auch lösen müssen. Selbst wenn es momentan durch reines Glück geht hat das folgende Nachteile: 1. Beim I2C werden die parasitären Kapazitäten der Schaltung mit den Pullups geladen d.h. es geht asymptotisch gegen 3V3. Die Kurve ist gegen die 3V3 oben dann schon sehr flach. Umso höher die Schaltschwelle (die wird bei de PCA schon fast bei 3.3V sein), desto größer die Verzögerung. --> mögliche Timingprobleme, Jitter etc. 2. Störabstand: Der Abstand der Schaltschwelle zum HIGH-Pegel ist nur noch im mV bereich. Ein winziger "Hupfer" auf SCL/SDA (ein Handy klingelt...), eine Flanke wird erkannt. Es wird sehr störempfindlich werden. 3. Exemplarstreuung. Nimmt man einen IC aus einer andern Charge, wird es vielleicht nicht mehr passen -> Problem beim reparieren / nachbauen. Es ist "out of spec", das macht man nur, wenn man sich sehr sicher ist :-).
Pete K. schrieb: > Marlon S. schrieb: >> Als Lösung könnte ich ja einfach auf der >> Hauptplatine die 5V und GND-Leitungen verbinden, oder? > > NEEEIIIINNN!!! Das gibt einen Kurzschluss! Sorry, ich hab das wohl missverständlich formuliert :D Ich meinte natürlich 5V und GND vom Handynetzteil jeweils mit 5V bzw. GND vom anderen Netzteil verbinden! Sooo blöd bin ich dann doch nicht :D Den Schaltplan mach ich vielleicht noch heute Abend, hab im Moment leider nicht so viel Zeit... Humpfdidumpf schrieb: > die MCP23008 haben das gleiche Problem, nur noch viel schlimmer: > > VIH=0,8VDD = 4V > > Datenblatt S24 > > Du wirst das bei den PCA9685 aber auch lösen müssen. Selbst wenn es > momentan durch reines Glück geht hat das folgende Nachteile: > > 1. > Beim I2C werden die parasitären Kapazitäten der Schaltung mit den > Pullups geladen d.h. es geht asymptotisch gegen 3V3. Die Kurve ist gegen > die 3V3 oben dann schon sehr flach. Umso höher die Schaltschwelle (die > wird bei de PCA schon fast bei 3.3V sein), desto größer die Verzögerung. > --> mögliche Timingprobleme, Jitter etc. > > 2. > Störabstand: > Der Abstand der Schaltschwelle zum HIGH-Pegel ist nur noch im mV > bereich. Ein winziger "Hupfer" auf SCL/SDA (ein Handy klingelt...), eine > Flanke wird erkannt. Es wird sehr störempfindlich werden. > > 3. > Exemplarstreuung. Nimmt man einen IC aus einer andern Charge, wird es > vielleicht nicht mehr passen -> Problem beim reparieren / nachbauen. > > Es ist "out of spec", das macht man nur, wenn man sich sehr sicher ist > :-). Danke für die gute Erklärung! :) Werde es erstmal mit 3,3V ausprobieren und bestell mir dann bei Reichelt den Repeater. Muss aber erst noch ein paar mehr Sachen finden, sonst lohnt sich das Porto nicht...
Ich habe jetzt übrigens die 5V-Leitung der Hauptplatine mit dem GPIO-Header verkabelt und auch gleich noch den Touchscreen an den 12V-Port der Hauptplatine angeschlossen. Jetzt läuft alles über ein Netzteil und die 120V "Störspannung" sind annähernd weg. Selbst am Handgelenk kein Kribbeln mehr, vorher tat es schon fast ein bisschen weh. Denke, das hat einfach daran gelegen, dass ich drei Netzeile miteinander verbunden (Kommunikationsleitungen, HDMI) hatte, die GND-Leitungen aber keinen direkten Kontakt hatten und eins von den beiden weggelassenen sehr minderwertige Qualität hatte. Und siehe da! Die MCPs werden jetzt auch ohne Probleme erkannt! Werde mir aber trotzdem über kurz oder lang nen Repeater zulegen, um auch mit meinem Arduino kommunizieren zu können. Nochmals vielen Dank für die lehrreichen Antworten! An alle, die ein ähnliches Problem haben: Die Beiträge oben bieten sehr gute Lösungsansätze und ihr solltet sie auf jeden Fall berücksichtigen. Allerdings könnte es auch schlicht und ergreifend an einer massiv gestörten Spannungsversorgung liegen ;)
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.