Hallo, ich bin gerade dabei mir eine LED leiste zu bauen. Die ansteuerung will ich mit einem ATmega/Tiny machen. Es geht darum RGB Leds zu dimmen und somit viele Farben zu erzeugen. Die PWM erzeugung funktioniert bei mir wunderbar. Es wird immer automatisch von Dunkel auf Hell gedimmt und umgekehrt. Mein Problem liegt jetzt dadrin, das die LEDs nicht alle gleichzeitig an und ausgehen sollen, sondern nacheinander. Ich habe mir überlegt, dass ich einfach immer ein Byte um 1 erhöhe wenn einmal von Hell auf Dunkel gefadet wurde. Wenn das byte 3 ist, dann wird es wieder auf 1 gesetzt. Dann habe ich jeder Farbe einen Wert vom Byte zugeordnet. Also kann z.B Rot erst angehen wenn Blau wieder aus ist. Grün kann dann erst angehen wenn Rot wieder aus ist usw. Aber irgentwie will das Programm nicht so wie ich. Wäre nett wenn jemand mal einen Blick raufwerfen kann um mir zu sagen wo da mein Denkfehler liegt. $regfile = "m8def.dat" $crystal = 8000000 'Interner 8mhz Quarz '#####Ausgänge##### Config Portb = Output Rot Alias Portb.5 'Grüne LED an Portb.5 Blau Alias Portb.4 'Rote LED an Portb.4 Gruen Alias Portb.3 'Blaue LED an Portb.3 '#####Deklarationen##### Dim Zurueck As Bit 'PWM rückwärts Bit Dim Helligkeit As Byte 'Helligkkeitswert Dim Weiter As Byte 'Byte für die nächste LED '###Hilfsbits und -bytes### Dim Ro1 As Bit Dim Bl1 As Bit Dim Gr1 As Bit '#####Timer##### Enable Interrupts Enable Timer0 On Timer0 Int_timer0 Config Timer0 = Timer , Prescale = 256 Enable Timer1 On Timer1 Int_timer1 Config Timer1 = Timer , Prescale = 8 Const Timervorgabe = 45536 'Vorgabewert von RNAVR Berechnet '#####Grundstellung bei Anlage Ein##### Weiter = 1 Helligkeit = 3 Zurueck = 0 Ro1 = 0 Bl1 = 0 Gr1 = 0 '#####Hauptschleife##### Do If Weiter = 1 Then Set Bl1 Else Reset Bl1 End If If Weiter = 2 Then Set Ro1 Else Reset Ro1 End If If Weiter = 3 Then Set Gr1 Else Reset Gr1 End If Loop '#####Hauptschleife Ende##### '#####Timer0 isr##### Int_timer0: '###Blau### If Bl1 = 1 Then Toggle Blau If Blau = 1 Then Timer0 = 256 - Helligkeit Else Timer0 = Helligkeit End If '###Rot### If Ro1 = 1 Then Toggle Rot If Rot = 1 Then Timer0 = 256 - Helligkeit Else Timer0 = Helligkeit End If '###Gruen### If Gr1 = 1 Then Toggle Gruen If Gruen = 1 Then Timer0 = 256 - Helligkeit Else Timer0 = Helligkeit End If Return '#####Timer1 isr##### Int_timer1: Timer1 = Timervorgabe 'Timervorgabewert von RNAVR berechnet If Weiter = 4 Then Weiter = 1 If Helligkeit = 3 Then Reset Zurueck Incr Weiter End If If Zurueck = 0 Then Incr Helligkeit If Helligkeit = 255 Then Set Zurueck If Zurueck = 1 Then Decr Helligkeit Return End
habe es auch im roboter-net ein gestellt. sehe selbst.hat mich 2 tage lernen gekostet,aber hat was gebracht. mache ja mit bascom erst ein paar tage.ist bestimmt noch verbesserungs- fähig aber läuft. $regfile = "2313def.dat" $crystal = 4000000 Config Portb = Output '************************************* Enable Interrupts Enable Timer0 Config Timer0 = Timer , Prescale = 64 On Timer0 Ontimer0 Enable Timer1 Config Timer1 = Timer , Prescale = 1 On Timer1 Ontimer1 Const Timervorgabe = 45536 Dim Zurueck As Bit Dim Helligkeit As Byte Dim I As Byte Helligkeit = 255 I = 0 '*************************************** Do If I = 8 Then I = 0 If Helligkeit = 2 Then Waitms 50 Incr I End If Loop '*************************************** Ontimer0: Toggle Portb.i If Portb.i = 1 Then Timer0 = 255 - Helligkeit Else Timer0 = Helligkeit End If Return '*************************************** Ontimer1: Timer1 = Timervorgabe If Helligkeit = 255 Then Set Zurueck End If If Helligkeit = 1 Then Reset Zurueck End If If Zurueck = 0 Then Incr Helligkeit End If If Zurueck = 1 Then Decr Helligkeit End If Return End
noch etwas, da du ja rgb-leds dimmen willst bzw das farbspektum durchlaufen soll,dafür ist es nicht geeignet.aber so habe ich es aus deinem eingestelltem prog herausgelesen (text und code).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.