- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: LED dimmen (Hilfe bei Valentinstagsgeschenk)

  1. #21
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    50
    Beiträge
    377
    Anzeige

    Praxistest und DIY Projekte
    Hallo!

    Bei 4 Mhz und einem Prescale von 64
    Code:
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 64
    wird eine PWM-Frequenz von 122 erreicht.

    4000000 (Quarz) / 64 (Prescale) = 62500 (Ticks)
    62500 (Ticks) / 256 (Gesamt Pulsweite) = 244,140625 (in eine Richtung)
    244,140625 (in eine Richtung) / 2 = 122,0703125 (in beide Richgungen = Hz)

    Es wird zuerst von 0 bis 255 hoch gezählt. Stimmt während diesem Hochzählen der Wert PWM0A mit dem Zähler überein, dann wird die LED ausgeschaltet. Kommt der Zähler bei 255 an, dann zählt er nach unten von 255 bis 0. Stimmt während diesem Herunterzählen der Wert PWM0A mit dem Zähler überein, dann wird die LED eingeschaltet. Ein mal Hochzählen und ein mal Herunterzählen ergeben insgesamt einen Impuls. Mit einem Vorteiler von 64 kann somit eine PWM-Frequenz von 122 Hz erreicht werden. Was für das Dimmen von LEDs genügt.

    Ich habe das jetzt nachgeprüft. Wenn man im Bascom den TIMERx auf PWM setzt, dann wird rauf und runter gezählt. CLEAR UP oder CLEAR DOWN entscheidet, ob die LED bei einem hohen oder bei einem niedrigen Vergleichswert (PWMxA oder PWMxb) hell oder dunkel ist.

    Das war mein erster Versuch mit Hardware-PWM. :-) Scheint gar nicht so schlecht zu funktionieren. :-b

    mfg
    Gerold
    :-)

  2. #22
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    66
    Das Geschenk war ein voller Erfolg . Vielen dank für eure Hilfe. Das mit dem Dimmen hat zwar wegen Zeitnot noch nicht hingehauen aber ich werde noch dranbleiben. Ich habe wieder eine ganze Menge von euch gelernt . Nächste Woche werd ich den mC nochmal rausnehmen und mich ans programm setzten. Irgenwann muss es ja funktionieren . Es werden also noch ein paar Posts werden.

    Gruß Malte

    PS.:Tolles Forum, weiter so [-o<

  3. #23
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Zitat Zitat von Malte0815
    Das Geschenk war ein voller Erfolg .
    Sag ich doch, Glückwunsch
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    66
    Hi hab nun endlich mein Valentinstagsgeschenk fertig gemacht und die PWM funktioniert auch einwandfrei . Ich möchte nun noch per tastendruck alle led eingeschaltet lassen und beim nächsten wieder die Pwm-sequenz. Ich bekomme es irgendwie nicht hin. Vielleicht kann mir nochmal jemand auf die Sprünge helfen.
    Code:
     $regfile = "ATtiny13.dat"
    $crystal = 4000000
    '$hwstack = 32
    '$swstack = 5
    '$framesize = 20
    
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    
    
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.4 = Output
    Config Portb.3 = Input
    Portb.3 = 1
    
    Dim A As Byte
    
    
    
    
      Do
    
    
       For A = 0 To 255 Step 2
          Pwm0a = A
          Waitms 15
    
       Next
    
       For A = 255 To 0 Step -1
          Pwm0a = A
          Waitms 5
       Next
    
        For A = 0 To 255 Step 2
          Pwm0b = A
          Waitms 15
    
       Next
    
       For A = 255 To 0 Step -1
          Pwm0b = A
          Waitms 5
       Next
       Loop
       End
    
    
    Gruß Malte

  5. #25
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Hi,

    erstell dir einfach ne subroutine "Stop_pwm:" darin machst du auch einfach ne loop mit der du nur per tastendruck "return" machst.

    In deinen Forschleifen musst du nun den Taster abfragen und "Gosub Stop_pwm" aufrufen wenn er gedrückt wurde. Dann werden die PWM werte nicht mehr geändert und du bist in stop_pwm solange du ihn wieder drückst. Dann gehts genau da weiter wo du aufgehört hast.

    Bitwait PinX.X , Reset ist übrigends ne nette Funktion
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  6. #26
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.07.2007
    Ort
    82272 Moorenweis
    Alter
    60
    Beiträge
    435
    Hab den Thread jetzt erst gesehen... Du hast also sowas wie ich gebastelt.

    Ein Womanicer, Heartopener

    Hab heute gerade Bilder hier von meiner Variante reingestellt:


    https://www.roboternetz.de/phpBB2/vi...=354574#354574

  7. #27
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    66
    Hab jetzt vieles Probiert aber ich komm beim nächsten Tastendruck aus der Sub-routine nicht mehr raus?
    Code:
    $regfile = "ATtiny13.dat"
    $crystal = 4000000
    '$hwstack = 32
    '$swstack = 5
    '$framesize = 20
    
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    
    
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.4 = Output
    Config Portb.3 = Input
    Portb.3 = 1
    
    Portb.2 = 1
    Portb.4 = 1
    
    Dim A As Byte
    
    Declare Sub Stop_pwm
    
    
      Do
    
    
       For A = 0 To 255 Step 2
          Pwm0a = A
          Waitms 15
    
       If Pinb.3 = 0 Then
       Gosub Stop_pwm
       End If
    
       Next
    
       For A = 255 To 0 Step -1
          Pwm0a = A
          Waitms 5
    
       If Pinb.3 = 0 Then
       Gosub Stop_pwm
       End If
    
       Next
    
        For A = 0 To 255 Step 2
          Pwm0b = A
          Waitms 15
    
       If Pinb.3 = 0 Then
       Gosub Stop_pwm
       End If
    
       Next
    
       For A = 255 To 0 Step -1
          Pwm0b = A
          Waitms 5
    
       If Pinb.3 = 0 Then
       Gosub Stop_pwm
       End If
    
       Next
       Loop
       End
    
      Stop_pwm:
          Do
          Loop
          Return
    Noch ne blöde Frage? Wollte mein "Kunstwerk" mal präsentieren, weiß aber nicht wie ich ein Bild hochladen kann?[/img]

  8. #28
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Zitat Zitat von Malte0815
    Hab jetzt vieles Probiert aber ich komm beim nächsten Tastendruck aus der Sub-routine nicht mehr raus?

    Noch ne blöde Frage? Wollte mein "Kunstwerk" mal präsentieren, weiß aber nicht wie ich ein Bild hochladen kann?[/img]
    Wenn dein Taster gedrückt wird ist Pinb.3 eher = 1 oder?

    ich meinte eher sowas:
    Code:
    $regfile = "ATtiny13.dat" 
    $crystal = 4000000 
    '$hwstack = 32 
    '$swstack = 5 
    '$framesize = 20 
    
    Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8 
    
    
    Config Portb.0 = Output 
    Config Portb.1 = Output 
    Config Portb.2 = Output 
    Config Portb.4 = Output 
    Config Portb.3 = Input 
    Portb.3 = 1 
    
    Portb.2 = 1 
    Portb.4 = 1 
    
    Dim A As Byte 
    
    Declare Sub Stop_pwm 
    
    
      Do 
    
    
       For A = 0 To 255 Step 2 
          Pwm0a = A 
          Waitms 15 
    
       If Pinb.3 = 1 Then 
       bitwait Pinb.3, reset  
       Gosub Stop_pwm 
       End If 
    
       Next 
    
       For A = 255 To 0 Step -1 
          Pwm0a = A 
          Waitms 5 
    
       If Pinb.3 = 1 Then 
       bitwait Pinb.3, reset  
       Gosub Stop_pwm 
       End If 
    
       Next 
    
        For A = 0 To 255 Step 2 
          Pwm0b = A 
          Waitms 15 
    
       If Pinb.3 = 1 Then 
       bitwait Pinb.3, reset  
       Gosub Stop_pwm 
       End If 
    
       Next 
    
       For A = 255 To 0 Step -1 
          Pwm0b = A 
          Waitms 5 
    
       If Pinb.3 = 1 Then 
       bitwait Pinb.3, reset  
       Gosub Stop_pwm 
       End If 
    
       Next 
       Loop 
       End 
    
      Stop_pwm: 
          Do 
               If Pinb.3 = 1 then
                   bitwait Pinb.3, reset  ' warten bis er losgelassen wird, 
                   Return                     'sonst geht er oben gleich wieder in Stop_pwm
               End if
          Loop
    bei dem bitwait muss man gucken wo es am sinnvollsten ist, ich hab es dir einfach mal so reingesetzt
    Bild hochladen: Attachment hinzufügen
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  9. #29
    Benutzer Stammmitglied
    Registriert seit
    20.01.2008
    Beiträge
    66
    So, endlich ist es fertig.
    @ T.J. ich hab deinen Code nochn bisschen umgeändert. Jetzt wird das Faden der Lichter bei Tastendruck gestoppt und beim nächsten einfach Fortgesetzt (Vielen Dank für deine Hilfe). Ich hab noch eine "Pause-Led" mit eingebaut da der Lichtwechsel ziemlich langsam verläuft. So kann man sehen ob die Pause-Funktion aktiviert ist. Hier ein paar Bilder.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken rn.jpg   rn3.jpg   rn2.jpg  

  10. #30
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Super, freut mich dass es klappt!
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

Seite 3 von 3 ErsteErste 123

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen