Шрифт:
Закладка:
Модули А, В, С, D идентичные и собираются по следующей схеме:
(www.pozitron.ru)
Детали: VD1-fl243, VD2 — Д226; VD3-KC156A.
С1-20мкф. 12в
DAI — PC120 (оптрон).
VT1- KT809 (400 в, З А) на радиаторе (для всех вместе 100x150x50мм) VT2 — КТ315 R1 — 10 ком, 1 Вт
R2 — 5.1 Ом (многоваттное примерно 10 ватт),
R3, R4, - 30 ком; R5 — 20 ком, R6 — 1, 1 ком. 0,5ватт
Остальные сопротивления 1 Вт.
Микросхема D1 является простым микроконтроллером, который работает по программе, записываемой в ее память (в соответствие с графиком включения ключей Рис. 1) Программирование осуществляется через разъем XI.
Прошивка настроена на импульсы 2кГц и скважность 5050.
Эти параметры можно менять перед компиляцией.
Для программирования скопируйте в блокнот и сохраните с расширением
HEX
Прошивка:
:020000020000FC
:020000000FC02F
:100020000FED0DBF08E107BB00E001BB34EC29E098
:1000300002E00EBDC49АС39А41Е090Е090Е010Е067
:10004000D0E07FC060E06DBD60E06CBD089500E46D
:1000500008BF08B742FD06C06DB5B61731F06DB5E3
:10006000B61710F006FFF5CF08956CB56C1788F33E
:1000700041E06C17CCF7089488941795D79588942D
:100080001795D7950895C39ADCB51DB5D30F121FE8
:100090001BBDDABD44E0DBDFC39840E00895D2DF4A
:1000A00ОC498B22FC32F04D040FFFDCF40E0089585
:1000B00ОC39A82E370E0A80F971F9BBDAABDC7DF5C
:100ОC00040FD08C0C39882E370E0A80F971F9BBD56
:1000D000AABDBDDF0895CCB5BDB5C30FB21FACB589
:1000E0009DB504D040FFFDCF40E00895C49A82E35F
:1000F00070E0A80F971F9BBDAABDA9DF40FD08C0F7
:1001000ОC49882E370E0A80F971F9BBDAABD9FDF34
:100110000895С49ADCB51DB5D30F121F44E01BBD72
:10012000DABD95DF40E0C4980895DCB51DB5A3DFC6
:100130003D2F212FD0E010E090E0A0E0C0E0B0E043
:100140000895459BFECF40FFF0DF40E0A8DF9BDF36
:0A0150004599FECFC0DFDDDFF4CFDC
:00000001FF
Исходник:
INCLUDE "2313def.inc"
EQU HIGHTFREQ=4000
EQU HIGHTFREQTIME=4000000/HIGHTFREQ
EQU CDDRB=0b00011000; настраиваем входы/выходы
EQU CDDRD=0b00000000
EQU PUTTCCR1B=0b00000010; настраиваем контрольный регистр устанавливаем делитель
EQU FIRSTFREQ=10000/4; начальная частота
EQU SMALLPERIOD0=50;HIGHTFREQTIME; частота для промежуточных длительность нуля
EQU SMALLPERIOD1=50;HIGHTFREQTIME; частота для промежуточных длительность единицы
/Variable
DEF smallperiodh=r23.DEF smallperiodl=r24.DEF smallth=r25;
DEF smalltl=r26
DEF periodh=rl8; значение 1/4 периода
DEF periodl=rl9
DEF temp=rl6
DEF temph=r17
DEF tempi=r29
DEF tempi=r22
DEF timeh=r27; значение компаратора. DEF time1=r28
DEF flag=r20; need in for correct initilization
; Program
CSEG
ORG $00
rjmp RESET
ORG $10
RESET:
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,CDDRB; put in/out
out DDRB,temp
ldi temp,CDDRD
out DDRD,temp
ldi periodl,low(FIRSTFREQ); put Initial frequency
таймера, импульсов импульсов
ldi periodh,high(FIRSTFREQ)
ldi temp,PUTTCCR1B; put CK
out TCCR1B,temp
sbi P0RTB,4; extinguish diods
sbi PORTB,3
ldi flag,0b00000001
ldi smallth,0
ldi smallth,0
ldi temph,0
ldi tempi,0
rjmp MAIN
RSTTIMER:; reset's counter
ldi tempi,0
out TCNT1H,tempi
ldi tempi,0
out TCNT1L,tempi; RESET timeout timer
ret
WAITMATCH:
ldi temp,0b01000000; очищаем 7 бит
out TIFR,temp
LOOP:
in temp,TIFR; wait for matching flag
sbrc flag,2
rjmp LOOPT
in tempi, TCNT1H; сравнение старш. частей текущ. вр. и 1/4 пер.
ср timeh,temp1
breq Р
in tempi, TCNT1H
cp timeh,tempi
brio EXIT
LOOPT:; идем сюда из диодов, так как нам не надо сравнивать текущ. вр. с вр. тек. + 1/4 пер
sbrs temp,6
rjmp LOOP
EXIT:
ret
P:; сравнение младш частей
in temp1, TCNT11
cp temp1,time1
brio LOOP
ldi flag,1
cp tempi,time2
brge EXIT
DIV:; divide in 4
sec
clс
ror temph
ror temp1
clс
ror temph
ror tempi ret
FIRSTOPT:; process the first diode
sbi PORTB,3; light the diode
in tempi,TCNT11
in temph,TCNT1H
add tempi,period1
adc temph,periodh
out OCR1AH,temph; put the time of maching
out OCR1AL,temp1
ldi flag,0b00000100
rcall WAITMATCH; wait match
cbi PORTB,3;extinguish the diode
ldi flag,0
ret
WAIT0:; wait falling
rcall RSTTIMER
cbi PORTB, 4; init
mov timeh,periodh
mov timel,period1
WT:
rcall SMALLPULSES1 sbrs
flag,0
rjmp WT
ldi flag,0
ret
SMALLPULSES1:;forms the intermediate pulses
sbi PORTB,3; light the diode
ldi smallperiod1,low(SMALLPERIODO); put Initial frequency for intermediate pulses for 0
ldi smallperiodh,high(SMALLPERIODO)
add smallt1,smallperiod1
dc smallth,smallperiodh
out OCR1AH,smallth; put the time of maching
out OCR1AL,smallt1
rcall WAITMATCH
sbrc flag,0
rjmp EX
cbi PORTB,3/extinguish the diode
ldi smallperiodl,low(SMALLPERIOD1); put Initial frequency for intermediate pulses for 1
ldi smallperiodh,high(SMALLPERIOD1)
add smallt1,smallperiod1
adc smallth,smallperiodh
out OCR1AH,smallth; put the time of maching
out 0CR1AL,smalltl
rcall WAITMATCH
EX:
ret
WAIT1:; wait raising
in time1,TCNT11; init
in timeh,TCNT1H
add time1,period1
adc timeh,periodh
in smallt1, TCNT11
in smallth, TCNT1H
W1:
rcall SMALLPULSES2
sbrs flag,0
rjmp W1
ldi flag,0
ret
SMALLPULSES2:;forms the intermediate pulses
sbi PORTB,4; light the diode
ldi smallperiod1,low(SMALLPERIOD0); put Initial frequency for intermediate pulses for 0
ldi smallperiodh,high(SMALLPERIOD0)
add smallt1,smallperiod1
adc smallth,smallperiodh
out OCR1AH,smallth; put the time of maching
out OCR1AL,smallt1
rcall WAITMATCH
sbrc flag,0
rjmp EX1
cbi PORTB,4/extinguish the diode
ldi smallperiod1,low(SMALLPERIOD1); put Initial frequency for intermediate pulses for 1
ldi smallperiodh,high(SMALLPERI0D1)
add smallt1,smallperiod1
adc smallth,smallperiodh
out OCR1AH,smallth; put the time of maching
out OCR1AL,smallt1
rcall WAITMATCH
EX1:
ret
SECONDOPT:; process the second diode
sbi P0RTB,4; light the diode
in temp1,TCNT11
in temph,TCNT1H
add temp1,period1
adc temph,periodh
ldi flag,0b00000100
out OCR1AH,temph; put the time of maching
out OCR1AL,temp1
rcall WAITMATCH; wait match
ldi flag,0
cbi PORTB,4/extinguish the diode
ret
SAVEFAZA:; calculate new period
in temp1,TCNT11
in temph,TCNT1H
rcall DIV
mov period1,temp1
mov periodh,temph
ldi temp1,0
ldi temph,0
ldi smallth,0
ldi smallt1,0
ldi time1,0
ldi timeh,0
ret
MAIN:
sbis ACSR,5;wait rise
rjmp MAIN
sbrs flag,0