Weihnachten kommt jedes Jahr wieder - Du hast also noch > 1 Jahr Zeit
Die SoftPWM der MobaTools ist aber einen Test wert.
GruĂ Tommy
Weihnachten kommt jedes Jahr wieder - Du hast also noch > 1 Jahr Zeit
Die SoftPWM der MobaTools ist aber einen Test wert.
GruĂ Tommy
Ich habe meine Lithophane so beleuchtet:
Ein Lithophane habe ich auch mit WS2812 und WLED beleuchtet. Das war deutlich aifwendiger.
Ich empfehle die erste Variante.
GehĂ€use mit Alufolie von innen bekleben. Die Lichterkette gleichmĂ€Ăig verteilen und mit Heisklebe befestigen.
Beste GrĂŒĂe,
Chris
So der PCA9685 ist da inkl Leuchtdioden weiss... jetzt heisst es ein tutorial finden wo alles mal erklÀrt wird
Die meisten Beispiele sind fĂŒr RC-Servos die brauchen aber eine ander Art Signal als LEDs
Hier eine simpel-Library
oder die "standard" library
vgs
mit dem mittleren code komme ich nicht zugange
#include <I2C.h> diese Bibliothek kann ich nicht finden
Arduinos programmieren ist Informatik.
Und was man bei jedem Informatik-Projekt am meisten benötigt ist
ausreichend Information
Wenn du kein Englisch kannst: Informatik einsetzen. (Braucht halt auch ausreichend Information um zu funktionieren
https://translated.turbopages.org/proxy_u/en-de.en.bdb4975d-639b887d-f20c0464-74722d776562/https/forum.arduino.cc/t/if-you-get-a-compiler-error-provide-all-details-for-analysing-the-error/971255
vgs
ok... also ich habe mal folgendes gebastelt. Ich habe 3 LED's welche der Reihe nach aufleuchten. Dazwischen soll der Ăbergang gedimmt sein, was ich noch nicht habe. Am Ende leuchten alle miteinander, bevor es von vorne los geht.
das ist mal mein Code:
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
void setup() {
Serial.begin(9600);
Serial.println("16 channel PWM test!");
pwm.begin();
pwm.setPWMFreq(1600); // This is the maximum PWM frequency
// save I2C bitrate
uint8_t twbrbackup = TWBR;
// must be changed after calling Wire.begin() (inside pwm.begin())
TWBR = 12; // upgrade to 400KHz!
}
// Bis hier hin habe ich alles aus einem Beispiel genommen. Was das TWBR genau bedeuted oder macht weiss ich noch nicht.
void loop() {
//Hier möchte ich eine LED nach der anderen fĂŒr zb 8 Sekunden lang leuchten lassen
//Nach den 8 Sekunden soll fĂŒr 2 sekunden oder 5 Sekunden die leuchtende LED runterdimmen und die neu langsam an gehen
//eine LED nach der anderen einschalten und ausschalten
pwm.setPWM(0, 4096, 0);
pwm.setPWM(4, 0, 4096);
pwm.setPWM(8, 0, 4096);
delay(8000);
//dimmen -- ev mit einer Schleife?
pwm.setPWM(0, 4096, 0);
pwm.setPWM(4, 0, 4096);
delay(5000);
//ende dimmen
pwm.setPWM(0, 0, 4096);
pwm.setPWM(4, 4096, 0);
pwm.setPWM(8, 0, 4096);
delay(8000);
pwm.setPWM(0, 0, 4096);
pwm.setPWM(4, 0, 4096);
pwm.setPWM(8, 4096, 0);
delay(8000);
pwm.setPWM(0, 4096, 0);
pwm.setPWM(4, 4096, 0);
pwm.setPWM(8, 4096, 0);
delay(8000);
}
Funktioniert abgesehen vom dimmen schon mal gut. Ausser dass ich noch googeln muss was es mit diesem Teil genau auf sich hat:
pwm.setPWMFreq(1600); // This is the maximum PWM frequency
// save I2C bitrate
uint8_t twbrbackup = TWBR;
// must be changed after calling Wire.begin() (inside pwm.begin())
TWBR = 12; // upgrade to 400KHz!
erzeugt servo-signale die
Servo-Signal
bei einem RC-Servo-signal ist die höchste Einschaltdauer 10% = 10% Helligkeit. Niemals mehr
PWM-Signal = ANDERS als RC-Servo-Signal
Einschaltdauer bis 100% = volle Helligkeit
Sich mit duckduckgo wissen ĂŒber Arduino-Programmieren aneignen
Suche nach "Arduino" + Fachbegriff
Arduino TWBR
In diesem code-Beispiel werden alle 16 LED KanÀle rauf und runter gedimmt
Wenn man in die library selbst hineinschaut sieht man welcher Parameter was ist
/*!
* @brief Sets the PWM output of one of the PCA9685 pins
* @param num One of the PWM output pins, from 0 to 15
* @param on At what point in the 4096-part cycle to turn the PWM output ON
* @param off At what point in the 4096-part cycle to turn the PWM output OFF
*/
void Adafruit_PWMServoDriver::setPWM(uint8_t num, uint16_t on, uint16_t off) {
Und diese Library und die Demo-Codes sind ein neuerliches Beispiel wie man die Doku zu knapp hÀlt um einfach verstÀndlich zu sein.
Ich finde das zum
wenn Dokus zu knapp ausfallen
Beispiel-Anwendung
setPWM(PWM-Channel, Einschalt_ZeitPUNKT, Ausschalt-ZeitPUNKT)
Das heiĂt es gibt eine Zeitskala von 0,1,2,3,.... 4093,4094, 4095
Die Zahlen geben an zu welchem Zeitpunkt auf der Zeitskala der Ausgang HIGH geschaltet werden soll und wann er wieder LOW geschaltet werden soll.
setPWM(LED_Nr, 5, 13);
HHHHHHHHHHHHHHHHHH
0,1,2,3,4,5,6,7,8,9,10,12,13.......4093,4094,4095
setPWM(LED_Nr, 0, 10);
HHHHHHHHHHHHHHHHHHHHHH
0,1,2,3,4,5,6,7,8,9,10,12,13..2048,2049.....4093,4094,4095
setPWM(LED_Nr, 0, 2048); // = 50% ein , 50% aus
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
0,1,2,3,4,5,6,7,8,9,10,12,13..2048,2049.....4093,4094,4095
setPWM(LED_Nr, 0, 1024); // = 25% ein , 75% aus
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
0,1,2,3,4,5,6,7,8,9,10,12,13.......1023,1024......2048,2049.....4093,4094,4095
vgs
for (uint16_t i=0; i<4096; i += 8) {
pwm.setPWM(0, 4096-i, i);
delay(100);
}
Wollte mit LED include
<Wire.h> und <Adafruit_PWMServoDriver.h> nun mal selbst 1 led dimmen, mit dem oben stehenden code. aber irgendwie scheint das nicht wirklich zu klappen, bzw sehe ich das dimmen nicht
hÀtte gerne ganz einfach die leuchtkraft eingestellt und ein fade in und aus programmiert.
Zahlenbeispiel:
pwm.setPWM(7,0,2048);
schalte den Kanal 7 zum Zeitpunkt 0 auf HIGH und zum Zeitpunkt 2048 wiederauf LOW)
Wenn du programmierst
for (uint16_t i=0; i<4096; i += 8) {
pwm.setPWM(0, 4096-i, i);
delay(100);
}
dann fÀngt der code an mit
pwm.setPWM(0, 4096 , 0);
schalte zum Zeitpunkt 4096 auf HIGH und Zum Zeitpunkt 0 auf LOW
und geht dann weiter
pwm.setPWM(0, 4095 , 1);
pwm.setPWM(0, 4094 , 2);
keine Ahnung ob das wirklich so funktioniert.
Wie wÀre es zunÀchst mal mit dem Hin- und Herschalten zwischen zwei festen Zahlenwerten
pwm.setPWM(0, 100, 4000); // ziemlich lange eingeschaltet = hell
delay(2000);
pwm.setPWM(0, 3800, 4000); // ziemlich kurz eingeschaltet = dunkler
delay(2000);
und von dort ausgehend KLEINE VerÀnderungen des codes
Es gibt die wild herumhĂŒpfen Strategie
schreibe ganz viel Code auf einmal und dann probiere herum
und es gibt die StĂŒck fĂŒr StĂŒck analysieren-Strategie
von einem funktionierenden einfachen Beispiel aus nur ein gaaanz klein wenig Àndern und testen wie es sich auswirkt
pwm.setPWM(0, 2, 4094); // noch lÀnger eingeschaltet = noch heller?
delay(2000);
pwm.setPWM(0, 4000, 4094); // ziemlich kurz eingeschaltet = dunkler
delay(2000);
usw.
vgs
#include <MobaTools.h>
/* Demo: weiches Auf/Abblenden einer LED
* Mit der Klasse SoftLed lÀsst sich eine Led 'weich' ein- und ausschalten
* Die Led muss nicht an einem PWM-fÀhigen Pin angeschlossen sein, es funktioniert
* mit jedem Digital-Pin.
* SoftLed.attach( byte Pinnr );// AnschluĂpin fĂŒr die Led festlegen
* SoftLed.riseTime( int zeit );// Zeit fĂŒr auf/abblenden in ms
* SoftLed.on(); // 'weich' einschalten
* SoftLed.off(); // 'weich' ausschalten
*/
const byte ledPin1 = 2; // beliebiger Digital Pin
const byte ledPin2 = 3; // beliebiger Digital Pin
MoToSoftLed meinLed1;
MoToSoftLed meinLed2;
void setup() {
meinLed1.attach(ledPin1);
meinLed1.riseTime( 2000 ); // Aufblendzeit in ms
meinLed2.attach(ledPin2);
meinLed2.riseTime( 2000 ); // Aufblendzeit in ms
}
void loop() {
meinLed1.on();
delay(9000);
meinLed1.off();
meinLed2.on();
delay(9000);
meinLed2.off();
}
Danke Stefan,
werde das testen. Habe noch mit der mobatools lib gespielt
dort geht das faden jedoch kann ich die helligkeit der leds nicht Ă€ndern, bzw nur ĂŒber den widerstand. aber werde heute abend nochmals alles testen. Danke
Das widerspricht sich total. Ich verstehe unter "faden" die LED wird langsam heller / dunkler
und du schreibst kann ich die Helligkeit der LEDs nicht Àndern
Ja das stimmt. ich meine damit, dass ich die LED ja einschalte. Dann leuchtet die abhÀngig vom gewÀhlten Widerstand in einer konstanten Helligkeit. Diese Helligkeit hÀtte ich gerne gedimmt, so dass die Helligkeit zB nur mit 70% ist oder 30%. Das Faden fÀhrt ja von 100% auf 0% runter oder von 0% auf 100% hoch. Ich hÀtte gerne zB. bei 70% Leuchtkraft gestoppt und dort mit delay() so lange leuchten lassen wie ich dass dan halt möchte. Wahrscheinlich geht das auch.
Man sollte halt keine Geschenke planen die zu einem Zeitpunkt fertig sein mĂŒssen und man noch keinen Plan von der Materie hat ... selber Schuld.
welchen Microcontroller hast du?
Arduino Uno, Arduino Mega, Arduino Nano,
ESP8266, ESP32
Ausschnitt aus der MobaTools doku
void myLed.on(uint8_t brightness ); ( nicht bei AVR-Prozessoren )
brightness = 0...100 PWM-Wert fĂŒr âONâ in %
Die Led wird eingeschaltet.und leuchtet dann mit brightness % der maximalen Helligkeit.
Der PWM-Wert wird fĂŒr nachfolgende EinschaltvorgĂ€nge mit on/toggle/write gespeichert.
Aus KompatibilitĂ€tsgrĂŒnden kann die Methode auch bei AVR-Prozessoren aufgerufen
werden, der ĂŒbergebene Paramter wird allerdings ignoriert.
void myLed.off(uint8_t brightness ); ( nicht bei AVR-Prozessoren )
brightness = 0...100 PWM-Wert fĂŒr OFF in %
Die Led wird ausgeschaltet, leuchtet aber noch mit dem eingestellten PWM-Wert.
Der PWM-Wert wird fĂŒr nachfolgende AusschaltvorgĂ€nge mit off/toggle/write gespeichert.
Der PWM-Wert fĂŒr off muss kleiner sein als der fĂŒr on.
Auf den Punkt gebracht Bei AVR-Prozessoren Arduino Uno, Arduino Mega, Arduino Nano,
myLed.on() immer 100% Helligkeit
myLed.off() immer 0% LED ganz aus
bei anderen Prozessoren einstellbar auf beliebige Werte
Ich habe einen UNO und hÀtte auch ein PCA9685 dazu. Nano hÀtte ich auch, den hatte ich aber noch nie in Betrieb.
Ist aber nicht so schlimm. Ich werde dass dan Falls nötig einfach halten und mit dem Widerstand spielen. Faden geht ja. Dann muss ich noch einen Knopf anschliessen und ev einen Wippschalter fĂŒr an und aus. Damit habe ich genug zu tun.
Also mit dem PCA9685 geht das. Da musst du dich jetzt mal festlegen.
Wie viel Strom ziehen die LEDs die von einem Kanal angesteuert werden.
Da muss man ĂŒberprĂŒfen ob der PCA9685 direkt genug Strom liefern kann oder ob man noch einen Transistor oder MOS-FET braucht um das anzusteuern.
Ich habe es im Datenblatt nachgeschaut. maximal 25 mA. Also vermutlich zu wenig.
Du musst unbedingt eine genau Bezeichnung deiner LEDs posten opder noch besser direkt das Datenblatt.
Es ist absolut entscheidend wie viel Strom die Gesamtzahl der LEDs die nachher an einem Kanal hÀngen ziehen.
Ich werde das Datenblatt im Netz suchen. Ich habe jetzt 3 LED angeschlossen und alle leuchten lassen. Danach leuchten ja von ingesamt 11 maximal 2 zusammen, das sollte doch passen oder. die anderen 9 ziehen ja keinen Strom.
Darauf verlasse ich mich nicht.
Und es kommt auch darauf an wie viele LEDs sind es pro Bild.
Pro Bild heiĂt pro Kanal am PCA9685
Die Leistungsgrenze des PCA9685 ist 25 mA. Die sollte man nicht ausreizen.
LEDs gibt es Millionen verschiedene deshalb Datenblatt und Foto der LEDs posten. Da sind LEDs dabei die viel mehr als 25 mA Strom ziehen.
Wenn du es dann am 22 Dezember wegen StromĂŒberlastung kaputt gemacht hast reicht es nicht mehr.
Deshalb vorher maximalen Strombedarf feststellen.
Hast du ein Digitalmultimeter? WeiĂt du wie man damit Strom misst?