Abend,
da ich zurzeit mit meiner Fernsteuerung nicht weiterkomme, erstmal das wichtigere.
Es soll eine RGB Led verschiedene Farben "durchfadern".
Ich habe mir dazu
http://www.smartprogramming.de/index.php?siteid=10
angeguckt, und den Code auf eine RGB hin gestutzt.
Leider leuchen aber nur Rot & Grün. Und das auch nur sehr langsam.
Problem ist wahrscheinlich das ich einen ATMeaga 16 mit 16Mhz anstadt einen Mega8 mit 8 Mhz benutze.
Leider komme ich nicht wirklich weiter.
Mein Gedankengang ist das vielleicht der letzte Teil der Soubroutine "verschluckt" wird.
Zudem wundern mich die ganzen Waitms im Code
Wäre nett wenn ihr mal drübergucken könntet, dürfte nur eine kleinigkeit sein, aber leider hab ich wohl noch verständlichkeits Probleme mit den Timern..
MfgCode:$regfile = "m16def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Waitms 50 'Einschwingzeit Config Pinb.0 = Output Config Pinb.1 = Output Config Pinb.2 = Output 'Timer konfigurieren, Vorteiler auf 1 Config Timer0 = Timer , Prescale = 1 'Definiere den Interrupthandler On Ovf0 Tim0_isr Enable Timer0 'timer einschalten Enable Interrupts 'interrupts einschalten Dim R1 As Byte ' In diese Variablen muss man Dim G1 As Byte ' im Hauptprogram die gewünschten Dim B1 As Byte ' Ausgabewerte laden Dim Z As Word 'Byte 'Zähler Dim Ri1 As Byte ' Hilfsregister Dim Gi1 As Byte Dim Bi1 As Byte 'Variablen für Hauptprogramm Dim A As Byte 'Eine Schleifenvariable Z = 0 G1 = 0 R1 = 0 B1 = 0 'Hauptschleife================================================================== Do 'Rot For A = 0 To 254 R1 = R1 + 1 'Waitms 0,1 Next Waitms 10 For A = 0 To 254 R1 = R1 - 1 'Waitms 1 Next 'Grün For A = 0 To 254 G1 = G1 + 1 'Waitms 1 Next Waitms 10 For A = 0 To 254 G1 = G1 - 1 'Waitms 1 Next 'Blau For A = 0 To 254 B1 = B1 + 1 'Waitms 1 Next Waitms 10 For A = 0 To 254 B1 = B1 - 1 'Waitms 1 Next 'Blau/Grün For A = 0 To 254 B1 = B1 + 1 G1 = G1 + 1 'Waitms 1 Next Waitms 10 For A = 0 To 254 B1 = B1 - 1 G1 = G1 - 1 'Waitms 1 Next 'Blau/Rot For A = 0 To 254 B1 = B1 + 1 R1 = R1 + 1 'Waitms 1 Next Waitms 10 For A = 0 To 254 B1 = B1 - 1 R1 = R1 - 1 'Waitms 1 Next 'Grün/Rot For A = 0 To 254 G1 = G1 + 1 R1 = R1 + 1 'Waitms 1 Next Waitms 10 For A = 0 To 254 G1 = G1 - 1 R1 = R1 - 1 'Waitms 1 Next 'Grün/Rot/Blau For A = 0 To 254 G1 = G1 + 1 R1 = R1 + 1 B1 = B1 + 1 'Waitms 1 Next Waitms 10 For A = 0 To 254 G1 = G1 - 1 R1 = R1 - 1 B1 = B1 - 1 'Waitms 1 Next Loop 'Hauptschleife ende============================================================= 'Interupthandler, wird bei jedem Timerüberlauf(bei 8 MHz und Vorteiler=1 alle 32 µSec.) 'aufgerufen: Tim0_isr: If Z = 0 Then 'Gewünschte Ausgabewerte an Ri1 = R1 'Hilfsregister übergeben Gi1 = G1 Bi1 = B1 Z = 255 End If Z = Z - 1 'PWM Kanäle 'RGB LED 1 If Ri1 > 0 Then Portb.0 = 1 'bei R = 51 wird hier Else 'Port D.3 51 mal auf 1 Portb.0 = 0 'und 205 mal auf 0 geschaltet End If 'das ergibt bei 5V Ub im Mittel Ri1 = Ri1 - 1 ' ca. 1 V If Ri1 = 255 Then Ri1 = 0 If Gi1 > 0 Then Portb.1 = 1 Else Portb.1 = 0 End If Gi1 = Gi1 - 1 If Gi1 = 255 Then Gi1 = 0 If Bi1 > 0 Then Portb.2 = 1 Else Portb.2 = 0 End If Bi1 = Bi1 - 1 If Bi1 = 255 Then Bi1 = 0 Return 'Interupthandler ende
Stefan
Lesezeichen