Hallo,
bisher habe ich nur Dimmer für eine Lampe gefunden und mit dem Wait-Befehl programmiert.
Ich benötige aber 16 Kanäle, die ich unabhängig von einander regeln kann.
Das Programm ist nun fertig, aber manchmal blinkt die Lampe(habe erst einen Ausgang drann) d.h. mal wird sie heller als der Sollwert und mal dunkler als der Sollwert - aber nur so als auf blitzen(fast im Sekundentakt). Wenn ich den Timer0 deaktiviere, dann ist das blinken weg!
Zurzeit nutze ich den Timer nur für Ausgaben - aber woran liegt das?
Tobias
Code:'Empfänger für 16 Kanal Dimmer ' V1: '- '------------------------------------------------------------------------------- 'Konfiguration µC: $regfile = "m644def.dat" 'AT-Mega32 $crystal = 18432000 'Quarz: $baud = 57600 '76800 '38400 'Baudrate definieren $hwstack = 64 ' default use 32 for the hardware stack $swstack = 64 ' default use 10 for the SW stack $framesize = 64 '------------------------------------------------------------------------------- 'Ein- Ausgänge: Ddra = &B11111111 '1 Ausgang, 0 Eingang Ddrb = &B00000000 '1 Ausgang, 0 Eingang Ddrc = &B11111111 '1 Ausgang, 0 Eingang => Pin PC7-0 als Ausgang Ddrd = &B00000000 '1 Ausgang, 0 Eingang 'PullUP Portd.2 = 1 'Eingang für Nulldurchgangerkennung '------------------------------------------------------------------------------- '8Bit Timer: Config Timer0 = Timer , Prescale = 1024 On Timer0 Timer0_irq Const Timervorgabe0 = 31 '80x/sec Bei 18 , 432Mhz Timer0 = Timervorgabe0 Enable Timer0 Enable Interrupts '16Bit Timer: Config Timer1 = Timer , Prescale = 1024 On Timer1 Timer1_irq Const Timervorgabe1 = 0 Timer1 = Timervorgabe1 Enable Timer1 Enable Interrupts Config Int0 = Rising ' INT0 so konfiguriert das Trigger bei steigender Flanke On Int0 Dimmer_null_irq ' Springe zur Interrupt-Routine Dimmer_null_irq Enable Int0 ' Interrupt0 freigeben Enable Interrupts '------------------------------------------------------------------------------- 'Variablen: '------------------------------------------------------------------------------- Dim X As Byte Dim X1 As Byte Dim T0 As Byte 'Für Timer0 Dim Null As Byte 'Config Watchdog = 1024 '2048 'Timeout = 2 Sekunden 'Start Watchdog '------------------------------------------------------------------------------- '=============================================================================== '=============================================================================== 'Hauptprogramm Do...Loop '=============================================================================== '=============================================================================== Print "Programmstart" Do X = 50 'Helligkeitswert (von 0 - 160) X1 = 160 - X '_________________________________________________ 'DIMMEN: If Timer1 > X1 Then Set Porta.0 Else Reset Porta.0 End If 'timer1 = 160 max!!! Loop End '############################################################################### '############################################################################### 'Interrupt Sub Routine - I.S.R '############################################################################### '############################################################################### Dimmer_null_irq: 'Nulldurchgangserkennung Timer1 = 0 Incr Null Return '############################################################################### Timer0_irq: Timer0 = Timervorgabe0 Incr T0 If T0 = 80 Then 'jede Sekunde T0 = 0 Print "Timer0: " ; Timer0 ; " Null: " ; Null Null = 0 End If Return '############################################################################### Timer1_irq: Print "FEHLER Timer1 ist übergelaufen!!!" Return







Zitieren

Lesezeichen