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