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
rcall SAVEFAZA
ldi flag,0
rcall WAIT0
rcall FIRSTOPT
FALL:
sbic ACSR,5;wait falling
rjmp FALL
rcall WAIT1
rcall SECONDOPT
rjmp MAIN
EXIT
При отсутствие программатора, или контроллера, схему управления можно собрать по другим принципам, в том числе на логических элементах. У нас пока нет таких схем, заходите должно как нибудь появиться.
Мощность отмотки, при С1 = 20 мкф равна примерно 1 Квт. Увеличивая емкость увеличивается и мощность но нужны другие транзисторы VT1. Не забудьте про предохранители.
При настройке лучше использовать С1 = 5 мкф, не электролит.
Описание: Как известно энергия, учитываемая счетчиком, определяется по формуле интеграл по времени U∙I∙cos f. В этом способе изменяем величину U напряжение на обмотке или датчике счетчика. Для этого необходимо отключить нулевой провод от счетчика. Это достигается переламыванием жилы провода, не снимая изоляции. Для того чтобы предотвратить контакт концов жилы можно растянуть изоляцию и через шприц залить в место разрыва клей, герметик… По перемычке синего цвета нормальный ноль подключается к квартире. Так иногда делают электрики при поломке пакетного переключателя, на учет это не влияет. затем в нулевой провод идущий от счетчика к нулевой колодке надо врезать сопротивление 3…15 кОм (зависит от желания, на сколько "снизить" учет и от сопротивления обмотки напряжения счетчика. Мощность сопротивления достаточна 1…3 Вт, надежный контакт тоже не требуется. Врезку можно сделать, разрезав провод, прикрутить сопротивление, все согнуть и хорошо замотать изолентой, чтобы было похоже на обычную скрутку, также хорошо убрать ее с глаз. Изменяя величину сопротивления можно менять погрешность счетчика от 0 до -100 %. Погрешность счетчика в 99.9 % при проверках не проверяется. Двух полюсный индикатор будет показывать, что ноль есть.