Forum

Einloggen | Registrieren | RSS  

Offroad GTI(R)

03.11.2023,
11:16

@ GeorgZ

Pico Programmierung klappt nicht so recht II

» Die könnte ich dann ohne Weiteres mit einem extra Vorwiderstand versorgen.
» Bei einem 5V Netzgerät dürften die 220 Ohm für die weißen LEDs reichen.
Ja, das passt schon ganz gut.

» Übrigens, das fällt mir gerade ein: gibt es eigentlich eine einfache
» Möglichkeit, die Gesamthelligkeit zu steuern?
Nicht wirklich. Sollte die Helligkeit nicht auch vom Arduino (über PWM) gesteuert werden?
Ich möchte ja nicht, dass das

» Ich habe zwei Netzteile mit variabler Spannung und 1 A bzw 1,5 A Output und
» eben habe ich noch eines entdeckt mit 5V u. 1A Output.
» Außerdem habe ich so ein Steckernetzteil, in das man 2 USB-A und einen
» USB-C Stecker reinstecken kann. Maximal liefert das 3,6 A.
Die eignen sich alle dafür.

» Insgesamt werde ich für 32 weiße LEDs 1A - 1,25 A brauchen (etwa).
Wohl eher nur die Hälfte.

» Aber würden die LEDs dann nicht doppelt versorgt? Über den Arduino und über
» den PCA9685 direkt?
Nein, vom Arduino gibt es ja nur eine Datenverbindung zu den anderen Boards.

GeorgZ(R)

03.11.2023,
12:29

@ Offroad GTI

Pico Programmierung klappt nicht so recht II

» » Möglichkeit, die Gesamthelligkeit zu steuern?
» Nicht wirklich. Sollte die Helligkeit nicht auch vom Arduino (über PWM)
» gesteuert werden?
Ja, das wird schon reichen

» » Insgesamt werde ich für 32 weiße LEDs 1A - 1,25 A brauchen (etwa).
» Wohl eher nur die Hälfte.
Ja, weil ja meist nur ein Teil leuchtet und auch nicht in voller Helligkeit

» Nein, vom Arduino gibt es ja nur eine Datenverbindung zu den anderen
» Boards.
Ach, klar, und dann habe ich ja die 6 PWM Steckplätze vom Arduino noch frei.

bastelix(R)

04.11.2023,
00:47
(editiert von bastelix
am 04.11.2023 um 00:54)


@ GeorgZ

Pico Programmierung klappt nicht so recht II

» » » Insgesamt werde ich für 32 weiße LEDs 1A - 1,25 A brauchen (etwa).
» » Wohl eher nur die Hälfte.
» Ja, weil ja meist nur ein Teil leuchtet und auch nicht in voller
» Helligkeit
Naja, wenn alle Leuchten haben wir 32 LEDs je (ca.) 20mA -> 640mA. Oder hat sich da was geändert?

» Diese PCA8695lassen sich ja auch direkt mit Strom versorgen. Dann bekäme eben jedes Teil einen eigenen USB Stecker.
» Aber würden die LEDs dann nicht doppelt versorgt? Über den Arduino und über den PCA9685 direkt?
So lange der ganze Strom von einem Netzteil kommt sind das nur unterschiedliche Einspeisepunkte.

Bei den PCA-Boards haben wir zwei Möglichkeiten für die LED-Versorgungsspannung. Entweder wir verwenden Vcc oder V+. Für V+ gibt es einen Pin bei den Pfostenverbindern und das Schraubterminal, für Vcc nur die Pfostenverbinder. Ich würde aus Bequemlichkeit einfach Vcc verwenden und nicht V+.



» » Nein, vom Arduino gibt es ja nur eine Datenverbindung zu den anderen
» » Boards.
» Ach, klar, und dann habe ich ja die 6 PWM Steckplätze vom Arduino noch
» frei.
Vorsicht, dafür ist der Code jetzt nicht ausgelegt :-D Entweder PCA oder Arduino PWM-Pins. Aber du kannst bis zu 62 PCA-Module mit einem Arduino verwenden, das wären dann 992 LEDs ;-)

