Разработка устройства для измерения освещенности и коэффициента пульсации светового потока

Автор работы: Пользователь скрыл имя, 01 Ноября 2012 в 20:12, дипломная работа

Краткое описание

Освещение играет немаловажную роль как на производстве, так и в быту. От него зависит как сохранность здоровья персонала, так и непосредственно продуктивность его труда. Неправильное освещение может привести к серьезному ухудшению зрения, повышению утомляемости и, как следствие, снижение эффективности любой деятельности. В помещениях, где выполняются любые виды работ, и прилегающих территориях необходимо во-первых соблюдать определенные правила организации, и во-вторых — следить за уровнем освещенности, а так же уровнем пульсации светового потока от различных источников. Коэффициент пульсации освещенности (Кп) является характеристикой относительной глубины колебаний освещенности в результате изменения во времени светового потока источников света. Контроль уровня пульсации — очень важная организационная мера, т. к. несоблюдение требований по уровню коэффициента пульсации приводит к повышенной утомляемости, ухудшению зрения, и, как следствие, к ухудшению производственных показателей.

Вложенные файлы: 1 файл

Diplom.doc

— 4.02 Мб (Скачать файл)

btfsc STATUS, 2 ;перед выводом на экран

goto znos3  ;первый символ проверяется

;на соответствие нулю

 

movf X4, W

movwf M_byte

call in_port

bsf PORTB, 1

call zapis

call pause1

goto znosall1

 

znos3  movlw 0x30  ;чтобы не выводить на экран 01, 02, 03 и т.д.

subwf X3, 0  ;вместо 1, 2, 3 соответственно

btfsc STATUS, 2 ;перед выводом на экран

goto znos2  ;первый символ проверяется

;на соответствие нулю 

 

znosall1 movf X3, W

movwf M_byte

call in_port

bsf PORTB, 1

call zapis

call pause1

goto znosall2

 

znos2  movlw 0x30  ;чтобы не выводить на экран 01, 02, 03 и т.д.

subwf X2, 0  ;вместо 1, 2, 3 соответственно

btfsc STATUS, 2 ;перед выводом на экран

goto znos1  ;первый символ проверяется

;на соответствие нулю 

 

znosall2 movf X2, W

movwf M_byte

call in_port

bsf PORTB, 1

call zapis

call pause1

 

znos1  movf X1, W

movwf M_byte

call in_port

bsf PORTB, 1

call zapis

call pause1

 

movlw 0xBB  ;л

movwf M_byte

call in_port

call zapis

call pause1

 

movlw 0xBA  ;к

movwf M_byte

call in_port

call zapis

call pause1

 

clrf EminH

movf kpuls, W

movwf EminL

call bintodec

 

movlw 0xCB  ;выбор позиции символа на экране

movwf M_byte

call in_port

bcf PORTB, 1

call zapis

call pause1

 

movlw 0x30  ;чтобы не выводить на экран 01, 02, 03 и т.д.

subwf X2, 0  ;вместо 1, 2, 3 соответственно

btfsc STATUS, 2 ;перед выводом на экран

goto znkp1  ;первый символ проверяется

;на соответствие нулю 

 

movf X2, W

movwf M_byte

call in_port

bsf PORTB, 1

call zapis

call pause1

 

znkp1  movf X1, W

movwf M_byte

call in_port

bsf PORTB, 1

call zapis

call pause1

 

movlw 0x25  ;%

movwf M_byte

call in_port

call zapis

call pause1

 

return

 

 

;фунция измерения

 

izm call adc  ;считать значение из АЦП

movf ADRESH, W ;и записать его

movwf EminH  ;и в минимум

movwf EmaxH  ;и в максимум

bsf STATUS, 5

movf ADRESL, W

bcf STATUS, 5

movwf EminL

movwf EmaxL

 

movlw 0x00  ;количество измерений - 256

movwf X3

clrf M_byte

 

bsf STATUS, 5

bsf STATUS, 6

bcf INTCON, 7 ;на время измерения запрещены все прерывания

bcf STATUS, 5 ;

bcf STATUS, 6

 

loop1 call adc  ;начало цикла измерений

 

