LM35 sıcaklık sensörü, sıcaklığı oransal analog voltaj değerine dönüştürür. LM35 üç terminal cihazdır. Birinci ve üçüncü pin 5 volt gerilim beslemesi içindir. Pin 2, sıcaklık değerine göre analog gerilim çıkışıdır. Ölçülen sıcaklık ve analog çıkış gerilimi arasındaki ilişki:

1oC = 10m volt

Bu nedenle sıcaklıktaki her 1 derece artış için LM35 sensörünün çıkış voltajında 10m volt artış olacaktır. Analog gerilim değerini ölçmek için PIC16F877A mikro denetleyici kullandık.  PIC16F877A PORTA'nın yedi adet ADC kanalı vardır. Bu nedenle, bu mikro denetleyici ile yedi sensöre çok kolay bir şekilde yer verebilirsiniz. Dijital termometremize döndüğümüzde ADC, analog voltajı okumak için kullanılıyor. ADC değerini okuduktan sonra gerilim ve sıcaklık ilişkisi voltajı kullanılarak tekrar sıcaklığa dönüştürülür. Gerilimi sıcaklığa dönüştürmek için bir dönüştürme faktörü kullanılır. Tüm bu dönüşüm programlama yoluyla yapılmıştır. LCD, PIC16F877A mikro denetleyicisinin PORTB'sine bağlıdır. Bunu programlama bölümünde anlatacağım. LCD, sıcaklık değerini görüntülemek için kullanılır.

Devre Diagramı


(PIC Frekansı 8MHz olarak ayarlandı.)

Yukarıdaki şekilde gösterildiği gibi sıcaklık sensörü ve LCD'de aynı sıcaklık değerleri gösteriliyor. LM35 ve mikro denetleyicilerin korunmasını sağlamak için sıcaklık sensörünün çıkışına paralel 80k ohm direnç bağlayabilirsiniz.

Programlamada kısmi dönüştürme faktörü gerilimi tekrar sıcaklığa dönüştürmek için kullanılır. Dönüşüm faktörü:

1 volt = 100 derece

sıcaklık   =  ( çıkış voltajı * 100 oC/V )

Kod

Kodlar PIC16F877 için ASSEMBLY dilinde yazılmıştır.

#include    <p16f877a.inc>
    ORG	0X00
    CALL    HAZIRLIK
UST_SATIR   
    MOVLW   0X80
    CALL    KOMUT_ISLE
    
LOOP1
    MOVF    COUNTER1, W
    CALL    SATIR1
    XORLW   0X00
    BTFSC   STATUS,Z
    GOTO    ALT_SATIR
    CALL    KARAKTER_ISLE
    INCF    COUNTER1
    GOTO    LOOP1

ALT_SATIR
    MOVLW   0XC0
    CALL    KOMUT_ISLE
    
LOOP2
    CALL    GET_TEMP
    CALL    H_TO_DEC
    CALL    ATAMA
    GOTO    LOOP2
    

HAZIRLIK
    
    COUNTER1	EQU 0X20
    COUNTER2	EQU 0X21
    COUNTER3	EQU 0X22
    COUNTER4	EQU 0X23
 
    TEMP	EQU 0X24
    
    BIRLER	EQU 0X25
    ONLAR	EQU 0X26
    YUZLER	EQU 0X27
    
    LCD_TEMP	EQU 0X28
    LCD_PORT	EQU PORTB
    LCD_TRIS	EQU TRISB
    LCD_RS	EQU 4
    LCD_E	EQU 5
	
    PAR_KONT	EQU 0X30
	
    BANKSEL TRISB ;PORTB ÇIKI? YAPILDI
    CLRF    TRISB
    
    BANKSEL PORTB
    CLRF    PORTB
    
    BANKSEL ADCON1 ; ADC HAZIRLANDI. (SA?A DAYALI SONUÇ, AN0 A D??ERLER? D.)
    MOVLW   B'10001110'
    MOVWF   ADCON1
    
    BANKSEL ADCON0
    MOVLW   B'11000001' ; Fosc/8 VE ADC AÇILDI...
    BANKSEL ADCON0
    MOVWF   ADCON0
    
    MOVLW   0X02 ; LCD AYARLANDI..
    CALL    KOMUT_ISLE
    MOVLW   0X28
    CALL    KOMUT_ISLE
    MOVLW   0X08
    CALL    KOMUT_ISLE
    MOVLW   0X01 
    CALL    KOMUT_ISLE
    MOVLW   0X06
    CALL    KOMUT_ISLE
    MOVLW   0X0C
    CALL    KOMUT_ISLE
    MOVLW   0X01
    CALL    KOMUT_ISLE
 
    RETURN
    
