Bascom Software PWM mit CD4094

Bonze

Neues Mitglied
16. Jan. 2010
516
0
0
Altenkirchen (Pfalz)
Sprachen
  1. BascomAVR
hab hier mit nem Mega8 ne Software PWM realisiert, welche über ein CD4094 Schieberegister RGR leds ansteuert. Die Ausgänge des Cd4094 sind an ein ULN2003 Angeschlossen welchesdie RGB leds antreibt.

Es funktioniert eigentlich sehr gut , schöne farben usw.
jedoch hab ich das Problem, dass die farbven obwohl sie nicht angesteuert werden (laut programm bzw den versch Werten) leicht glimmen, und mir somit die Puren Farbtöne ein wenig versauen. Vl weiss ja jemand woran es liegt, also solange ich die farben einzeln ansteuere gar kein Problem, anscheinend gibts jetzt doch mit der Pwm ansteuerung ein Problem,.

hier der Programmausschnitt welches das erledigt.

- pwm_timer wird immer durch timerint aufgerufen
- programmwahl wird bei jedem programmedurchlauf aufgerufen und beeinflusst die farben ,.
Code:
Pwm_timer:
                            'PWM isrm, welche die Farbregelung durchführt
    If Pwmctr < 64 Then                                               'max 64 durchläufe, dann neuer zyklus
      Incr Pwmctr
    Else
      Pwmctr = 0
    End If

    If Bright < Pwmctr Then
       Helligkeit = 0                                                 'Helligkeit an
    Else
      Helligkeit = 1                                                  'Helligkeit aus
    End If

    If Red < Pwmctr Then
       Ausgabebyte.0 = 0                                              'Rote led an
    Else
       Ausgabebyte.0 = 1                                              'Roteled aus
    End If

    If Green < Pwmctr Then
       Ausgabebyte.1 = 0                                              'Grüne led an
    Else
       Ausgabebyte.1 = 1                                              'Grüne led aus
    End If

    If Blue < Pwmctr Then
       Ausgabebyte.2 = 0                                              'Blaue led an
    Else
       Ausgabebyte.2 = 1                                              'Blaue led aus
    End If

    'Schieberegisteransteuerung CD4094
    'Sendet daten auf Soft SPi raus

      If Ausgabebyte <> Ausgabebyte_alt Then                          'ändert sich der Wert nicht mehr wird nicht mehr der ausgang gepulst,
                                                      '=> somit ergeben sich satte farben
                 Latch1 = 0                                           'STROBE setzen
                 Latch2 = 0
                 Latch3 = 0
                 Shiftout Dout , Clock , Ausgabebyte , 0 , 8 , 0      'daten rausschieben, 1µs warten
                 Latch1 = 1                                           'latch zurücksetzen
                 Latch2 = 1
                 Latch3 = 1
                 Latch1 = 0                                           'latch setzen
                 Latch2 = 0
                 Latch3 = 0
                 Ausgabebyte_alt = Ausgabebyte                        'ausgangsbyte zwischenspeichern

      End If

Return
Programmwahl:

              If Red < Tred Then                                      'wert aktuell zu tablewert anpassen
                 Incr Red
              Elseif Red > Tred Then
                 Decr Red
              Else
                 Erreicht.0 = 1
                 'Print "rotwert erreicht!"
              End If

              If Green < Tgreen Then                                  'wert aktuell zu tablewert anpassen
                 Incr Green
              Elseif Green > Tgreen Then
                 Decr Green
              Else
                 Erreicht.1 = 1
                 'Print "grünwert erreicht!"
              End If

              If Blue < Tblue Then                                    'wert aktuell zu tablewert anpassen
                 Incr Blue
              Elseif Blue > Tblue Then
                 Decr Blue
              Else
                 Erreicht.2 = 1
                 'Print "blauwert erreicht!"
              End If


              Waitms Fadezeit                                         'zeit zwischen jedem fadeschritt


              If Erreicht = 7 Then
              Wait Haltezeit                                          'zeit welche farbe gehalten wird bis es losfaded zur nächsten
                 'Print "farbe erreicht, lade nächste zielwerte,"
                 Print "Farbe: " ; Colourcounter
                 Erreicht = 0
                 Colourcounter = Colourcounter + 1
                 If Colourcounter >= 16 Then                          'colourcounter zurücksetzen
                    Colourcounter = 0
                 End If
                 Tred = Lookup(colourcounter , Redtable)
                 Tgreen = Lookup(colourcounter , Greentable)
                 Tblue = Lookup(colourcounter , Bluetable)
              End If

$data

Redtable:
   Data 064 , 025 , 064 
Greentable:
   Data 000 , 023 , 036 
Bluetable:
   Data 000 , 023 , 013
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)