bsf STATUS, 5 ;каждый результат

movf ADRESL, W ;складывается с предыдущим и записывается в одну переменную

bcf STATUS, 5 ;

addwf M_byte, 1 ;на которую выделено 3 байта

 

btfss STATUS, 0 ;проверка бита переноса

goto $+17

btfss osv2, 7

goto $+15

btfss osv2, 6

goto $+13

btfss osv2, 5

goto $+11

btfss osv2, 4

goto $+9

btfss osv2, 3

goto $+7

btfss osv2, 2

goto $+5

btfss osv2, 1

goto $+3

btfsc osv2, 0

incf osv1

 

btfsc STATUS, 0 ;если бит переноса установлен в 1,

incf osv2, 1  ;значение следующего байта увеличивается на 1

 

movf ADRESH, W

addwf osv2, 1

btfsc STATUS, 0

incf osv1, 1

 

 

call minmax  ;полученный результат записывается либо в минимум,

metka1 nop  ;либо в максимум, либо пропускается

call pause3

movlw 1

subwf X3, 1

btfss STATUS, 2 ;проверка условия выхода из цикла измерений

goto loop1

  movlw 8

 

movwf M_byte

minus decf osv2  ;вычитаем из полученных значений величину смещения,

movlw 1  ;подамаемого на вход ОУ

subwf M_byte

 

btfss osv2, 7

goto $+15

btfss osv2, 6

goto $+13 

btfss osv2, 5

goto $+11

btfss osv2, 4

goto $+9

btfss osv2, 3

goto $+7

btfss osv2, 2

goto $+5

btfss osv2, 1

goto $+3

btfsc osv2, 0

decf osv1

 

btfss STATUS, 2

goto minus

 

bsf STATUS, 5

bsf STATUS, 6

bsf INTCON, 7 ;на время измерения запрещены все прерывания

bcf STATUS, 5 ;

bcf STATUS, 6

 

clrf X3

clrf X4

bcf STATUS, 0

movf EminL, W  ;минимум

subwf EmaxL, 0  ;вычитается из максимума

movwf X4

btfss STATUS, 0

decf X3, 1

movf EminH, W

subwf EmaxH, 0

addwf X3

 

movlw 0x31   ;и полученная разность умножается на 50

movwf M_byte

movf X3, W

movwf X1

movf X4, W

movwf X2

 

movlw 0x00

movwf kpuls

 

btfsc X3, 2   ;если она не равна 0

goto x50

btfsc X3, 1

goto x50

btfsc X4, 7

goto x50

btfsc X4, 6

goto x50

btfsc X4, 5

goto x50

btfsc X4, 4

goto x50

btfsc X4, 3

goto x50

btfsc X4, 2

goto x50

btfsc X4, 1

goto x50

btfss X4, 0

goto metka3

 

 

x50 movf X2, W

addwf X4, 1

btfsc STATUS, 0

incf X3

movf X1, W

addwf X3, 1

movlw 1

subwf M_byte

btfss STATUS, 2

goto x50

 

 

;чтобы получить коэффициент  пульсации, нужно 

;разность максимума и минимума  поделить на 

;удвоенное среднее значение (среднее  арифметическое) всех измерений 

;и умножить на 100%

 

;т.к. разность максимума и  минимума уже умножена на 50,

;то данный результат для получения  коэффициента пульсации 

;необходимо разделить на одно  среднее значение всех измерений 

 

;т.к. цикл измерений повторялся 256 раз 

;и результат каджого нового  измерения записывался в переменную,

;под которую отведено 3 байта,

;то среднее арифметическое из  проведенных измерений 

;является записанным в старшие  два байта переменной,

;что аналогично сдвигу влево  на 8 разрядов 

;или делению на 256

 

;функция деления (подсчета коэффициента  пульсации):

 

div movf X3, W

xorwf osv1, 0

movwf X1

btfsc X1, 7

goto srav17

btfsc X1, 6

goto srav16

btfsc X1, 5

goto srav15

btfsc X1, 4

goto srav14

btfsc X1, 3

goto srav13

btfsc X1, 2

goto srav12

btfsc X1, 1

goto srav11

