Cuando estaba en la escuela secundaria, tuve un profesor que insistía en que la atenuación ligera era una tarea demasiado difícil para un estudiante como yo para abordar.
Así desafiado, pasé bastante tiempo aprendiendo y comprendiendo la regulación de la luz basada en la fase usando triacs, y programando el 16C84 desde el microchip para realizar esta hazaña. Terminé con este código de ensamblaje:
'Timing info:
'There are 120 half-cycles in a 60Hz AC waveform
'We want to be able to trigger a triac at any of 256
'points inside each half-cycle. So:
'1 Half cycle takes 8 1/3 mS
'1/256 of one half cycle takes about 32.6uS
'The Pause function here waits (34 * 0xD)uS, plus 3uS overhead
'Overhead includes CALL PAUSE.
'This was originally assembled using Parallax's "8051 style"
'assembler, and was not optimized any further. I suppose
'it could be modified to be closer to 32 or 33uS, but it is
'sufficient for my testing purposes.
list 16c84
movlw 0xFD '11111101
tris 0x5 'Port A
movlw 0xFF '11111111
tris 0x6 'Port B
WaitLow: 'Wait for zero-crossing start
btfss 0x5,0x0 'Port A, Bit 1
goto WaitLow 'If high, goto WaitLow
WaitHigh: 'Wait for end of Zero Crossing
btfsc 0x5,0x0 'Port A, Bit 1
goto WaitHigh 'If low, goto waitHigh
call Pause 'Wait for 0xD * 34 + 3 uS
bcf 0x5,0x1 'Put Low on port A, Bit 1
movlw 0x3 'Put 3 into W
movwf 0xD 'Put W into 0xD
call Pause 'Call Pause, 105 uS
bsf 0x5,0x1 'Put High on Port A, Bit 1
decf 0xE 'Decrement E
movf 0x6,W 'Copy Port B to W
movwf 0xD 'Copy W to 0xD
goto Start 'Wait for zero Crossing
Pause: 'This pauses for 0xD * 34 + 3 Micro Seconds
'Our goal is approx. 32 uS per 0xD
'But this is close enough for testing
movlw 0xA 'Move 10 to W
movwf 0xC 'Move W to 0xC
Label1:
decfsz 0xC 'Decrement C
goto Label1 'If C is not zero, goto Label1
decfsz 0xD 'Decrement D
goto Pause 'If D is not zero, goto Pause
return 'Return
Por supuesto que necesitarías modificar esto para el chip que mencionas, y tal vez agregar una rutina serial barata para la entrada, ya que tu chip no tiene un puerto de 8 bits de ancho para escuchar, pero la idea es que aparentemente El trabajo complejo se puede hacer en muy poco código: puede colocar diez copias del programa anterior en el 10F200.
Puede encontrar más información sobre el proyecto en mi página Light Dimming . Por cierto, nunca le mostré esto a mi profesor, pero terminé haciendo varias plataformas de iluminación para mi amigo DJ.