eeprom hatası

Başlatan 707yunus, 28 Temmuz 2008, 10:32:59

707yunus

slm arkadaşlar.

kaç gündür uğraşıyorum eepromlara ccs c de bi türlü data yazdıramadım.
2402 de datayı yazdırıp geri okuduğumda lcd de sürekli sonuç ff oluyor.24256 da ise  hiç birsey olmuyor.
acaba bn ccs c de eeproma data yazdırabildim diyen var mı?
varsa lütfen kod göndrebilir mi?

Selamlar....

707yunus

#include <16f877.h>    

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)



#use i2c(master,sda=pin_c1, scl=pin_c0, slow=400000)

#include <24256.c>  // 2402.c dosyası programa ekleniyor
#use fast_io(b)

#define use_portb_lcd TRUE
#include <lcd.c>


byte veri=45,data;
long int adres=0;    

/******************* ANA PROGRAM FONKSİYONU *************************/

void main ()
{
  setup_psp(PSP_DISABLED);        
  setup_spi(SPI_SS_DISABLED);    
  setup_timer_1(T1_DISABLED);    
  setup_timer_2(T2_DISABLED,0,1);
  setup_adc_ports(NO_ANALOGS);    
  setup_adc(ADC_OFF);            
  setup_CCP1(CCP_OFF);            
  setup_CCP2(CCP_OFF);            
 
  set_tris_b(0x00);
 
  init_ext_eeprom();
 lcd_init();
  while(1)
  {
       write_ext_eeprom(adres,veri);
      data=read_ext_eeprom(adres);
        lcd_gotoxy(1,1);
        printf(lcd_putc,"yunus %d ",data);    
     
  }
}


Not: bu uygulamada eeprom ile ilgili bütün komutlar kaldırıldığında lcd ye yunus yazdırılmaktadır.fakat eepromla ilgili komutlar programa geri eklendiğinde program hiç çalışmamaktadır.lcd de bir şey görülmemektedir.

iyonosfer

#use fast_io(b) 
set_tris_b(0x00);


Yukarıdaki satırları silip dener misin?
Blog Sayfam: www.teknobakis.com

aliveli

devreyi kurdunmu proteustamı deniyorsun?
pull up dirençlerini koydunmu?
Aşağıdaki satır ne için?
#use i2c(master,sda=pin_c1, scl=pin_c0, slow=400000)
24256.c driver içinde SDA SCL pinlerini doğru tanıttınmı?

Ayrıcaburadaki
programı da incele

707yunus

selam arkadşlar.bu programı isiste deniyorum.çok araştırıdım vr proteusta eeproma data yazanı bi uygulamaya rastlaayamadım.

yukarıdaki kodlarda şöyle bi değişiklik yaptım bu siteden araştırdığım bilgilere dayanarak.eeproma data yazılıyor lcd de yunus falan görünüyor.tek sorun şu programda:

aşağıdaki programda data okunurken değer farklı oluyor.10-15 defa okunurken bazen tesadüf yazdırılan değere rastlanıyor.devrede ve programda sıkıntı bulamadım
bi el atıverssniz.

yardımlarınızı bekliyorum.Selamlar....



#include <16f877.h>    

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)



#use i2c(master,sda=pin_c1, scl=pin_c0)

//#include <24256.c>  // 2402.c dosyası programa ekleniyor
#use fast_io(b)

#define use_portb_lcd TRUE
#include <lcd.c>


int8 veri=07,bilgi;
long int adres=0;    


void write_ext_eeprom(long int address, BYTE data)
{
  short int status;
  i2c_start();
  i2c_write(0xa0);
  i2c_write(address>>8);
  i2c_write(address);
  i2c_write(data);
  i2c_stop();
  i2c_start();
  status=i2c_write(0xa0);
  while(status==1)
  {
     i2c_start();
     status=i2c_write(0xa0);
  }
 
 
  delay_ms(11);
}

unsigned int8 read_ext_eeprom(long int address) {
  BYTE data;
  i2c_start();
  i2c_write(0xa0);
  i2c_write(address>>8);
  i2c_write(address);
  i2c_start();
  i2c_write(0xa1);
  data=i2c_read(0);
  i2c_stop();
  return(data);
}




void main ()
{
  setup_psp(PSP_DISABLED);        
  setup_spi(SPI_SS_DISABLED);    
  setup_timer_1(T1_DISABLED);    
  setup_timer_2(T2_DISABLED,0,1);
  setup_adc_ports(NO_ANALOGS);    
  setup_adc(ADC_OFF);            
  setup_CCP1(CCP_OFF);            
  setup_CCP2(CCP_OFF);            
 
  set_tris_b(0x00);
 
 
 lcd_init();
  while(1)
  {
        write_ext_eeprom(adres,veri);
        bilgi=read_ext_eeprom(adres);
        lcd_gotoxy(1,1);
        printf(lcd_putc,"yunus %d ",bilgi);
        delay_ms(100);
  }
}

707yunus

aliveli kardeş verdiğin linke baktım programın dosyalarını indirdim.simule ederken okuma için o yazma için y  ye bas diyo ikisinden birini yapınca da hiç tepki vermiyor.yani devre hiç çalışmıyor....
saygılar...

aliveli

dostum büyük harflerle deneyecektin
birde programda 37. satırdaki
if (n=='L') satırını if (n=='O') satırı ile değiştir ve derle

707yunus

aliveli kardeş programdaki hatayı giderdim.datayı yazdırabiliyorum.ama bnim yukarıda ikinci kaynak kodunu verdiğim  program gibi çalısıyor.yani yazdırılan değer okunandan farklı çıkıyor.ben proteus 7.2 beta kullanıyorum.bide şunu merak ediyorum.sizde de eeproma bir adrese yazdırılan değer ile aynı adresten okunan değer farklımı çıkıyor.?
selamlar..........

707yunus

arkadaşlar kocaman forumda yok mu bu konuyu bilen lütfen yardım

Tagli

Bence devreyi fiziksel olarak bir deney tahtası (breadboard) üstüne kur. Yazma işleminden sonra da EEPROM'u fiziksel olarak bir programlayıcı ile okuyup kontrol et.
Gökçe Tağlıoğlu

gevv

faydası olurmu bilmem ama burada  pic16f877 ve 24lc256 eeprom ile yapılmış bir uygulama var ccs ile hazırlanmış kaynak c koduda verilmiş
 

iyonosfer

Yunus
Eğer senin i2c hattın C1 C0 pinlerine bağlıysa ve 24256.c dosyasındaki #use i2c direktifini değiştirmediysen. Oradaki ayarlar geçerli oluyor yani program pin b1 ve b0 için i2c kodu üretiyor.

Kolay gelsin
Blog Sayfam: www.teknobakis.com

aliveli

tagli arkadaşın dediği gibi devreyi breadboard üzerine kur çalıştığını göreceksin.

707yunus

arkadaşlar yardımlar için sağolun. kısa zamanda board üzeerinde kurmayı düşünüyorum.sonucu sizlerle paylaşacağım..