Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

EEPROM'a Dizi Kaydetme

Başlatan ugurer, 02 Aralık 2016, 15: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.
#define LEN_OF_ARRAY   (8)

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

for (uint8_t i = 0; i < LEN_OF_ARRAY; i++)
   EEPROM_Write(i , myArray[i]);

EEPROM_Write(x, y) Burada X adres Y ise veri oluyor. Kendi fonksiyonuna göre düzenlersin.

ugurer

@baran123 teşekkürler yorumunuz için
yazma:
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:
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

#3
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.

#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

#4
Bu konu altından bir soruda ben sormak istiyorum. Mantık  hatama çözü m arıyorum.

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.
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(EeAdr, 0x00);     //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(EeAdr, YeniLedDurumu);
           EeVal = ReadEeprom(EeAdr); 
        }
        OutPut(EeVal);
}

Şu şekilde bir deneyin.

xoom

Alıntı yapılan: JOKERAS - 03 Aralık 2016, 14:32:26
Hangi adresleri okuyup yazıyorsunuz?
Fonksiyonlarda adresler yok.
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(EeAdr, 0x00);     //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(EeAdr, YeniLedDurumu);
           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