EEPROM'a Dizi Kaydetme

Başlatan ugurer, 02 Aralık 2016, 18:51:58

ugurer

Merhabalar. Daha önce böyle bir çalışması olan var mı acaba aramızda. Normal değişkenleri eeproma yazabiliyorum bir sorun yok ama dizi kaydetmeyi bir türlü beceremedim.

baran123

Şu şekilde yapabilirsin.
Kod Seç

#define LEN_OF_ARRAY   (8)

uint8_t myArray[LEN_OF_ARRAY] =  {'A''B''C''D''E''F''G''H'};

for (
uint8_t i 0LEN_OF_ARRAYi++)
   
EEPROM_Write(myArray[i]);

EEPROM_Write(x, y) Burada X adres Y ise veri oluyor. Kendi fonksiyonuna göre düzenlersin.
İdrak i meali bu küçük akla gerekmez, zira bu terazi bu kadar sıkleti çekmez.

ugurer

@baran123 teşekkürler yorumunuz için
yazma:
Kod Seç
for(i=0;i<RX_Wr_Index;i++)
        { 
        
klavye[i]=getchar();                              
        }                         
        
k1=RX_Wr_Index;
        
eeprom_write_word(133,k1);
        for(
i=0;i<k1;i++)
        {
         
eeprom_write_byte(100+i,klavye[i]);
        } 

okuma:
Kod Seç

k1
=eeprom_read_word(133);
for(
i=0;i<k1;i++)
{
klavye[i]=eeprom_read_byte(100+i);
}

k1 değişkenini dizide ki eleman kadar yer kaplaması için verdim. Eeprom ve Usartla alakalı sorular için bana ulaşabilirsiniz

JOKERAS

03 Aralık 2016, 16:13:35 #3 Son düzenlenme: 03 Aralık 2016, 16:26:21 JOKERAS
Yazma...
Eepromun Page sınırı yokmu?64,128,256 gibi.

Okuma...
Eerprom veri size için k1 gibi bir değişkene ve bu değişkene değer atamak için ReadEerpom fonksiyonuna gerek yok.
Bu zamandan yer.

Kod Seç
#define PAGE_SIZE 256

unsigned char Idx PAGE_SIZE;

do{
     if( 
ReadEeprom(EeAdr+Idx) != 0xFF) {
         
Klavye[Idx] =  ReadEeprom(EeAdr+Idx); 
     }
     else {
         break;
     }
} while(--
Idx);


Not:Moderatör arkadaşlar, Kod ekle  sekmesine yazdığımız kodlar Code tag uyumlu olamıyormu?

xoom

03 Aralık 2016, 16:53:04 #4 Son düzenlenme: 03 Aralık 2016, 17:06:07 xoom
Bu konu altından bir soruda ben sormak istiyorum. Mantık  hatama çözü m arıyorum.

Kod Seç
Main(){
okunan=eepromokuyorum();

output_b(okunan);// ilgili ledler yanıyor

while(1)
{
if(
buton){
output_b(YeniLedDurumlari)
epromayaziyorum(YeniLedDurumlari);}

}


Bu mantıkla kod yazdığımda eepromokuyorum(); fonnksiyonum ilk enerji verdiğimde b portuna rastgele ledleri yakıyor. İlk başta Tüm ledler sönük başlayamıyorum.
-Amacım:
Başlangıçta Çıkışlar Sıfır olsun.
Program çalışsın istenilen ledler yansın sönsün vs. ve Eproma kaydedilsin.
ENERJİ KESİYORUM
Şimdi Enerji kesilmeden önceki  Son Led Durumlar gelsin.
Bu algoritma yukarıdaki kod sıralamasıyla olmuyor. Sistem başlangıçta rastgele çıkış alıyor.

JOKERAS

Hangi adresleri okuyup yazıyorsunuz?
Fonksiyonlarda adresler yok.
Kod Seç


void main
(void) {

if(
ReadEeprom(EeAdr) != 0xFF) {  
    
EeVal ReadEeprom(EeAdr);    //Eerom Değeri 0xFF'ten farklı,yani daha önce bir değer yüklenmiş.
 
}else {
    
WriteEeprom(EeAdr0x00);     //Eeprom ilk olarak boş olacağından durumunu bozmak gerekir.
    
EeVal ReadEeprom(EeAdr);    //Bozulmuş Durum okunuyor,sonuç 0x00 Ledler Sönük.
 
}                                //Else Bloğu sadece bir kez çalışır.
 
while(1) {
        if(
Button == 0) {
           
Debounce();            //Debunce kodu veya bir gecikme koyun.           
           
WriteEeprom(EeAdrYeniLedDurumu);
           
EeVal ReadEeprom(EeAdr); 
        }
        
OutPut(EeVal);
}

Şu şekilde bir deneyin.

xoom

Alıntı yapılan: JOKERAS - 03 Aralık 2016, 17:32:26
Hangi adresleri okuyup yazıyorsunuz?
Fonksiyonlarda adresler yok.
Kod Seç


void main
(void) {

if(
ReadEeprom(EeAdr) != 0xFF) {  
    
EeVal ReadEeprom(EeAdr);    //Eerom Değeri 0xFF'ten farklı,yani daha önce bir değer yüklenmiş.
 
}else {
    
WriteEeprom(EeAdr0x00);     //Eeprom ilk olarak boş olacağından durumunu bozmak gerekir.
    
EeVal ReadEeprom(EeAdr);    //Bozulmuş Durum okunuyor,sonuç 0x00 Ledler Sönük.
 
}                                //Else Bloğu sadece bir kez çalışır.
 
while(1) {
        if(
Button == 0) {
           
Debounce();            //Debunce kodu veya bir gecikme koyun.           
           
WriteEeprom(EeAdrYeniLedDurumu);
           
EeVal ReadEeprom(EeAdr); 
        }
        
OutPut(EeVal);
}

Şu şekilde bir deneyin.


a3,b5,c1,d3 portlarındaki ledlerin durumlarının farklı butonlara basınca eepromon sırasıyla 0-1-2-3 Adreslerine kaydetmek ve enerji kesip tekrar geldiğinde son durumlarından devam etmesini sağlamak amacım.Ben algoritmamdaki mantığı açıklamak için kodları detaylı yazmamıştım. Sizin kodları uyarlamak gerek ccs ye