1000 kişiden bir kişi için ! devam.... 320volt blog

Elektronik Devreler Projeler » Microchip PIC devreleri bilgiler »

Bilgisayar kontrollü kayan yazı sıcaklık nem tarih saat

bilgisayar-kontrollu-kayan-yazi

Hazırlayan: Atila ULUDAĞ – Bilgisayar kontrollü kayan yazı uygulaması PIC18F452 SHT11 DS1302 , MAX485 74HC595 (satır tarama) entegreleri üzerine kurulu kontrol için hazırlanmış bilgisayar yazılımı kaynak Visual Basic kodları ve c dili ile hazırlanmış PIC yazılımı var.

Kayan yazı devresi bilgisayar üzerinden yazı gönderebiliyor tarih, saat, sıcaklık, neb bilgisini gösteriyor

Uygulamanın çalışıp çalışmadığını bilmiyorum fakat kaynak kodların verilmiş olması farklı projelerde faydalı olabilir kaynak dosyalar (kodlar, isis simülasyon, Visual Basic): bilgisayar-kontrollu-kayan-yazi-pic18f452-sht11.zip

İsis simülasyon şeması;

kayan-yazi-devresi-dijital-pano-led-tabela

C yazılımı;


////////////////////////////////////////////////////////////////////////////
////           BİLGİSAYAR KONTROLLÜ KAYAN YAZI UYGULAMASI               ////
////                    (SATIR TARAMA 74HC595)                          ////
////                 SICAKLIK , NEM , SAAT , TARİH                      ////
////                   SHT11 , DS1302 , MAX 485                         ////
////////////////////////////////////////////////////////////////////////////
////                   16 / 04 / 2008  ÇARŞAMBA                         ////
////////////////////////////////////////////////////////////////////////////
////                          ATİLA ULUDAG                              ////
////                                                                    ////
////                  ELEKTRİK-ELEKTRONİK MÜHENDİSİ                     ////
////////////////////////////////////////////////////////////////////////////

#include <18F452.h>
#include <string.h>
#FUSES NOWDT,WDT128,XT,NOPROTECT,NOOSCSEN,NOBROWNOUT,BORV20,NOPUT,STVREN,NODEBUG,NOLVP,NOWRT,NOWRTD,NOWRTB,NOWRTC,NOCPD,NOCPB,NOEBTR,NOEBTRB
#use delay(clock=40000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include <SHT75.c>
#include <DS1302.c>

#define clock      pin_a0
#define latch      pin_a1
#define ds1        pin_a2  

#use fast_io(a)
#use fast_io(b)
#use standard_io(c)
#use fast_io(d)
#use fast_io(e)

unsigned int16 adres_sec;
char mesaj_1[55],sutun_1[320]
    ,isi[17]="rH>%00.0 +00.0`C"
    ,saat[17]=" *  00:00:00  * "
    ,tarih[17]=" 00/00/2008 CUM ";
