В состав своего терморегулятора для дачи решил приспособить Ваттметр.
На сайте РадиоКот эта тема обсуждалась очень плотно НО программа у них написана на СИ, камень там мега8 и самый большой минус необходимо вскрывать счетчик и менять кварц.
Многие современные счетчики в частности Меркурий выполнены не на ADE77xx а на не кварцованных микросхемах так что покупать счетчики, курочить их и искать ADE мне не хотелось. Зато на многих счетчиках есть телеметрический выход.
Вот моя попытка сделать Ваттметр на attiny2313 не вскрывая пломб счетчика.
Дано:
Меркурий 2001.5 (3200 импульсов на кВт*ч.), attiny2313, 8 мГц кварц.
Code
$regfile = "2313def.dat"
$crystal = 8000000
$baud = 19200
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising
Config Portd.6 = Input 'прерывания
Config Portb.2 = Output 'светодиод
Open "comb.0:9600,8,n,1" For Output As #1
Open "comb.1:9600,8,n,1" For Input As #2
'Так как предделитель 64 то 64/8000000*65535=0.52428 переполнений в секунду
'тобиш приблизительно 2 раза 2 Гц.
Dim Timercounter As Word '
Dim Period As Single
Dim Secund As Single
Dim Milisec As Single
Dim Flag As Bit
Dim Watt As Single
Dim F As Integer
'T=(1/F)*n тут Т-константа, n-предделитель, F-частота работы камня
'T=(1/8000000)*64=0.000008
'каждое значение таймера1 = 0.000008 сек.
Const T = 0.000008
Flag = 0
On Capture1 Zaxvat
Timercounter = 0
Flag = 0
Waitms 50
'разрешаем прерывания
Enable Interrupts
Enable Capture1
Set Portb.2
Do ' главный цикл программы
'0.52428 время переполнения таймера
'62500 0.5 sek
If Timer1 = 65535 Then
'так как он переполняется каждые 0.52428 секунды то их и складываем
Secund = Secund + 0.52428
If Secund > 255 Then Secund = 0
End If
If Flag = 1 Then
' определяем период * на коэффициент 1/8000000*64= 0,000008 примерное
'время в секундах на один тик таймера
Period = Timercounter * T
Milisec = Period + Milisec
'************************
Watt = 3600 / Milisec 'импульсов в час '
Watt = Watt * 1000 ' импульсы на 1000 ватт
Watt = Watt / 3200 ' колличество ватт
F = Watt
Print #1 , "Watt :"
Print #1 , F
Flag = 0
'Secund = 0
End If
Loop
'отрабатывает по прерыванию portd.6
Zaxvat:
Timercounter = Timer1
Milisec = Secund ' копируем значение таймера в переменную
Flag = 1
Timer1 = 0
Secund = 0 ' обнуляем таймер
Return
Расчет таймера обсуждался в разделе этого форума avrproject.ru
Проверить точность показаний я не могу т.к. на своем тестере канал измерения 10А я спалил уже давно.А на приборы которые можно подключить для проверки особой надежды нет. Так вот Лампа накаливания 100 Вт. фирмы филипс при подключении показывает 90-91 Вт. более мощные нагрузки на которых написано 2000-2200 Вт показывают в районе 1700 Вт. Зато мой старинный паяльник мощность 70 Вт. четко паказывает 70Вт. Эталонной нагрузки у меня нет.
Так вот если кому интересно и есть возможность потестировать буду очень признателен.
P.S
Не знаю на какой файлообменник выложить фотки и схемки ибо ни разу не пользовался.