16f877 ile lcd süremiyorum

Başlatan barisispir, 10 Ağustos 2015, 15:41:30

RaMu

#15
Alıntı yapılan: eemuratozan - 11 Ağustos 2015, 13:30:58
C portunu kullanıp kullanmıyacağını belirtmemişssin yani şunu ekle programın en başına #use fast_io(c)

program içinde de eğer ds1302 den veri alıosan set_tris_c(0xff); die belirtmen gerekir.

bir de bunları deneyelim bakalım ?
#use fast_io(c)
kulanılmasına gerek yok,
bu sayede
set_tris_c(0xff);
gibi giriş çıkış ayarlamaya gerek kamaz.
fast_io gerçekten lazımsa bilinçli olarak kullanılabilir.

DS1302.c içindeki pin atamaları yapılmamıştır muhtemelen.

#ifndef RTC_SCLK

#define RTC_SCLK PIN_B1
#define RTC_IO   PIN_B3
#define RTC_RST  PIN_B2

#endif

DS1302.c nin içindeki bu kısım değiştirilecek veya
DS1302.c include edilmeden önce,
bu pin atamaları yapılacak.

Misal senin şema ve program için:

.
.
.
#include <flex_lcd_baris.c>     // flex LCD kütüphanesi programa ekleniyor

#ifndef RTC_SCLK
#define RTC_SCLK PIN_c1
#define RTC_IO   PIN_c2
#define RTC_RST  PIN_c0
#endif

#include <DS1302.c>  // DS1302.c dosyası programa ekleniyor
.
.
.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

H@S@NN

merhaba arkadaşlar benimde problemim kısmen lcd ile alakalı olduğu ikinci bir konu açmak istemedim konu sahibi mahzur görsün belki kendisininde yardımı dokunur  uzun uzun açıklamaya gerek yok resim zaten herşeyi anlatıyor.yazdığım kod ne olursa olsun #include <lcd.c> komutu için içine girince böyle bir hata alıyorum derleyici ile alakalı bir problem sanırım.http://postimg.cc/image/49599bcn9/

xoom

Alıntı yapılan: barisispir - 10 Ağustos 2015, 20:41:23
"xoom" arkadaşım ds1302 entegresinde isis simulasyonunda saat takvim ölçüyo diyorum..entegre üzerinde görüyorum yani ölcümü ama lcd ye aktarma da sıkıntı yasıyorum yazdım dikkat edebildin mi bilemiyorum..nese..

yardımcı olan olmaya calısan diger arkadaşları tesekkur ederım cok sagolun dediklerinizi denicem..
Polemiklerle bir yere varamazsın.İyi çalışmalar.

barisispir

sorunu çözdüm...Gercekten yardımcı olmak için yazan arkadaşlara teşekkür ederim sağolun..

eemuratozan

nasıl çözdüğünü de yazarsan seviniriz...
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

RaMu

Usulen problemin aslen ne olduğunu ve nasıl çözdüğünüde yazmalısın ki
benzer problem yaşayanlar olursa faydalanabilsin.

Alıntı yapılan: H@S@NN - 11 Ağustos 2015, 15:35:52
merhaba arkadaşlar benimde problemim kısmen lcd ile alakalı olduğu ikinci bir konu açmak istemedim konu sahibi mahzur görsün belki kendisininde yardımı dokunur  uzun uzun açıklamaya gerek yok resim zaten herşeyi anlatıyor.yazdığım kod ne olursa olsun #include <lcd.c> komutu için içine girince böyle bir hata alıyorum derleyici ile alakalı bir problem sanırım.http://postimg.cc/image/49599bcn9/
Muhtemelen include <lcd.c> kütüphane dahil etme işlemini
include <programinin_ismi.h> dosyasından önce yapıyorsun,
sonra yapmalısın.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

barisispir

arkadaslar kusura bakmayın gec oldu bıraz..
aslında cok da farklı bısey yapmadım sil bastan tekrar yaptım..
bu sefer d portunu kullandım lcd ıcın.. ve calıstı :D





#include <16F877.h>

#FUSES NOWDT                    
#FUSES XT                     
#FUSES NOPUT                    
#FUSES PROTECT                 
#FUSES NOBROWNOUT               
#FUSES NOLVP                    
#FUSES NOCPD                  
#FUSES NOWRT                    
#FUSES NODEBUG                 

#use delay(clock=4000000)
#define use_portd_lcd TRUE
#include <lcd.c>
#include <ds1302.c>
#use fast_io(d)
byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu;

     

void main()
{
   set_tris_d(0x00);
   output_low(pin_D0);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   //setup_comparator(NC_NC_NC_NC);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

lcd_init();    //lcd başlama komutu
rtc_init();    //rtc başlama komutu
rtc_set_datetime(12,8,15,3,12,17);


 while(TRUE)
   {
      
      rtc_get_time(saat,dakika,saniye);       // DS1302 den zaman bilgileri alınıtyor
      rtc_get_date(gun,ay,yil,haftanin_gunu); // DS1302 den tarih bilgileri alınıyor
      printf(lcd_putc,"\fT:%02d/%02d/20%02d ",gun,ay,yil); //LCD ye gün ay yıl yazılıyor
        
  
     
      
      switch(haftanin_gunu)  // DS1302'den alınan değer case lerle metne çevriliyor
      {                      
         case 1: printf(lcd_putc,"PAZ"); break; // eger "1" ise LCD'ye PAZ yaz
         case 2: printf(lcd_putc,"PZT"); break; // eger "2" ise LCD'ye PZT yaz
         case 3: printf(lcd_putc,"SAL"); break; // eger "3" ise LCD'ye SAL yaz
         case 4: printf(lcd_putc,"CRS"); break; // eger "4" ise LCD'ye CRS yaz
         case 5: printf(lcd_putc,"PER"); break; // eger "5" ise LCD'ye PER yaz
         case 6: printf(lcd_putc,"CUM"); break; // eger "6" ise LCD'ye CUM yaz
         case 7: printf(lcd_putc,"CTS"); break; // eger "7" ise LCD'ye CTS yaz
      }
      printf(lcd_putc,"\nSaat:%02d:%02d:%02d",saat,dakika,saniye); // LCD'ye saat,dakika ve saniye degerlerini yaz
      delay_ms(250); 
    
      
   }

}


H@S@NN

Alıntı yapılan: RaMu - 12 Ağustos 2015, 17:34:10
Usulen problemin aslen ne olduğunu ve nasıl çözdüğünüde yazmalısın ki
benzer problem yaşayanlar olursa faydalanabilsin.
Muhtemelen include <lcd.c> kütüphane dahil etme işlemini
include <programinin_ismi.h> dosyasından önce yapıyorsun,
sonra yapmalısın.

öncelikle cevabınız için teşekkür ediyorum. fakat sıralamada bir problem yok sizin dediğiniz gibi olsun olmasın aynı hatayı veriyor. 3 gündür iki satır kod yazamadım deli ediyor insanı. verdiği hata mesajları ise hep lcd kütüphanesindeki zaman kodları ile ilgili.

resim yuklemek

RaMu

#23
Yanlışlıkla mı inceleyerek mi yaptın bilmiyorum ama
kullandığın lcd.c kütüphanesinin sıralamasına uygun yapmışsın.
Bu kütüphane ccsc nin kendi sağladığı lcd kütüphanesi ve
biraz yeni bir kütüphane (sanırım birkaç yıllıktır en fazla).

lcd.c dosyasının içinde hemen başta bulunan kısmı incelersen
////  Example of pin access:                                               ////
////     #define LCD_ENABLE_PIN  PIN_E0                                    ////
////     #define LCD_RS_PIN      PIN_E1                                    ////
////     #define LCD_RW_PIN      PIN_E2                                    ////
////     #define LCD_DATA4       PIN_D4                                    ////
////     #define LCD_DATA5       PIN_D5                                    ////
////     #define LCD_DATA6       PIN_D6                                    ////
////     #define LCD_DATA7       PIN_D7                                    ////
////                                                                       ////
///////////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2010 Custom Computer Services           ////
//// This source code may only be used by licensed users of the CCS C  ////
//// compiler.  This source code may only be distributed to other      ////
//// licensed users of the CCS C compiler.  No other use, reproduction ////
//// or distribution is permitted without written permission.          ////
//// Derivative programs created using this software in object code    ////
//// form are not restricted in any way.                               ////
///////////////////////////////////////////////////////////////////////////

#ifndef __LCD_C__
#define __LCD_C__

// define the pinout.
// only required if port access is being used.
typedef struct  
{                            // This structure is overlayed
   int1 enable;           // on to an I/O port to gain
   int1 rs;               // access to the LCD pins.
   int1 rw;               // The bits are allocated from
   int1 unused;           // low order up.  ENABLE will
   unsigned int     data : 4;         // be LSB pin of that port.
  #if defined(__PCD__)       // The port used will be LCD_DATA_PORT.
   unsigned int    reserved: 8;
  #endif
} LCD_PIN_MAP;

// this is to improve compatability with previous LCD drivers that accepted
// a define labeled 'use_portb_lcd' that configured the LCD onto port B.
#if ((defined(use_portb_lcd)) && (use_portb_lcd==TRUE))
 #define LCD_DATA_PORT getenv("SFR:PORTB")
#endif


Görüldüğü gibi
LCD data pinleri ile
mcu nun bağlanacağı pinlerin sıralaması aynı olmalı
yani LCD DB4,DB5,DB6,DB7
       MCU RX4,RX5,RX6,RX7
(X herhangibir port demektir.)
Ayrıca yine yukarıdaki kısımda belirttiği gibi
// The bits are allocated from low order up.  ENABLE will be LSB pin of that port
E pini LSB yani 0. bit olacak şekilde
LCD  E     ,RS  ,RW
MCU RX0,RX1,RX2
pinlerine bu sıralama ile bağlanmak zorunda,
birde burada The port used will be LCD_DATA_PORT. demiş
yani E RS RW için kullanılacak port,   
#define LCD_DATA_PORT  PORTX şeklinde tanımlanan port olmak zorunda.
(diğer tabiriyle #define use_portX_lcd TRUE   şeklinde tanımlanan port.)
flex_lcd.c yi kullan dememin sebebi
bunlarla uğraşmak zorunda kalmaman ve
istediğin lcd pinini, mcu da istediğin portun istediğin pinine bağlayabilmen.
Belki birinin işine yarar diye şunuda belirteyim;
lcd.c kütüphanesi, flex_lcd.c den daha hızlı çalışır,
tabi bu hız size lazım olur mu bilemem,
gözle farkedilemeyecek bir hız farkından bahsediyoruz.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

barisispir

aynen teşekkür ediyorum sizin yolladıklarınızdan da cok yardım aldım..
şimdide termometre eklemek istiyorum umarım yapabilirsem :D

RaMu

Serdar Çiçek hocamızın "CcsC ile Pic Programlama" kitabı çok işine yarar,
örnekleri nette mevcut.

İstersen forumdaki, öncelikle DS18B20,
sonrada LM35, ile termometre - sıcaklık ölçme
gibi başlıklarada bakabilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

barisispir

evet kitabını da almıştım Serdar Çiçek'in ondan calışıyorum zaten.