unsigned int yinele,data;
unsigned int karakter[]={0x3F,0x48,0x48,0x48,0x3F,0x00  //A
                        ,0x7f,0x49,0x49,0x49,0x36,0x00  //B
                        ,0x3e,0x41,0x41,0x41,0x22,0x00  //C
                        ,0x7f,0x41,0x41,0x41,0x3e,0x00  //D
                        ,0x7f,0x49,0x49,0x49,0x41,0x00  //E
                        ,0x7f,0x48,0x48,0x48,0x40,0x00  //F
                        ,0x3E,0x41,0x49,0x49,0x2E,0x00  //G
                        ,0x7F,0x08,0x08,0x08,0x7F,0x00  //H
                        ,0x41,0x7F,0x41,0x00            //I
                        ,0x11,0x5F,0x11,0x00            //İ
                        ,0x02,0x01,0x41,0x7e,0x40,0x00  //J
                        ,0x7f,0x08,0x14,0x22,0x41,0x00  //K
                        ,0x7f,0x01,0x01,0x01,0x01,0x00  //L
                        ,0x7f,0x20,0x18,0x20,0x7F,0x00  //M
                        ,0x7F,0x10,0x08,0x04,0x7F,0x00  //N
                        ,0x3E,0x41,0x41,0x41,0x3E,0x00  //O
                        ,0x7f,0x48,0x48,0x48,0x30,0x00  //P
                        ,0x3e,0x41,0x45,0x42,0x3d,0x00  //Q
                        ,0x7f,0x48,0x4C,0x4a,0x31,0x00  //R
                        ,0x32,0x49,0x49,0x49,0x26,0x00  //S
                        ,0x40,0x40,0x7F,0x40,0x40,0x00  //T
                        ,0x7E,0x01,0x01,0x01,0x7E,0x00  //U
                        ,0x1E,0x41,0x01,0x41,0x1E,0x00  //Ü
                        ,0x7C,0x02,0x01,0x02,0x7C,0x00  //V
                        ,0x7E,0x01,0x0E,0x01,0x7E,0x00  //W
                        ,0x63,0x14,0x08,0x14,0x63,0x00  //X
                        ,0x70,0x08,0x07,0x08,0x70,0x00  //Y
                        ,0x43,0x45,0x49,0x51,0x61,0x00  //Z
                        ,0x00,0x00,0x00,0x00,0x00,0x00  //Space
                        ,0x3E,0x45,0x49,0x51,0x3E,0x00  //0
                        ,0x21,0x7F,0x01,0x00            //1
                        ,0x21,0x43,0x45,0x49,0x31,0x00  //2
                        ,0x42,0x41,0x51,0x69,0x46,0x00  //3
                        ,0x0c,0x14,0x24,0x7f,0x04,0x00  //4
                        ,0x72,0x51,0x51,0x51,0x4e,0x00  //5
                        ,0x1e,0x29,0x49,0x49,0x06,0x00  //6
                        ,0x40,0x47,0x48,0x50,0x60,0x00  //7
                        ,0x36,0x49,0x49,0x49,0x36,0x00  //8
                        ,0x30,0x49,0x49,0x4a,0x3c,0x00  //9
                        ,0x1E,0x61,0x21,0x61,0x1E,0x00  //Ö
                        ,0x03,0x03,0x00                 //.
                        ,0x1B,0x1B,0x00                 //:
                        ,0x60,0x90,0x90,0x60,0x00       //'
                        ,0x09,0x09,0x09,0x09,0x09,0X00  //=
                        ,0x08,0x08,0x08,0x08,0X08,0x00  //-
                        ,0x01,0x01,0x01,0x01,0X01,0x00  //_
                        ,0x04,0x04,0x1f,0x04,0x04,0x00  //+
                        ,0x60,0x92,0x94,0x68,0x16,0x29  //%
                        ,0x49,0x06,0x00                 //%
                        ,0x11,0x0f,0x11,0x10,0x08,0x00  //r
                        ,0x08,0x08,0x08,0x2a,0x1c,0x08,0x00  //>
                        ,0x1c,0x22,0x41,0x59,0x49,0x2a,0x1c,0x00//*
                        ,0x03,0x0c,0x30,0xc0,0x00};     ///

