bastian07
27.02.2008, 23:18
Guten Abend zusammen,
habe einen Dimmer aufgebaut mit Hilfe der schaltpläne von pcdimmer.de
und ein paar Code schnipseln hier aus dem Forum.
Jetzt läuft der dimmer einwandfrei. Nur kann ich leider aus nachfolgendem Problem nur eine Lampe dimmen.
Aktuell wird beim mega8 bei jedem Nulldurchgang der Sinusspannung ein interruptaus gelöst und ein Timer gestartet der in abhängigkeit der Timervorgabe den Triac zündet. Also wird das Dimmen durch die Timervorgabe gesteuert. wenn ich jetzt aber mehrere Lampen dimmen möchte bräuchte ich ja auch mehrere Timervorgaben bzw Dimmer.
Es müsste aber auch irgendwie möglich sein ohne die Timervorgabe zu regelen.
Ich hatte irgendwie dran gedacht das man den Timer auf 20 msec (Also eine Halbwelle) einstellt und mit dem Nulldurchgang startet und dann für jeden Port der dann den Triac schaltet eine abfrage macht wie weit der Timer ist und dann den Triac zündet.
Nur leider kann ich diese Idee nciht so richtig in Code umsetzten.
Bitte um Hilfe
Gruß Bastian07
Anbei noch der aktuelle Code:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Portc.0 = Output
Config Pind.4 = Input
Config Pind.3 = Input
Config Portd.6 = Output 'leds für min max
Config Portd.7 = Output
Triac Alias Portc.0
Portd.4 = 1
Portd.3 = 1
Config Timer1 = Timer , Prescale = 1
Config Int0 = Change
On Int0 Int0_isr
On Timer1 Timer_irq
Enable Timer1
Enable Int0
Enable Interrupts
Dim X As Word
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
X = 0
Do
If Pind.4 = 0 Then
Incr X
Waitus 10
End If
If Pind.3 = 0 Then
Decr X
Waitus 10
End If
If X > 64000 Then
X = 64001
Portd.6 = 1
Portd.7 = 0
End If
If X < 1 Then
X = 1
Portd.6 = 0
Portd.7 = 1
End If
Loop
Int0_isr:
Start Timer1
Return
Timer_irq:
Set Triac
Timer1 = X
Stop Timer1
Waitus 100
Reset Triac
Return
habe einen Dimmer aufgebaut mit Hilfe der schaltpläne von pcdimmer.de
und ein paar Code schnipseln hier aus dem Forum.
Jetzt läuft der dimmer einwandfrei. Nur kann ich leider aus nachfolgendem Problem nur eine Lampe dimmen.
Aktuell wird beim mega8 bei jedem Nulldurchgang der Sinusspannung ein interruptaus gelöst und ein Timer gestartet der in abhängigkeit der Timervorgabe den Triac zündet. Also wird das Dimmen durch die Timervorgabe gesteuert. wenn ich jetzt aber mehrere Lampen dimmen möchte bräuchte ich ja auch mehrere Timervorgaben bzw Dimmer.
Es müsste aber auch irgendwie möglich sein ohne die Timervorgabe zu regelen.
Ich hatte irgendwie dran gedacht das man den Timer auf 20 msec (Also eine Halbwelle) einstellt und mit dem Nulldurchgang startet und dann für jeden Port der dann den Triac schaltet eine abfrage macht wie weit der Timer ist und dann den Triac zündet.
Nur leider kann ich diese Idee nciht so richtig in Code umsetzten.
Bitte um Hilfe
Gruß Bastian07
Anbei noch der aktuelle Code:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Portc.0 = Output
Config Pind.4 = Input
Config Pind.3 = Input
Config Portd.6 = Output 'leds für min max
Config Portd.7 = Output
Triac Alias Portc.0
Portd.4 = 1
Portd.3 = 1
Config Timer1 = Timer , Prescale = 1
Config Int0 = Change
On Int0 Int0_isr
On Timer1 Timer_irq
Enable Timer1
Enable Int0
Enable Interrupts
Dim X As Word
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
X = 0
Do
If Pind.4 = 0 Then
Incr X
Waitus 10
End If
If Pind.3 = 0 Then
Decr X
Waitus 10
End If
If X > 64000 Then
X = 64001
Portd.6 = 1
Portd.7 = 0
End If
If X < 1 Then
X = 1
Portd.6 = 0
Portd.7 = 1
End If
Loop
Int0_isr:
Start Timer1
Return
Timer_irq:
Set Triac
Timer1 = X
Stop Timer1
Waitus 100
Reset Triac
Return