PIC16C74 NTC Termistör İle Termometre Devresi

| Temmuz 14, 2014 Tarihinde güncellendi
PIC16C74 NTC Termistör İle Termometre Devresi

Basit bir termo metre devresi ısı değerini görüntülemek için display kullanılmış algılama için 10k ntc ayrıca röle çıkışı bulunuyor transistör ile kuvvetlendirilerek röle sürülebilir çok az malzeme ile gerçekleştirilebilir

Devre Şeması
pic16c74-ntc-termistor-termometre-devresi

Assembly yazılımı

        list    p=pic16c74
        __config h'3ffa'        ;HS crystal, 20Mhz
        include 
;
temp    equ     0x20
target  equ     0x21            ;target temp value to trigger relay
targdly equ     0x22            ;used to pause display when setting target
flag    equ     0x23
cntr    equ     0x24
;
        org     0               ;reset vector
        goto    start           ;go to beginning of program on reset
;
        org     4
        btfsc   PIR1,TMR1IF     ;timer 1 overflowed?
        goto    timer1
        retfie
;
start   movlw   0xbf            ;'-' segment value
        movwf   PORTB           ;set output
        movwf   PORTD           ;latches to initial value
        clrf    PORTA           ;clear port a latches
        bsf     STATUS,RP0      ;select register bank 1
        clrf    PIE1            ;disable all peripheral interrupts
        bsf     TRISC,0         ;RC0 needs to be input for osc to function
        bsf     PIE1,TMR1IE     ;enable TMR1 int
        movlw   b'00000011'     ;RA0=A/D input, RA1=A/D input, RA2=Relay output
        movwf   TRISA           ;porta all input/analog
        clrf    TRISB           ;PORTB/PORTD output to 7-segment LEDs
        clrf    TRISD
        movlw   0x04            ;RA0 and RA1 Analog, RA2 Digital, Vref=Vdd
        movwf   ADCON1          ;set
        bcf     STATUS,RP0      ;select register bank 0
        bcf     T1CON,TMR1ON    ;timer 1 not on
        movlw   0x80            ;TIM1H:TIM1L = 0x8000 = 1sec
        movwf   TMR1H
        clrf    TMR1L
        clrf    INTCON          ;disable all interrupts
        clrf    PIR1            ;clear all falgs
        movlw   0x0e            ;T1CKPS1 (Prescale) = 1, T1OSCEN (osc shutoff) = enabled
        movwf   T1CON           ;T1SYNC (ext clk input) = no sync, TMR1CS = external
        bsf     INTCON,PEIE     ;enable peripheral interrupts
        bsf     INTCON,GIE      ;enable global ints
        call    getAD1          ;get target temp value
        movwf   target          ;save for compare
        clrf    targdly         ;clear target display counter
        clrf    flag            ;to tell which a/d to perform, RA0 or RA1
        bsf     T1CON,TMR1ON    ;turn timer on
        sleep
        goto    $-1
;
timer1  bcf     PIR1,TMR1IF     ;clear flag
        bcf     INTCON,GIE      ;disable all ints
        movlw   0x01            ;halfadd value
        xorwf   flag,1          ;compute operation to perform
        movf    flag,0
        addwf   PCL,1           ;go to proper routine
        goto    trgsamp
        goto    temsamp
trgsamp call    getAD1          ;get target value
        movwf   temp
        subwf   target,0        ;check it
        btfsc   STATUS,Z        ;zero set if equal, same target
        goto    timerx
        movf    temp,0          ;get new target value
        movwf   target
        movlw   0x01
        movwf   flag            ;do trigger sample next go around also
        goto    dispit
temsamp call    getAD0          ;get RA0 thermister value
        movwf   temp
        subwf   target,0
        btfss   STATUS,C
        bsf     PORTA,2         ;trigger relay, temp has reached goal
dispit  movlw   .186
        subwf   temp,0          ;end of table values
        btfsc   STATUS,C
        goto    valerr          ;error, value out of range
        movlw   .98             ;base of table values
        subwf   temp,0
        btfss   STATUS,C        ;if carry clear then
        goto    valerr          ;error, value out of range
        call    temptab         ;convert to temp
setleds movwf   temp
        andlw   0x0f
        call    ledtab
        movwf   PORTB
        swapf   temp,0
        andlw   0x0f
        call    ledtab
        movwf   PORTD
