Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

p16f877 EEPROM

Başlatan kursadalp, 21 Kasım 2004, 20:39:37

kursadalp

Arkadaşlar şu an 16f877 ile DS1302 RTC entegreli bir zamanlayıcı üzerinde çalışıyorum.

uygulamanın simülasyonu Proteusta güzel çalışıyor ancak devre üzerinde PIC Eepromuna kayıt yapılamıyor. Hi-tech C'de aşağıdaki komutları kullandım başka bir ayar gerekiyormu?

  EEPROM_READ(DATA)
  EEPROM_WRITE(ADRES,DATA)

Simülasyonda hiç problem yok.

tnr

Arkadaşım Hi-tech C' bilmiyorum. O yüzden bu konuda birşey diyemeyeceğim.  DS1302 RTC zamanlayıcı entegresi nasıl birşey merak ettim.

EES

PIC16F87x.h dosyasının  içeriğini aşağıdaki gibi değiştir.

#define   EEPROM_WRITE(addr, value) ;EEADR=(addr);EEDATA=(value); \
               EECON1&=0x7F;CARRY=0;if(GIE)CARRY=1;GIE=0; \
               WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;while(WR)continue;WREN=0; \
               if(CARRY)GIE=1

kursadalp

tnr kardeşim gerçekten bilmediğin için mi yoksa ifademin yanlış olduğunu vurgulamak için mi sordun anlayamadım ama ds1302 bir gerçek zaman saati entegresidir.

kursadalp

Sevgili EES, ilgilendiğin için çok teşekkür ederim.

çözümünü henüz uygulamadım. Eve gider gitmez deneyeceğim. Merak ettiğim nokta şu; Hi-tech PiCC deki bu iki komut hatalı mı yapılmış?

Bir de, EEPROM_READ komutu ile epromdan okuma yapılamadığını da anladım. Çünki eepromdan 0xFF okunması gerekiyorken sıfır okuyor. sadece eeproma yazma kısmı için çözüm önermişsin. okuma işine de bir el atarsan müteşekkir olurum..

EES

unsigned char data,adress;

//---okuma---
data=EEPROM_READ(adress);

//---yazma---
EEPROM_WRITE(adress,data);


Daha önce belirttiğim değişikliği sadece EEPROM_WRITE bölümünde yap.Bu sorun HEADER FILE hepsinde var.Değişiklikten sonra sorun yaşamayacaksın.(EEPROM ilgili);

tnr

Sevgili kursadalp  ben senin söylediğin entegreyi bilmediğim için sordum.    :)  Kolay Gelsin.

kursadalp

Sevgili EES, seni meşgul ediyorum kusuruma bakma.

Söylediğin değişikliği EEPROM_WRITE makrosunda yaptım ama sonuç değişmedi. Proteus ile simülasyonda hiç sorun yok.
Ancak devre üzerinde EEPROMA kaydedilecek sayıyı LCD üzerinde görerek değiştiriyorum menüden çıkarken kayıtın gerçekleşmesi lazım ancak aynı menüye girdiğimde sayının hala sıfır olduğunu görüyorum.

Kullandığım program parçası aşağıda.

Acaba EEPROM_READ ve EEPROM_WRITE makrolarını kullanmadan önce programın en başında bir kaydedici ayarı falan mı yapmam gerekiyor ?



char zil_uzunlugu()
{
   div_t x;
   volatile char buton=0;
   const char * volatile zilptr;
   unsigned char zil;
   zil=EEPROM_READ(0);

               clearscreen();
   zilptr=&zil_sure;
   while (*zilptr) {wrdata(*zilptr++);}

   for(;;)
   {
      lcd_goto(71);
      x=div(zil,10);                    //zil yaz
       x.quot |=0x30;
       wrdata(x.quot);
       x.rem |=0x30;
       wrdata(x.rem);
      wrdata(' ');
      wrdata('s');
      wrdata('n');
      DelayMs(100);
birdaha:buton = buton_al();
      if (buton == 0xFF) goto birdaha;   //herhangi bir butona basılana kadar bekle   
      if ((buton == YUKARI) && (zil < 30))  zil++;  // zili artır
      else if ((buton == ASAGI) && (zil!=0)) zil--; // zili azalt
      else if (buton == MENU)
      {
         EEPROM_WRITE(0,zil);
         return(zil);         //menü butonuna basılınca KAYDET ve çık
      }
   }
}

kursadalp

yukardaki mesajda acemilikten kaynaklanan format bozukluğu oldu.

for döngüsü doğru.

EES

Dostum, programın EEPROM_WRITE satırına geldiğine emin ol.
Butonları okurken kulladığın IF-ELSE dikkat et.burada ELSE kullanmana gerek yok.Functionlarda  RETURN() komutunu functionun sonuna koyman gerekir.Derleyici hata verir.Aşağıdaki programda düzenleme yapman gerekebilir.Mantığını görmen için yaptım.


if (buton == 0xFF) goto birdaha; //herhangi bir butona basılana kadar bekle 
if ((buton == YUKARI) && (zil < 30)) zil++; // zili artır 
if ((buton == ASAGI) && (zil!=0)) zil--; // zili azalt 
if (buton == MENU) EEPROM_WRITE(0,zil); 
} 
return(zil); //menü butonuna basılınca KAYDET ve çık 

}

beyler bu linki okuyun lütfen
https://www.picproje.org/main/modules.php?name=Forums&file=faq&mode=bbcode