<Edit>
Hab mal die PCA-Integration in einem eigenen Branch eingecheckt: https://gitlab.com/Bastelix/led-multifade/-/tree/pca-i2c?ref_type=heads
Ein paar Sachen an dem Code gefallen mir noch nicht so ganz, aber das ist jammer auf hohem Niveau. ;-)
</Edit>

grindstone(R)

E-Mail

Ruhrpott,
04.11.2023,
13:21

@ bigdie

Pico Programmierung klappt nicht so recht II

» Er will aber jede LED einzeln ansteuern und in der Farbe wechseln.
Auch kein Problem: Eine LED zusammen mit dem SMD-Widerstand abschneiden, das passt dann für 5 V. Die anderen beiden LEDs brauchen dann jeweils einen eigenen 200 (oder 220) Ohm-Vorwiderstand. Ist aber immer noch konkurrenzlos günstig. Und der Kleber ist auch schon dran. ;-)

Gruß
grindstone

--
Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen!

GeorgZ(R)

04.11.2023,
18:25

@ bastelix

Pico Programmierung klappt nicht so recht II

» Naja, wenn alle Leuchten haben wir 32 LEDs je (ca.) 20mA -> 640mA. Oder hat
» sich da was geändert?
Nein, aber ich hatte mit dem Gedanken gespielt, RGB-LEDs zu benützen und hatte deshalb noch die höheren Werte im Kopf. Habe ich aber wieder verworfen, nachdem ich welche ausprobiert habe.

» ... das wären dann 992 LEDs ;-)
Das wird wohl reichen :-)

» https://gitlab.com/Bastelix/led-multifade/-/tree/pca-i2c?ref_type=heads

Eben habe ich es ausprobiert. Es funktioniert vorzüglich ! Perfekt !
Morgen fange ich an zu löten. Das wird dauern...

Grüße, Georg

GeorgZ(R)

04.11.2023,
18:57

@ bastelix

Pico Programmierung klappt nicht so recht II

» https://gitlab.com/Bastelix/led-multifade/-/tree/pca-i2c?ref_type=heads

Jetzt mit 13 LEDs, davon einige doppelt - sehr schön !

Gruß, Georg

bastelix(R)

04.11.2023,
22:02

@ grindstone

Pico Programmierung klappt nicht so recht II

» » Er will aber jede LED einzeln ansteuern und in der Farbe wechseln.
» Auch kein Problem: Eine LED zusammen mit dem SMD-Widerstand abschneiden,
» das passt dann für 5 V. Die anderen beiden LEDs brauchen dann jeweils einen
» eigenen 200 (oder 220) Ohm-Vorwiderstand. Ist aber immer noch konkurrenzlos
» günstig. Und der Kleber ist auch schon dran. ;-)
Du musst aber auch noch Anschlusskabel anlöten und das ist bei dem Kunststoff-Träger a weng a gfotz weil der Kunststoff relativ schnell schmilzt.

bastelix(R)

04.11.2023,
22:04
(editiert von bastelix
am 05.11.2023 um 00:31)


@ GeorgZ

Pico Programmierung klappt nicht so recht II

» » https://gitlab.com/Bastelix/led-multifade/-/tree/pca-i2c?ref_type=heads
»
» Jetzt mit 13 LEDs, davon einige doppelt - sehr schön !
Damit meinst du zwei LED pro Pin?

Ich schau mir jetzt nochmal im Detail das Datenblatt vom PCA an, mich stört die Adafruit-Lib, genauer wie die intern arbeitet und dass man für jeden PCA eine neue Instanz des Treibers braucht. Aber da verspreche ich mal nichts.