KOMUT_ISLE
    MOVWF   LCD_TEMP
    SWAPF   LCD_TEMP,W
    ANDLW   0X0F
    MOVWF   LCD_PORT
    BCF	    LCD_PORT,LCD_RS
    CALL    PULSE
    
    MOVF    LCD_TEMP,W
    ANDLW   0X0F
    MOVWF   LCD_PORT
    BCF	    LCD_PORT,LCD_RS
    CALL    PULSE
    
    CALL    DELAY_05
    RETURN
 
KARAKTER_ISLE
    MOVWF   LCD_TEMP
    SWAPF   LCD_TEMP,W
    ANDLW   0X0F
    MOVWF   LCD_PORT
    BSF	    LCD_PORT,LCD_RS
    CALL    PULSE
    
    MOVF    LCD_TEMP,W
    ANDLW   0X0F
    MOVWF   LCD_PORT
    BSF	    LCD_PORT,LCD_RS
    CALL    PULSE
    
    CALL    DELAY_05
    RETURN
    
 
PULSE
    BSF	    LCD_PORT,LCD_E
    BCF	    LCD_PORT,LCD_E
    RETURN

GET_TEMP
    BANKSEL ADCON0
    BSF	    ADCON0,2 ; ADC AKT?F ET.
    BTFSC   ADCON0,2    
    GOTO    $-1
    BANKSEL ADRESH
    RRF	    ADRESH, F
    BANKSEL ADRESL
    RRF	    ADRESL, W
    BANKSEL TEMP
    MOVWF   TEMP
    RETURN
 
H_TO_DEC
    CLRF    YUZLER
    CLRF    ONLAR
    CLRF    BIRLER
    
YUZLER_KONT
    MOVLW   D'100'
    SUBWF   TEMP, W
    BTFSS   STATUS, C
    GOTO    ONLAR_KONT
    INCF    YUZLER, F
    MOVLW   D'100'
    SUBWF   TEMP, F
    GOTO    YUZLER_KONT

ONLAR_KONT
    MOVLW   D'10'
    SUBWF   TEMP, W
    BTFSS   STATUS, C
    GOTO    BIRLER_KONT
    INCF    ONLAR, F
    MOVLW   D'10'
    SUBWF   TEMP, F
    GOTO    ONLAR_KONT
    
BIRLER_KONT
    MOVF    TEMP,W
    MOVWF   BIRLER
    RETURN
    
    
ATAMA
    MOVLW   0XC0
    CALL    KOMUT_ISLE
    
    MOVF    YUZLER, W
    ADDLW   D'48'
    CALL    KARAKTER_ISLE
    
    MOVLW   0XC1
    CALL    KOMUT_ISLE
    
    MOVF    ONLAR, W
    ADDLW   D'48'
    CALL    KARAKTER_ISLE

    MOVLW   0XC2
    CALL    KOMUT_ISLE
    
    MOVF    BIRLER, W
    ADDLW   D'48'
    CALL    KARAKTER_ISLE
    
    MOVLW   0XC3
    CALL    KOMUT_ISLE
    
    MOVLW   D'223'
    CALL    KARAKTER_ISLE
    
    MOVLW   0XC4
    CALL    KOMUT_ISLE
    
    MOVLW   'C'
    CALL    KARAKTER_ISLE
    
    RETURN

DELAY_160US 
    CLRF    COUNTER2
    BSF	    COUNTER2, 5
    BSF	    COUNTER2, 4
    DECFSZ  COUNTER2, F
    GOTO $-1
    RETURN
 
DELAY_25A
    MOVLW   0XFF ; delay 255 mS
    GOTO    D0 ;
DELAY_200
    MOVLW   D'200' ; delay 200mS
    GOTO    D0 ;
DELAY_100
    MOVLW   D'100' ; delay 100mS
    GOTO    D0 ;
DELAY_50
    MOVLW   D'50' ; delay 50mS
    GOTO    D0 ;
DELAY_20
    MOVLW   D'20' ; delay 20mS
    GOTO    D0 ;
DELAY_05
    MOVLW   0X05 ; delay 5.000 ms (4 MHz clock)
    GOTO    D0 ;
DELAY_01
    MOVLW   0X01 ; delay 1.000 ms (4 MHz clock)
 
D0
    MOVWF   COUNTER2 ;
 
D1
    MOVLW   0XC7 ; delay 1mS
    MOVWF   COUNTER3 ;
    MOVLW   0X01 ;
    MOVWF   COUNTER4 ;
 
DELAY_0
    DECFSZ  COUNTER3,f ;
    GOTO    $+2 ;
    DECFSZ  COUNTER4,f ;
    GOTO    DELAY_0 ;
    DECFSZ  COUNTER2,f ;
    GOTO    D1 ;
    RETLW   0X00 ;
    
SATIR1
    ADDWF   PCL,F
    RETLW   'S'
    RETLW   'I'
    RETLW   'C'
    RETLW   'A'
    RETLW   'K'
    RETLW   'L'
    RETLW   'I'
    RETLW   'K'
    RETLW   ':'
    RETLW   0X00
    
END