- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 37

Thema: Kleine Led Wandleuchte

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    Anzeige

    Praxistest und DIY Projekte
    so ich habe mir mal kurz zeit genommen den code ein bisschen zu kommentieren... und ihn zu veröffentlichen... viel spass beim durchlesen ist vielleicht ein bisschen umständlich programmiert

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    '$framesize = 512
    '$swstack = 512
    '$hwstack = 512
    
    Config Timer1 = Timer , Prescale = 1
    On Timer1 Timer_irq
    Const Timervorgabe = 65219
    Enable Timer1
    
    Config Rc5 = Pinb.6
    Dim Address As Byte , Command As Byte
    
    Enable Interrupts
    
    Config Portc.0 = Output
    Config Portc.1 = Output
    Config Portc.2 = Output
    Config Portc.3 = Output
    Config Portc.4 = Output
    Config Portc.5 = Output
    Config Portd.0 = Output
    Config Portd.1 = Output
    Config Portd.2 = Output
    Config Portd.3 = Output
    Config Portd.4 = Output
    Config Portd.5 = Output
    Config Portd.6 = Output
    Config Portd.7 = Output
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portb.2 = Output
    
    'Variabeln für 3 Farben pro LED und insgesamt 5 LED's
    Dim Ledr(5) As Byte
    Dim Ledg(5) As Byte
    Dim Ledb(5) As Byte
    
    'Variabeln für zufalszahlen
    Dim Zufall_1 As Byte
    Dim Zufall_2 As Byte
    Dim Zufall_3 As Byte
    Zufall_1 = 60
    Zufall_2 = 130
    Zufall_3 = 200
    
    'Temp variabel für diverse zwischenspeicherungen
    Dim Temp As Word
    
    'Variabeln im eram für dauerhafte speicherung
    Dim Speicher(90) As Eram Byte
    Dim Zeiger As Byte
    
    'Zählervariabel für Pwm
    Dim Pwm As Byte
    Pwm = 100
    
    'Variabel für laufender fliessender Farbübergang
    Dim Tim As Long
    Dim Zaehler As Byte
    Dim Progst(5) As Byte
    Dim Prog6 As Bit
    
    'Zählervariabel für diverse Schlaufen
    Dim I As Byte
    
    'Variabeln für Farbprogrammierung
    Dim Progmod As Bit
    Dim Rot As Bit
    Dim Gruen As Bit
    Dim Blau As Bit
    Dim Led As Byte
    Dim Tempr As Byte
    Dim Tempg As Byte
    Dim Tempb As Eram Byte
    Dim Aktprog As Byte
    Dim Aktprogtemp As Byte
    
    'Bei Start die ersten Farbwerte laden
    Zeiger = 0
    For I = 1 To 5
       Incr Zeiger
       Ledr(i) = Speicher(zeiger)
       Incr Zeiger
       Ledg(i) = Speicher(zeiger)
       Incr Zeiger
       Ledb(i) = Speicher(zeiger)
    Next I
    
    Dim Geschw As Long
    Geschw = 1000
    
    
    
    Do
    
    'Standbymodus alle Led's aus
    If Aktprog = 99 Then
           Aktprogtemp = 99
           For I = 1 To 5
              Ledr(i) = 0
              Ledg(i) = 0
              Ledb(i) = 0
           Next
    End If
    
    'Infrarotempfang
    Getrc5(address , Command)
    
    If Address = 0 Then
       Command = Command And 127
    End If
    
    '**********Abspielmodus******************
    If Progmod = 0 Then
    
       'die 2 Status LED's Ausschalten
       Portb.1 = 0
       Portb.2 = 0
    
       'Infrarotempfang und Programm zuweisung
       If Command = 60 And Aktprog <> 99 And Aktprog <> 6 Then Progmod = 1
       If Command = 12 Then Aktprog = 99
       If Command = 1 Then Aktprog = 0
       If Command = 2 Then Aktprog = 1
       If Command = 3 Then Aktprog = 2
       If Command = 4 Then Aktprog = 3
       If Command = 5 Then Aktprog = 4
       If Command = 6 Then Aktprog = 5
       If Command = 7 Then Aktprog = 6
       If Command = 8 Then Aktprog = 7
       If Command = 9 Then Aktprog = 8
    
       'Programme für feste Farbwerte
       If Aktprog = 0 Or Aktprog = 1 Or Aktprog = 2 Or Aktprog = 3 Or Aktprog = 4 Or Aktprog = 5 Then
       Prog6 = 0
         If Aktprog <> Aktprogtemp Then
            Aktprogtemp = Aktprog
            Zeiger = Aktprog * 15
            For I = 1 To 5
               Incr Zeiger
               Ledr(i) = Speicher(zeiger)
               Incr Zeiger
               Ledg(i) = Speicher(zeiger)
               Incr Zeiger
               Ledb(i) = Speicher(zeiger)
            Next I
         End If
        End If
    
        'Zufalsfarben für einzelne LED nacheinander
        If Aktprog = 7 Then
          Aktprogtemp = Aktprog
          Prog6 = 0
             If Command = 32 Then
                Geschw = Geschw + 2000
                Portb.1 = 1
                Portb.2 = 1
                Waitms 2
                Portb.1 = 0
                Portb.2 = 0
             End If
             If Command = 33 Then
                Geschw = Geschw - 2000
                Portb.1 = 1
                Portb.2 = 1
                Waitms 2
                Portb.1 = 0
                Portb.2 = 0
             End If
             If Geschw < 3000 Then
                Geschw = 3000
                Portb.1 = 1
                Waitms 100
                Portb.2 = 1
                Waitms 100
                Portb.1 = 0
                Portb.2 = 0
             End If
             If Geschw > 500000 Then
                Geschw = 500000
                Portb.1 = 1
                Waitms 100
                Portb.2 = 1
                Waitms 100
                Portb.1 = 0
                Portb.2 = 0
             End If
             If Tim > Geschw Then
               Tim = 0
               Incr I
               If I >= 5 Then I = 0
               Temp = Zufall_1 And Zufall_2
               Temp = Temp * 100
               Temp = Temp / 255
               Ledr(i) = Temp
               Temp = Zufall_1 And Zufall_3
               Temp = Temp * 100
               Temp = Temp / 255
               Ledg(i) = Temp
               Temp = Zufall_3 And Zufall_2
               Temp = Temp * 100
               Temp = Temp / 255
               Ledb(i) = Temp
             End If
        End If
    
        'Zufallsfarben für alle LED's miteinander
        If Aktprog = 8 Then
          Aktprogtemp = Aktprog
          Prog6 = 0
             If Command = 32 Then
                Geschw = Geschw + 2000
                Portb.1 = 1
                Portb.2 = 1
                Waitms 2
                Portb.1 = 0
                Portb.2 = 0
             End If
             If Command = 33 Then
                Geschw = Geschw - 2000
                Portb.1 = 1
                Portb.2 = 1
                Waitms 2
                Portb.1 = 0
                Portb.2 = 0
             End If
             If Geschw < 3000 Then
                Geschw = 3000
                Portb.1 = 1
                Waitms 100
                Portb.2 = 1
                Waitms 100
                Portb.1 = 0
                Portb.2 = 0
             End If
             If Geschw > 500000 Then
                Geschw = 500000
                Portb.1 = 1
                Waitms 100
                Portb.2 = 1
                Waitms 100
                Portb.1 = 0
                Portb.2 = 0
             End If
             If Tim > Geschw Then
               Tim = 0
               Incr I
               If I >= 5 Then I = 0
               Temp = Zufall_1 And Zufall_2
               Temp = Temp * 100
               Temp = Temp / 255
               Ledr(1) = Temp
               Ledr(2) = Temp
               Ledr(3) = Temp
               Ledr(4) = Temp
               Ledr(5) = Temp
               Temp = Zufall_1 And Zufall_3
               Temp = Temp * 100
               Temp = Temp / 255
               Ledg(1) = Temp
               Ledg(2) = Temp
               Ledg(3) = Temp
               Ledg(4) = Temp
               Ledg(5) = Temp
               Temp = Zufall_3 And Zufall_2
               Temp = Temp * 100
               Temp = Temp / 255
               Ledb(1) = Temp
               Ledb(2) = Temp
               Ledb(3) = Temp
               Ledb(4) = Temp
               Ledb(5) = Temp
             End If
        End If
    
        'Laufender Farbübergang
        If Aktprog = 6 Then
          Aktprogtemp = Aktprog
    
          If Prog6 = 0 Then
           Prog6 = 1
           For I = 1 To 5
              Progst(i) = I
              Ledr(i) = 0
              Ledg(i) = 0
              Ledb(i) = 0
           Next
           Ledg(2) = 50
           Ledr(3) = 100
           Ledr(4) = 50
          End If
    
          'If Tim > Geschw Then
             Incr Zaehler
             For I = 1 To 5
                If Progst(i) = 1 Then
                   Ledr(i) = 100
                   Ledg(i) = Ledg(i) + 1
                   Ledb(i) = 0
                End If
                If Progst(i) = 2 Then
                   Ledr(i) = 100
                   Ledg(i) = Ledg(i) + 1
                   Ledb(i) = 0
                End If
                If Progst(i) = 3 Then
                   Ledg(i) = 100
                   Ledr(i) = Ledr(i) - 1
                   Ledb(i) = 0
                End If
                If Progst(i) = 4 Then
                   Ledg(i) = 100
                   Ledr(i) = Ledr(i) - 1
                   Ledb(i) = 0
                End If
                If Progst(i) = 5 Then
                   Ledg(i) = 100
                   Ledb(i) = Ledb(i) + 1
                   Ledr(i) = 0
                End If
                If Progst(i) = 6 Then
                   Ledg(i) = 100
                   Ledb(i) = Ledb(i) + 1
                   Ledr(i) = 0
                End If
                If Progst(i) = 7 Then
                   Ledb(i) = 100
                   Ledg(i) = Ledg(i) - 1
                   Ledr(i) = 0
                End If
                If Progst(i) = 8 Then
                   Ledb(i) = 100
                   Ledg(i) = Ledg(i) - 1
                   Ledr(i) = 0
                End If
                If Progst(i) = 9 Then
                   Ledb(i) = 100
                   Ledr(i) = Ledr(i) + 1
                   Ledg(i) = 0
                End If
                If Progst(i) = 10 Then
                   Ledb(i) = 100
                   Ledr(i) = Ledr(i) + 1
                   Ledg(i) = 0
                End If
                If Progst(i) = 11 Then
                   Ledr(i) = 100
                   Ledb(i) = Ledb(i) - 1
                   Ledg(i) = 0
                End If
                If Progst(i) = 12 Then
                   Ledr(i) = 100
                   Ledb(i) = Ledb(i) - 1
                   Ledg(i) = 0
                End If
             Next I
    
             If Zaehler = 50 Then
                Zaehler = 0
                For I = 1 To 5
                   Incr Progst(i)
                   If Progst(i) = 13 Then Progst(i) = 1
                Next I
             End If
           End If
        'End If
    
    
    End If
    
    '*********** Programmiermodus ************
    If Progmod = 1 Then
       Portb.1 = 1
       Portb.2 = 1
    
       'Speichern der Programmierten Farben im Eram
       If Command = 41 Then
          Progmod = 0
          Zeiger = Aktprog * 15
          For I = 1 To 5
              Incr Zeiger
              Speicher(zeiger) = Ledr(i)
              Incr Zeiger
              Speicher(zeiger) = Ledg(i)
              Incr Zeiger
              Speicher(zeiger) = Ledb(i)
          Next I
       End If
    
       'Farbauswahl = Rot
       If Command = 55 Then
          Rot = 1
          Gruen = 0
          Blau = 0
       End If
       'Farbauswahl = grün
       If Command = 54 Then
          Rot = 0
          Gruen = 1
          Blau = 0
       End If
       'Farbauswahl = Blau
       If Command = 52 Then
          Rot = 0
          Gruen = 0
          Blau = 1
       End If
    
       'Ledauswahl erhöhen
       If Command = 17 Then
          Waitms 100
          If Led < 5 Then Incr Led
          Tempr = Ledr(led)
          Tempg = Ledg(led)
          Tempb = Ledb(led)
          Ledr(led) = 0
          Ledg(led) = 0
          Ledb(led) = 0
          Waitms 200
          Ledr(led) = Tempr
          Ledg(led) = Tempg
          Ledb(led) = Tempb
       End If
    
       'Led auswahl erniedrigen
       If Command = 16 Then
          Waitms 100
          If Led > 1 Then Decr Led
          Tempr = Ledr(led)
          Tempg = Ledg(led)
          Tempb = Ledb(led)
          Ledr(led) = 0
          Ledg(led) = 0
          Ledb(led) = 0
          Waitms 200
          Ledr(led) = Tempr
          Ledg(led) = Tempg
          Ledb(led) = Tempb
       End If
    
       'Bei der Ausgewählten LED die Ausgewälte Farbe erhöhen und bei erreichen des Maximums 3maliges blinken der LED
       If Command = 32 Then
          If Rot = 1 And Ledr(led) < 101 Then Incr Ledr(led)
          If Gruen = 1 And Ledg(led) < 101 Then Incr Ledg(led)
          If Blau = 1 And Ledb(led) < 101 Then Incr Ledb(led)
          If Ledr(led) = 101 Or Ledg(led) = 101 Or Ledb(led) = 101 Then
             For I = 1 To 3
               Tempr = Ledr(led)
               Tempg = Ledg(led)
               Tempb = Ledb(led)
               Ledr(led) = 0
               Ledg(led) = 0
               Ledb(led) = 0
               Waitms 100
               Ledr(led) = Tempr
               Ledg(led) = Tempg
               Ledb(led) = Tempb
               Waitms 100
             Next I
             If Rot = 1 And Ledr(led) > 0 Then Decr Ledr(led)
             If Gruen = 1 And Ledg(led) > 0 Then Decr Ledg(led)
             If Blau = 1 And Ledb(led) > 0 Then Decr Ledb(led)
          End If
       End If
       'Bei der Ausgewählten LED die Ausgewälte Farbe erniedrigen
       If Command = 33 Then
          If Rot = 1 And Ledr(led) > 0 Then Decr Ledr(led)
          If Gruen = 1 And Ledg(led) > 0 Then Decr Ledg(led)
          If Blau = 1 And Ledb(led) > 0 Then Decr Ledb(led)
       End If
       'Alle Farben der Ausgewählten LED auf 0 setzen
       If Command = 13 Then
          Ledr(led) = 0
          Ledg(led) = 0
          Ledb(led) = 0
       End If
    
    End If
    
    
    Loop
    
    
    
    
    
    
    Timer_irq:
      'Timervorgabe laden
      Timer1 = Timervorgabe
    
      'Diverse Variabeln erhöhen
      Incr Tim
    
      Incr Zufall_1
      Incr Zufall_2
      Incr Zufall_3
    
      'Zähler für pwm erniedrigen
      Decr Pwm
    
      'bei einem durchlauf der PWM variabel alle ports Ausschalten
      If Pwm = 0 Then
        Portd = 0
        Portc = 0
        Portb.0 = 0
        Pwm = 100
      End If
    
    
      'Ports je nach Farbintensität einschalten
      If Pwm <= Ledg(1) Then Portc.0 = 1
      If Pwm <= Ledb(1) Then Portc.1 = 1
      If Pwm <= Ledr(1) Then Portc.2 = 1
    
      If Pwm <= Ledg(2) Then Portc.3 = 1
      If Pwm <= Ledb(2) Then Portc.4 = 1
      If Pwm <= Ledr(2) Then Portc.5 = 1
    
      If Pwm <= Ledg(3) Then Portd.0 = 1
      If Pwm <= Ledb(3) Then Portd.1 = 1
      If Pwm <= Ledr(3) Then Portd.2 = 1
    
      If Pwm <= Ledg(4) Then Portd.3 = 1
      If Pwm <= Ledb(4) Then Portd.4 = 1
      If Pwm <= Ledr(4) Then Portd.5 = 1
    
      If Pwm <= Ledg(5) Then Portd.6 = 1
      If Pwm <= Ledb(5) Then Portd.7 = 1
      If Pwm <= Ledr(5) Then Portb.0 = 1
    
    Return
    gruss bluesmash

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2006
    Ort
    Aachen
    Alter
    34
    Beiträge
    718
    hmm danke! Werd mich mal einlesen =)

  3. #13
    Moderator Begeisterter Techniker Avatar von tucow
    Registriert seit
    15.01.2006
    Ort
    Düsseldorf
    Alter
    38
    Beiträge
    269
    Danke für den Code, wie sieht ess mit einem Video aus?
    Gruß
    Andreas




    Mein: Humanoide // nanoCopter Projekt
    Das Raspberry Pi als: Wifi Access Point // Wifi Router

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2006
    Ort
    Aachen
    Alter
    34
    Beiträge
    718
    Wäre noch cool, brauch auch noch ne Vorstellung wie das aussieht.
    Muss sowas ähnliches ja in dem Geschenk Thread nachbauen.
    Kannst ja mal gucken wenn du irgentwann mal Zeit hast.

    Mfg
    Stefan

  5. #15
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    wie gesagt, der farbverlauf ist seeehr langsam... da kann man kaum was auf nem video erkennen... da die soft pwm sehr viel recourcen frist bleibt kaum zeit für anderes... werde in den nächsten tagen noch ne andere programm version testen, habe es nochmals zurückbekommen von der freundin um zu testen... (war übrigens auch ein geschenk und ist sehr gut angekommen ) werde dann noch ein video machen...

    gruss bluesmash

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2006
    Ort
    Aachen
    Alter
    34
    Beiträge
    718
    Das mit dem PWM weiß ich auch nicht wie ich anstellen kann.
    Musst bei gelegenheit mal den Code mit erklärung posten^^

  7. #17
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    mein mega8 läuft auch nur mit dem internen 8MHz Oszillator, externer Quarz mit 16MHz währe schon viel besser...
    bei 25Hz und 100 Farbabstufungen liegt die Timerzeit bei 0.4ms das sind aber imerhin noch 3200 takte zwischen den timerinterrupts... aber Bascom ist anscheinend nicht so recourcenschonend wenn es um interrupts geht... aber 3200 takte ist noch jede menge...

    gruss bluesmash

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Bluesmash,
    Gratuliere zu Deinem Projekt!
    Nachdem ich Deine Lampe gesehen habe, hab ich sie nachgebaut
    Allerdings habe ich einen Fotowiderstand verwendet, damit sie bei Dunkelheit an, und an Tage ausgeht.
    Ich werde die Tage ein paar Fotos machen...
    Ja die Soft PWM ist nicht ohne, ich habe es so gelöst, daß ich nur 6 Bit PWM gemacht habe, und auf Interrupts verzichtet habe.
    Damit bleibt noch genug Zeit um die Helligkeit zu messen und die Farbverläufe zu machen.

    Gruß Sebastian

    P.S. Ich habe auch einen Mega8 mit interner Taktung von 8 MHz
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2006
    Ort
    Aachen
    Alter
    34
    Beiträge
    718
    Rückt mal den Code raus Jungens

  10. #20
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.04.2005
    Ort
    Aarau
    Alter
    41
    Beiträge
    982
    ja stimmt die pwm könt man eigentlich direkt im hauptprogramm unterbringen somit lässt sich auch einiges an takte sparen und man hat die maximale wiederholrate.... muss mal mein prog umschreiben

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress