Hallo,

ich habe ein Problem mit der Phasenanschnitt Steuerung über einen Triac.

Die Nulldurchgangserkennung habe ich mit einem Optokoppler realisiert.
Funktioniert soweit auch ganz gut (Jede Sekunde werden genau Hundert Nulldurchgänge gezählt).

Als Optotriac für die Zündung verwende ich einen MOC3020 und als Schalttriac einen BTB12 (Ein- bzw. Ausschalten fünktioniert einwandfrei).

Ich besitze leider kein Oszilloskop, was natürlich die Überprüfung meiner Software sehr schwierig macht.

Vielleicht kann mir jemand bei eine kurzen Blick auf die Software helfen, um evtl. Grundprobleme zu beseitigen.

Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 19200


Config Pind.2 = Input
Config Pind.5 = Output


Portd.2 = 1

Triac Alias Portd.5

Config Timer1 = Timer , Prescale = 8
'16 bit timer mit prescaler 8 und 16 Mhz ergibt
'Zeitspanne von 0 - 32 ms


Config Int0 = Change
On Int0 Int0_isr
On Timer1 Timer_irq
Enable Interrupts
Enable Timer1
Enable Int0

Dim X As Word



X = 55536                                                   '5ms




'**************************************************************************
'**************************************************************************

 Do

  nop
 ' Incr X
 ' Print X
 ' Waitms 100

Loop

'**************************************************************************
'**************************************************************************



Int0_isr:

  Start Timer1

Return


'*************************


Timer_irq:

  Stop Timer1

  Timer1 = X

  Set Triac
  Waitus 30
  Reset Triac

Return
Mein Gedanke war: Bei Nulldurchgang wird ein Interrupt ausgelöst, indem der Timer1 gestartet wird. Dieser zählt dann je nach gewünschter Helligkeit eine bestimmte Zeit ab und löst einen Timerinterrupt aus, in der der Triac kurz gezündet wird. Dieser löscht sich beim Nulldurchgang selber und das ganze beginnt wieder von vorne.

ERGEBNIS: Lampe dimmt ca 2 mal in der Sekunde leicht runter und dann wieder hoch!?

Irgendwie scheint mir das so, als ob das nicht ganz synchron läuft.

Allerdings habe ich auch schon versucht Pausen einzufügen, da der Nulldurchgangs Interrupt ja nicht genau bei Null ausgelöst wird und zudem die Timerwerte von 0 - 10 ms zu ändern. -> ohne Erfolg.

Vielleicht hat jemand eine Idee, wo der Hund begraben sein könnte?

Gruß Daniel