btfsc X1, 0

goto srav10

goto srav2

 

srav17 btfsc osv1, 7

goto metka3

goto kpp1

 

srav16 btfsc osv1, 6

goto metka3

goto kpp1

 

srav15 btfsc osv1, 5

goto metka3

goto kpp1

 

srav14 btfsc osv1, 4

goto metka3

goto kpp1

 

srav13 btfsc osv1, 3

goto metka3

goto kpp1

 

srav12 btfsc osv1, 2

goto metka3

goto kpp1

 

srav11 btfsc osv1, 1

goto metka3

goto kpp1

 

srav10 btfsc osv1, 0

goto metka3

goto kpp1

 

 

srav2 movf X4, W

xorwf osv2, 0

movwf X1

btfsc X1, 7

goto srav27

btfsc X1, 6

goto srav26

btfsc X1, 5

goto srav25

btfsc X1, 4

goto srav24

btfsc X1, 3

goto srav23

btfsc X1, 2

goto srav22

btfsc X1, 1

goto srav21

btfsc X1, 0

goto srav20

 

srav27 btfsc osv2, 7

goto metka3

goto kpp1

 

srav26 btfsc osv2, 6

goto metka3

goto kpp1

 

srav25 btfsc osv2, 5

goto metka3

goto kpp1

 

srav24 btfsc osv2, 4

goto metka3

goto kpp1

 

srav23 btfsc osv2, 3

goto metka3

goto kpp1

 

srav22 btfsc osv2, 2

goto metka3

goto kpp1

 

srav21 btfsc osv2, 1

goto metka3

goto kpp1

 

srav20 btfsc osv2, 0

goto metka3

goto kpp1

 

 

kpp1 movf osv2, W

subwf X4

btfss STATUS, 0

decf X3

movf osv1, W

subwf X3

movlw 0x01

addwf kpuls

goto div

 

 

;функция получения значения  из АЦП: 

 

adc bcf STATUS, 6

bsf STATUS, 5

movlw 10000001b

movwf ADCON1

bcf STATUS, 5

movlw 11000001b

movwf ADCON0

 

do_conv bsf ADCON0, 2  ;установить бит в 1 -> инициировать операцию конвертации АЦП

 

wait_eoc btfsc   ADCON0, 2 ;подождать пока бит установится в 0

goto    wait_eoc ;

 

 

return

 

 

 

;функция определения минимума/максимума 

;начальное условие - и в минимум и в максимум записано только что

;полученное значение из АЦП 

;каждое следующее значение из  цикла измерений сравнивается  с предыдущим 

 

minmax bcf STATUS, 5

bcf STATUS, 6

movf EminH, W

xorwf ADRESH, 0 ;сравнить новое значение с предыдущим минимумом

movwf X1  ;с помощью побитового исключающего ИЛИ

btfsc X1, 1

goto minh1

btfsc X1, 0

goto minh0

 

movf EminL, W

bsf STATUS, 5

xorwf ADRESL, 0

bcf STATUS, 5

movwf X2

btfsc X2, 7

goto minl7

btfsc X2, 6

goto minl6

btfsc X2, 5

goto minl5

btfsc X2, 4

goto minl4

btfsc X2, 3

goto minl3

btfsc X2, 2

goto minl2

btfsc X2, 1

goto minl1

btfsc X2, 0

goto minl0

 

 

minh1 btfsc EminH, 1 ;если новое измерение меньше, чем предыдущий минимум

call adctomin ;то записать это значение в минимум

goto metka2

minh0 btfsc EminH, 0

call adctomin

goto metka2

minl7 btfsc EminL, 7

call adctomin

goto metka2

minl6 btfsc EminL, 6

call adctomin

goto metka2

minl5 btfsc EminL, 5

call adctomin

goto metka2

minl4 btfsc EminL, 4

call adctomin

goto metka2

minl3 btfsc EminL, 3

call adctomin

goto metka2

minl2 btfsc EminL, 2

call adctomin

goto metka2

minl1 btfsc EminL, 1

call adctomin

goto metka2

Информация о работе Разработка устройства для измерения освещенности и коэффициента пульсации светового потока