DS1620 AT89S52 Isı Ölçümü GLCD Termometre
Etiketler: AT89S52, ds1620, GLCD, grafik lcd, ısı ölçümü, proje, sıcaklık ölçümü, Termometre

Hazırlayan: Sükriye KAYA Projen Dosyaları (keil kodları ,isis,şema,pcb) glcd-termometre-at89s52-ds1620Emeği geçen Kişilere Teşekkürler
Bu proje DS1620’nin verdiği dijital olarak verdiği sonucu AT89S52 mikrokontrolörü kullanarak bir grafik LCD ekranda sıcaklık bilgisinin gösterilmesidir.
Ayrıca devre 250C üzerinde bir sıcaklık değerine ulaştığında ortam sıcaklığının artığını bir kırmızı ledin yanması ile aynı şekilde 250C altına düştüğünde ortam sıcaklığının yeşil bir ledin yanması kullanıcıya bildirilmesi amaçlanmıştır. Devrede clock osilatörlerini ayarlamak için 12 MHz’lik kristal clock osilatörü kullanılmıştır.
DS1620 8 bacaklı bir sıcaklık sensörü ve aynı zamanda termostat olarak kullanılır. Sıcaklık 9 bitlik data olarak verilmektedir.
Devre sıcaklığının gösterilmesi bir 128×64 grafik LCD kullanılarak sağlanmıştır. LCD nin D0,D1,D2,D3,D4, D5, D6, D7 ile mikrokontrolle bağlantısı sağlanmıştır. LCD de ayrıca programda belirlediğim saniye aralıklarla okul numaramda gözükmektedir.
Devre kısaca; DS1620 -> AT89S52 -> GRAFIK LCD
DS1620 den bilgi alan AT89S52 bilgiyi çıkışta bir LCD ekran ile göstermektedir.
AT89S52 Özellikleri ve Pin Konfigürasyonu :

Özellikleri:
- Kontrol uygulamalarına yönelik 8-bit CPU
- Mantıksal işlemci
- 8051-Tabanlı Düşük-Voltaj 16MHz CMOS Kontroller 4 adet 8-bit giriş/çıkış portu(32 uç)
- 3 adet Zamanlayıcı/sayıcı
- Watchdog Zamanlayıcı
- 2 öncelik seviyesine sahip 8 kesme donanım yapısı
- UART, 2 DPTRs
- 8K Byte Flash hafıza (ISP)
- 256 Byte On-chip RAM
DS1620 :

DS1620 Özellikleri :
- Harici bileşene ihtiyaç duymaz.
- Besleme gerilimi 2,7V ile 5,5V arasındadır.
- 0,50C aralıklarla -550C ile 1250C arasında ölçüm yapar.
- Sıcaklığı dijital kelimeye 750ms(max) çevirir.
- Bilgi 3 seri iletim yolundan okunur ve yazılır(RST, DQ, CLK).
- 8-pin DI
DS1620 sıcaklığı bandgap-based (yarı iletken tabanlı, minimum enerji için) sıcaklık sensörü kullanarak ölçer. Sıcaklık okuma sıcaklık okuma komutu gönderilerek bir 9-bit içinde ikinin tümleyenini okuma sağlanır. Bilgi 3 tel seri arayüz üzerinden seri olarak iletilir, ilki LSB dir.
İlk olarak LSB nin 3-tel yol üzerinden bilginin iletilmesinden sonra, sıcaklık bilgisi DS1620 ye / den 9 bitlik bir kelime olarak( 9. MSB bitinden sonra RST düşük seviyeye alınır) okunur/yazılır.
Sıcaklık/Data İlişkisi :

Bütün bilgi transferi RST lojik yüksek seviyeye sürmeyle başlatılır. RST yi düşük seviyeye sürme haberleşmeyi bitirir. Data girişleri için saat saykılının yükselen kenarında geçerli olmalıdır. Data bitleri saatin düşen kenarında çıkıştır ve yükselen kenar boyunca geçerli kalır.
Okuma bilgisi transferi

