Вольтметр переменного тока

Звуковые генераторы, фильтры и другие аналоговые устройства (кроме радиотехники и УНЧ)
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

почему-же сьехали. когда буду передавать показания вольтметра в комп по USART - тут и пригодится кольцевой буфер. :idea:

для начала протестируем кольцевой буфер по вышеприведенному алгоритму.

с кольцевыми буферами раньше не работал. пришло время познакомится.
Реклама
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

Как-то так. :))

Код: Выделить всё

.include "m8Adef.inc"

.dseg

MyArray: .byte 12

.cseg

.org 0

rjmp RESET 
rjmp EXT_INT0 
rjmp EXT_INT1 
rjmp TIM2_COMP 
rjmp TIM2_OVF 
rjmp TIM1_CAPT 
rjmp TIM1_COMPA 
rjmp TIM1_COMPB 
rjmp TIM1_OVF 
rjmp TIM0_OVF 
rjmp SPI_STC 
rjmp USART_RXC 
rjmp USART_UDRE 
rjmp USART_TXC 
rjmp AD 
rjmp EE_RDY 
rjmp ANA_COMP 
rjmp TWSI 
rjmp SPM_RDY 



;RESET: 
EXT_INT0: 
EXT_INT1: 
TIM2_COMP: 
TIM2_OVF: 
TIM1_CAPT: 
TIM1_COMPA: 
TIM1_COMPB: 
TIM1_OVF: 
TIM0_OVF: 
SPI_STC: 
USART_RXC: 
USART_UDRE: 
USART_TXC: 
AD: 
EE_RDY: 
ANA_COMP: 
TWSI: 
SPM_RDY:

reti


              
RESET:              
			  

              ldi R16,Low(RAMEND)  ;инициализация стека 
              out SPL,R16      
 
              ldi R16,High(RAMEND) ;инициализация стека 
              out SPH,R16

;Настройка порта B			  
			  
			  ldi R16,0
			  out DDRB,R16

;Настройка порта D

			  ldi R16,255
			  out DDRD,R16

;Настройка порта C

			  ldi R16,0b00001100
			  out DDRC,R16

              ldi R16,0 ;сброс указателя запись
			  ldi R17,0 ;сброс указателя считывание
			  ldi R18,0 ;сброс счетчика буфера

              
Main:		  sbis PINC,0 ;кнопка запись нажата?
			  rjmp A2
			  rcall Delay
			  sbis PINC,0 ;кнопка запись нажата?
			  rjmp A2
			  rcall Input

A1:           sbic PINC,0 ;кнопка запись отпущенна?
              rjmp A1

A2:


              sbis PINC,1 ;кнопка считывание нажата?
			  rjmp B2
			  rcall Delay
			  sbis PINC,1 ;кнопка считывание нажата?
			  rjmp B2
			  rcall Output

B1:           sbic PINC,1 ;кнопка считывание отпущенна?
              rjmp B1

B2:


              cpi R18,12
			  brsh C1
			  cbi PORTC,2 ;выключить индикатор "буфер занят"
			  rjmp C2

C1:           sbi PORTC,2 ;включить индикатор "буфер занят"

C2:

              cpi R18,0
			  breq D1
			  cbi PORTC,3 ;выключить индикатор "буфер пуст"
			  rjmp D2

D1:           sbi PORTC,3 ;включить индикатор "буфер пуст"
              ldi R16,0 ;сброс указателя запись
			  ldi R17,0 ;сброс указателя считывание

D2:           rjmp Main



Delay:        ldi R19,0
   
F1:           cpi R19,10
              brsh F3
			  inc R19
			  
			  ldi R20,0

F2:           cpi R20,10
              brsh F1
			  inc R20
			  rjmp F2

F3:           ret


Input:        cpi R18,12
              brlo H1
			  rjmp H3

H1:           ldi ZH,High(MyArray)
              ldi ZL,Low(MyArray)

			  ldi R19,0
			  add ZL,R16
			  adc ZH,R19

			  in R19,PINB
			  st Z,R19

			  inc R18
			  inc R16

			  cpi R16,12
			  brsh H2
			  rjmp H3

H2:           ldi R16,0 ;сброс указателя запись