void data_sec()
   {
   switch (data)
   {
   case 'A':
   adres_sec=0 ; yinele=5 ; break ;
   case 'B':
   adres_sec=6 ; yinele=5 ; break;
   case 'C':
   adres_sec=12 ; yinele=5 ; break;
   case 'D':
   adres_sec=18 ; yinele=5 ; break;
   case 'E':
   adres_sec=24 ; yinele=5 ; break;
   case 'F':
   adres_sec=30 ; yinele=5 ; break;
   case 'G':
   adres_sec=36 ; yinele=5 ; break;
   case 'H':
   adres_sec=42 ; yinele=5 ; break;
   case 'I':
   adres_sec=48 ; yinele=3 ; break;
   case 'İ':
   adres_sec=52 ; yinele=3 ; break;
   case 'J':
   adres_sec=56 ; yinele=5 ; break;
   case 'K':
   adres_sec=62 ; yinele=5 ; break;
   case 'L':
   adres_sec=68 ; yinele=5 ; break;
   case 'M':
   adres_sec=74 ; yinele=5 ; break;
   case 'N':
   adres_sec=80 ; yinele=5 ; break;
   case 'O':
   adres_sec=86 ; yinele=5 ; break;
   case 'P':
   adres_sec=92 ; yinele=5 ; break;
   case 'Q':
   adres_sec=98 ; yinele=5 ; break;
   case 'R':
   adres_sec=104 ; yinele=5 ; break;
   case 'S':
   adres_sec=110 ; yinele=5 ; break;
   case 'T':
   adres_sec=116 ; yinele=5 ; break;
   case 'U':
   adres_sec=122 ; yinele=5 ; break;
   case 'Ü':
   adres_sec=128 ; yinele=5 ; break;
   case 'V':
   adres_sec=134 ; yinele=5 ; break;
   case 'W':
   adres_sec=140 ; yinele=5 ; break;
   case 'X':
   adres_sec=146 ; yinele=5 ; break;
   case 'Y':
   adres_sec=152 ; yinele=5 ; break;
   case 'Z':
   adres_sec=158 ; yinele=5 ; break;
   case ' ':
   adres_sec=164 ; yinele=5 ; break;
   case '0':
   adres_sec=170 ; yinele=5 ; break;
   case '1':
   adres_sec=176 ; yinele=3 ; break;
   case '2':
   adres_sec=180 ; yinele=5 ; break;
   case '3':
   adres_sec=186 ; yinele=5 ; break;
   case '4':
   adres_sec=192 ; yinele=5 ; break;
   case '5':
   adres_sec=198 ; yinele=5 ; break;
   case '6':
   adres_sec=204 ; yinele=5 ; break;
   case '7':
   adres_sec=210 ; yinele=5 ; break;
   case '8':
   adres_sec=216 ; yinele=5 ; break;
   case '9':
   adres_sec=222 ; yinele=5 ; break;
   case 'Ö':
   adres_sec=228 ; yinele=5 ; break;
   case '.':
   adres_sec=234 ; yinele=2 ; break;
   case ':':
   adres_sec=237 ; yinele=2 ; break;
   case '`':
   adres_sec=240 ; yinele=4 ; break;
   case '=':
   adres_sec=245 ; yinele=5 ; break;
   case '-':
   adres_sec=251 ; yinele=5 ; break;
   case '_':
   adres_sec=257 ; yinele=5 ; break;
   case '+':
   adres_sec=263 ; yinele=5 ; break;
   case '%':
   adres_sec=269 ; yinele=8 ; break;
   case 'r':
   adres_sec=278 ; yinele=5 ; break;
   case '>':
   adres_sec=284 ; yinele=6 ; break;
   case '*':
   adres_sec=291 ; yinele=7 ; break;
   case '/':
   adres_sec=299 ; yinele=4 ; break;
   default:
   adres_sec=164 ; yinele=5 ;
   break;
   }
   }

/**************SÜTUN BİLGİSİ**************/
void sutun_reg(char str[],int16 b)       //sutun_reg() alt programı.
{
 unsigned int j=0,i=0;                   //
 unsigned int16 y=0,stn_index;           //
 for(i=0;i<strlen(str);i++)              //
   {                                     //
   data=str[i];                          //
   data_sec();                           //
   for(j=0;j<=yinele;j++,adres_sec++,y++)//
      sutun_1[y]=karakter[adres_sec];    //
   }                                     //
 for(stn_index=y;stn_index<b;stn_index++)//
    sutun_1[stn_index]=0;                //
 y=0;                                    //
}                                        // 

/**********MATRİSLERE KARAKTER GÖNDER*******/
void ekran_yaz(int tekrar)
{
 int s=0,i=0,j=0;
 for(j=0;j<tekrar;j++)
  {
  for(s=0;s<8;s++)
   {
   for(i=0;i<96;i++)
    {
     output_bit(ds1,bit_test(sutun_1[i],s));
     output_high(clock);
     delay_us(1);
     output_low(clock);
    }
    output_b(0x00);
    output_high(latch);
    delay_us(1);
    output_low(latch);
    output_b(s+1);
   }
  }
}

/********YAZIYI KAYDIR*******/
void efekt_1(int16 kay , int mod)
{
 int reg_0=0;
 int16 n=0,k=0;
 for(n=0;n<kay;n++)
  {
   ekran_yaz(10);
   disable_interrupts(INT_RDA);
   switch (mod)
    {
    case 0:
      reg_0=sutun_1[0];
      for(k=0;k<(kay-1);k++)
         sutun_1[k]=sutun_1[k+1];
      sutun_1[kay-1]=reg_0;
      break;
    case 1:
      for(k=0;k<(kay-1);k++)
         sutun_1[k]=sutun_1[k+1];
      sutun_1[kay-1]=0;
      break;
    default:
      break;
    }
   enable_interrupts(INT_RDA);
  }
}

