Forum: Mikrocontroller und Digitale Elektronik PCA9685 LEDs glimmen


von Sascha S. (bismosa)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin dabei mir ein kleines Mediencenter mit einem Raspberry 
aufzubauen (Kodi und Squeezeboxserver). Das ganze baue ich mir gerade in 
einen alten DVD-Player ein.
Um mir auch einen Status anzeigen lassen zu können habe ich anstatt des 
Displays 3 RGB-Leds (aus einem alten Led-Strip ausgelötet) eingesetzt. 
Diese möchte ich mit dem "Adafruit 16-Channel 12-bit PWM/Servo Driver - 
I2C interface - PCA9685" (siehe http://www.adafruit.com/products/815 ) 
ansteuern.

Die Leds haben eine gemeinsame Anode. Da ich keine technischen Daten 
hatte habe ich durch probieren die Widerstände so gewählt das ich einen 
Strom von ca. 10mA pro Led habe. Die können zwar wesentlich mehr...aber 
im Wohnzimmer brauche ich das nicht so hell.
Die Leds werden mit 5V versorgt. Der PCA aber nur mit 3,3V.
Nun habe ich den Denkfehler gemacht, das ich ja nur mit dem PCA gegen 
Masse schalten muss um die Leds zu betreiben. Aber ich vermute durch den 
Potentialunterschied 3,3V - 5V glimmen die LED´s bei voll angesteuertem 
PCA.
Einen Schaltplan habe ich angehängt.

Jetzt bin ich am überlegen, wie ich am einfachsten diesen Fehler 
ausbügeln kann. Ich denke wenn ich einen Transistor (ich habe jetzt 
öfter vom BUZ11 gelesen) dazwischen schalte wäre das Problem schon 
erledigt. Da mir der Platz dafür fehlt...und ich ungern durch den ganzen 
Player 20 Kabel zu einer anderen Platine laufen lassen möchte...suche 
ich nach alternativen.

1.) Ist es derzeit schon kritisch für den PCA das die Leds glimmen, wenn 
ich den voll angesteuert habe? Es müsste ja eine etwas höhere Spannung 
von den Leds kommen...
2.) Ich könnte die Leds mit den 3.3V vom Raspberry versorgen. Das 
glimmen ist dann auch fast weg. Klitzekleine Punkte sind dann noch zu 
sehen.
Hat aber den Nachteil, das die 3.3V des Raspberrys schon zu stark 
belastet sind, wenn ich alle Leds gleichzeitig ansteuere. (Ich hatte mal 
was von 55mA gelesen)
3.) Noch höhere Vorwiderstände. Aber da bin ich wieder bei punkt 1.
Ich brauche wirklich nur sehr "dunkle" Leds. Das glimmen würde von der 
Helligkeit schon fast reichen...
4.) Den PCA mit 5V betreiben. Hab ich mich nicht getraut, da ich nicht 
sicher bin was dann auf den SDA/SCL Leitungen passiert. Ich glaube der 
Raspberry darf da nur 3,3V

Welche Tipps könnt ihr mir da sonst noch geben damit ich möglichst 
einfach aus dem Fehler wieder rauskomme?

Danke!

Gruß
Bismosa

von Wolfgang (Gast)


Lesenswert?

Sascha Smolny schrieb:
> Der PCA aber nur mit 3,3V.

Und warum versorgst du den nicht mit 5V? Das wäre doch am einfachsten.

von Sascha S. (bismosa)


Lesenswert?

Wolfgang schrieb:
> Und warum versorgst du den nicht mit 5V? Das wäre doch am einfachsten.

Bekomme ich dann nicht Probleme mit dem I2C Bus und dem Raspberry?

von Frank (Gast)


Lesenswert?

Das ist das gute an I2C (open Collector).
Hänge die Pullups von SDA uns SCK auf 3,3V und beide sehen nur 3,3V.

von Fox Mulder (Gast)


Lesenswert?

Datenblatt lesen, da steht:

-5V tolerant
-Ausgänge können invertiert werden
-Ausgänge können als open-drain geschaltet werden

von Mick (Gast)


Lesenswert?

Du kannst den PCA9685 direkt mit 5V betreiben. Der Raspberry Pi hat auf 
dem I2C Bus (arbeitet mit 3.3V) bereits PullUp Widerstände zugeschaltet. 
Laut Datenblatt (Seite 38, HIGH-level input voltage) erkennt der PCA9685 
einen High Level ab 3.5 V (0.7 * 5V). Ich vermute, die Kommunikation 
gelingt trotzdem.