H3:           ret


Output:       cpi R18,1
              brsh K1
			  rjmp K3

K1:           ldi ZH,High(MyArray)
              ldi ZL,Low(MyArray)

			  ldi R19,0
			  add ZL,R17
			  adc ZH,R19

			  ld R19,Z
			  out PORTD,R19

			  dec R18
			  inc R17

			  cpi R17,12
			  brsh K2
			  rjmp K3

K2:           ldi R17,0 ;сброс указателя считывание

K3:           ret
Вложения
w.rar
(14.54 КБ) 108 скачиваний
Реклама
orinoko

Re: Вольтметр переменного тока

Сообщение orinoko »

Ваша программа совершенно нечитаема. Посмотрите на неё со стороны. Как минимум обозвать по нормальному используемые регистры. И как то хитро антидребезг у вас реализован
Аватара пользователя
Pavel_1978
Опытный кот
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Re: Вольтметр переменного тока

Сообщение Pavel_1978 »

А каким боком данная тема относится к разделу форума "Аналоговая техника"?
Модераторы, давно пора перенести вроде как
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

Pavel_1978 писал(а):А каким боком данная тема относится к разделу форума "Аналоговая техника"?
А таким, что вольтметр переменного тока проектируем - в состав которого будут входить аналоговые МС.
orinoko писал(а):Ваша программа совершенно нечитаема.

Что не так? Вроде коментарии писал. :shock:
Реклама
orinoko

Re: Вольтметр переменного тока

Сообщение orinoko »

регистры принято как то обзывать, для удобства, нормальному человеку в чужой программе сложно воспринимать R16, R19. Комментарии надо писать так, чтобы это было понятно даже далёкому от программирования человеку. В этом также помогают именованные регистры и ячейки памяти. Перед подпрограммой рекомендуется писать, что она делает, что ей требуется на входе и что у неё на выходе и где.
И, насколько я понял, у вас реализовался буфер типа СТЕК, а не обещанный кольцевой
Реклама
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

Принцип действия КБ соответствует этому рисунку http://chipenable.ru/index.php/programm ... ogo-bufera

......

Подпр. Input предназначена для записи данных в КБ
Подпр. Output предназначена для считывания данных из КБ
Подпр. Delay - задержка (защита от дребезга контакта).
orinoko

Re: Вольтметр переменного тока

Сообщение orinoko »

Это кстати минус к читаемости вашей программы. таки да, похоже. Но я бы посоветовал довести размер буфера до 16, и тогда не надо сравнивать указатель с размером буфера, а просто всегда после инкремента делать ANDI регистр, 0x0F. Меньше ветвлений и сравнений - читабельность выше
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

Меня программированию МК никто не учил. Создавал программы как муза подскажет.

Теперь вернемся к вольтметру. Помню, что кто-то говорил, что в сети форма напряжения далека от синусоиды и формула , которая вычисляет действующее значение через амплитудное тут не катит.

Что-же делать тогда ? Выборку значений напряжения через каждую 1мс я сделаю. Допустим найду максимальное значение. Зная максимальное можно в принципи найти действующее, но будет ли оно соответствовать действительности ?

Может найти несколько аплитудных значений, а потом найти их среднее значение ?
Аватара пользователя
Pink-Pank
Опытный кот
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США
Контактная информация:

Re: Вольтметр переменного тока

Сообщение Pink-Pank »

СЦБист писал(а):Может найти несколько аплитудных значений, а потом найти их среднее значение ?


Это был бы более правильный вариант. ;)
Fucking static initialization order fiasco
orinoko

Re: Вольтметр переменного тока

Сообщение orinoko »

Интереснее в этом плане данные, в смысле получаемые амплитудные значения, пропустить через фильтр низких частот. Там совсем немного кода.
Про среднеквадратическое значение я молчу, хотя самое правильное. Вы можете ниасилить :)
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

про среднеквадратичное думал, но на ассемблере это сделать почти нереально.

Если возвести в квадрат исче как-то можно, то извлечь квадратный корень нереально.
orinoko

Re: Вольтметр переменного тока

Сообщение orinoko »