/********SICAKLIK-NEM HESABI************/
void isi_nem()
{
 signed int16 t=0;
 unsigned int16 rH=0;
 unsigned int t1;
 float temp=0,truehumid=0;

 sht_rd (temp, truehumid);
 t=temp*10 ; rH=truehumid*10;
 if(t<0){
  t=~t+1 ; isi[9]='-' ;}
 else
  isi[9]='+';

 if(t<100)
  {
  t1=t%10 ; isi[13]=48+t1;
  t/=10   ; isi[11]=48+t ;
  isi[10]=' ';
  }
 if((t>=100) & (t<1000))
  {
  t1=t%10 ; isi[13]=48+t1;
  t/=10 ; t1=t%10 ; isi[11]=48+t1;
  t/=10 ; isi[10]=48+t;
  }

 if(rH<100)
  {
  t1=rH%10 ; isi[7]=48+t1;
  rH/=10   ; isi[5]=48+rH ;
  isi[4]=' ';
  }
 if((rH>=100) & (rH<1000))
  {
  t1=rH%10 ; isi[7]=48+t1;
  rH/=10 ; t1=rH%10 ; isi[5]=48+t1;
  rH/=10 ; isi[4]=48+rH;
  }
 sutun_reg(isi,96);

/*********İNTEGER TO STRING************/
void int_to_str(char term[] , int value , int str_pos1 , int str_pos2)
{
 int info=0;
 info=value%10 ; term[str_pos2]=48+info;
 value/=10  ; term[str_pos1]=48+value;
}

/*********SAAT-TARİH BİLGİSİ OKUMA***********/
void saat_()
{
 byte sn,dk,hr;
 rtc_get_time(hr,dk,sn);

 int_to_str(saat,hr,4,5);
 int_to_str(saat,dk,7,8);
 int_to_str(saat,sn,10,11);

 sutun_reg(saat,96);
}
void tarih_()
{
 byte gun,ay,yil,haftanin_gunu;
 rtc_get_date(gun,ay,yil,haftanin_gunu);
 switch(haftanin_gunu)
 {
   case 1: tarih[12]='P';tarih[13]='A';tarih[14]='Z';break;
   case 2: tarih[12]='P';tarih[13]='Z';tarih[14]='T';break;
   case 3: tarih[12]='S';tarih[13]='A';tarih[14]='L';break;
   case 4: tarih[12]='C';tarih[13]='R';tarih[14]='S';break;
   case 5: tarih[12]='P';tarih[13]='E';tarih[14]='R';break;
   case 6: tarih[12]='C';tarih[13]='U';tarih[14]='M';break;
   case 7: tarih[12]='C';tarih[13]='T';tarih[14]='S';break;
 }
 int_to_str(tarih,gun,1,2);
 int_to_str(tarih,ay,4,5);
 int_to_str(tarih,yil,9,10);

 sutun_reg(tarih,96);

}

/*********KESME ALT PROGRAMI*************/
#int_RDA                        //rs232'den bilgi geliyor kesmesi.
void  RDA_isr(void)             //
{
int msj_index=0;                //
disable_interrupts(INT_RDA);    //rs232 bilgi giriş kesmesi pasif.
output_b(0x00);

/***********1'İNCİ SATIR BİLGİSİ*****************/
   gets(mesaj_1);               //klavyeden girilen string ifade mesaj_1[]
   printf("%s"mesaj_1);
for(msj_index=strlen(mesaj_1);msj_index<55;msj_index++)//dizisine yerleştiriliyor. yeni ifadenin
   mesaj_1[msj_index]=0;                      //haricindeki dizi elemanları temizleniyor.
for(msj_index=0;msj_index<55;msj_index++)     //mesaj_1[]dizisi dahili eeproma
   write_eeprom(msj_index,mesaj_1[msj_index]);//yazılıyor.
/*----------------------------------------------------------------------------*/
//sutun_reg(mesaj_1,320);        //sutun_reg() alt programını çağır
enable_interrupts(INT_RDA);     //rs232 bilgi giriş kesmesi aktif
}                               //

/*                               ANA PROGRAM                                  */
void main()
{
int i=0;

/*_____PORT GİRİŞ-ÇIKIŞ İŞLEMLERİ_______*/
set_tris_a(0x00) ; set_tris_b(0x00) ;//pin_c7(RX) giriş,giğer
set_tris_d(0x00) ; set_tris_e(0x00) ;//pinler çıkış
output_a(0x00)   ; output_b(0x00)   ;//bütün çıkışları
output_d(0x00)   ; output_e(0x00)   ;//temizle
/*----------------------------------------------------------------*/
setup_adc_ports(NO_ANALOGS);           //adc pinleri digital
setup_adc(ADC_OFF);                    //adc kapalı
setup_psp(PSP_DISABLED);               //psp kapalı
setup_spi(SPI_SS_DISABLED);            //spı kapalı
setup_wdt(WDT_OFF);                    //wdt kapalı
setup_timer_0(RTCC_INTERNAL);          //timer0 dahili kaynak
setup_timer_1(T1_DISABLED);            //timer1 kapalı
setup_timer_2(T2_DISABLED,0,1);        //timer2 kapalı
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);//timer3 kapalı
/*------------------------------------------------------------------*/
enable_interrupts(INT_RDA);            //rs232 bilgi giriş kesmesi aktif
enable_interrupts(GLOBAL);             //tüm kesmelere izin ver
/*-------------------------------------------------------------------*/

rtc_init();
while(true)
{
/*********EEPROM'DAN SATIR BİLGİLERİNİ OKUMA VE SUTUN REGISTER'INA YAZMA*******/
 for(i=0;i<55;i++)             //dahili eepromdan 55 karakter oku
    mesaj_1[i]=read_eeprom(i); //mesaj_1[] dizisine kopyala
 sutun_reg(mesaj_1,320);       //sutun_reg() alt programını çağır

/******MESAJ RUTİNİ********  **/
 ekran_yaz(100);
 efekt_1(320,1);

/********SICAKLIK RUTİNİ*******/
 isi_nem();
 ekran_yaz(255);
 //efekt_1(96,0);
 //ekran_yaz(255);

/********SAAT-TARİH RUTİNİ*****/
for(i=0;i<100;i++)
{
 saat_();
 ekran_yaz(10);
 //efekt_1(96,0);
 //ekran_yaz(255);
}
 tarih_();
 ekran_yaz(255);
 //efekt_1(96,0);
 //ekran_yaz(255);
}
}
/*____________SON_____________*/

