pic16f46k22 nin eeproomuna bilgi yazamıyorum

nanit

Üye
Katılım
21 Ocak 2011
Mesajlar
159
Puanları
1
Yaş
33
arkadaşlar picle ilgili bir projem var projenin büyük bir kısmını çözdüm sadece girdiğim verileri her açılış kapanışta girmemek için eeproma kayıt yapmayı çözemedim

ilk başta write_eeprom(adr,data); fonksiyonuyla yazdım işe yaramadı

sonra write_program_eeprom(adr,data); fonksiyonuyla yazdım sadece okuyabiliyorum fakat yazamıyorum

programın eeprom okuma yazma adresini 0xf00000 dan başlattım programın configurasyonları

Kod:
#include <18f46k22.h>
[CODE] konumhes=(konum*9)+0xf00000;
     write_program_eeprom(konum,0xfff);
     delay_ms(20);
     write_program_eeprom(konumhes+1,0xfff);
     delay_ms(20);
     write_program_eeprom(konumhes+2,0x000);
     delay_ms(20);
     write_program_eeprom(konumhes+3,0x000);
     delay_ms(20);
     write_program_eeprom(konumhes+4,0x000);
     delay_ms(20);
     write_program_eeprom(konumhes+5,0x000);
     delay_ms(20);
     write_program_eeprom(konumhes+6,0x000);
     delay_ms(20);
     write_program_eeprom(konumhes+7,0x000);
     delay_ms(20);
     write_program_eeprom(konumhes+8,potans);
     delay_ms(20);
#fuses NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOWDT
#use delay(crystal=16000000)
#include <math.h>
#include <internal_eeprom.c>
#use rs232 (baud=9600, xmit=pin_d6, rcv=pin_d7, parity=N, stop=1,)
//#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7, parity=N, stop=1,stream=dnm)

#include <string.h>


#use fast_io(b)
#use fast_io(a)[/CODE]

eeprom kodları
 
arkadaşlar pic18f46k22 serisi için en azından elinizde eeprom yazma ile ilgili örnek kod varsa atsın çok acil lazım
 
programın eeprom okuma yazma adresini 0xf00000 dan başlattım programın configurasyonları
Bunu nereden çıkarttın,
direk 0 dan başlayacaksın, 18F46k22 için 1024 e kadarda (yani 0~1023) yazabilirsin:
Kod:
write_eeprom(0,kac_yazacaksan);

write_program_eeprom ise program memory ye yazma yapar aradığınız bu değil,
eeprom u olan mcu larda bunu kullanmak mantıksız.

Ayrıca eeprom un 0~255 den sonraki kısmına yazacaksan ve
bunun için bir değişken ile yazacağın adresi göstereceksen
bu adresi gösterecek değişkeni "unsigned int16" tipinde tanımlamayıda unutmamalısın.
 
Son düzenleme:
write_eeprom(adr,data); bunu kullanacaksın.

Besleme ve toprak arasına (mcu dibinde) 100nF kondansatör koy.
 
Bunu nereden çıkarttın,
direk 0 dan başlayacaksın, 18F46k22 için 1024 e kadarda (yani 0~1023) yazabilirsin:
Kod:
write_eeprom(0,kac_yazacaksan);

write_program_eeprom ise program memory ye yazma yapar aradığınız bu değil,
eeprom u olan mcu larda bunu kullanmak mantıksız.

Ayrıca eeprom un 0~255 den sonraki kısmına yazacaksan ve
bunun için bir değişken ile yazacağın adresi göstereceksen
bu adresi gösterecek değişkeni "unsigned int16" tipinde tanımlamayıda unutmamalısın.

Önerilerin için teşekkürler ama bunlar ilk denediğim kodlar ne oluyorda yazmıyor anlamadım similasyon programında da aynı sonucu alıyorum write_eeprom() komutu hiç bir işe yaramıyor neyaparsam yapayım anlamadım eepromun adresini 0xf00000 başlatmamın sebebi mcunun katalogundaki eeprom başlangıç adresi o yüzden oradan başlattım
 
18f46k22_ccsc_eeprom_write_example_ramu.jpg


Fotodaki CcsC örnek kod ve Proteus 8.6 simulasyon dosyası ekte:
http://www.mediafire.com/file/u3v691pdjpjxc25/18F46k22_CcsC_EEPROM_Write_Example_RaMu.7z/file
 
Eeprom un yazma ömrü düşüktür,
yukarıda verdiğim örneği gerçek devrede uzun süre çalıştırırsanız eeprom bozulur.
 
Eeprom un yazma ömrü düşüktür,
yukarıda verdiğim örneği gerçek devrede uzun süre çalıştırırsanız eeprom bozulur.
kaç yıl mesela bunu bir ürün olarak satıcam öylesine bir proje değil haftada bir yada iki kere yazılıcak üzerine
 

Forum istatistikleri

Konular
129,840
Mesajlar
930,680
Kullanıcılar
452,679
Son üye
kenan7777

Yeni konular

Geri
Üst