Да шо вы говорите? :) На асме я прекрасно извлекал корень из 4-байтного целого. И довольно быстро. И возведение в квадрат не есть большая задача. Причём исходные данные были 16-битные, которые поступали с периодом 0,1 мсек
Последний раз редактировалось orinoko Ср июн 11, 2014 17:15:05, всего редактировалось 1 раз.
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: Вольтметр переменного тока

Сообщение s_black »

СЦБист писал(а):Решил собрать простенький вольтметр переменного тока.

В голову пришла такая идея.
...................
Вот её воплощение. Может возьмёте что-то себе на заметку.
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

orinoko писал(а):Вот её воплощение.
Спасибо.
orinoko писал(а):Да шо вы говорите? На асме
Как-же извлечь корень к примеру байтного числа ?
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Вольтметр переменного тока

Сообщение Леонид Иванович »

СЦБист писал(а):Как-же извлечь корень
А поиск что, отменили? За минуту находится.
Спойлер

Код: Выделить всё

;*******************************************************************************
*********************
;*
;*               Подпрограмма вычисления квадратного корня для 24-ти битного аргумента                           *
;*               (c) 1998 Alexander Trush http://trush.da.ru trush@ropnet.ru 2:5020/392.40
;*
; Вы можете свободно использовать, распространять, модифицировать этот
; код до тех пор, пока вы указываете моё авторство и распространяете
; это требование. Кроме того, я хотел бы получать уведомление о
; применении этого кода по e-mail (trush@kbotd.ru).
sqrt24:          ldi     mask,1; Используем маску в регистре, т.к. команды EORI нет...
         ldi     count,12; Последний бит значения корня не требует специального
                 ; подхода - есть запас от потери битов аж 4 бита
         clr16 work_h, work_l
         clr16 dist_h, dist_l; Очистка накопителя значения корня

sqrt24_1:        cpi     src_h, 64
         cpc     work_l, dist_l
         cpc     work_h, dist_h
         brcs sqrt24_2
                 subi src_h, 64
                 sbc work_l, dist_l
                 sbc work_h, dist_h
sqrt24_2:        rol     dist_l 
         rol     dist_h 
         eor     dist_l, mask; Инверсия младшего бита значания корня,
                 ; т.к. при заёме должны писать 0, и 1 при отсутствии
         lsl     src_l; Сдвиг аргумента на 2 бита
         rol     src_m; work_h:work_l:src_h:src_m:src_l <<= 2
         rol     src_h
         rol     work_l
         rol     work_h
         lsl     src_l
         rol     src_m
         rol     src_h
         rol     work_l
         rol     work_h
         dec     count; Получили ли все биты значения корня кроме последнего?..
         brne sqrt24_1
         cp      dist_l, work_l
         cpc     dist_h, work_h
         adc     dist_l, src_m; Команды ADCI нет, а src_m точно здесь равен 0
         adc     dist_h, src_m
         ret
;******************************************************************************
Кроме того, RMS можно вычислять и без извлечения корня, используя только умножение и деление.
Вложения
rms.gif
(27.21 КБ) 190 скачиваний
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

Леонид Иванович писал(а):Кроме того, RMS можно вычислять и без извлечения корня, используя только умножение и деление.
Что это за последние формулы . Нечего не понял :shock:

Нашел следующую формулу для вычисления квадратного корня.

Сколько интересно тут надо сделать выборок ? 100 хватит ?
orinoko

Re: Вольтметр переменного тока

Сообщение orinoko »

Это как бы метод последовательного приближения. При каждой итерации результат приближается к истинному. Необходимая точность определяется экспериментально. Вы в состоянии были это сделать сами за то время пока ждёте ответ. Даже в екселе это можно провернуть, даже нагляднее.
Аватара пользователя
СЦБист
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Сб июн 09, 2012 02:14:11
Откуда: ХАРЬКОВ

Re: Вольтметр переменного тока

Сообщение СЦБист »

работу этой формулы проверял на бумаге. Сначала брал произвольное X. Где-то через 10 выборок приближался к истинному результату.
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Вольтметр переменного тока

Сообщение Galizin »

http://radiokot.ru/circuit/power/converter/26/ - вот моя реализация. Опять таки на микроконтроллере (;
Ответить

Вернуться в «Аналоговая техника»