[wpfp-link]
 

Bu yazıda 1°C çözünürlüklü 0-100°C arasında ölçüm yapabilen bir dijital termometre devresi paylaşacağız. Bu devrede 8051 entegresi kullanılmış. Devrede LM35 analog sıcaklık sensörü, ADC0804 ve AT89S51 mikrodenetleyicisi kullanılmıştır. LM35 sıcaklık sensörü -55 ile 150°C  arasında ölçüm yapabiliyor. Sıcaklıktaki her 1°C değişiminde 10mV çıkış gerilimi oluşuyor.

Örneğin 32°C de çıkış gerilimi 32 x 10mV = 320mV olur. ADC 0804 ise LM35 in ürettiği analog çıkış gerilimini, mikrodenetleyici için gereken  8 bit dijital değere dönüştürmek için kullanılıyor. Mikrodenetleyici bu değeri 2 digit 7 segment display de gösteriyor.

LM35 in çıkışı ADC0804 ün +Vin girişine bağlanmış. R13 direnci ve R14 ün o anki değeri 1i28 voltluk harici bir referans gerilimi üretmek için kullanılıyor. Bu referans gerilimiyle ADC nin adım ölçüsü 10 mV olacak ve 0-1V arasında ayarlanabilecek. Bu 10 mV luk bir giriş için ADC nin dijital çıkışının 1 (desimal olarak 1) olacağı anlamına gelir.  20mV için 10(desimal olarak 2), 30mV için 11(desimal olarak 3) ve bu şekilde devam edecektir. Mikrodenetleyici bu bilgileri 7 segment displayde görüntüleyecektir.

Program:

ORG 00H
MOV P1,#11111111B // initializes P1 as input port
MOV P0,#00000000B // initializes P0 as output port
MOV P3,#00000000B // initializes P3 as output port
MOV DPTR,#LABEL // loads the address of "LABEL" to DPTR
MAIN: MOV R4,#250D // loads register R4 with 250D
CLR P3.7 // makes Cs=0
SETB P3.6 // makes RD high
CLR P3.5 // makes WR low
SETB P3.5 // low to high pulse to WR for starting conversion
WAIT: JB P3.4,WAIT // polls until INTR=0
CLR P3.7 // ensures CS=0
CLR P3.6 // high to low pulse to RD for reading the data from ADC
MOV A,P1 // moves the digital output of ADC to accumulator A
MOV B,#10D // load B with 10D
DIV AB // divides the content of A with that in B
MOV R6,A // moves the quotient to R6
MOV R7,B // moves the remainder to R7
DLOOP:SETB P3.2 // sets P3.2 which activates LED segment 1
MOV A,R6 // moves the quotient to A
ACALL DISPLAY // calls DISPLAY subroutine
MOV P0,A // moves the content of A to P0
ACALL DELAY // calls the DELAY subroutine
CLR A // clears A
MOV A,R7 // moves the remainder to A
CLR P3.2 // deactivates LED segment 1
SETB P3.1 // activates LED segment 2
ACALL DISPLAY
MOV P0,A
ACALL DELAY
CLR A
CLR P3.1 // deactivates LED segment 2
DJNZ R4,DLOOP // repeats the loop "DLOOP" until R4=0
SJMP MAIN // jumps back to the main loop
DELAY: MOV R3,#255D // produces around 0.8mS delay
LABEL1: DJNZ R3,LABEL1
RET
DISPLAY: MOVC A,@A+DPTR // converts the content in A to corresponding digit drive pattern from LUT
RET
LABEL: DB 3FH // LUT (look up table) starts here
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END

1 Yorum

  1. Ben 12 bitlik serial adc kullanarak yapmam gerekiyor bu projeyi ve ayrıca fahrenheita bir buton yardımıyla çevirmem lazım. Onun için de interrupt kullanacağım. Acaba yardımcı olabilir misiniz,, 12 Bitlik kullanacağım için haliyle hextoDec kısmı da farklı olacak…

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz