Устройство контроля за уровнем аналоговых сигналов

курсовая работа

6.5.1. Компиляция (с распечаткой всех файлов, полученных во время компиляции: obj, lst, erl, sym)

В ходе компиляции был получен объектный модуль и НЕХ - файл пригодный для прошивки в память микроконтроллера.

Приведем фрагменты файлов полученных во время компиляции:

Файл KURSOV.lst:

MPASM 02.50.02 Intermediate KURSOV.ASM 4-20-2006 9:09:06 PAGE 1

LOC OBJECT CODE LINE SOURCE TEXT

VALUE

00001 list p=16C72

00002 #include <P16C72.inc>

00001 LIST

00002 ; P16C72.INC Standard Header File, Version 1.01 Microchip Technology, Inc.

00249 LIST

00003

00000020 00004 TMP EQU 20H

00000021 00005 K1 EQU 21H

00000022 00006 K2 EQU 22H

00007

00000023 00008 SOTNI EQU 23H

00000024 00009 DESYATKI EQU 24H

00000025 00010 EDINICI EQU 25H

00011

00000028 00012 SAVEW EQU 28H

00000030 00013 SAVEW2 EQU 30H

00000029 00014 SAVESTATUS EQU 29H

00000031 00015 SAVESTATUS2 EQU 31H

00016

00000026 00017 SV EQU 26H ; STACK VERTEX

00000027 00018 SP EQU 27H ; STACK POINTER

00019

00020

00000032 00021 DINAMIK EQU 32H

00022

00000033 00023 CT EQU 33H ; FOR DELAY

00024

00025 ;STK 40h-5Eh ; STACK ADDRES FOR TEN BCD TRIADS

00026

Warning[205]: Found directive in column 1. (ORG)

0000 00027 ORG 0x00 ; processor reset vector

0000 28B5 00028 GOTO Start ; go to beginning of program

00029

00030

00031 ; -------------IRQ

Warning[205]: Found directive in column 1. (ORG)

0004 00032 ORG 0x04 ; обработка прерывания осуществляется за 9 циклов (4,5 мкс)

0004 1C0C 00033 BTFSS PIR1, TMR1IF ; анализ

0005 2818 00034 goto IRQTMR2 ; источника прерывания

00035

0006 00036 IRQTMR1 ; обработчик прерывания от таймера

00037 ;------ PUSH REGISTERS---------

0006 00A8 00038 MOVWF SAVEW

0007 0803 00039 MOVF STATUS,W

0008 00A9 00040 MOVWF SAVESTATUS

0009 0804 00041 MOVF FSR,W

000A 00A6 00042 MOVWF SV

00043 ;------------------------------

000B 1010 00044 BCF T1CON,TMR1ON ; TIMER STPR

000C 3038 00045 MOVLW B00111000

000D 008E 00046 MOVWF TMR1L

000E 30A7 00047 MOVLW B10100111

000F 008F 00048 MOVWF TMR1H

MPASM 02.50.02 Intermediate KURSOV.ASM 4-20-2006 9:09:06 PAGE 2

LOC OBJECT CODE LINE SOURCE TEXT

VALUE

0010 1410 00049 BSF T1CON,TMR1ON ; TIMER ON

0011 100C 00050 BCF PIR1, TMR1IF ; сброс флага переполнения от таймера

0012 2116 00051 CALL INDICATION

00052

00053 ;------ POP REGISTERS ---------

0013 0826 00054 MOVF SV,W

0014 0084 00055 MOVWF FSR

0015 0829 00056 MOVF SAVESTATUS,W

0016 0083 00057 MOVWF STATUS

0017 0828 00058 MOVF SAVEW,W

00059 ;------------------------------

---------------------------------

---------------------------------

Файл KURSOV.err:

Warning[205] D:MPLABKURSOV.ASM 27 : Found directive in column 1. (ORG)

Warning[205] D:MPLABKURSOV.ASM 32 : Found directive in column 1. (ORG)

Warning[203] D:MPLABKURSOV.ASM 83 : Found opcode in column 1. (retfie)

Warning[205] D:MPLABKURSOV.ASM 86 : Found directive in column 1. (ORG)

