Lorsque j'étais au lycée, un enseignant m'a insisté sur le fait qu'il était trop difficile pour une étudiante telle que moi de réduire l'intensité de la lumière.
C'est pourquoi j'ai passé beaucoup de temps à apprendre et à comprendre la gradation de la lumière en phase avec des triacs et à programmer le 16C84 à partir d'une puce pour réaliser cet exploit. J'ai fini avec ce code d'assemblage:
'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
Bien sûr, vous devrez modifier cela pour la puce que vous mentionnez, et peut-être ajouter une routine série bon marché pour l’entrée puisque votre puce n’a pas de port 8 bits à écouter, mais l’idée est qu’un travail apparemment complexe peut être fait dans très peu de code - vous pouvez insérer dix copies du programme ci-dessus dans le 10F200.
Vous pouvez trouver plus d’informations sur le projet sur ma page Light Dimming . D'ailleurs, je n'ai jamais montré cela à mon professeur, mais j'ai fini par installer plusieurs appareils d'éclairage pour mon ami DJ.