Выбрать главу

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 мкф, не электролит.

ЧАСТЬ 4. СПОСОБ «НОЛЬ». ТРЕХФАЗНЫЙ И ОДНОФАЗНЫЙ УЧЕТ.

Описание: Как известно энергия, учитываемая счетчиком, определяется по формуле интеграл по времени UI∙cos f. В этом способе изменяем величину U напряжение на обмотке или датчике счетчика. Для этого необходимо отключить нулевой провод от счетчика. Это достигается переламыванием жилы провода, не снимая изоляции. Для того чтобы предотвратить контакт концов жилы можно растянуть изоляцию и через шприц залить в место разрыва клей, герметик… По перемычке синего цвета нормальный ноль подключается к квартире. Так иногда делают электрики при поломке пакетного переключателя, на учет это не влияет. затем в нулевой провод идущий от счетчика к нулевой колодке надо врезать сопротивление 3…15 кОм (зависит от желания, на сколько "снизить" учет и от сопротивления обмотки напряжения счетчика. Мощность сопротивления достаточна 1…3 Вт, надежный контакт тоже не требуется. Врезку можно сделать, разрезав провод, прикрутить сопротивление, все согнуть и хорошо замотать изолентой, чтобы было похоже на обычную скрутку, также хорошо убрать ее с глаз. Изменяя величину сопротивления можно менять погрешность счетчика от 0 до -100 %. Погрешность счетчика в 99.9 % при проверках не проверяется. Двух полюсный индикатор будет показывать, что ноль есть.