Nachtrag: Da geht noch was. Das setzten der PWM-Frequenz macht grad noch Probleme, aber im Idealfall kommt demnächst eine Version die mit mehreren PCA-Moudle elegant umgehen kann ;-)

GeorgZ(R)

05.11.2023,
23:05

@ bastelix

Pico Programmierung klappt nicht so recht II

Hallo Bastelix,

ich habe versucht das hier:
-------
LED leds[] = {
LED(&pwmDriver0, 0), LED(&pwmDriver0, 1), LED(&pwmDriver0, 2),
LED(&pwmDriver0, 3), LED(&pwmDriver0, 4), LED(&pwmDriver0, 5),
LED(&pwmDriver0, 6), LED(&pwmDriver0, 7), LED(&pwmDriver0, 8),
LED(&pwmDriver0, 9), LED(&pwmDriver0, 10), LED(&pwmDriver0, 11),
LED(&pwmDriver0, 12),LED(&pwmDriver0, 13)
};
-------
so zu ersetzen:
-------
LED leds[] = {
for (uint8_t i=0;i<=13;i++){ LED(&pwmDriver0, i) }
};
--------
hat aber nicht geklappt.
Fehlermeldung: Compilation error: expected primary-expression before 'for'
Dann habe ich versucht:
-------
LED leds[14];

void setup(){
for(uint8_t i = 0; i < 13; i++) {
leds[i] = LED(&pwmDriver0, i);
}
------
Fehlermeldung: Compilation error: no matching function for call to 'LED::LED()'

Es würde mich schon interessieren, wie man das richtig macht, weil ich langsam das Gefühl bekomme, dass ich doch mehr als 32 LEDs brauchen werde, um den Effekt zu erreichen, der mir vorschwebt.

Gruß, Georg

bastelix(R)

06.11.2023,
01:11

@ GeorgZ

Pico Programmierung klappt nicht so recht II

Hallo Georg,

» LED leds[] = {
» for (uint8_t i=0;i<=13;i++){ LED(&pwmDriver0, i) }
» };
Das geht in C++ nicht. Eigentlich kenne ich überhaupt keine Programmiersprache in der das in dieser Form geht. ;-)

» LED leds[14];
» Fehlermeldung: Compilation error: no matching function for call to
» 'LED::LED()'
Das würde gehen wenn man den Konstruktor der LED-Klasse entsprechend anpasst und dann begin() zu begin(dirver, pin) umbaut. Ist aber keine gute Lösung - zu Fehleranfällig.

» Es würde mich schon interessieren, wie man das richtig macht, weil ich
» langsam das Gefühl bekomme, dass ich doch mehr als 32 LEDs brauchen werde,
» um den Effekt zu erreichen, der mir vorschwebt.
Aktuell ist die einzig richtige Lösung die LED-Instanzen statisch zu initialisieren wie ich das im aktuellen Beispielcode mache. Die erwähnte Anpassung von Konstruktor und being()-Methode ist keine gute Lösung weil das einige Fehlerquellen aufmacht. Vorerst musst du aber damit leben.

Ich finde die aktuelle Lösung mit der Adafruite-Lib für mehr als einen PCA sehr unschön und unpraktisch. Ich bin grad dabei zu testen ob ich die Lib von Rob verwenden kann/will oder doch selber direkt die I2C-Befehle implementiere. So oder so, es wird über kurz oder lang eine Version geben der du sagst wie viele LEDs du verbaut hast und die wird sich dann intern darum kümmern die nötigen PCAs zu adressieren und so Kram. Dann musst du dich nur noch an das vorgegebene Adress-Schema für die PCAs halten ;-)

GeorgZ(R)

06.11.2023,
08:21

@ bastelix

Pico Programmierung klappt nicht so recht II

» ... So oder so, es wird über kurz oder lang eine Version geben
» der du sagst wie viele LEDs du verbaut hast und die wird sich dann intern
» darum kümmern die nötigen PCAs zu adressieren und so Kram. Dann musst du
» dich nur noch an das vorgegebene Adress-Schema für die PCAs halten ;-)

Prima, dann wird meine For-Schleifen Idee eh hinfällig.
Danke.

Gruß, Georg

grindstone(R)

E-Mail

Ruhrpott,
06.11.2023,
11:34
(editiert von grindstone
am 06.11.2023 um 12:57)


@ bastelix

Pico Programmierung klappt nicht so recht II

» Dann habe ich versucht:
» -------
» LED leds[14];
»
» void setup(){
» for(uint8_t i = 0; i < 13; i++) {
» leds[i] = LED(&pwmDriver0, i);
» }
» ------
» Fehlermeldung: Compilation error: no matching function for call to 'LED::LED()'
»
» Das würde gehen wenn man den Konstruktor der LED-Klasse entsprechend anpasst und dann begin() zu begin(dirver, pin) umbaut.

Das ist doch unlogisch. Wieso funktioniert dann die explizite Zuweisung? Da wird doch auch nur ein Wert in eine Arrayzelle geschrieben.
Wo kann ich mir die LED-Klasse herunterladen?

Gruß
grindstone

--
Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen!

GeorgZ(R)

06.11.2023,
13:34

@ grindstone

Pico Programmierung klappt nicht so recht II

» Wo kann ich mir die LED-Klasse herunterladen?

5 Posts weiter oben

bastelix(R)

06.11.2023,
23:40

@ grindstone

Pico Programmierung klappt nicht so recht II

» » Dann habe ich versucht:
» » -------
» » LED leds[14];
» »
» » void setup(){
» » for(uint8_t i = 0; i < 13; i++) {
» » leds[i] = LED(&pwmDriver0, i);
» » }
» » ------
» » Fehlermeldung: Compilation error: no matching function for call to
» 'LED::LED()'
» »
» » Das würde gehen wenn man den Konstruktor der LED-Klasse entsprechend
» anpasst und dann begin() zu begin(dirver, pin) umbaut.
»
» Das ist doch unlogisch. Wieso funktioniert dann die explizite Zuweisung?
Nein, das ist C++

Implizite Zuweisung:
Du schreibst: LED array[2];
Der Compiler macht daraus: LED array[] = { LED(), LED() };
Die LED-Klasse besitzt aber keinen Konstruktor ohne Argumente, darum kracht es da beim compilieren.

Was ginge, wäre mit Pointern zu arbeiten und den Speicher für das Array dynamisch zu allozieren. Das ist in dem Fall aber keine gute Idee ;-)

» Wo kann ich mir die LED-Klasse herunterladen?
https://gitlab.com/Bastelix/led-multifade/-/tree/pca-i2c?ref_type=heads

grindstone(R)

E-Mail

Ruhrpott,
07.11.2023,
00:45

@ GeorgZ

Pico Programmierung klappt nicht so recht II

» » Wo kann ich mir die LED-Klasse herunterladen?
»
» 5 Posts weiter oben
Ja, danke. Ich hatte das schon einmal versucht, aber nur ein "page not found" bekommen. Jetzt hat es funktioniert.

Aber ich habe da jetzt ein Verständnisproblem: Jeder Treiberbaustein hat doch 16 Ausgänge und einen I2C - Port mit einer eigenen Port-Adresse, ansonsten wissen die Bausteine nichts voneinander, und der Controller kann auch immer nur mit einem Baustein gleichzeitig kommunizieren. Das heißt nach meinem naiven Verständnis, daß du nur einmal ein Array mit 16 Kanälen initialisieren mußt, das für alle Bausteine verwendet werden kann. Die Auswahl des angesprochenen Bausteins erfolgt dann über die Portadresse, alles andere ist Sache des Controllers.

Gruß
grindstone

--
Es ist unter der Würde eines Technikers, die Gebrauchsanweisung zu lesen!