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
İsis simülasyon şeması;
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_____________*/
Kodlar, proteus simülasyon, Visual Basic kodları;
Şifre-Pass: 320volt.com
Yayım tarihi: 2010/02/23 Etiketler: 74HC595, dijital pano, DS1302, kayan yazı devresi, led yazı, max485, microchip pic projeleri, PIC18F452 örnekleri, sht11
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!
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.
@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
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ı ?
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.
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 .
arkadaşlar elinde bunu ares çizimi olan varsa rica üzerine paylaşa bilirmi çok lazımda
eğer şemadan malzeme listesi çıkarmak zor geliyorsa şemanın çıktısını alın malzemeciye gidin aldığınız malzemenin üzerini çizin. eğer bunuda yapamıyorsanız bu yazımı okumaya devam edin: devrenin satırlar dolusu komutlarını adam yazmış buraya açık olarak koymuş sizde burda malzeme listesi çıkarmaktan acizsiniz. ayıp diye birşey var emeğe bari saygı gösterin…
Bu konu ile ilgili en son yorum yapılmamış benim de projem ve bu konuda bir bilgi kirliliği var internette ama sanırım Atilla’nın paylaştığı çalışıyor . Pratikte deneyen kimse varsa lütfen benimle iletişime geçsin,şu anda yapmaya çalışıyorum devreyi
Örneğin çalışma rutini nasıldır , tarih mi önce vs. gibi kodlardan zar zor anlayan yeniler için biraz yardım ederseniz sevinirim.
Selamlar Sn. yetkili, proje’yi proteus’da çalıştırdım, Sormak istedğim, PC ile haberleşmede, yazı değişimi için hangi program kullanılmalı, termina ve benzer olanlar mı (haberleşme hızına senkron olana kadar boud’u düşürürek) mi yapmalıyız yoksa başka bir program mı vardır.
Selam, devre için Visual Basic ile yazılan program var program üzerinden yazıyı değiştirebilirsiniz.