Hallo, ich möchte einen LED Streifen mit einem Dimmer auf Basis eines ATtiny13 dimmen. Diese Schaltung und den Code habe ich von folgender Seite: http://www.dieelektronikerseite.de/uC%20Ecke/Circuits/Ein-Tasten-Dimmer.htm Vielen Dank an Thomas. Leider gibt es keinen Kontakt zu ihm. Mit einem Taster kann man die LEDs Ein- und Ausschalten und mit längerem Druck dimmen. Als Endtreiber steuere ich einen Mosfet an. Das funktioniert auch sehr gut, ich würde nun gern den Streifen nicht maximal leuchten lassen sondern nur bis zu ca. 2/3 der max. Helligkeit. Da ich von der Programmiererei fast keine Ahnung habe, würde ich gern in die Runde fragen, an welchem Wert im Programm ich stellen muss, um die Endhelligkeit einzustellen. $regfile = "Attiny13.dat" $crystal = 1200000 $hwstack = 10 $framesize = 17 $swstack = 0 Dim Hell As Word Dim An As Word Dim Aus As Word Dim Pressed As Word Dim Neu As Word Dim Heller As Word Dim Dunkler As Word Dim Pwm As Word Dim Analog As Word Dim Dimm As Word Const Starthelligkeit = 255 Config Portb.0 = Output Config Portb.2 = Input Tccr0a = &B11110001 : Tccr0b = &B00000010 : Ocr0b = 255 Ocr0a = 255 : Portb.2 = 1 An = 0 : Neu = 0 : Pwm = 255 Hell = 255 - Starthelligkeit Dunkler = Hell If Dunkler = 0 Then Dunkler = 255 Do If Pinb.2 = 0 Then Incr Pressed : Waitms 1 : Neu = Heller End If If Pwm = 0 Then Heller = 0 If Pwm = 255 Then Heller = 1 If Pressed > 250 Then If Heller = 0 Then Incr Pwm Else Decr Pwm Waitms 30 End If If Pinb.2 = 1 And Pressed > 0 And Pressed < 250 Then If Pressed < 50 Then If Pwm = 0 Then Do Incr Pwm : Ocr0a = Pwm : Waitms 5 Pressed = 0 : Neu = 1 : An = 1 Loop Until Pwm = Dunkler Or Pinb.2 = 0 Else Do Decr Pwm : Ocr0a = Pwm : Waitms 5 Pressed = 0 : Neu = 0 : An = 1 Loop Until Pwm = 0 Or Pinb.2 = 0 End If Elseif An = 1 Then Do Incr Pwm : Ocr0a = Pwm : Waitms 5 Pressed = 0 : Neu = 1 : An = 0 Loop Until Pwm = 255 Or Pinb.2 = 0 Else Do Decr Pwm : Ocr0a = Pwm : Waitms 5 Pressed = 0 : Neu = 0 : An = 1 Loop Until Pwm = Hell Or Pinb.2 = 0 End If If Pinb.2 = 0 Then Pressed = 250 Elseif Pressed > 0 And Pinb.2 = 1 Then If Neu = 1 Then Heller = 0 If Neu = 0 Then Heller = 1 Pressed = 0 : Waitms 100 End If If Pwm = 255 Then An = 0 Else If Aus > 5 Then An = 1 Incr Aus : Ocr0a = Pwm Loop Falls mir jemand helfen kann, bedanke ich mich schon im Voraus. Gruß Alexander
Alexander G. schrieb: > an welchem Wert Der ist lustig, "welchem" ist Einzahl, Du hast Mehrzahl, alles was nach 255 aussieht. Um den Verhau nicht verstehen zu müssen, würde ich überall wo mit Ocr0a = Pwm der neue Helligkeitswert gesetzt wird, eine kleine Funktion anspringen, welche die Skalierung 255 auf 170 erledigt. Evtl. reicht es auch aus, wenn Du überall wo "255" steht durch "170" ersetzt. Damit Du flexibler bist, fügst Du ein: Const Maxhell = 170 Alle "255" ersetzt Du durch "Maxhell".
Hallo MWS, vielen Dank für deine Antwort. Das mit dem Werte ersetzen, hatte ich schon probiert. Leider ohne Ergebnis, was mir weitergeholfen hätte. Ich werde deine Anregungen ausprobieren. Schönen Tag noch, Alexander
Geil, ich dachte immer Quelltext würde dazu dienen, den Programmcode für Menschen lesbar zu machen. Aber dieser... Man hätte wenigstens mal die Variablen und If-Ausdrücke kommentieren können.
Stefan ⛄ F. schrieb: > Geil, ich dachte immer Quelltext würde dazu dienen, den > Programmcode für > Menschen lesbar zu machen. Aber dieser... > > Man hätte wenigstens mal die Variablen und If-Ausdrücke kommentieren > können. Ich hatte zuerst gedacht, das wäre in Brainf*ck geschrieben. Aber die Abwesenheit von ›ComeFrom‹ hatte mich stutzig werden lassen. Das ist ein BASIC Programm! (Bin mir nicht ganz sicher, aber ich vermute das steht für Beginner … After Significant Intoxication … Coding)
Auch der Schaltplan enthält nicht empfehlenswerte Mängel. Am Eingang des Spannungsreglers fehlt der Abblock-Kondensator. Die Ruhestromaufnahme des Spannungsreglers wird die Batterie binnen weniger Tage entladen, auch wenn die "Lampe" gar nicht verwendet wird. An S1 fehlt ein Pull-Up Widerstand, er wird empfindlich auf Radiowellen reagieren und schnell kaputt gehen das der notwendige Mindest-Strom nicht erreicht wird. Mir fehlt da eine Leistungsstufe am Ausgang. Man wird ja wohl kaum leine Lampe mit 20mA LED ausbauen wollen. Falls es nur ums Schaltungsprinzip ginge, warum hat sie dann einen Spannungsregler? Da hätte man dann einfach einen Pin mit 5V beschriften können oder 4,5V Batterien verwenden können.
MWS schrieb: > Evtl. reicht es auch aus, wenn Du überall wo "255" steht durch "170" > ersetzt. > Damit Du flexibler bist, fügst Du ein: > > Const Maxhell = 170 > > Alle "255" ersetzt Du durch "Maxhell". Oder einen Widerstand vor den Streifen basteln. So bekommt man ihn dunkler und behält trotzdem alle 256 Stufen. ----
>
1 | Dim Analog As Word |
2 | Dim Dimm As Word |
Wozu diese Worde?
Alexander G. schrieb: > Leider ohne Ergebnis, was mir weitergeholfen hätte. Der Code ist nun wirklich sagenhaft grottig, aber hier würde ich die Effekte des Ergebnisses erfahren wollen und nicht dass es Dir nicht weiter half. Mir helfen unerwünschte Ergebnisse beim Verständnis. Der Timer0 ist so konfiguriert, dass ein Wert von 255 = voll Low am Ausgang bedeutet und 0 = voll High der PWM. D.h. Du müsstest alle "0", welche die Grenzen der PWM bedeuten auf "85" setzen, darfst dabei aber keine "0" ändern, die mit der Tastenfunktion/Logik zu tun haben. Wenn Du dagegen wie vor alle "255" auf "170" ändern möchtest, dann ändere
1 | Tccr0a = &B11110001 |
in
1 | Tccr0a = &B10100001 |
Die PWM bei Programmstart wäre voll High, also müsste noch
1 | An = 0 : Neu = 0 : Pwm = 255 |
in
1 | An = 0 : Neu = 0 : Pwm = 0 |
angepasst werden
> Ich werde deine Anregungen ausprobieren.
Hier die Subroutinen-Methode.
Nachdem sowieso zwei unbenutzte Variablen "Analog" und "Dimm"
existieren, nutze eine davon.
Du ersetzt jedes
1 | Ocr0a = Pwm |
im Code durch ein
1 | Gosub Skale |
Unten, nach dem letzten "Loop" hängst Du an:
1 | Skale: |
2 | Analog = Pwm * 2 |
3 | Analog = Analog / 3 |
4 | Ocr0a = Analog + 85 |
5 | Return |
Damit wird ein Wertebereich von 0 - 255 zu einem von 85 - 255.
Hallo vielen lieben Dank an Alle für die Hilfe. Eine kleine Änderung an 3 Einträgen hat es dann gebracht: $regfile = "Attiny13.dat" $crystal = 1200000 $hwstack = 10 $framesize = 17 $swstack = 0 Dim Hell As Word Dim An As Word Dim Aus As Word Dim Pressed As Word Dim Neu As Word Dim Heller As Word Dim Dunkler As Word Dim Pwm As Word Dim Analog As Word Dim Dimm As Word Const Starthelligkeit = 255 Config Portb.0 = Output Config Portb.2 = Input Tccr0a = &B11110001 : Tccr0b = &B00000010 : Ocr0b = 255 Ocr0a = 255 : Portb.2 = 1 An = 0 : Neu = 0 : Pwm = 255 Hell = 425 - Starthelligkeit 'GEÄNDERT Dunkler = Hell If Dunkler = 170 Then Dunkler = 255 'GEÄNDERT Do If Pinb.2 = 0 Then Incr Pressed : Waitms 1 : Neu = Heller End If If Pwm = 170 Then Heller = 0 'GEÄNDERT If Pwm = 255 Then Heller = 1 If Pressed > 250 Then If Heller = 0 Then Incr Pwm Else Decr Pwm Waitms 30 End If If Pinb.2 = 1 And Pressed > 0 And Pressed < 250 Then If Pressed < 50 Then If Pwm = 0 Then Do Incr Pwm : Ocr0a = Pwm : Waitms 5 Pressed = 0 : Neu = 1 : An = 1 Loop Until Pwm = Dunkler Or Pinb.2 = 0 Else Do Decr Pwm : Ocr0a = Pwm : Waitms 5 Pressed = 0 : Neu = 0 : An = 1 Loop Until Pwm = 0 Or Pinb.2 = 0 End If Elseif An = 1 Then Do Incr Pwm : Ocr0a = Pwm : Waitms 5 Pressed = 0 : Neu = 1 : An = 0 Loop Until Pwm = 255 Or Pinb.2 = 0 Else Do Decr Pwm : Ocr0a = Pwm : Waitms 5 Pressed = 0 : Neu = 0 : An = 1 Loop Until Pwm = Hell Or Pinb.2 = 0 End If If Pinb.2 = 0 Then Pressed = 250 Elseif Pressed > 0 And Pinb.2 = 1 Then If Neu = 1 Then Heller = 0 If Neu = 0 Then Heller = 1 Pressed = 0 : Waitms 100 End If If Pwm = 255 Then An = 0 Else If Aus > 5 Then An = 1 Incr Aus : Ocr0a = Pwm Loop Der Wert von 170 kommt zustande, weil der LED Streifen als Scalenbeleuchtung in ein Radio eingebaut wird und der Strom 200mA nicht übersteigen soll. Danke an MWS, EAF und auch an Stefan F. (stefanus). Stefan ⛄ F. schrieb: > Am Eingang des Spannungsreglers fehlt der Abblock-Kondensator. > > Die Ruhestromaufnahme des Spannungsreglers wird die Batterie binnen > weniger Tage entladen, auch wenn die "Lampe" gar nicht verwendet wird. > > An S1 fehlt ein Pull-Up Widerstand, er wird empfindlich auf Radiowellen > reagieren und schnell kaputt gehen das der notwendige Mindest-Strom > nicht erreicht wird. > > Mir fehlt da eine Leistungsstufe am Ausgang. Die Schaltung sitzt hinter einem Netzteil und den Abblock Kondensator hatte ich bereits eingebaut. Den Pull Up Widerstand löte ich noch ein. Danke für den Hinweis. Als Leistungsstufe sitzt da ein IRLML6244 Mosfet. EAF schrieb: > Oder einen Widerstand vor den Streifen basteln. > So bekommt man ihn dunkler und behält trotzdem alle 256 Stufen. Das hatte ich im Notfall eingeplant. Ich wollte es aber etwas eleganter haben. Gruß Alexander
Norbert schrieb: > Stefan ⛄ F. schrieb: >> Geil, ich dachte immer Quelltext würde dazu dienen, den >> Programmcode für >> Menschen lesbar zu machen. Aber dieser... >> >> Man hätte wenigstens mal die Variablen und If-Ausdrücke kommentieren >> können. > > Ich hatte zuerst gedacht, das wäre in Brainf*ck geschrieben. > Aber die Abwesenheit von ›ComeFrom‹ hatte mich stutzig werden lassen. > > Das ist ein BASIC Programm! (Bin mir nicht ganz sicher, aber ich vermute > das steht für Beginner … After Significant Intoxication … Coding) Jede Sprache kann man beschissen verwenden. Und ein guter Entwickler kommt mit jeder Sprache klar und hilft. Und ja, in der Form liest sich der Code einfach nur bescheiden und ist nie optimiert worden. „Es funktioniert ja….“
Uwe D. schrieb: > ein guter Entwickler > kommt mit jeder Sprache klar und hilft. Ich sage mal so: Wenn ich wirklich wollen würde, dann könnte ich diesen Quelltext durchaus durchblicken. Aber, der erste Anblick nimmt mir jede Lust, mich weiter damit freiwillig zu beschäftigen. Deswegen kommt von mir dieses mal keine Hilfe.
Beitrag #6784123 wurde von einem Moderator gelöscht.
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.