LED's flakern bei erster µC Schaltung

OP #1329226
Hi!

Hab mich gestern mal an meine erste µC Schaltung gemacht. Die besteht 
aus:

12 x LED blau
12 x LED grün
12 x LED rot

als RGB Cluster verlschaltet

Zur Steuerung verwende ich nen Atmega 8-16PU.

Nun zum Problem:

Habe nen Fader programmiert, der eben alle Farben durchfadet (hat aber 
auch andere Funktionen). Beim faden der LED's fällt mir auf, dass die 
LED's flakern anfangen.
Wieso das?


Programmiert wurde in Bascom, hier mal das Programm:

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


Config Timer0 = Timer , Prescale = 64
On Ovf0 Fade
Enable Timer0

Config Int0 = Rising
On Int0 Level_change
Enable Int0

Enable Interrupts


Config Pinb.3 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output

Led_red Alias Portb.3
Led_blue Alias Portb.4
Led_green Alias Portb.5

Dim Z_red As Byte
Dim L_red As Byte
Dim Z_green As Byte
Dim L_green As Byte
Dim Z_blue As Byte
Dim L_blue As Byte
Dim Rgb As Byte
Dim Modus As Byte

L_red = 0
L_green = 0
L_blue = 0



Do
If Modus = 0 Then
   L_red = 255
   L_green = 255
   L_blue = 255
End If
If Modus = 2 Then
   L_red = 0
   L_green = 255
   L_blue = 255
End If
If Modus = 3 Then
   L_red = 255
   L_green = 0
   L_blue = 255
End If
If Modus = 4 Then
   L_red = 255
   L_green = 255
   L_blue = 0
End If
If Modus = 5 Then
   L_red = 0
   L_green = 0
   L_blue = 0
End If

If Z_red > L_red Then Led_red = 1 Else Led_red = 0
Z_red = Z_red - 1


If Z_green > L_green Then Led_green = 1 Else Led_green = 0
Z_green = Z_green - 1


If Z_blue > L_blue Then Led_blue = 1 Else Led_blue = 0
Z_blue = Z_blue - 1



Loop

End

Fade:
If Modus = 1 Then
   If Rgb = 0 Then
      If L_red > 0 Then
         L_red = L_red - 1
      End If
      If L_blue < 255 Then
         L_blue = L_blue + 1
      End If
      If L_red = 0 And L_blue = 255 Then
         Rgb = 1
      End If
   End If
   If Rgb = 1 Then
      If L_green > 0 Then
         L_red = L_red + 1
         L_green = L_green - 1
      End If
      If L_red = 255 And L_green = 0 Then
         Rgb = 2
      End If
   End If
   If Rgb = 2 Then
      If L_blue > 0 Then
         L_green = L_green + 1
         L_blue = L_blue - 1
      End If
      If L_green = 255 And L_blue = 0 Then
         Rgb = 0
      End If
   End If
End If
Return

Level_change:
Rgb = 0
If Modus < 5 Then
   Modus = Modus + 1
Else
   Modus = 0
End If

Return




Um das Ganze zu visualisiern gibts n kleines Vid:
http://www.youtube.com/watch?v=R3lKg6HOt-s


Bitte um kleine Hilfe, was ich da falsch gemacht habe.

mfg
Tommy
OP #1329243
@Peter:
Timer Interrupt ist doch unterm Config vom Timer:
On Ovf0 Fade

Sind das wirklich "nur" 100kHz? Dachte das wären 1MHz... wie stell ich 
das auf 16MHz um?

einfach

$crystal = 16000000

?

@lothar:
das Programm funktioniert ansonsten einwandfrei, Code stimmt also.

Mfg
Tommy
#1329277
Thomas Berg schrieb:
> @Peter:
> Timer Interrupt ist doch unterm Config vom Timer:
> On Ovf0 Fade

Aber was Fade Deiner Meinung nach machen soll, steht nirgends.
Im Code von Fade ist keine PWM zu erkennen.
In der Main-Loop sieht es nach PWM aus und das ist Schrott.
Du mußt Deine Programme kommentieren, sonst weiß keiner, wie es 
funktioniert und Du nach ein paar Monaten auch nicht mehr.


> Sind das wirklich "nur" 100kHz? Dachte das wären 1MHz... wie stell ich
> das auf 16MHz um?

An Deiner Hardware und mit den Fusebits.

> $crystal = 16000000

Damit sagst Du nur dem Compiler, auf was Du Deine Hardware eingestellt 
hast.
Er kennt ja Deine Hardware nicht.


> @lothar:
> das Programm funktioniert ansonsten einwandfrei, Code stimmt also.

Prust.
Solange ein Fehler auftritt, kann kein Teil einer Software als 
fehlerfrei bezeichnet werden.

Da sind außerdem noch mehr Fehler (z.B. Entprellen).


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.