Also: zusätzliche TimerXirq aufrufen klappt bei mir nicht... sind die Timer wohl nicht für ausgelegt...?
--
Das Programm habe ich nun auf Hardware PWM umgeschrieben.
Das merkwürdige: Mit den internen 8MHz läuft das Programm. Mit den externen 16MHz läuft es nicht mehr.
Jemand eine Idee?
(ich wollte noch ein paar funktionen hinzufügen und dafür reichen die 8MHz nicht - deswegen auf 16MHz - dachte ich so....)

Gibt es statt der Case-Anweisung eine µC freundlichere Möglichkeit?

gruß, Tobi

Code:
'RGB - LED - Leiste über AT-Mega8
'mit HARDWARE - PWM
'Tobias Blome - 13.01.2008
'
'-------------------------------------------------------------------------------
'INFO´s


'PWM_Wert = Sollwert für Software PWM

'RC5 Eingang über Pin5 / PD3

'Led Rot  = Portb.1 = 1
'Led Grün = Portb.2 = 1
'Led Blau = Portb.3 = 1

'Auswahl = 1 -> Rot+Grün
'Auswahl = 2 -> Grün+Blau
'Auswahl = 3 -> Blau+Rot

'-------------------------------------------------------------------------------
'Version 0.01
'  -Grundfunktion Regenbogen ok
'
'
'-------------------------------------------------------------------------------
'Konfiguration µC:
$regfile = "m8def.dat"                                      'AT-Mega32
$crystal = 8000000                                          'Quarz: 8 MHz intern
$baud = 9600                                                'Baudrate definieren


'-------------------------------------------------------------------------------
'Timer0 = 8 Bit
'wird für RC5 Auswertung benötigt!!!
Config Rc5 = Pind.3                                         'Timer0 in Benutzung!!!
Portd.3 = 1

'Timer1 = 16 Bit
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256
Enable Interrupts

'Timer2 = 8 Bit SOFTWARE - PWM
Config Timer2 = Pwm , Compare Pwm = Clear Up , Prescale = 256
Enable Interrupts
'-------------------------------------------------------------------------------
'Variablen:
'-------------------------------------------------------------------------------
Dim Address As Byte , Command As Byte                       'RC5
Dim Flag As Bit                                             'RC5

Dim Rot As Byte , Gruen As Byte , Blau As Byte

Dim Programm As Byte                                        'Lichtprogramm wählen

Dim Auswahl As Byte                                         'Wert 1-6 um die PWM auf die LED´s aufzuteilen

Dim Pwm As Byte
Dim Pwm_m As Bit

'Tasten festlegen
Up Alias 32                                                 'Prog.Bezeichnung ALIAS Real Taste
Down Alias 33
Progplus Alias 16                                           'Lichtprogramm wählen
Progminus Alias 17


'-------------------------------------------------------------------------------
'Vor Programmstart:
Rot = 0
Gruen = 0
Blau = 0

Flag = 1                                                    'Merker für PWM
Programm = 1                                                'Lichtprogramm wählen
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

Do
Compare1a = Rot
Compare1b = Gruen
Ocr2 = Blau

'-------------------------------------------------------------------------------
'Rc5 Code einlesen:
Getrc5(address , Command)
   If Flag = 1 Then

  'Print "wait for command"
     Flag = 0
   End If
   If Address <> 255 Then
     Reset Command.7                                        ' reset toggle bit

     ''Print "Address: " ; Address
     'Print "Command: " ; Command
     Flag = 1
   End If

'-------------------------------------------------------------------------------
'RC5 Code umsetzen:

'Lichtprogramm Wählen
If Command = Progplus Then
   If Programm = 6 Then
   Programm = 1
   Else
   Incr Programm
   End If
Waitms 200
End If

If Command = Progminus Then
   If Programm = 1 Then
   Programm = 6
   Else
   Decr Programm
   End If
Waitms 200
End If

'-------------------------------------------------------------------------------
'LED-PAAR auswählen (Handbetrieb)
'Auswahl 1 über FB LED Rot und Grün
If Command = 1 Then
Auswahl = 1
End If

'Auswahl 2 über FB LED Grün und Blau
If Command = 2 Then
Auswahl = 2
End If

'Auswahl 3 über FB LED Blau und Rot
If Command = 3 Then
Auswahl = 3
End If

'-------------------------------------------------------------------------------
'Springe zu Lichtprogramm


If Programm = 1 Then
Gosub Regenbogendauer
End If



Loop

End
'===============================================================================

'===============================================================================
Regenbogendauer:

If Pwm = 255 Then                                           'Wenn Led1 100% dann Merker zum hochzählen setzen
Pwm_m = 0
Incr Auswahl                                                'LED´s durchschieben
End If

If Pwm = 0 Then                                             'Wenn Led1 0% dann Merker zum runterzählen setzen
Pwm_m = 1
Incr Auswahl                                                'LED´s durchschieben
End If

If Auswahl = 7 Then                                         'Auswahl auf 6 LED-Paaren begrenzen
Auswahl = 1
End If


'PWM hoch/runter zählen
If Pwm_m = 1 Then
Pwm = Pwm + 5
End If

If Pwm_m = 0 Then
Pwm = Pwm - 5
End If

      Select Case Auswahl                                   'LED Paar wählen

            Case 1 : Rot = Pwm
                     Gruen = 255 - Pwm
                     Blau = 0
            Case 2 : Rot = Pwm
                     Gruen = 0
                     Blau = 255 - Pwm
            Case 3 : Rot = 0
                     Gruen = Pwm
                     Blau = 255 - Pwm
            Case 4 : Rot = 255 - Pwm
                     Gruen = Pwm
                     Blau = 0
            Case 5 : Rot = 255 - Pwm
                     Gruen = 0
                     Blau = Pwm
            Case 6 : Rot = 0
                     Gruen = 255 - Pwm
                     Blau = Pwm
       End Select


Return


'-------------------------------------------------------------------------------
'Sprungmarken
'-------------------------------------------------------------------------------





'===============================================================================
'Pinbelegung µC     RGB LED Leiste
'===============================================================================
'    AT MEGA 8
'    +---U---+
'PC6 +1    28+ PC5
'PD0 +2    27+ PC4
'PD1 +3    26+ PC3
'PD2 +4    25+ PC2
'PD3 +5    24+ PC1
'PD4 +6    23+ PC0
'Vcc +7    22+ GND
'GND +8    21+ AREF
'PB6 +9    20+ AVCC
'PB7 +10   19+ PB5  /PROG
'PD5 +11   18+ PB4  /PROG
'PD6 +12   17+ PB3  /PROG
'PD7 +13   16+ PB2
'PB0 + 14 15 + Pb1
'    +-------+


'PB0 =
'PB1 = Software PWM LED ROT
'PB2 = Software PWM LED GRÜN
'PB3 = Software PWM LED BLAU
'PB4 =
'PB5 =
'PB6 =
'PB7 =
'PC0 =
'PC1 =
'PC2 =
'PC3 =
'PC4 =
'PC5 =
'PC6 = RESET
'PC7 =
'PD0 =
'PD1 =
'PD2 =
'PD3 = IR - RC5 Eingang
'PD4 =
'PD5 =
'PD6 =
'PD7 =