Khi tôi học cấp ba, tôi có một giáo viên khăng khăng rằng làm mờ ánh sáng là một nhiệm vụ quá khó đối với một học sinh như tôi để giải quyết.
Do đó, tôi đã dành khá nhiều thời gian để tìm hiểu và hiểu về việc làm mờ ánh sáng theo pha bằng cách sử dụng triacs và lập trình 16C84 từ vi mạch để thực hiện chiến công này. Tôi đã kết thúc với mã lắp ráp này:
'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
Tất nhiên, bạn cần sửa đổi điều này cho chip mà bạn đề cập và có thể thêm một thói quen nối tiếp giá rẻ cho đầu vào vì chip của bạn không có cổng rộng 8 bit để nghe, nhưng ý tưởng là một công việc có vẻ phức tạp có thể được thực hiện với rất ít mã - bạn có thể ghép mười bản sao của chương trình trên vào 10F200.
Bạn có thể tìm thêm thông tin dự án trên trang Light Dinkle của tôi . Ngẫu nhiên tôi chưa bao giờ trình bày điều này với giáo viên của mình, nhưng cuối cùng lại làm một số giàn đèn cho người bạn DJ của tôi.