EEPROMA Karakter Yazdırma !

Başlatan HeCToR, 27 Eylül 2015, 14:53:27

HeCToR

Merhaba Arkadaşlar eeproma paralel lcd üzerinde eeproma karakter nasıl yazdırabilirim saygılar.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

Mucit23

Hocam sorunuzu anlayamadım. Harici bir eeprom mu kullanıyorsunuz? Bu eepromun lcd ile bağlantısı nedir?

HeCToR

@Mucit23 Dahili eeprom Hocam örnek veriyorum paralel lcd üzerinde "deneme" yazdım enerji kestim tekrar açtım "deneme" yazsın istiyorum
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

Mucit23

Hocam düz mantıkla konuşuyorum. Eminim çok basit gelecektir. Belkide bunu söylemek istemiyorsunuzdur.
Neden ekrana yazdığınız text'in aynısını eeproma yazmıyorsunuz?

Belkide Sram felan kullanmalısınız.

ByTEK

Mucit23 dedigi gibi Harici bir eproma yedekli olarak yazılsa ve enerji kesildiğinde hangisini yazdığını kayıt etseniz enerji gelince yazıyı ekrana bassaniz sanırım işinizi cozersiniz

HeCToR

#5
@SercanTEK ve @Mucit23  Hocam aslında bahsetmek istediğim şudur

char a = 'deneme';

printf(lcd_putc,"a=%c",read_eeprom(2));

write_eeprom(2,a);
}


Ancak bunu yaptığımda ekranda a=0 yazıyor bu işlemi yanlış yapıyorum anlaşılan
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

sadogan

char a=deneme;
burdaki deneme yazmak istediğin yazı ise mantık hatası yapıyorsun
a ya yanlızca 1 kararekter yükeyebilirsin.
deneme ise karekter deyil 6 karekterden oluşmuş bir karekter dizisi.
Ayrica karakter dizileri "" tırmak içine yazılır yoksa derleyici bunun bir dizi olduğunu anlayamaz.
deneme adlı bir değişken zanneder.
Karakter ile değişken arasındaki fark şudur:
Değişkende, değişkenin atandığı adresteki veri kullanılır. Karakterde ise, ascii table karsılığı alınır.
a='5' dendiğinde a=0x35 olur
a=5 dendiginde a=0x05 olur.


HeCToR

@sadogan Hocam sağolun peki nasıl yapabilirim eepromda deneme kelimesini nasıl saklayabilirim araştırdım ama bu konuyla ilgili bir açıklama bulamadım
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

sadogan

char a[] = "deneme";

printf(lcd_putc,"%s",a);

Önce bu stringi lcd ye yazmayı dene ,
Sanra bu string i eeproma kaydedip tekrar tekrar eepromdan okuyup yazmaya çalış.

Karamel

cortex hocam ben size konu disi birsey sormak istiyorum.

bu yazdiginiz yazi ile: Çok Bilen Çok Yanılır...
bu yaziniz: BİLGİNİN EFENDİSİ OLMAK İÇİN ÇALIŞMANIN KÖLESİ OLMAK GEREKİR !

celismiyormu?

usttekinden cok fazla bilmeyin. bilgi edinmeyin. sonucu cikartiliyor?
alttakindende bilgi edinin. calisin cikiyor?  :-\

HeCToR

#10
@Karamel   Çok Bilen Çok Yanılır... mizah anlamda söylentidir  ;D Yani Bazı insanlar çok bildiklerini sanırlar ama yanılırlar ve bilmedikleri halde çok bilmişlik yaparlar.

BİLGİNİN EFENDİSİ OLMAK İÇİN ÇALIŞMANIN KÖLESİ OLMAK GEREKİR ! Anlamı ise Bilmişlik yapmanın luzumu yok daima çalış bilginin efendisi ol demek.Bir kaç şey öğrendim diye çok bilmişlik duygusuna kapılma demek  ;)
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

Karamel

anladim hocam da. ustteki cumle sanki birinci anlami ile. calismayin. ogrenmeyin demeye calisiyor.

bazi hocalarim ne zaman Turkce ogrenecek bu cocuk diyorlar bana. belkide benim zayif Turkcem yuzunden anlamiyorum  ::)

HeCToR

#12
@Karamel Aslında senin bakış açın doğru direk okuduğunda o şekilde anlam çıkıyor bu bir atasözüdür aslında. Çok Bilen Çok Yanılır. İnsan ne kadar çok şey bilirse bilsin, bilmediği daha çoktur. Çok bildiğinden kendine çokgüvenen kişi, bilmediği şeylere de karışır ve bunlarda yanılır.Bir insan çok bilgi sahibi olabilir. Ama bu demek değildir ki her şeyin mahiyetini biliyor. Onun da bilmediği, inceliğini kavramadığı pek çok şey vardır. Bu bakımdan bilgisi sebebiyle bir insan kendisine güvenip öyle olur olmaz şeylere karışmamalıdır. Yoksa yaptığı bir hareket, söylediği bir söz, fark etmediği bir durum onu yanılgıya düşürüp zor durumda bırakabilir.

mesaj birleştirme:: 28 Eylül 2015, 12:01:01

@sadogan Hocam deneme yazdırabiliyorum orada problem yok ama eeprom kısmında sorun var gibi enerjiyi açıp kapattığımda deneme yazısı gelmiyor şöyle yaptım
unsigned int okunan;
unsigned char data1[]="deneme";

okunan=read_eeprom(16); 

     
   if(okunan==255)
   {
         
      write_eeprom(0,0);
      write_eeprom(1,0);
      write_eeprom(2,0);
      write_eeprom(3,0);
      write_eeprom(16,0);
      
   }

if(!input(MENU_UP)==1)
{
while(!input(MENU_UP)==1);
lcd_putc("\f");
lcd_gotoxy(1,2); 
printf(lcd_putc,"%s",data1);
data1=read_eeprom(2);

}


data1=read_eeprom(2); yazdığımda *** Error 167 "Lcd Fan.c" Line 194(20,21): Assignment invalid: lvalue is READ ONLY alıyorum
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Gerekir

hasankara

data1 program hafızasının içinde ayrılmış bir alanın belirteci. data1=read_eeprom(2); bu kısımda, okuduğun değeri program hafızasında ki bir adrese yazmaya çalışmışsın demektir. burada iki hatalı yaklaşım var, ilk olarak program hafızasına bu şekilde program işletilirken veri yüklemeye çalışmak ki bu mümkün olmayan bir şey değil ancak biraz daha komplike yollardan yapılabilen bir şeydir ve derleyici bu yazım biçimi için hata vermektedir, flash programming diye araştırabilirsiniz. Diğeri ise okuduğun bir karakter degerini pointer adresine yüklemeye çalışmak ki bu da mutlak hata sayılmasa da yapmak istediğin iş için yanlış bir hareket anlamına gelmekte.

eeprom üzerinde işlem yapmak üzere string yazıp okuyan fonksiyonlar yazarak işe başlayabilirsin.

unsigned int gets_eep(char *bf, unsigned int i_a) {
    unsigned int i = 0;

    do {
        bf[i] = read_eeprom(i + i_a);
        i++;
    } while (bf[i] != 0);

    return i;
}

unsigned int puts_eep(char *bf, unsigned int i_a) {
    unsigned int i = 0;

    while (bf[i] != 0) {
        write_eeprom(i + i_a, bf[i]);
        i++;
    }

    return i;
}

void main() {
    const char data1[] = "deneme";
    char buffer[6];

    if (read_eeprom(16) == 'd') {// eepromun 16. adresinde kucuk d harfi yok ise
        puts_eep(data1, 16); // 16. adresten 21.(dahil) adrese kadar "deneme" stringi yazilir
    }
    // 16. adresten itibaren string okunur 
    // (16. adresten baslayip 0 degeri okunana kadar
    // karakterler dizisi ram bölgesinden ayrilmis 
    // buffer icerisine kayit edilir)
    gets_eep(buffer, 16);

    lcd_putc("\f");
    lcd_gotoxy(1, 1);
    printf(lcd_putc, "%s", buffer);

    while (1);
}


data1 string verisi eepromun 16. adresinden itibaren yazılıyor daha sonra oradan buffer üzerine geri okunuyor. buffer daki string dizisi lcd e yazılıyor. Örnek olması için bu şekilde yazıldı ancak bu uygulama örneği için eeproma ihtiyaç yok. data1 verisi program hafızasına yerleştirildiği için zaten kalıcı olarak tutuluyor. Ancak program işletilirken güncellenen bir string verisi kaldığı yerden devam etmesi isteniyorsa eeproma bu noktada ihtiyaç duyulabilir.

CoşkuN

EEPROM'un belirli bir yazma süresi var, yazma aralarına 5 ms civarı beklemeler koymak gerekiyor genelde.