Ich benutze für RGB LED Lichtanzeigen nur noch die WS2812B. Diese LEDs 
haben eine tolle Farbwiedergabe und können auch direkt am Raspberry Pi 
verwendet werden. Evtl. benötigt man da aber einen zusätzlichen Level 
Converter.

von Wolfgang (Gast)


Lesenswert?

Sascha Smolny schrieb:
> Bekomme ich dann nicht Probleme mit dem I2C Bus und dem Raspberry?

Wenn deine Umgebung nicht arg gestört ist, funktioniert das wie schon 
gesagt. Und ansonst gibt es simple bidirektionale Pegelkonverter für den 
I2C mit nur einem FET (NXP AN10441 Fig.1).
http://www.nxp.com/documents/application_note/AN10441.pdf
http://www.ebay.com/sch/i.html?_nkw=I2C+Logic+Level+Converter

von Sascha S. (bismosa)


Lesenswert?

Hallo!

Vielen Dank für die vielen Antworten!

Nach so vielen gleichlautenden Meinungen werde ich dann versuchen den 
PCA mit 5V zu betreiben.
Ich habe nicht exakt das Board was es von Adafruit gibt...sondern eins 
von deek-robot.com. (Bilder: 
http://www.play-zone.ch/de/dk-16-channel-12-bit-pwm-servo-driver-i2c-interface-pca9685.html 
)
Hier habe ich keinen Schaltplan finden können. Daher habe ich noch nicht 
herausgefunden, ob es überhaupt Pull-Up-Widerstände auf dem I²C Bus 
gibt. Da werde ich in der Mittagspause mal ein wenig Messen müssen.

Bisher war mir noch nicht bewusst, dass ein I²C-Bus so funktioniert. 
Damit hatte ich mich noch nicht beschäftigt. Das ich den PCA mit 5V 
betreiben kann hatte ich schon im Datenblatt (was ich zumindest versucht 
habe zu lesen und zu verstehen...) gesehen.

Ich hoffe nur, das ich nicht noch irgendetwas grille. Wäre bei diesem 
Projekt nicht das erste Bauteil ;)

Gruß
Bismosa

von Wolfgang (Gast)


Lesenswert?

Sascha Smolny schrieb:
> Hier habe ich keinen Schaltplan finden können. Daher habe ich noch nicht
> herausgefunden, ob es überhaupt Pull-Up-Widerstände auf dem I²C Bus
> gibt.

Die gibt es, sonst wäre es kein I2C-Bus.

von Sascha S. (bismosa)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> Die gibt es, sonst wäre es kein I2C-Bus.

Ja...ich hab sie auch (leider) gefunden.
Ich habe die mal auf dem Bild eingekreist. Die beiden linken Pins.
Ich glaube kaum das ich es schaffe hier die SMD-Widerstände zu 
verschieben damit die beiden in der Luft hängen. Aber ein Versuch wäre 
es wert.

Wenn ich das dann richtig verstanden habe müssten doch die Pull-Up aus 
dem Raspberry reichen?

Gruß
Bismosa

von Wolfgang (Gast)


Lesenswert?

Sascha Smolny schrieb:
> Ja...ich hab sie auch (leider) gefunden.

Jetzt wird es Zeit, mal einen Plan zu zeichnen. Welche Pull-Ups ziehen 
wo hin und welche Spannungen sind fest miteinander vorbunden.

Die Werte der diversen Pull-Ups auf den Boards sollte man bei der 
Gelegenheit auch gleich zusammentragen.

von Sascha S. (bismosa)


Lesenswert?

Hallo,

ja...hätte ich vorher einen Plan gezeichnet...wäre mir das Problem mit 
den 5V vermutlich schon aufgefallen.

So. Nun habe ich die Widerstände (Pull-Ups) am MCP entfernt. Das 
Ergebnis ist aber mehr als schlecht.

1.) Es scheint sehr stark gestört zu werden...nicht immer wird der MCP 
gefunden...und wenn ich in der nähe der Platine bin fängt auch alles an 
zu flackern. Ein Wackelkontakt konnte ich aber nicht finden.
2.) Wenn er denn mal erfolgreich initialisiert wird und ich die LEDs 
alle ausschalte ist immer noch ein glimmen der LEDs sichtbar (alle). 
Nicht mehr ganz so stark...aber immer noch störend.
3.) Ein MCP23017 der ebenfalls am I2C Bus hängt (nur Eingänge mit 
Tastern) hat jetzt plötzlich die Adresse 0x27 und nicht mehr 0x20. Dort 
sind übringens keine Pull-Ups eingesetzt.

Also hat mir das jetzt alles gar nichts gebracht. Ich werde also um 
einen Level-Converter nicht herumkommen.
Aber warum glimmen die LEDs dann immer noch?

Jetzt muss ich erst einmal versuchen die SMD-Widerstände zurück zu 
bringen. Das ist echt schwierig!

Gruß
Bismosa

von Mick (Gast)


Lesenswert?

Bist du dir sicher, dass du die richtigen Widerstände entfernt hast? 
Probier nochmals alles mit 3.3V.

Zu deinem Problem mit dem Glimmen: Bei deiner Beschaltung müssten beim 
PCM an den Ausgängen genau 5V (od. 3.3V) anliegen, damit die LEDs 
ausgeschaltet bleiben. Laut Datenblatt des PCM (Seite 37, VOH) wird 
dieser Level aber nicht erreicht. Ein kleiner Reststrom fliesst also 
immer durch die LED, der das Glimmen verursacht. Du benötigst RGB LEDs 
mit Common Cathode.

von Sascha S. (bismosa)


Lesenswert?

Hallo,

ja..ich bin mir sicher, das es die richtigen waren.
Jetzt hatte ich versucht den Urzustand wiederherzustellen. Das ist aber 
leider missglückt. SMD-Löten ist echt schwierig...vor allem das ganze 
brückenfrei zu schaffen (bzw. hinterher die Brücken zu entfernen).
Nun hat sich auch noch ein Pin von der Platine gelöst...und der Rest ist 
auch nicht ok. Der Widerstand hat wohl mittlerweile auch durch den 
Lötkolben einen Schaden genommen. Einer von 4 hat nur noch 5k statt 10k.

Ich muss die Tage nochmal schauen, ob ich es hinbekommen kann die 
Widerstände durch andere zu ersetzen. Dafür muss ich aber auch noch 
prüfen, was ich vielleicht noch an den Leiterbahnen beschädigt 
habe...sonst muss ich wohl wieder 5 Wochen auf eine Lieferung aus China 
warten :(

Aber noch einmal zu meinem Hauptproblem. Lt. Datenblatt ist ein 
Spannungsabfall von 0,5V vorhanden. Ich habe jedoch die LED mit einem 
Widerstand am Ausgangspin. Demnach müsste doch die über die LED 
anliegende Spannung geringer sein als diese 0,5V ? Sonst muss ich den 
Widerstand doch noch erhöhen?

Gruß
Bismosa

von Pete K. (pete77)


Lesenswert?

Der Raspi kann auf der 3V3 Seite nicht die LEDs und den PCA treiben.
Schließe den PCA an 5V an und spendiere ihm auch noch 
Abblockkondensatoren.

Du solltest Dir mal den Schaltplan vom Raspi und dem PCA anschauen. Die 
LEDs werden an VDD angeschlossen. Du kannst maximal 400mA in Summe 
treiben.

Deine Stromversorgung kann die 400mA zusätzlich liefern?

von Sascha S. (bismosa)


Lesenswert?

Pete K. schrieb:
> Deine Stromversorgung kann die 400mA zusätzlich liefern?

Öhm...na klar. Ich habe noch ca. 3A zur freien Verwendung ;)
Aber warum 400mA. Ich habe 3RGB LEDs...also 9 LEDs mit jeweils ca. 10mA 
= 90mA. Mehr (derzeit) nicht.

Die LEDs sind direkt an VDD (5V) (nicht an der GPIO-Leiste vom 
Raspberry) und der PCA war ursprünglich an den 3,3V vom Raspberry. Jetzt 
hatte ich den PCA ja mal testweise auch auf 5V (und dabei habe ich die 
Pullups vom I2C Bus entfernt)

Ich werde jetzt erst einmal mein PCA-Board wieder in Ordnung bringen 
müssen. Ich habe jetzt alles durchgemessen und müsste normale 
Widerstände unterbringen können (dafür brauche ich die verhunzten 
Lötpins vom SMD-Widerstand nicht mehr).

Ich teste dann noch mal mit 3,3V (wenn ich nur eine RGB-LED anschließe 
sollte der Raspberry genügend Strom liefern können)

Das wird aber heute wohl nichts mehr. Ich höre jetzt erst mal gefrustet 
auf. Morgen habe ich leider noch einen Termin...also spätestens Dienstag 
abend sollte ich dann weitere Ergebnisse liefern können ;)

Gruß
Bismosa

von Mick (Gast)


Lesenswert?

> Aber noch einmal zu meinem Hauptproblem. Lt. Datenblatt ist ein
> Spannungsabfall von 0,5V vorhanden. Ich habe jedoch die LED mit einem
> Widerstand am Ausgangspin. Demnach müsste doch die über die LED
> anliegende Spannung geringer sein als diese 0,5V ? Sonst muss ich den
> Widerstand doch noch erhöhen?
Ein höherer Widerstand bringt dir vermutlich nichts. Es wird immer ein 
kleiner Strom fliessen. Du könntest aber mit Hilfe von OPAMPs 
invertierende Spannungsfolger bauen. Somit würden die Ausgänge am PCA 
invertiert:
0V = LED komplett aus, 4.5V = LED komplett an (mit entspr. Widerstand)
und nicht wie bis anhin:
0V = LED komplett an, 4.5V LED beinahe aus

von Sascha S. (bismosa)


Lesenswert?

Hallo,

ich habe es nun gestern noch geschafft mein PCA-Board zu reparieren. Ich 
habe jetzt statt der SMD-Widerstände 10k Widerstände direkt an die 
Anschlüsse vom I²C Bus gegen VCC gehängt.

Dadurch habe ich jetzt wieder den Urzustand. VCC vom PDA an 3,3V, die 
LEDs weiterhin mit 5V versorgt.

Wenn ich jetzt entgegen einiger Beschreibungen im Internet nicht die 
Werte im Programm invertiere (also volle Ansteuerung = LED aus) sondern 
mich an das Datenblatt halte (siehe Seite 29 Fig.15) und INVRT aktiviere 
gehen die LEDs vollständig aus. Was jetzt intern anders im PCA 
ist...keine Ahnung. Ich bin aber glücklich das es trotz des 
Spannungsunterschieds klappt.

Auch den Fehler am MCP23017 (der ebenfalls am I²C Bus sitzt und 
plötzlich falsch Adressiert war) konnte ich finden. Ich hatte die 
Adress-Pins völlig vergessen an VSS anzuschließen...grmpf.

Eigentlich funktioniert dadurch jetzt alles. Leider nur eiggentlich. 
Wenn ich mit meinen Goldfingern in die Nähe der Anschlüsse auf dem 
PCA-Board komme fangen alle LEDs an zu flackern. Also ist irgendwas sehr 
empfindlich. An den Kabeln kann ich wackeln...da passiert nichts. Wenn 
ich aber den Kunststoff vom Stecker des PCA komme (ohne auch nur den 
Kontakt zu berühren) flackert es schon los ???
Normalerweise kommt man da später nicht dran. Aber manchmal kommt es 
dann schon beim Starten des Raspberrys dazu, das gar nichts mehr auf dem 
I²C Bus funktioniert.
Die beiden PullUps sind getestet...und funktionieren. Ich weiß auch 
nicht, ob ich beim I²C Bus den Fehler suchen muss?
Mehr bin ich da gestern leider nicht zum testen gekommen. Da werde ich 
heute noch mal weiter suchen...aber vielleicht könnt ihr mir einen Tip 
geben, wo ich anfangen kann zu suchen?

Ich hatte gestern auch noch gleich Pegelwandler für den I²C Bus 
bestellt. Die "teuren" aus DE, damit ich sie auch spätestens morgen auf 
meinem Tisch habe...da hatte ich noch nicht damit gerechnet, das ich 
durch invertieren das Problem schon beseitige.

Dafür das ich gestern nur wenig Zeit zwischen Arbeit und Termin hatte 
konnte ich ja schon einiges Erreichen :)

Gruß
Bismosa

von Pete K. (pete77)


Lesenswert?

Also der Raspberry hat schon interne Pullups (siehe Schaltplan), da 
braucht es keine mehr.
Hast Du auch Abblockkondensatoren verwendet? Wie sieht Deine Schaltung 
jetzt aus?

von Mick (Gast)


Lesenswert?

> Wenn ich mit meinen Goldfingern in die Nähe der Anschlüsse auf dem
> PCA-Board komme fangen alle LEDs an zu flackern.
Schau dir das Schaltschema auf Seite 37 des Datenblatts an. Sind deine 
Pins entsprechend verbunden?

von Sascha S. (bismosa)


Lesenswert?

Hallo,

Pete K. schrieb:
> Hast Du auch Abblockkondensatoren verwendet?
Nein...ich habe leider gerade keine zur Hand. So gut ist meine 
Bastelwerkstatt noch nicht ausgestattet. Ich habe nur ein paar Elkos 
liegen. Ich hoffe die Tage mal zu Conrad zu kommen. Ich denke ein 100nF 
ist hier ok?

Mick schrieb:
> Schau dir das Schaltschema auf Seite 37 des Datenblatts an. Sind deine
> Pins entsprechend verbunden?

Bis auf den OE zumindest ähnlich. Der OE liegt offen. Die LEDs sind wie 
auf Seite 29 Fig.15 angeschlossen.

Heute ist auch mein Logic-Level-Converter gekommen. Ich habe es leider 
noch nicht geschafft diesen einzubauen. Ich hoffe das ich morgen schaffe 
und mal mit 5V testen kann.

Heute habe ich festgestellt, das es drauf ankommt in welchem Gebäudeteil 
ich mich befinde. Im Wohnzimmer/Büro wird der I²C Bus erkannt und alles 
geht (außer ich gehe mit mein Finger näher als 1mm an die Pins und mit 
der anderen Hand nicht am Gehäuse). Sobald ich die Kiste in der 
Werkstatt einschalte funktioniert der ganze Bus nicht mehr. Könnte schon 
bald etwas mit dem fehlenden Abblockkondensator zu tun haben. Die 
Störeinflüsse sind in der Werkstatt recht hoch.

Vielen Dank für die ganzen Tipps und die Hilfe!

Gruß
Bismosa

von Mick (Gast)


Lesenswert?

> Bis auf den OE zumindest ähnlich. Der OE liegt offen.
Das ist die Ursache für das Flackern. OE muss auf GND liegen! Siehe 
Seite 2.

von Sascha S. (bismosa)


Lesenswert?

Hallo,

Mick schrieb:
> OE muss auf GND liegen!

Aha...das habe ich so nicht aus dem Datenblatt verstanden. Ich habe es 
nur als externen negierten Eingang gesehen und mich um ehrlich zu sein 
nicht weiter drum gekümmert. Lt. einer Anleitung von Adafruit muss hier 
auch nichts angeschlossen werden: 
https://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi/hooking-it-up
Aber vermutlich ist auf dem Board von adafruit schon eine Verbindung zu 
GND. Auf meinem definitiv nicht.
Muss ich den mit einem Pulldown (welche größe) gegen GND hängen?

Aber eigentlich logisch das daher der Fehler kommt...vielen Dank für den 
Hinweis. Das erklärt auch, warum trotz der "Störung" der I²C Bus 
weiterhin funktioniert.
Ich muss wirklich an meinem Englischen arbeiten...und versuchen die 
Datenblätter besser zu verstehen.

Eigentlich bringt mich der Eingang schon wieder auf neue Ideen. Ich habe 
parallel auch geschaut ob es möglich ist eine Ausgabe auf dem I²C Bus zu 
machen nach dem Herunterfahren (nachdem das Filesystem als Readonly 
gemountet wurde). Oftmals wird eine LED als Anzeige an TxD 
angeschlossen...die hört nahezu am Ende des Herunterfahrens auf zu 
leuchten. Das gleich kann man mit einem GPIO realisieren. Sobald der 
Raspberry aus ist...einfach die LEDs ausschalten...nur dann mit einem 
Pullup...

Den Fehler warum das in der Werkstatt nicht funktionierte habe ich jetzt 
auch endlich gefunden. Meine Scripte starte ich über die rc.local. Hier 
ist aber von Max2Play eine Zeile drin, die auf das Netzwerk wartet...was 
ich in meiner Werkstatt aber nicht habe. Somit wurden meine Scripte ohne 
Netzwerk gar nicht erst gestartet...grmpf.

Langsam kommt doch Licht ins Dunkle!

Vielen Dank!

Gruß
Bismosa

von Mick (Gast)


Lesenswert?

> Muss ich den mit einem Pulldown (welche größe) gegen GND hängen?
Falls du diesen Pin nochmals zusätzlich mit dem Raspberry ansteuern 
willst, brauchst du einen Widerstand (übwlicherweise 1-10k). Ansonsten 
kannst du den Pin direkt auf GND hängen.
Datenblätter zu verstehen ist am Anfang schwierig :-) Nur den Mut nicht 
verlieren ;-)

von Sascha S. (bismosa)


Lesenswert?

Hallo!

Mick schrieb:
> Nur den Mut nicht
> verlieren ;-)

Neeee...aufgeben gibt es bei mir nicht!

Ich habe den Pin jetzt endlich auf GND gelegt. Nun funkttioniert alles 
wie gewünscht. Probleme habe ich keine mehr festgestellt.

Vielen Dank nochmal an alle die hier so fleissig geholfen haben!
Ich durfte wieder sehr viel lernen und die Probleme sind alle behoben!

DANKE!

Gruß
Bismosa

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.