- Gerekli Bileşenler:
- Devre şeması:
- 8051 kullanarak LM35 ile Sıcaklığın Ölçülmesi:
- 16x2 LCD:
- ADC0804 IC:
- LM35 Sıcaklık Sensörü:
- Kod açıklaması:
Bazen insanlar dalgalanmalar nedeniyle sıcaklığı analog termometreden okumakta zorlanırlar. Yani burada biz basit yapacağız 8051 mikrodenetleyici kullanarak termometre Digital hangi LM35 sensörü sıcaklığını ölçmek için kullanılır. Arduino, NodeMCU, PIC, Raspberry Pi ve diğer mikrodenetleyicileri kullanarak dijital termometre oluşturmak için LM35'i de kullandık.
Bu proje aynı zamanda ADC0804'ün 8051 ile ve 16 * 2 LCD'nin 8051 mikrodenetleyiciyle düzgün bir şekilde arayüzlenmesi görevi görecek.
Gerekli Bileşenler:
- 8051 geliştirme kurulu
- ADC0804 kurulu
- 16 * 2 LCD ekran
- LM35 sensörü
- Potansiyometre
- Atlama telleri
Devre şeması:
LM35 kullanan Dijital Termometre Devresi için devre şeması aşağıda verilmiştir:
8051 kullanarak LM35 ile Sıcaklığın Ölçülmesi:
8051 mikrodenetleyici, 128 byte on chip RAM, 4K byte on chip ROM, iki zamanlayıcı, bir seri port ve 4 adet 8bit porta sahip 8 bitlik bir mikrodenetleyicidir. 8052 mikro denetleyici, mikro denetleyicinin bir uzantısıdır. Aşağıdaki tablo 8051 aile üyesinin karşılaştırmasını göstermektedir.
Özellik |
8051 |
8052 |
ROM (bayt cinsinden) |
4K |
8K |
RAM (bayt) |
128 |
256 |
Zamanlayıcılar |
2 |
3 |
G / Ç pimleri |
32 |
32 |
Seri port |
1 |
1 |
Kaynakları kes |
6 |
8 |
16x2 LCD:
16 * 2 LCD, gömülü uygulamalar için yaygın olarak kullanılan bir ekrandır. İşte 16 * 2 LCD ekranın pimleri ve çalışması hakkında kısa açıklama. LCD'nin içinde çok önemli iki kayıt vardır. Veri kaydı ve komut kaydıdır. Komut kaydı temiz ekran, evde imleç vb. Komutları göndermek için kullanılır, veri kaydı 16 * 2 LCD'de görüntülenecek verileri göndermek için kullanılır. Aşağıdaki tablo 16 * 2 lcd'nin pin açıklamasını göstermektedir.
Toplu iğne |
Sembol |
G / Ç |
Açıklama |
1 |
Vss |
- |
Zemin |
2 |
Vdd |
- |
+ 5V güç kaynağı |
3 |
Vee |
- |
Kontrastı kontrol etmek için güç kaynağı |
4 |
RS |
ben |
Komut kaydı için RS = 0, Veri kaydı için RS = 1 |
5 |
RW |
ben |
Yazma için R / W = 0, okumak için R / W = 1 |
6 |
E |
G / Ç |
etkinleştirme |
7 |
D0 |
G / Ç |
8 bit veri yolu (LSB) |
8 |
D1 |
G / Ç |
8 bit veri yolu |
9 |
D2 |
G / Ç |
8 bit veri yolu |
10 |
D3 |
G / Ç |
8 bit veri yolu |
11 |
D4 |
G / Ç |
8 bit veri yolu |
12 |
D5 |
G / Ç |
8 bit veri yolu |
13 |
D6 |
G / Ç |
8 bit veri yolu |
14 |
D7 |
G / Ç |
8 bit veri yolu (MSB) |
15 |
Bir |
- |
Arka ışık için + 5V |
16 |
K |
- |
Zemin |
Aşağıdaki tablo, sık kullanılan LCD komut kodlarını göstermektedir.
Kod (onaltılık) |
Açıklama |
01 |
Ekranı temizle |
06 |
İmleci artır (sağa kaydırma) |
0A |
Ekran kapalı, imleç açık |
0C |
Ekran açık, imleç kapalı |
0F |
Ekran açık, imleç yanıp sönüyor |
80 |
İmleci 1. satırın başına zorla |
C0 |
İmleci 2. satırın başına zorla |
38 |
2 satır ve 5 * 7 matris |
ADC0804 IC:
ADC0804 IC Ulusal Semiconductor ADC0800 serisinin ailede bir 8-bitlik paralel ADC olduğunu. +5 volt ile çalışır ve 8 bit çözünürlüğe sahiptir. Adım boyutu ve Vin aralığı, farklı Vref / 2 değerleri için değişir. Aşağıdaki tablo, Vref / 2 ve Vin aralığı arasındaki ilişkiyi göstermektedir.
Vref / 2 (V) |
Vin (V) |
Adım boyutu (mV) |
açık |
0 ile 5 |
19.53 |
2.0 |
0 ila 4 |
15.62 |
1.5 |
0-3 |
11.71 |
1.28 |
0 - 2,56 |
10 |
Bizim durumumuzda Vref / 2 1,28 volta bağlıdır, bu nedenle adım boyutu 10mV'dir. ADC0804 için adım boyutu (2 * Vref / 2) / 256 olarak hesaplanır.
Çıkış voltajını hesaplamak için aşağıdaki formül kullanılır:
Dout = Vin / adım boyutu
Dout, ondalık dijital veri çıkışı olduğunda, Vin = analog giriş voltajı ve adım boyutu (çözünürlük) en küçük değişikliktir. Burada ADC0804 hakkında daha fazla bilgi edinin, ayrıca ADC0808'in 8051 ile arayüzünü kontrol edin.
LM35 Sıcaklık Sensörü:
LM35, çıkış voltajı Celsius sıcaklığı ile doğrusal orantılı olan bir sıcaklık sensörüdür. LM35 halihazırda kalibre edilmiş olarak gelir, dolayısıyla harici kalibrasyon gerektirmez. Her Santigrat derece sıcaklık için 10mV çıkış verir.
LM35 sensörü, sıcaklığa karşılık gelen voltaj üretir. Bu voltaj ADC0804 ile dijitale (0'dan 256'ya) çevrilir ve 8051 mikrodenetleyiciye beslenir. 8051 mikro denetleyici, bu dijital değeri Santigrat derece cinsinden sıcaklığa dönüştürür. Daha sonra bu sıcaklık sergilemeye uygun ascii formuna dönüştürülür. Bu ascii değerleri, ekranı üzerinde sıcaklığı gösteren 16 * 2 lcd'ye beslenir. Bu işlem, belirtilen aralıktan sonra tekrarlanır.
Aşağıda 8051 kullanılan LM35 Dijital Termometre için kurulum görüntüsü verilmiştir :
Tüm LM35 tabanlı dijital termometreleri burada bulabilirsiniz.
Kod açıklaması:
LM35 kullanan bu Dijital Termometre için eksiksiz C programı bu projenin sonunda verilmiştir. Kod küçük anlamlı parçalara bölünmüş ve aşağıda açıklanmıştır.
8051 mikrodenetleyici ile 16 * 2 LCD arabirimi için, 8051 mikrodenetleyiciye 16 * 2 lcd'nin bağlı olduğu pinleri tanımlamamız gerekir. 16 * 2 lcd'nin RS pini P2.7'ye bağlanır, 16 * 2 lcd'nin RW pini P2.6'ya ve 16 * 2 lcd'nin E pini P2.5'e bağlanır. Veri pinleri 8051 mikro denetleyicinin 0 numaralı bağlantı noktasına bağlanır.
sbit rs = P2 ^ 7; // Register Select (RS) pin 16 * 2 lcd sbit rw = P2 ^ 6; // 16 * 2 lcd sbit'in Okuma / Yazma (RW) pini en = P2 ^ 5; // 16 * 2 lcd'nin (E) pinini etkinleştir
Benzer şekilde, 8051 mikro denetleyici ile ADC0804 arabirimi için, ADC0804'ün 8051 mikro denetleyiciye bağlı olduğu pinleri tanımlamamız gerekir. ADC0804'ün RD pini P3.0'a, ADC0804'ün WR pini P3.1'e ve ADC0804'ün INTR pini P3.2'ye bağlanır. Veri pinleri 8051 mikro denetleyicinin 1. portuna bağlanır.
sbit rd_adc = P3 ^ 0; // ADC0804 sbit wr_adc = P3 ^ 1'in (RD) pinini oku; // ADC0804 sbit'in yaz (WR) pini intr_adc = P3 ^ 2; // ADC0804'ün Interrupt (INTR) pini
Daha sonra programda kullanılan bazı fonksiyonları tanımlamamız gerekiyor. Gecikme işlevi belirtilen zaman gecikmesini oluşturmak için kullanılır, c mdwrt işlevi komutları 16 * 2 lcd ekrana göndermek için kullanılır, datawrt işlevi verileri 16 * 2 lcd ekrana göndermek için ve convert_display işlevi ADC verilerini sıcaklığa dönüştürmek için kullanılır ve 16 * 2 lcd ekranda görüntülemek için.
void delay (unsigned int); // gecikme oluşturma işlevi void cmdwrt (işaretsiz karakter); // 16 * 2 lcd ekrana komut gönderme işlevi void datawrt (işaretsiz karakter); // 16 * 2 lcd ekrana veri gönderme işlevi void convert_display (işaretsiz karakter); // ADC değerini sıcaklığa dönüştürmek ve 16 * 2 lcd ekranda görüntülemek için işlev
Kodun aşağıdaki kısmında 16 * 2 lcd'ye komutlar gönderiyoruz. Komutları böyle berrak ekran, artım imleç olarak, 1 başlangıcı imleci zorlamak st bazı belirli bir süre sonunda birer 16 * 2 lcd ekran birine gönderilir hattı.
for (i = 0; i <5; i ++) // komutları 16 * 2 lcd ekrana her seferinde bir komut gönder {cmdwrt (cmd); // 16 * 2 lcd ekran gecikmesine komut göndermek için işlev çağrısı (1); }
Kodun bu bölümünde 16 * 2 lcd'ye veri gönderiyoruz. 16 * 2 lcd ekranda görüntülenecek veriler belirli bir zaman gecikmesinden sonra tek tek görüntülenmek üzere gönderilir.
for (i = 0; i <12; i ++) // 16 * 2 lcd ekrana veri gönder her seferinde bir karakter {datawrt (data1); // 16 * 2 lcd ekran gecikmesine (1) veri göndermek için işlev çağrısı; } Kodun bu bölümünde LM35 sensörün ürettiği analog voltajı dijital veriye dönüştürüp sonra sıcaklığa dönüştürülerek 16 * 2 lcd ekranda görüntüleniyor. ADC0804'ün dönüşümü başlatması için ADC0804'ün WR pinine düşükten yükseğe bir darbe göndermeliyiz, sonra dönüşümün bitmesini beklemeliyiz. INTR, dönüşümün sonunda düşük olur. INTR düştüğünde, dijital verileri 8051 mikro denetleyicinin 0 numaralı bağlantı noktasına kopyalamak için RD azaltılır. Belirli bir zaman gecikmesinden sonra, sonraki döngü başlar. Bu süreç sonsuza kadar tekrarlanır.
while (1) // sonsuza kadar tekrarla {wr_adc = 0; // WR pin gecikmesinde YÜKSEK darbeye DÜŞÜK gönder (1); wr_adc = 1; while (intr_adc == 1); // Dönüşüm Sonunu bekleyin rd_adc = 0; // ADC0804'ten verileri okumak için RD = 0 yapın değer = P1; // ADC verilerini kopyala convert_display (değer); // ADC verilerini sıcaklığa dönüştürmek ve 16 * 2 lcd ekran gecikmesinde (1000) görüntülemek için işlev çağrısı; // her döngü arasındaki aralık rd_adc = 1; // sonraki döngü için RD = 1 yapın}
Kodun aşağıdaki kısmında 16 * 2 lcd ekrana komutlar gönderiyoruz. Komut 8051 mikro denetleyicinin 0 numaralı bağlantı noktasına kopyalanır. RS, komut yazma için düşük yapılır. Yazma işlemi için RW düşük yapılır. Komut yazma işlemini başlatmak için etkinleştirme (E) pinine yüksekten düşüğe darbe uygulanır.
void cmdwrt (işaretsiz karakter x) {P0 = x; // komutu 16 * 2 lcd'nin bağlı olduğu Port 0'a gönderin rs = 0; // rw = 0 komutu için RS = 0 yapın; // yazma işlemi için RW = 0 yapın en = 1; // komut yazma işlem gecikmesini (1) başlatmak için Enable (E) pininde HIGH ila LOW puls gönder; en = 0; }
Kodun bu bölümünde 16 * 2 lcd ekrana veri gönderiyoruz. Veriler, 8051 mikro denetleyicinin 0 numaralı bağlantı noktasına kopyalanır. RS, komut yazma için yüksek yapılır. Yazma işlemi için RW düşük yapılır. Veri yazma işlemini başlatmak için etkinleştirme (E) pinine yüksekten düşüğe darbe uygulanır.
void datawrt (işaretsiz karakter y) {P0 = y; // veriyi 16 * 2 lcd'nin bağlı olduğu Port 0'a gönder rs = 1; // rw = 0 komutu için RS = 1 yapın; // yazma işlemi için RW = 0 yapın en = 1; // veri yazma işlem gecikmesini (1) başlatmak için Etkinleştir (E) pininde YÜKSEK ila DÜŞÜK bir darbe gönderin; en = 0; }
Kodun bu bölümünde dijital verileri sıcaklığa çevirip 16 * 2 lcd ekranda görüntülüyoruz.
void convert_display (işaretsiz karakter değeri) {unsigned char x1, x2, x3; cmdwrt (0xc6); // 16 * 2 lcd x1 = (değer / 10) üzerinde imleci 2. satırın 6. konumuna ayarlama komutu; // değeri 10'a bölün ve bölümü x1 x1 = x1 + (0x30) değişkeninde saklayın; // 0x30 x2 = değer% 10 ekleyerek x1 değişkenini ascii'ye dönüştürün; // değeri 10'a bölün ve kalanı x2 x2 = x2 + (0x30) değişkeninde saklayın; // 0x30 x3 = 0xDF ekleyerek x2 değişkenini ascii'ye dönüştürün; // ascii derece değeri (°) sembol datawrt (x1); // sıcaklığı 16 * 2 lcd ekran datawrt (x2) üzerinde göster; datawrt (x3); datawrt ('C'); }
Ayrıca, farklı mikro denetleyicilerle LM35 kullanan diğer termometreleri kontrol edin:
- Arduino ve LM35 kullanan Dijital Termometre
- LM35 ve AVR Mikrodenetleyici kullanarak Sıcaklık Ölçümü
- Raspberry Pi ile Oda Sıcaklığı Ölçümü