12F675 eeprom yazma/okuma sorunu

Başlatan mcn, 09 Ağustos 2012, 10:28:11

mcn

Merhabalar,

12f675 ile basit bir uygulama yapıyorum. Bir buton ve bir led. Butona basıldığında ledin yanıp sönme  sürelerini sırayla 1 sn 3 sn 5 sn 10sn değerlerine ayarlıyor.
Değer ayarlandığında ise o saniye değeri kadar kısa yanıp sönme yapıyor.
Ayarlanan bu değerin ise enerji kesilip tekrar geldiğinde sabit kalması için eeproma yazıyorum ancak bir türlü devreyi kapatıp açtığında ayarlanan değerde kalmasını sağlayamadım.
Daha önce 12f675 le çalışmıştım hatta birçok modu olan rgb driver yapmıştım bu tür sorunla karşılaşmamıştım.Bazı yerlerde 12f675 in eeprom sıkıntısı olduğunu yazmışlar.

Kodları buraya bırakıyorum, nedir bunun karın ağrısı?Eğer çözemezsem ki çok saçma olur, pic i değiştireceğim mecburen.

#include <12F675.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                      //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOMCLR                     //Master Clear pin enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)

#define LED PIN_A0 
#define BT PIN_A3 


int16 i=0;
int16 saylan=20;
int say;
int x=0;
int yaz;

#int_timer0  // Timer0 kesmesi
void  timer0_kesme ()   // Kesme fonksiyonu ismi
{
    set_timer0(60);   // TMR0 değeri belirleniyor
    i++;   // i değeri 1 arttırılıyor
    if (i==saylan)  // i değeri 10'a eşitse RB0 çıkışı lojik-1 olsun
       {
	
		output_high(LED);
}
    if (i==2*saylan)  // i değeri 20'ye eşitse RB0 çıkışı lojik-1 olsun ve i değeri sıfırlansın
       {
          output_low(LED);

     i=0;
       

}
   
       }




void main()
{
   
  
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarları yapılıyor
   set_timer0(60);   // TMR0 değeri belirleniyor
   enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
   enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver


  //20 = 1 sn   1200=1 dk
output_a(0b11111000);
say=5;

yaz=read_eeprom(0);
if(yaz==5)
{saylan=20;say=5;}
if(yaz==6)
{saylan=60;say=6;}
if(yaz==7)
{saylan=100;say=7;}
if(yaz==8)
{saylan=200;say=8;}

while(true)
{
//write_eeprom(0,saylan);
yaz=say;
write_eeprom(0,yaz);


if(!input(BT)&&(say==5))//Butona basıldığında süreyi 1 saniyeye çıkart

{    saylan=20;
     say++;
     disable_interrupts(GLOBAL);delay_ms(1000); //kesme iptal edildi 
    
     output_low(LED); 
     
     for(x=0;x<1;x++){
     output_high(LED);delay_ms(250); output_low(LED);delay_ms(250);
      }
     i=0;  set_timer0(60);
     enable_interrupts(GLOBAL); //kesmeler aktif ediliyor 
  
}


if(!input(BT)&&(say==6))//Butona basıldığında süreyi 3 saniyeye çıkart

{    saylan=60;
     say++;
     disable_interrupts(GLOBAL);delay_ms(1000); //kesme iptal edildi 
    
      output_low(LED); 
     
     for(x=0;x<3;x++){
     output_high(LED);delay_ms(250);
     output_low(LED);delay_ms(250);
  }
     i=0;  set_timer0(60);
     enable_interrupts(GLOBAL); //kesmeler aktif ediliyor 
  
}


if(!input(BT)&&(say==7))//Butona basıldığında süreyi 5 saniyeye çıkart

{    saylan=100;
     say++;
     disable_interrupts(GLOBAL);delay_ms(1000); //kesme iptal edildi 
    
      output_low(LED); 
     
     for(x=0;x<5;x++){
     output_high(LED);delay_ms(250);output_low(LED);delay_ms(250);
  }
     i=0;  set_timer0(60);
     enable_interrupts(GLOBAL); //kesmeler aktif ediliyor 
  
}


if(!input(BT)&&(say==8))//Butona basıldığında süreyi 10 saniyeye çıkart

{    saylan=200;
     say=5;
     disable_interrupts(GLOBAL);delay_ms(1000); //kesme iptal edildi 
    
     output_low(LED); 
     
     for(x=0;x<10;x++){
     output_high(LED);delay_ms(250);output_low(LED);delay_ms(250);
  }
     i=0;  set_timer0(60);
     enable_interrupts(GLOBAL); //kesmeler aktif ediliyor 
  
}

}//while
}//main
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

JKramer

Sonsuz döngü içinde eeprom'a yazdığınız için 0. adres cortlamıştır. Yazma işini sadece değişiklik olduğu zaman (butonlara bastığınız zaman) yapın. Denemek için yazılan adresi değiştirebilirsiniz, muhtemelen diğer bölgeler sağlamdır.

mcn

Hiç aklıma gelmemişti,teşekkürler hocam.Sorun çözüldü.
www.teknikyazi.com --üşenme,erteleme,vazgeçme...