-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Led fader

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.03.2006
    Beiträge
    48

    Led fader

    Anzeige

    HI

    Also es geht um folgendes.

    Ich versuche einen Led fader zu Programmieren.

    Eine Led faden klappt ganz gut über einen Port.

    Jetzt wollte ich aber weitere Leds über einen anderen Port zusätlich faden lassen. Also langsamer als die erste und die andere schneller

    Nur hab ich grad nen gedanken fehler. Ich weiß einfach nicht was ich in dem Programm ändern muß damit andere Ports angesprochen werden.

    Vielleicht kann mir da mal einer auf die sprünge helfen.

    MFG

    Hier mal der code

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    
    Dim A As Word
    Dim B As Word
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 8
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    
    Do
    
    For A = 255 To 10 Step -1
    Pwm1a = A
    Waitms 10
    Next
    
    For A = 10 To 255
    Pwm1a = A
    Waitms 10
    Next
    
    For A = 255 To 100 Step -1
    Pwm1a = A
    Waitms 10
    Next
    
    For A = 100 To 255
    Pwm1a = A
    Waitms 10
    Next
    
    For A = 255 To 50 Step -1
    Pwm1a = A
    Waitms 10
    Next
    
    For A = 50 To 255
    Pwm1a = A
    Waitms 10
    Next
    
    For A = 255 To 200 Step -1
    Pwm1a = A
    Waitms 10
    Next
    
    For A = 200 To 255
    Pwm1a = A
    Waitms 10
    Next
    
    Loop
     End

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    26
    Beiträge
    601
    Hi,

    du benutzt in diesem Fall ja den Hardware PWM d.h. das Signal wird dann
    auf OC1A ausgegeben (Pwm1a) wenn du auf dem OC1B was ausgeben willst
    muss du Pwm1b benutzen also Pwm1a = 50, Pwm1b = 100. Wenn du die jetzt
    unterschiedlich schnell dimmen willst würde ich so was vorschlagen:

    Do

    I = I + 1
    Pwm1a = I

    A = A + 2
    Pwm1b = A

    Waitms 10

    Loop

    Damit wird Pwm1a langsamer gedimmt als Pwm1b da 1a nur in 1ser
    Schritten erhöht wird, 1b in 2er Schritten
    Grüße Furtion

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.03.2006
    Beiträge
    48
    so weit so gut.

    Nur fadet das ja nur aus und nicht aus und wieder ein.

    Hab das mal so gemacht. Geht soweit auch aber wie kriege ich es hin das beide zusammen läuft und nicht nacheinander

    For A = 255 To 10 Step -1
    Pwm1a = A
    Waitms 40
    Next
    For B = 255 To 10 Step -1
    Pwm1b = B
    Waitms 30
    Next

    For A = 10 To 255
    Pwm1a = A
    Waitms 20
    Next
    For B = 10 To 255
    Pwm1b = B
    Waitms 10
    Next

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    21.10.2005
    Alter
    29
    Beiträge
    41
    Eine Led faden kann man auch so http://www.b-kainka.de/bastel108.htm.
    nur so als tipp.
    is evt. einfacher.

    MfG René

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.03.2006
    Beiträge
    48
    gut ist eventuell einfacher aber die schaltung soll noch erweitert werden damit ich ca 20 Leds pro Kanal schalten kann. Deswegen dachte ich da an nen atmega8 und nen max323 als verstärker.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    26
    Beiträge
    601
    Hi,

    naja 20 Leds mit einem Atmega8 könnten etwas problematisch werden,
    da du dann den Software PWM benutzen musst, und je mehr Pwm Signale
    du erzeugst, desto mehr Zeit braucht der Chip und die daraus resultierende
    ist ein "Flackern" von Leds. Gut ich erzeuge mit einem Chip (Atmega16) 27
    Pwm Signale, aber der Chip hat dann nicht mehr wirklich viel Zeit was
    anderes zu machen (z.B. Daten von dem I²C Bus holen). Gut zu deinem
    Problem:

    Mit den ForSchleifen fadest du immer nur eine Led durch und danach die
    andere, das Faden dauert zwar unterschiedlich lange, aber passiert nicht
    gleichzeitig. Um dies zu erreichen musst du in einer For Schleife beide
    Kanäle dimmen, den einen Schneller den anderen langsamer. Dies kannst
    du dann auch per Loop Schleife machen, so wie ich das schon oben
    geschrieben habe, um das ganze zurückzufaden, also dunkler zu machen
    kannst du das einfach wieder abziehen:
    Code:
    Do
    I = I - 1
    Pwm1a = I
    A = A - 2
    Pwm1b = A
    Waitms 10
    if I = 0 or A = 0 then exit do
    Loop
    
    Do
    I = I + 1
    Pwm1a = I
    A = A + 2
    Pwm1b = A
    Waitms 10
    if I = 255 or A = 255 then exit do
    Loop
    Grüße Furtion

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    03.12.2008
    Beiträge
    5

    LED fader

    Hi,
    darf ich mich in Euer Thema einklinken, da ich ein ähnliches vor habe.
    zuerst einmal eine Grundsatzfrage
    Ich möchte LEDs -- nacheinander --- dimmen. Es ist ein Lauflicht mit 24 (oder mehr) LEDs die im Kreis angeordnet sind .
    Es soll nun so veränderet werden, dass jede LED nacheinander gedimmt wird.
    Der Atmega 8 hat 3 PWM - Ausgänge.
    Brauche ich jetzt einen Atmega mit 24 PWM ?

    Dank Eures Threads habe ich beinahe verstanden wie man ein PWM mit varibaler Frequenz erzeugt.
    was mir noch nicht klar ist, warum mehrere For -next vorhanden sind.

    Verstehe das so, das man einmal hochzählt (steigende helligkeit) und dann wieder zurückzählt.
    Bis zur nächsten LED muß dann eine weitere zeitschleife sein bis bei der nächsten LED der PWM erneut begonnen wird.

    Ist das so richtig ?

    Könnte das Programm eventuell mehr auskommentiert werden, damit ich den verlauf besser verstehen kann ?
    Gruß Uwe

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Uwe,

    24 Kanäle wird schon wegen fehlender IO-Pins nicht gehen.

    15Kanäle hab ich mit einem ATMega88 realisiert. Da ich keinen Quarz benutzen wollte und der 88er mit dem RC 8MHz schafft. Als PWM hab ich eine Softwarelösung gewählt, dann bin ich mit der Anzahl der dimmbaren Kanäle flexibel. Das flackern hält sich trotz zusätzlicher AD-Wandlung und IR-Empfang in Grenzen.
    Anbei der prinzipielle Code:

    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output

    Osccal = 255

    Dim Hell0 As Byte
    Dim Hell1 As Byte
    Dim Hell2 As Byte
    'bis hell123456 Zwinkern

    Dim Tick As Byte
    Dim Range As Byte
    Range = 100

    On Timer0 Ontimer0
    Tccr0 = &B00000001
    Timsk.toie0 = 1
    Enable Interrupts

    Hell0 = 100
    Hell1 = 10
    Hell2 = 1

    Do

    Loop

    End

    Ontimer0:
    Tick = Tick + 1
    Timer0 = 254
    If Tick >= Range Then
    Tick = 0
    End If
    If Tick < Hell0 Then
    Portb.1 = 1
    Else
    Portb.1 = 0
    End If
    If Tick < Hell1 Then
    Portb.2 = 1
    Else
    Portb.2 = 0
    End If
    If Tick < Hell2 Then
    Portb.3 = 1
    Else
    Portb.3 = 0
    END IF
    Return

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    03.12.2008
    Beiträge
    5

    Led fader

    Hallo Günter,
    habe eben einmal das Programm in den Atmega8 geladen.
    Doch da tut sich nichts.
    Kanst Du das einmal bei Dir gegen. checken um heraus zu finden ob es bei mir oder anm Programm liegt. ?

    Ziel ist es -- nach einander -- 24 oder mehr leds zu faden.
    Einen bekomme ich hin aber nicht mehr ;-(
    hier mein Programm

    $regfile = "m8def.dat"
    $crystal = 1000000 ' interner RC Oszillator

    Dim A As Word
    Dim B As Word
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1

    Config Pinb.15 = Output

    Do

    For A = 255 To 10 Step -10
    Pwm1a = A
    Waitms 50
    Next

    For A = 10 To 255 Step 10
    Pwm1a = A
    Waitms 50
    Next

    Loop
    End

    Uwe

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.556
    Config Pinb.15 = Output
    ...den Pin gibt es nicht !
    Danke an Alle, die uns bei der erfolgreichen 1.000€-Aktion der IngDiba unterstützt haben! | https://www.hackerspace-bremen.de | http://www.pixelklecks.de |

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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