Yazma bilgisi transferi

Devrenin ISIS Şeması:
Devrede Kullanılan Malzemeler:
Uygulama Devresinin C Programı
- KS0108 uyumlu 128*64 Grafik LCD
- DS1620 Sıcaklık Sensörü
- AT89S52 Mikrokontrolör
- 12 KHz Kristal
- 33 pF Kondansatör
- 10 µF Kondansatör
- 330 ? Direnç
- 10 K? Direnç
- Kırmızı ve Yeşil Led
Devrenin Çalışması: Yaptığımız termometre uygulamasında öncelikle DS1620 ısı sensöründen sıcaklık degeri okunup daha sonra bu deger grafik Lcd ekranına yazdırılmaktadır ve termometre animasyonu sayesinde Lcd ekranında ısı seviyesi takip edilebilmektedir. Bu animasyonun ve ekrandaki karakterlerin hazırlanması aşamasında logo manger 1.2 , GLCD Tool ve Fast LCD programlarından faydalanılmıştır.
Ayrıca devre eklenen iki adet yeşil ve kırmızı led sayesinde kontrol devresi gorevi gormektedir. Bu ledlerden yeşil olanı 25 derece ve altında yanmakta kırmızı led ise 25 derecenin üzerine çıkıldığında yanmakta ve kullanıcıyı uyarmaktadır.Bu aslında basit bi uygulamadır ve daha yararlı uygulamalara temel teşkil etmektedir. Örneğin bu ledler yerine bi soğutucu ve bir ısıtıcı yerleştirilrbilir ve istenilen bi sıcaklık seviyesinin altına inildiğinde ısıtıcı devre; üzerine çıkıldığında ise soğutucu devre otomatik olarak kontrol edilerek ortam sıcaklığı ayarlanabilir.
Uygulama Devresinin C Programları
/*************** Sükriye KAYA 020303031 ****************/ /********************* PROJE B DERSI *******************/ /**************** TERMOSTATLI TERMOMETRE **************/ #include#include "Tablo.h" #include "G_LCD.h" #include "ds1620.h" #include "Logo.h" #define YESILLED P1_3 #define KIRMIZILED P1_4 #define sicakligi_oku 0xAA #define cevirimi_baslat 0xEE #define konfig_yaz 0x0C unsigned char is_sicaklik,zaman,sicaklik; unsigned char scklk_dgskn,zmn_dgskn,saniye; bit zmn_hzr,sic_hzr,menu_cikis,renk; void Animasyon(unsigned char *resim) { unsigned char sux,suy; char i; GLCD_Ekran(0); for(suy=0;suy<8;suy++) for(i=0;i<=suy;i++) for(sux=0;sux<128;sux++) GLCD_int_8Bit (sux,suy-i,*(resim+(7-i)*128+sux)); } void bekle_sn(unsigned char san) { unsigned int i; for(i=0;i<=san;i++) Gecikme(35000); } void giris_ekrani(void) { Animasyon(&reklam); bekle_sn(3); Animasyon(&Gosterge); GLCD_B_Rakam(38,20,0,1); } void main(void) { YESILLED=0;KIRMIZILED=0; GLCD_Baslat(1); is_sicaklik=25; ds1620_bilgi_yaz(konfig_yaz,2,8); ds1620_bilgi_yaz(cevirimi_baslat,0,0); giris_ekrani(); while(1) { sicaklik=ds1620_bilgi_oku(sicakligi_oku,9); sicaklik=sicaklik/2; if(sicaklik>60) sicaklik=60; GLCD_B_Rakam(38,20,sicaklik,1); Seviye_Goster(sicaklik); if(sicaklik>is_sicaklik) { KIRMIZILED=1;YESILLED=0; } else { KIRMIZILED=0;YESILLED=1; } } YESILLED=0;KIRMIZILED=0; }
DS1620 C Kodları
/************************************************************************/
/* DS1620 */
/************************************************************************/
#define DQ P1_0
#define CLK P1_1
#define RST P1_2
void bit_yaz(unsigned char c)
{
DQ=c;
CLK=0;
CLK=1;
DQ=1;
}
void ds1620_bilgi_yaz(unsigned char protokol,unsigned char bilgi,unsigned char bit_sayisi)
{
unsigned char i,simdiki_bit;
RST=1;
for(i=0;i<8;i++)
{
simdiki_bit=protokol>>i;
simdiki_bit=simdiki_bit&1;
bit_yaz(simdiki_bit);
}
for(i=0;i>i;
simdiki_bit=simdiki_bit&1;
bit_yaz(simdiki_bit);
}
RST=0;
}
unsigned char bit_oku()
{
unsigned char c;
CLK=0;
c=DQ;
CLK=1;
return c;
}
unsigned int ds1620_bilgi_oku(unsigned char protokol, unsigned char bit_sayisi)
{
unsigned char i,simdiki_bit;
unsigned int bilgi;
bilgi=0;
RST=1;
for(i=0;i<8;i++)
{
simdiki_bit=protokol>>i;
simdiki_bit=simdiki_bit&1;
bit_yaz(simdiki_bit);
}
for(i=0;i
Grafik lcd (glcd) C kodları
/************************************************************************/
/* KS0108 G_LCD.h */
/************************************************************************/
#define Acik 1
#define Kapali 0
#define GLCD_CS1 P3_3
#define GLCD_CS2 P3_2
#define GLCD_E P3_4
#define GLCD_RW P3_5
#define GLCD_DI P3_6
#define GLCD_RST P3_7
#define DATA P2
void Gecikme (unsigned int sure)
{
unsigned int i;
for (i=0;i= 64)
{
if (x>127)
x=0;
else
{
x-=64;
sec=1;
}
}
GLCD_DI=0;
x&=0x7f;
x|=0x40;
GLCD_int_Yaz (sec, x);
GLCD_int_Yaz (sec, (y & 0xBF) | 0xB8);
GLCD_DI=1;
GLCD_DI=0;
GLCD_int_Yaz (sec, x);
GLCD_DI=1;
GLCD_int_Yaz (sec, Veri_Bayt);
}
void GLCD_Ekran (bit renk)
{
unsigned char i, j, dolgu;
#define Acik_Bayt 0xFF
#define Kapali_Bayt 0x00
if (renk)
dolgu=Acik_Bayt;
else
dolgu=Kapali_Bayt;
for (i=0;i<8;i++)
{
GLCD_DI=0;
GLCD_int_Yaz (0, 0x40);
GLCD_int_Yaz (1, 0x40);
GLCD_int_Yaz (0, i | 0xB8);
GLCD_int_Yaz (1, i | 0xB8);
GLCD_DI=1;
for(j = 0; j < 64; j++)
{
GLCD_int_Yaz (0, dolgu);
GLCD_int_Yaz (1, dolgu);
}
}
}
void GLCD_Baslat (bit mod)
{
GLCD_RST=1;
GLCD_E=0;
GLCD_CS1=0;
GLCD_CS2=0;
GLCD_DI=0;
GLCD_int_Yaz (0, 0xC0);
GLCD_int_Yaz (1, 0xC0);
GLCD_int_Yaz (0, 0x40);
GLCD_int_Yaz (1, 0x40);
GLCD_int_Yaz (0, 0xB8);
GLCD_int_Yaz (1, 0xB8);
if(mod)
{ GLCD_int_Yaz (0, 0x3F);
GLCD_int_Yaz (1, 0x3F); }
else
{ GLCD_int_Yaz (0, 0x3E);
GLCD_int_Yaz (1, 0x3E); }
GLCD_Ekran (Kapali);
}
void GLCD_B_Rakam (int x, int y, char sayi,bit renk)
{
unsigned char i,k,bas0,bas1;
bas0=sayi/10;
bas1=sayi%10;
if(y==7)
y=6;
if(x>=114)
x=114;
k=x;
for(i=0;i<=17;i++)
GLCD_int_8Bit(x++,y,renk==1?B_H_Tablo[bas0][i]:0xFF - B_H_Tablo[bas0][i]);
x=k;
y++;
for(i=17;i<=33;i++)
GLCD_int_8Bit(x++,y,renk==1?B_H_Tablo[bas0][i]:0xFF - B_H_Tablo[bas0][i]);
k=x;
y--;
for(i=0;i<=17;i++)
GLCD_int_8Bit(x++,y,renk==1?B_H_Tablo[bas1][i]:0xFF - B_H_Tablo[bas1][i]);
x=k;
y++;
for(i=17;i<=33;i++)
GLCD_int_8Bit(x++,y,renk==1?B_H_Tablo[bas1][i]:0xFF - B_H_Tablo[bas1][i]);
y--;
}
void Seviye_Goster(unsigned char sicaklik)
{
unsigned char i=0,k=0,m=0;
unsigned char j=0;
if(sicaklik<0)
sicaklik=0;
if(sicaklik>60)
sicaklik=60;
k=6-sicaklik/10;
if(j>=sicaklik)
if(k!=1)
{ GLCD_int_8Bit (117,k-1,Seviye[0]);GLCD_int_8Bit (118,k-1,Seviye[0]); }
j=sicaklik;
for(i=6;i>k;i--)
{ GLCD_int_8Bit (117,i,Seviye[8]);GLCD_int_8Bit (118,i,Seviye[8]); }
m=sicaklik%10;
if(m==0)
if(sicaklik<60)
{ GLCD_int_8Bit (117,k,Seviye[0]);GLCD_int_8Bit (118,k,Seviye[0]); }
if(m==1)
{ GLCD_int_8Bit (117,k,Seviye[1]);GLCD_int_8Bit (118,k,Seviye[1]); }
if(m==2)
{ GLCD_int_8Bit (117,k,Seviye[2]);GLCD_int_8Bit (118,k,Seviye[2]); }
if(m==3)
{ GLCD_int_8Bit (117,k,Seviye[3]);GLCD_int_8Bit (118,k,Seviye[3]); }
if(m==4)
{ GLCD_int_8Bit (117,k,Seviye[4]);GLCD_int_8Bit (118,k,Seviye[4]); }
if(m==5 || m==6)
{ GLCD_int_8Bit (117,k,Seviye[5]);GLCD_int_8Bit (118,k,Seviye[5]); }
if(m==7)
{ GLCD_int_8Bit (117,k,Seviye[6]);GLCD_int_8Bit (118,k,Seviye[6]); }
if(m==8)
{ GLCD_int_8Bit (117,k,Seviye[7]);GLCD_int_8Bit (118,k,Seviye[7]); }
if(m==9)
{ GLCD_int_8Bit (117,k,Seviye[8]);GLCD_int_8Bit (118,k,Seviye[8]); }
}
Benzer Yazılar
Termometreli saatli masaüstü kimlik kartı ccs pic16f877
Hazırlayan: Murat ATLIHAN KOCAELİ ÜNİVERSİTESİ MEKATRONİK MÜHENDİSLİĞİ – Devre PIC16F877 üzerine kurulu yazılımı CCS C ile hazırlanmış değişik bir uygulama....
Glcd göstergeli pil ölçüm devresi pic16f877 proton adc
Uygulamadaki Amaç: Pildeki gerilimin PIC MCU ADC kanalından okunulup GLCD (KS108) ekranında Bar olarak gösterimi. Bu uygulama ile 0…5v arasınra gerilimler...
LM35 Sıcaklık sensörü ile sıcaklık denetleyicisi
Bundan yaklaşık 3-4 ay önce bir arkadaşa yaptığım devrenin dosyalarını üniversite, sınavlar…vs sebeplerden dolayı yeni paylaşabiliyorum . Grafik...







5/03/2009 18:45
paylaşımınız için tşkler acaba logo.h tablo.h ve ds1620.h dosyalarını da yukleyebilir misiniz?