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 =







Zitieren

Lesezeichen