Yazar: gevv

Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 1955 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız;

Elektronik

 
  1. ramazan says:

    arkadaşım emeğine sağlık gerçekten çok güzel bir devre. uzun zamandan beri ardığım bi devre bu. çok kişinin işine yaracağına eminim!

  2. EFKAN says:

    Arkadaşım proje çok güzel .üzerinde kullanılcak parçaları şemaya bakarak kendimiz çıkarcaz sanırım.

    Ama şunu söyleyim yeni başlayanlar için parça listesinin de verilmesini daha uygun görüyorum.

  3. gevv says:

    @efkan

    bende bir zamanlar yeni başlayanlardadım eğer şemadan malzeme listesi çıkartamasaydım elektroniği ilerletemez başka işlere bakardım

    yeni başlamak ile ilgisi yok biraz üşengeçlik galiba :) anlıyorum ilk başlarda zor geliyor ama malzemelerin listesini çıkartırken ister istemez şemayı inceliyoruz işte bu bile farkında olmadan gelişimde büyük katkı sağlıyor

    ufak bir öneri; kafanız karışıyorsa yazdığınız malzemenin üzerine bir çizik atarsınız

    iyi çalışmalar dilerim

  4. osmanbaz says:

    Arkadaşlar ben 8×8 dor matrix displayin katot sütunlu mu yoksa anot sütunlu mu olduğunu soracaktım.
    bir diğer konuda mesaj panosu exe proğramı port hatası veriyor.

    Yardımcı olacak arkadaşlara şimdiden teşekkürler.
    devreyi çalıştıran arkadaşımız varmı ?

  5. hüseyin05 says:

    Arkadaşlar herkeze kolay gelsin bu projede ilk sorun osilatör ayarı ile ilgili’dir. XT osc yazılmış konfigürasyon ayarlarına, ama 40000000 değeri 40 mhz yapıyor bu değer 4000000 yani 4 mhz olarak ayarlanacak yani yeniden derlenmesi gerekli devreyi kurdum ama donanımsal olarak çalıştıramış’tım. İşi bilen kişiler el atarsa sorun düzelir. Bilgisayar ortamında çalışıyor ama gerçek donanımsal kurulumunda çalışmıyor.

  6. ömer says:

    proje güzel ancak devre şeması ve elemanlar okunmuyor nasıl yapacağız.devre şemasını nereden leden eldeceğiz yardımcı olursanız memnun olurum. herkeze başarılar .

Yorum yapın

Doğrulama: (kutuyu işaretleyiniz)

  • Lütfen Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
  • Yorumunuz yönetici tarafından kontrol edilmeden yayımlanmaz.
  • Paylaşılan devrelerin malzeme listesini istemeyiniz. Olsa zaten paylaşılırdı şema üzerinden listeyi çıkartabilirsiniz
  • Gavatar sitesine avatarınızı yükleyebilirsiniz.