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:
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







Zitieren

Lesezeichen