Hallo, ich habe mir eine Schaltung zum dimmen von meinen Schreibtischlampen aufgebaut. Schaltungsaufbau: ----------------- Bei den Lampen handelt es sich um diese hier: http://www.ikea.com/de/de/catalog/products/60213782/ Standardmäßig haben sie eine KSQ im steckernetzteil integriert, welche 700mA liefert bei ca 5V. Meine idee war nun diese zu ersetzen durch eine eigene KSQ mit PWM Eingang. Also habe ich hier im wiki etwas gesucht und bin hierauf gestoßen: http://www.mikrocontroller.net/articles/Datei:Power-LED_Stromquelle.png Diese Schaltung basiert auf diesen Modulen hier: http://www.mikrocontroller.net/articles/Konstantstromquelle_fuer_Power_LED#Fertigmodul Zum ansteuern habe ich einen ATtiny84 gewählt. Programmiert ist das ganze mit dem Arduino Framework und läuft auf 8mHz Internal Clock. Als Stromversorgung dient ein altes PC-Netzteil ----------------- Nun zum eigentlichen Problem: In den Leistungsbereichen mit <15% oder >85% Duty-Cycle sieht das ganze recht ordentlich aus. Bei ~50% jedoch flackert das ganze echt herb. Hat einer von euch eine Idee woher das kommt und wie ich das vor allem beheben kann? Viele Grüße, Marcel
Die Frequenz bestimmt das Programm durch Konfiguration der Register des Timers. Welche Frequenz angemessen ist, steht in dem von Dir gelinkten Artikel (100-300Hz).
Oh da koennte schon der fehler sein... ich hab khz gelesen ;) ich berichte gleich nach dem testen
ok also es liegt an der frequenz. jetzt muss ich nurnoch aus dem UC eine adäquate frequenz zaubern - ohne logic analyzer ganz schön müßig :/
für alle die es interessiert: Fuse-Bits clock auf internal 8mhz clock prescaler auf 8 Timer Konfiguration: timer0 clock prescaler auf 8 timer1 clock prescaler auf 1 hier der entsprechende code
1 | void setup() { |
2 | TCCR0B = TCCR0B & 0b11111000 | 0x2; |
3 | TCCR1B = TCCR1B & 0b11111000 | 0x1; |
4 | }
|
5 | |
6 | void loop() { |
7 | for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) { |
8 | analogWrite(7, fadeValue); |
9 | analogWrite(6, fadeValue); |
10 | delay(5); |
11 | }
|
12 | |
13 | for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=1) { |
14 | analogWrite(7, fadeValue); |
15 | analogWrite(6, fadeValue); |
16 | delay(5); |
17 | }
|
18 | }
|
@mdorenka (Gast) >jetzt muss ich nurnoch aus dem UC eine adäquate frequenz zaubern - ohne >logic analyzer ganz schön müßig :/ Nö, ein wenig Grundrechenarten und die richtige Einstellung für den Timer reicht.
leider bin ich durch die libraries von arduino nicht ganz durchgestiegen, deswegen der explorative ansatz. es funktioniert jetzt einwandfrei auf beiden timern.
ok nochmal eine blöde frage zur berechnung der prescaler cputakt / prescaler (also beim attiny 1 8 64 256 oder 1024) / (256 oder 65536) (beim 8bit timer bzw 16 bit timer) = hz?
Ja, so hast Du den Prescaler richtig verstanden.
> leider bin ich durch die libraries von arduino nicht ganz durchgestiegen
Das lese ich hier jede Woche. Dann lass sie doch weg und programmiere
"zu fuß". Direkt Register anzusprechen hast Du ja schon gemacht.
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.