timerx  bcf     PIR1,TMR1IF     ;clear flag
        movlw   0x80
        movwf   TMR1H
        clrf    TMR1L
        retfie                  ;enable ints and return to sleep
valerr  movlw   0xaa            ;0x0a is disp in ledtab to special out of range value
        goto    setleds

getAD0  movlw   b'10000001'     ;fosc/32, chan0 (RA0),  ADON
adconv  movwf   ADCON0
        clrf    cntr
        decfsz  cntr,1
        goto    $-1
        clrf    cntr
        decfsz  cntr,1
        goto    $-1
        bsf     ADCON0,GO
        btfsc   ADCON0,NOT_DONE  ;check if A/D complete
        goto    $-1
        movf    ADRES,0
        clrf    ADCON0          ;clear reg and shutdown AD logic
        return
getAD1  movlw   b'10001101'     ;fosc/32, chan1 (RA1), GO, ADON
        goto    adconv
;
; 7-segment conversion
;
ledtab  addwf   PCL,1
        retlw   0xc0    ;0
        retlw   0xfc    ;1
        retlw   0x92    ;2
        retlw   0x98    ;3
        retlw   0xac    ;4
        retlw   0x89    ;5
        retlw   0x81    ;6
        retlw   0xdc    ;7
        retlw   0x80    ;8
        retlw   0x8c    ;9
        retlw   0xbf    ;-
;
;tempature table
;
temptab addwf   PCL,1
        retlw   0x99    ;98
        retlw   0x98    ;99
        retlw   0x98    ;100
        retlw   0x97    ;101
        retlw   0x96    ;102
        retlw   0x95    ;103
        retlw   0x94    ;104
        retlw   0x93    ;105
        retlw   0x93    ;106
        retlw   0x92    ;107
        retlw   0x91    ;108
        retlw   0x90    ;109
        retlw   0x89    ;110
        retlw   0x89    ;111
        retlw   0x88    ;112
        retlw   0x87    ;113
        retlw   0x86    ;114
        retlw   0x86    ;115
        retlw   0x85    ;116
        retlw   0x85    ;117
        retlw   0x84    ;118
        retlw   0x83    ;119
        retlw   0x82    ;120
        retlw   0x81    ;121
        retlw   0x80    ;122
        retlw   0x80    ;123
        retlw   0x79    ;124
        retlw   0x78    ;125
        retlw   0x78    ;126
        retlw   0x77    ;127
        retlw   0x76    ;128
        retlw   0x76    ;129
        retlw   0x75    ;130
        retlw   0x74    ;131
        retlw   0x73    ;132
        retlw   0x72    ;133
        retlw   0x71    ;134
        retlw   0x70    ;135
        retlw   0x70    ;136
        retlw   0x69    ;137
        retlw   0x69    ;138
        retlw   0x68    ;139
        retlw   0x67    ;140
        retlw   0x67    ;141
        retlw   0x66    ;142
        retlw   0x65    ;143
        retlw   0x64    ;144
        retlw   0x63    ;145
        retlw   0x62    ;146
        retlw   0x62    ;147
        retlw   0x61    ;148
        retlw   0x60    ;149
        retlw   0x59    ;150
        retlw   0x59    ;151
        retlw   0x58    ;152
        retlw   0x58    ;153
        retlw   0x57    ;154
        retlw   0x56    ;155
        retlw   0x55    ;156
        retlw   0x54    ;157
        retlw   0x53    ;158
        retlw   0x53    ;159
        retlw   0x52    ;160
        retlw   0x51    ;161
        retlw   0x51    ;162
        retlw   0x50    ;163
        retlw   0x49    ;164
        retlw   0x49    ;165
        retlw   0x48    ;166
        retlw   0x47    ;167
        retlw   0x46    ;168
        retlw   0x45    ;169
        retlw   0x44    ;170
        retlw   0x44    ;171
        retlw   0x43    ;172
        retlw   0x42    ;173
        retlw   0x41    ;174
        retlw   0x40    ;175
        retlw   0x39    ;176
        retlw   0x39    ;177
        retlw   0x38    ;178
        retlw   0x37    ;179
        retlw   0x37    ;180
        retlw   0x36    ;181
        retlw   0x35    ;182
        retlw   0x34    ;183
        retlw   0x33    ;184
        retlw   0x32    ;185
        retlw   0x32    ;186
        end

Yayım tarihi: 2009/02/02 Etiketler: , , , , ,



Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir