Notlar..

320volt / Mikrodenetleyici Projeleri/

LM35 ile Sıcaklık Ölçümü ve Grafik Lcd Menü Tasarımı

Mikrodenetleyici Projeleri, blog arşivinde LM35 ILE SICAKLIK ÖLÇÜMÜ VE GRAFIK LCD MENÜ TASARIMI konusu "ccs* ccs termometre* grafik lcd* HDM64GS12* lm35* microchip pic projeleri* PIC16F877* pic16f877 termometre* " ile etiketlendi

Öncelikle bu devreyi tasarlarken http://www. elektrotekno.com/ about48473.html linkindeki örnek üzerinden hareket ettim. Özellikle devreyi paylaşan lapry nickli arkadaşıma teşekkür ederim.

Bu devre CCS C derleyicisi kullanılarak LM35 ısı sensörünün kullanımı ve Grafik LCD üzerinde menü tasarımını içermektedir. Özellikle grafik LCD üzerinde menü seçimi vs. konularda internet üzerindeki nadir örneklerdendir. (Ben bu zamana kadar bu şekilde menü kontrolü olan örnek bir devre bulamadım :D) HDM64GS12.c Driver dosyasında bazı değişikler yaptım çalışma esnasında bir problem çıkarsa bu dosyayı CCS C program dizininde Drivers klasörüne kopyalayın.

Maalesef sadece sıcaklık ölçen ve menüyü ekranda gösteren kod bloğunu paylaşabiliyorum. Diğer kısımları kendiniz programlayabilir veya menüden kaldırabilirsiniz.

Herkese Kolay Gelsin

Tüm proje dosyaları: lm35-sicaklik-olcumu-ccs-pic16f877.rar

İsis simülasyon görüntüleri

lm35 ccs pic16f877 grafik lcd termometre glcd lm35 termometre ccs isis test

Termometre.c yazılımı

#include <16f877A.h>
#device adc=10
#device *=16
#FUSES NOWDT        //No Watch Dog Timer
#FUSES HS           //High speed Osc (> 4mhz)
#FUSES NOPROTECT    //Code not protected from reading
#FUSES NOBROWNOUT   //Reset when brownout detected
#FUSES NOPUT        //No Power Up Timer
#FUSES NODEBUG      //No Debug mode for ICD
#FUSES NOLVP        //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(clock=20000000)
#include 
#include 
#use fast_io(A)

int yuk;
int menu;
int ekran;
char t10[] = "10";
char t20[] = "20";
char t30[] = "30";
char t40[] = "40";
char t50[] = "50";
char t60[] = "60";

char derece[]= "C";
char tmp[]= "SICAKLIK";
char tmp1[]= "AYARLAR";
char tmp2[]= "GRAFiK";
char tmp3[]= "GiRiSLER";
char tmp4[]= "CIKISLAR";
char tmp5[]= "KAPAT";
char yazi[5];

unsigned long int temperature;
float value;
int ciz;

menu_ekran(int8 menum){
switch(menum){
case 0:
glcd_rect(0,1,60,21,yes,ON);//---       //SICAKLIK buton kısmı
glcd_rect(0,23,60,42,yes,off);//---
glcd_rect(0,23,60,42,NO,ON);//---
glcd_rect(0,44,60,63,yes,off);
glcd_rect(0,44,60,63,NO,ON);//---

glcd_rect(67,1,127,21,yes,off);//---
glcd_rect(67,1,127,21,NO,ON);//---
glcd_rect(67,23,127,42,yes,off);//---
glcd_rect(67,23,127,42,NO,ON);//---
glcd_rect(67,44,127,63,yes,off);
glcd_rect(67,44,127,63,NO,ON);//---

glcd_text57(7,7,tmp,1,off);
glcd_text57(10,29,tmp1,1,on);
glcd_text57(13,51,tmp2,1,on);
glcd_text57(74,7,tmp3,1,on);
glcd_text57(74,29,tmp4,1,on);
glcd_text57(84,51,tmp5,1,on);
menu=0;break;
case 1:
glcd_rect(0,1,60,21,yes,off);//---       //AYARLAR buon kısmı
glcd_rect(0,1,60,21,NO,ON);//---
glcd_rect(0,23,60,42,yes,on);//---
glcd_rect(0,44,60,63,yes,off);
glcd_rect(0,44,60,63,no,ON);//---
glcd_text57(7,7,tmp,1,on);
glcd_text57(10,29,tmp1,1,off);
glcd_text57(13,51,tmp2,1,on);
menu=1;break;
case 2:
glcd_rect(0,1,60,21,yes,off);//---      //GRAFİK buton kısmı
glcd_rect(0,1,60,21,no,on);
glcd_rect(0,23,60,42,yes,off);//---
glcd_rect(0,23,60,42,NO,ON);//---
glcd_rect(0,44,60,63,yes,on);//---
glcd_rect(67,1,127,21,yes,off);//---
glcd_rect(67,1,127,21,NO,ON);//---

glcd_text57(74,7,tmp3,1,on);
glcd_text57(7,7,tmp,1,on);
glcd_text57(10,29,tmp1,1,on);
glcd_text57(13,51,tmp2,1,off);
menu=2;break;
case 3:
glcd_rect(67,1,127,21,yes,on);//---       //GİRİŞLER buton kısmı
glcd_rect(67,23,127,42,yes,off);//---
glcd_rect(67,23,127,42,NO,ON);//---
glcd_rect(0,44,60,63,yes,off);
glcd_rect(0,44,60,63,no,ON);//---

glcd_text57(13,51,tmp2,1,on);
glcd_text57(74,7,tmp3,1,off);
glcd_text57(74,29,tmp4,1,on);
menu=3;break;
case 4:
glcd_rect(67,1,127,21,yes,off);//---       //ÇIKIŞLAR buton kısmı
glcd_rect(67,1,127,21,NO,ON);//---
glcd_rect(67,23,127,42,yes,on);//---
glcd_rect(67,44,127,63,yes,off);
glcd_rect(67,44,127,63,NO,ON);//---

glcd_text57(74,7,tmp3,1,on);
glcd_text57(74,29,tmp4,1,off);
glcd_text57(84,51,tmp5,1,on);
glcd_text57(13,51,tmp2,1,on);
menu=4;break;
case 5:
glcd_rect(0,1,60,21,yes,off);//---       //KAPAT buton kısmı
glcd_rect(0,1,60,21,NO,ON);//---
glcd_rect(67,23,127,42,yes,off);//---
glcd_rect(67,23,127,42,NO,ON);//---
glcd_rect(67,44,127,63,yes,on);
glcd_rect(0,44,60,63,yes,off);
glcd_rect(0,44,60,63,no,ON);//---

glcd_text57(74,7,tmp3,1,on);
glcd_text57(74,29,tmp4,1,on);
glcd_text57(84,51,tmp5,1,off);
glcd_text57(7,7,tmp,1,on);
glcd_text57(13,51,tmp2,1,on);
menu=5;break;
}}
void main(){
   setup_psp(psp_disabled);
   setup_spi(spi_ss_disabled);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(t1_disabled);
   setup_timer_2(t2_disabled,0,1);
   setup_adc_ports(AN0_AN1_VSS_VREF);
   setup_adc(adc_clock_internal);
   setup_ccp1(ccp_off);
   setup_ccp2(ccp_off);
   SET_TRIS_A(0b00001111);
   set_tris_c(0x0f);
   set_adc_channel( 0 );
   delay_us(20);

glcd_init(on);
delay_ms(1250);
menu=0;

ekran:
//-------Ekran Bölmeleri---------//
glcd_circle(5,58,5,yes,on);      //
glcd_rect(3,56,127,60,NO,ON);    //
glcd_text57(10,48,t10,1,on);     //
glcd_text57(30,48,t20,1,on);     //
glcd_text57(50,48,t30,1,on);     //
glcd_text57(70,48,t40,1,on);     //
glcd_text57(90,48,t50,1,on);     //
glcd_text57(110,48,t60,1,on);    //
glcd_text57(20,3,tmp,2,on);      //
glcd_rect(1,1,127,19,NO,ON);    //
//-------------------------------//



while(1){
   temperature = read_adc();
   ciz= (temperature/10)-2;
   value = (temperature*0.1)-0.2;
   glcd_rect(7,57,ciz*2,59,yes,on); // Temperature bari ciziliyor
   sprintf(yazi,"%4.1f",value);
   if(value<100)
   {
   glcd_circle(90,25,2,no,off);
   glcd_circle(90,25,3,no,off);
   glcd_circle(85,25,2,no,off);
   glcd_circle(85,25,3,no,off);
   glcd_circle(85,25,2,NO,on);
   glcd_circle(85,25,3,NO,on);
   glcd_text57(95,22,derece,3,off);
   glcd_text57(90,22,derece,3,on);      //

   glcd_text57(18,22,yazi,3,ON);
   delay_ms(1000);
   glcd_text57(18,22,yazi,3,OFF);
   }
   else if(value>99)
   {    //
   glcd_text57(90,22,derece,3,off);
   glcd_text57(95,22,derece,3,on);
   glcd_circle(85,25,2,no,off);
   glcd_circle(85,25,3,no,off);
   glcd_circle(90,25,2,no,off);
   glcd_circle(90,25,3,no,off);
   glcd_circle(90,25,2,NO,on);
   glcd_circle(90,25,3,NO,on);
   glcd_text57(6,22,yazi,3,ON);
   delay_ms(1000);
   glcd_text57(6,22,yazi,3,OFF);
   }
   glcd_rect(7,57,ciz*2,59,yes,off);

//---------------------MENU-------------------------//
ekran=0;
if(input(PIN_C0)==0){
if(ekran==0){
glcd_init(on);
menu_ekran(0);
while(1){
if(input(PIN_C1)==0){
if(menu==0){
menu=6;
}
menu=menu-1;
menu_ekran(menu);
delay_ms(100);
}
if(input(PIN_C2)==0){
if(menu==6){
menu=0;
menu=menu-1;
}
menu=menu+1;
menu_ekran(menu);
delay_ms(100);
}

ekran=1;
delay_ms(200);
if(input(PIN_C0)==0){
if(menu==5){
ekran=0;
glcd_init(on);
goto ekran;
}}}}}}}

//}
  • FxDev

    Acaba kendiniz yaptığınız proje mi yoksa elektroteknodaki mi proje bu, bana biraz değişik geldi de?

  • Konyalı

    Sadece sensör okuma ve termometre grafiği elektroteknodan alıntı geri kalan kısımları ben yazdım sadece ordan yararladığımı belirtmek istedim maksat emeğe saygı :D

  • Şükrü

    tebrikler oldukça güzel ve göz doldurucu olmuş…

    çokta hoşuma gitti fakat naciz bir önerim var bir çok arkadaş ( ki bunlara bende dahilim ) bu şekilde olan ve belirtilen sıcaklıkta herhangi bi devreyi aktif hale getirebilen bi devre ariyorlar genel olarak sogutucu çözümleri için
    gene sitemizde bi arkadaş yapmıştı fakat devrenin çalıştıgını biliyorum ama bende çalıştıramayanlardanım…

    bu devre üzerinde çalışmaya devam etsenizde

    bi sıcaklık değerini girebileceğimiz bir bölüm olsa yada ortam sıcaklıgının otomatik olarak 3-5 derece olarak eğim gösterdiğinde herhangi bir sogutucu devreyi harekete geçirecek birşeyler eklemeniz mümkünmüdür bunuda aynı şekilde bu kadar teferruatlı olmasada ekranda gösterse…

    daha uzatılabilir isterseniz bir düşünün gene sitedeki arkadaşlarda fikirlerini paylassinlar

  • Konyalı

    Öncelikle teşekkür ederim.

    Şu an zaten SICAKLIK menusunden 5 adet çıkışın hangi sıcaklıkta aktif olacağını ayarlayıp ÇIKIŞLAR menüsünde aktif olan çıkışları anlık görüntüleyebiliyorum devreyi tamamladığım zaman paylaşmayı düşünmüyorum. Takdir edersiniz ki bu kadar emek ve vakit harcanan birşey internette paylaşılmaz. Ancak kendini geliştirmek, birşeyler öğrenmek isteyen arkadaşlara örnek olması açısından bu kadarını paylaşabilirim.
    Kolay gelsin.

  • Mahmut

    Benim sorum devre hakkında olacak.
    Bu tip bir devreyi kendim yapmıştım daha önce.3 tane sıcaklık girişi vardı.sıcaklık ölçümlerini yapıyordu ama sürekli olarak değerler oynuyordu.YAni sıcaklık 30 derece ise 29-30-31 arasında sürekli hızlı bir şekilde oynuyordu.Bunu filtrelemek için çeşitli kondansatörler denedim ama bir türlü olmadı.
    LM35 kullandığımızda pic e nasıl bir filtreleme ile bağlamalıyız ya da bunun doğru yolu nedir??