Message[302] D:MPLABKURSOV.ASM 107 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:MPLABKURSOV.ASM 109 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:MPLABKURSOV.ASM 111 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:MPLABKURSOV.ASM 167 : Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:MPLABKURSOV.ASM 168 : Register in operand not in bank 0. Ensure that bank bits are correct.

Warning[203] D:MPLABKURSOV.ASM 322 : Found opcode in column 1. (RETURN)

Warning[203] D:MPLABKURSOV.ASM 399 : Found opcode in column 1. (RETURN)

Warning[203] D:MPLABKURSOV.ASM 419 : Found opcode in column 1. (RETURN)

Warning[203] D:MPLABKURSOV.ASM 434 : Found opcode in column 1. (RETURN)

Warning[205] D:MPLABKURSOV.ASM 438 : Found directive in column 1. (END)

Файл KURSOV.hex:

:02000000B52821

:080008000C1C1828A8000308D5

:10001000A9000408A600101038308E00A7308F0009

:1000200010140C10162126088400290883002808C3

:100030008C1C2628B0000308B1001211003091007A

:0E00400012158C105C21310883003008090075

:0C01540082073F3406345B344F346634BD

:100160006D347D3407347F346F3403138316FF30CE

:10017000850000308600003087008312FF30A00029

:10018000A501A301A401B201850186018701073001

:100190008700FF30B3007830A2002D30A10040303E

:1001A0008400A700A60038308E00A7308F00900191

:1001B00010140C108B170B1783160C148C1483124D

:1001C000C1309F001F1534211F19E4287F309E0085

:1001D0001E08A000FF30B300000000000000000077

:1001E000000000000000000000000000000000000F

:1001F00000000000000000000000B30BEC2803101A

:1002000021082002031C0D29031020082202031CD0

:100210000D29121187150712DF2807168711920181

:100220008C101211FC3091001215DF282708840071

:1002300000080710860067210714840A0008871049

:10024000860067218714840A000807118600672149

:100250000715840A03105E300402031C3129403064

:1002600084000408A7000800A301A401A501A30AB3

:100270006430A00203183729A3036430A007A40A3E

:100280000A30A00203183F29A4030A30A00720085F

:10029000A500AA208000840A2408AA208000840ADD

:1002A0002308AA208000840A03105E300402031C85

:1002B0005B29403084000800031001303202031C27

:1002C0006429B20387120800B20A87160800FF30BB

:1002D000B30000000000000000000000000000006B

:0602E000B30B69290800C0

:00000001FF

6.5.2. Моделирование

Моделирование производилось в интегрированной среде разработки MPLAB (кратко в разделе 6.5 этого документа).

Для проверки состояния регистров мы использовали окно «watch», а для подсчета времени выполнения процедур в программе были расставлены breakpointы и использовалось окно «stopwatch» .

В результате моделирования установлена работоспособность программы. исследованы получившиеся временные характеристики:

Процедура BINTOSEVEN- в худшем случае (при преобразовании уровня 5В) - 99 мкс.

Процедура INDICATION- 7694 мкс

Интервал между вызовами INDICATION - 22741 мкс (44Гц)

Интервал между вызовами SOUNDINDICATION - 268 мкс (3731Гц)

Данные временные характеристики полностью удовлетворяют ТЗ.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1) В.В.Скороделов "Проектирование устройств на однокристальных микроконтроллерах с RISC-архитектурой". Ч1,Ч2, Учебное пособие.

2) Угрюмов Е. П. Проектирование элементов и узлов ЭВМ. М.: Высшая школа, 1991.

3) Шило В. Л. Популярные цифровые микросхемы. М.: Радио и связь, 1988.

4) Тули М. Справочное пособие по цифровой электронике. М.: “Энергоатомиздат”, 1990.

5) Бирюков С.А. “Применение интегральных микросхем серии ТТЛ”. М.: “Патриот”, 1992.

6) Применение интегральных микросхем в электронной вычислительной технике. Справочник (под ред. Б.И.Файзулаева, -М, Радио и связь, 1989)

7) ГОСТ 2.102-68. Виды и комплектность конструкторской докуметации. М.: 1988.

8) ГОСТ 2.708-81. Правила выполнения электрических схем цифровой вычислительной техники. М.: 1988.

9) Разработка и оформление конструкторской документации. РЭА. Справочник (под ред. Э.Г.Романычевой - М.: Радио и связь, 1989)

10) Ю.В.Новиков, О.А.Калашников "Разработка устройств сопряжения". Издательство "ЭКОМ", Москва, 1998г. 355 с.

Заключение

В данном проекте был разработано устройство контроля за уровнями аналоговых сигналов.

Это устройство предназначено для измерения уровней входных аналоговых сигналов, проверки попадания уровня в определенные границы и отображения на цифровом табло текущего значения уровня сигнала.

Устройство реализовано на однокристальном микроконтроллере типа PIC16С71.

Применение в устройстве данного однокристального микроконтроллера привело к экономии элементов, возможности меняя программу работы в широких пределах корректировать алгоритм обработки данных. Также улучшились весогабаритные параметры.

Устройство имеет следующие характеристики:

Потребляемая мощность не более 0,5 Вт;

Наработка на отказ около 35000 часов;

Уровни входных сигналов 0-5 В.

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

В качестве улучшения можно предложить доработать устройство, а конкретнее добавить возможность контроля за уровнями аналоговых сигналов, уровень которых выше 5В.

В качестве решения можно предложить поставить на входе АЦП делитель уровня и учитывать его коэффициент деления в программе (для перевода результата отображения в семисегментный код ).

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

Обозначение

Наименование

Количество

Конденсаторы

С1

K50-6-20 мкФ - 16В

1

С2-С3

МРТ-111-20 пФ±10%-63В

2

С4

КМ - 6 - 9 - 0,47 +- 10% ОЖО 464. 023 ТУ

1

Микросхемы

DD1

PIC16С72

1

HG

АЛС324А

3

Кварц

ZQ1

4 МГц

1

Разъемы

ХТ1

СНО 4

1

Телефон

BF1

ТОН-2

1

Кнопки

SA1

П2К

1

Резисторы

R1

ОМЛТ 0,125 - 300 Ом

1

R2-R11

ОМЛТ 0,125 - 1,2 КОм

10

Приложение А

Текст программы:

list p=16C72

#include <P16C72.inc>

TMP EQU 20H

K1 EQU 21H

K2 EQU 22H

SOTNI EQU 23H

DESYATKI EQU 24H

EDINICI EQU 25H

SAVEW EQU 28H

SAVEW2 EQU 30H

SAVESTATUS EQU 29H

SAVESTATUS2 EQU 31H

SV EQU 26H ; STACK VERTEX

SP EQU 27H ; STACK POINTER

DINAMIK EQU 32H

CT EQU 33H ; FOR DELAY

;STK 40h-5Eh ; STACK ADDRES FOR TEN BCD TRIADS

ORG 0x00 ; processor reset vector

GOTO Start ; go to beginning of program

; -------------IRQ

ORG 0x04 ; обработка прерывания осуществляется за 9 циклов (4,5 мкс)

BTFSS PIR1, TMR1IF ; анализ

goto IRQTMR2 ; источника прерывания

IRQTMR1 ; обработчик прерывания от таймера

;------ PUSH REGISTERS---------

MOVWF SAVEW

MOVF STATUS,W

MOVWF SAVESTATUS

MOVF FSR,W

MOVWF SV

;------------------------------

BCF T1CON,TMR1ON ; TIMER STPR

MOVLW B00111000

MOVWF TMR1L

MOVLW B10100111

MOVWF TMR1H

BSF T1CON,TMR1ON ; TIMER ON

BCF PIR1, TMR1IF ; сброс флага переполнения от таймера

CALL INDICATION

;------ POP REGISTERS ---------

MOVF SV,W

MOVWF FSR

MOVF SAVESTATUS,W

MOVWF STATUS

MOVF SAVEW,W

;------------------------------

IRQTMR2

BTFSS PIR1, TMR2IF; анализ

goto RET

T2BREAK

;------ PUSH REGISTERS---------

MOVWF SAVEW2

MOVF STATUS,W

MOVWF SAVESTATUS2

;------------------------------

BCF T2CON,TMR2ON ; TIMER2 STOP

MOVLW B00000000

MOVWF TMR2

BSF T2CON,TMR2ON ; TIMER2 ON

BCF PIR1, TMR2IF ; сброс флага переполнения от таймера

CALL SOUNDINDICATION

;------ POP REGISTERS ---------

MOVF SAVESTATUS2,W

MOVWF STATUS

MOVF SAVEW2,W

;------------------------------

RET

retfie ; возврат из прерывания

ORG 0xAA

TOSEVEN

addwf PCL,F ; W + PC -> PC

retlw b00111111 ; ..FEDCBA = 0

retlw b00000110 ; .....CB. = 1

retlw b01011011 ; .G.ED.BA = 2

retlw b01001111 ; .G..DCBA = 3

retlw b01100110 ; .GF..CB. = 4

retlw b01101101 ; .GF.DC.A = 5

retlw b01111101 ; .GFEDC.A = 6

retlw b00000111 ; .....CBA = 7

retlw b01111111 ; .GFEDCBA = 8

retlw b01101111 ; .GF.DCBA = 9

Start

BCF STATUS,6

BSF STATUS,5 ; BANK1

MOVLW B11111111;INITA

MOVWF TRISA

MOVLW B00000000;INITB

MOVWF TRISB

MOVLW B00000000;INITC

MOVWF TRISC

BCF STATUS,5 ; BANK 0

;--------------------------- INIT VAR

;----------------- TESTS

MOVLW B11111111

MOVWF TMP

;----------------------

; CLRF TMP

CLRF EDINICI

CLRF SOTNI

CLRF DESYATKI

CLRF DINAMIK

CLRF PORTA

CLRF PORTB

CLRF PORTC

MOVLW B00000111

MOVWF PORTC

MOVLW B11111111

MOVWF CT

MOVLW .120

MOVWF K2

MOVLW .45

MOVWF K1

;--------------------------- INIT STACK

MOVLW 0x40

MOVWF FSR

MOVWF SP

MOVWF SV

;--------------------------- INIT TIMER1

MOVLW B00111000

MOVWF TMR1L

MOVLW B10100111

MOVWF TMR1H

;------------------------------- INIT TIMER 2

; --------------------------- RUN TIMER1

CLRF T1CON

BSF T1CON,TMR1ON ; TIMER ON

BCF PIR1,TMR1IF

BSF INTCON,GIE

BSF INTCON,PEIE

BSF STATUS,5 ; BANK1

BSF PIE1,TMR1IE

BSF PIE1,TMR2IE

; MOVLW B00000001

; MOVWF PIE1

MAIN

;--------------------------------------------- ADC ------------

BCF STATUS,5 ; BANK0

MOVLW B11000001

MOVWF ADCON0

BSF ADCON0,2 ; START CONV

CALL BINTOSEVEN

LOOP

BTFSC ADCON0,2

GOTO LOOP

;---------------------------- TEST VALUES

; MOVLW B1100100 ; POADAET

; MOVLW B0000000 ; NIJE

MOVLW B1111111 ; VISHE

MOVWF ADRES

;---------------------------

MOVF ADRES,W

MOVWF TMP

;DELAY ;----5106-CYCLES 1CYCLE=1us

MOVLW .255

MOVWF CT

D2

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

NOP

DECFSZ CT,1

GOTO D2

COMP

; ----------------- COMPARE -----------

; K1< ADC <K2 ????

;---- K1< ADC ? ----------

BCF STATUS,0

MOVF K1,W

SUBWF TMP,0 ; ADFRES-K1

BTFSS STATUS,0 ; ЕСЛИ ADRES<ki, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРО

; ПРОПУСТИТЬ СЛЕД КОМАНДУ)

GOTO NO

;---- ADC <=K2 ? --------

BCF STATUS,0

MOVF TMP,W

SUBWF K2,0 ; ADFRES-K1

BTFSS STATUS,0 ; ЕСЛИ ADRES>ki, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРО

; ПРОПУСТИТЬ СЛЕД КОМАНДУ)

GOTO NO

;YES

;--------------- TIMER 2 STOP

BCF T2CON,TMR2ON ; TIMER STOP

BSF PORTC,3

BCF PORTC,4

GOTO MAIN

NO

;--------------- TIMER2 ON WITH IMMIDIATLY IRQ

BSF PORTC,4

BCF PORTC,3

CLRF T2CON

BCF PIR1, TMR2IF ; сброс флага переполнения от таймера

BCF T2CON,TMR2ON ; TIMER2 STOP

MOVLW B11111100

MOVWF TMR2

BSF T2CON,TMR2ON ; TIMER2 ON

;--------------------------------------------------

GOTO MAIN

; -------------------- DYNAMIC INDICATION PROCEDURE

INDICATION

;----------- RESTORE SP VALUE-----------

MOVF SP,W

MOVWF FSR

;---------------------------------------

MOVF INDF,W

BCF PORTC,0

MOVWF PORTB

CALL DELAY

BSF PORTC,0

INCF FSR,F

MOVF INDF,W

BCF PORTC,1

MOVWF PORTB

CALL DELAY

BSF PORTC,1

INCF FSR,F

MOVF INDF,W

BCF PORTC,2

MOVWF PORTB

CALL DELAY

BSF PORTC,2

INCF FSR,F

;-------------------CALCULATE SP (STACK POINTER)

;---- 5Eh< FSR ? ----------

BCF STATUS,0

MOVLW 0x5E

SUBWF FSR,0 ; ADFRES-K1

BTFSS STATUS,0 ; ЕСЛИ FSR<70h, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРОПРОПУСТИТЬ СЛЕД КОМАНДУ)

GOTO SPFSRNO

MOVLW 0x40

MOVWF FSR

SPFSRNO

;------------ PUSH SP VALUE ----------

MOVF FSR,W

MOVWF SP

RETURN

;---------------------- BINARY TO SEVENSEGMENTS GODE CONVERTION

BINTOSEVEN

; ----------- MUL x2 --------------

clrf SOTNI

clrf DESYATKI

clrf EDINICI

; RLF TMP,1

; BTFSS STATUS,0 ;

; GOTO M1

;

; MOVLW .2

; MOVWF SOTNI

; MOVLW .5

; MOVWF DESYATKI

; MOVLW .6

; MOVWF EDINICI

M1

;----------- convert bin to bcd -------------

; clrf SOTNI

pr0

incf SOTNI,f ;разряд сотен

movlw .100

subwf TMP,f

btfsc STATUS,0

goto pr0

decf SOTNI,f

movlw .100

addwf TMP,F

; clrf DESYATKI

pr1

incf DESYATKI,F ;разряд десятков

movlw .10

subwf TMP,F

btfsc STATUS,0

goto pr1

decf DESYATKI,F

movlw .10

addwf TMP,F

; clrf EDINICI

movf TMP,W

movwf EDINICI

;----------- convert bcd to seven segments code -------------

TTTT

CALL TOSEVEN

MOVWF INDF

INCF FSR,F

MOVF DESYATKI,W

CALL TOSEVEN

MOVWF INDF

INCF FSR,F

MOVF SOTNI,W

CALL TOSEVEN

MOVWF INDF

INCF FSR,F

;-------------------CALCULATE SV (STACK VERTEX)

;---- 5Eh< FSR ? ----------

BCF STATUS,0

MOVLW 0x5E

SUBWF FSR,0 ; ADFRES-K1

BTFSS STATUS,0 ; ЕСЛИ FSR<70h, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРОПРОПУСТИТЬ СЛЕД КОМАНДУ)

GOTO SVFSRNO

MOVLW 0x40

MOVWF FSR

SVFSRNO

RETURN

;---------------------- SOUND INDICATION PROCEDURE

SOUNDINDICATION

BCF STATUS,0

MOVLW 0x1

SUBWF DINAMIK,0 ; ADFRES-K1

BTFSS STATUS,0 ; ЕСЛИ FSR<70h, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРОПРОПУСТИТЬ СЛЕД КОМАНДУ)

GOTO DIN

DECF DINAMIK,F

BCF PORTC,5

RETURN

DIN

INCF DINAMIK,F

BSF PORTC,5

RETURN

DELAY ;----2555-CYCLES 1CYCLE=1us

MOVLW .255

MOVWF CT

D1

NOP

NOP

NOP

NOP

NOP

NOP

NOP

DECFSZ CT,1

GOTO D1

RETURN

END

Делись добром ;)