18F serisinde EEPROM a veri yazma

Başlatan dyonizos, 25 Ekim 2011, 07:58:10

dyonizos

selam arkadaşlar
18f252 pic kullandığım bir projede EEPROM a veri yazmak istiyorum ama ne yaptıysam olmadı. Tüm değişkenler Word tipinde LCD de sürekli okuğum değer 65535.
picbasicte çok rahat halledebiliyordum bu işlemi protonda farklı bir ayarmı yapmam gerekiyor acaba?


Device 18F252
CONFIG_START
OSC = HS
PWRT   = On    ; Power Up Timer Enabled
WDT    = OFF    ; Watchdog Timer Disabled
WRTD   = OFF ; Data EEPROM Write Protection Disabled
CONFIG_END
   

EWrite 0, [CurAzimuth]
DelayMS 10
EWrite 8, [CurElevator]
DelayMS 10

gAzimuth = ERead 0
gElevator = ERead 8

Print At 1,9, "A: ",Dec gAzimuth,"   "
Print At 2,9, "A: ", Dec gElevator,"   "

Maxim

değişken tanımlamaları nerede ?

Dim CurAzimuth as word
Dim CurElevator as word

dyonizos

O Bolumler vardi. Buraya acele ile yazarken onlari eklemeyi unutmusum. Aslinda program calisiyor tek sorun eeprom yazma kisminda. 18f icin ozel birsey yapmam gerekiyormu

Maxim

hayır gerekmiyor, komutlar doğru

dyonizos

Peki
CurAzimuth = 320
CurElevator = 66
olarak deger alirsa.  Ben bunlari

EWrite 0, [CurAzimuth]
DelayMS 10
EWrite 1, [CurElevator]
DelayMS 10

Seklinde 0 ve 1 ci adreslere kayit edebilirmiyim. Yoksa 320 degerinden dolayi 0 ve 2 mi kullanmam gerekir.

Maxim

Alıntı yapılan: dyonizos - 25 Ekim 2011, 09:14:46
Peki
CurAzimuth = 320
CurElevator = 66
olarak deger alirsa.  Ben bunlari

EWrite 0, [CurAzimuth]
DelayMS 10
EWrite 1, [CurElevator]
DelayMS 10

Seklinde 0 ve 1 ci adreslere kayit edebilirmiyim. Yoksa 320 degerinden dolayi 0 ve 2 mi kullanmam gerekir.

word değeri olduğu için 2 kullanmanız gerekir
fark etmez değişken 15 de olsa 320 de olsa veya 64780 de olsa eepromda aynı yeri kaplar (word).

bir sonraki adreste 4 olmalı

dyonizos

basla:
......diğer bolumler
......

EWrite 0, [CurAzimuth]
DelayMS 10
EWrite 2, [CurElevator]
DelayMS 10


goto basla


bu sekılde bır programda eeprom a yazma kısımları sureklı bır ana dongu ıcınde calısıyor. yanı sureklı bır yazma durumu var. sadece ewrite lar arasında delayms 10 var. Onun dısında programda baska bır gecıkme yok. Bu kadar hızlı ve sureklı dongu ıcınde yazıyor olmamdan kaynaklanıyor olabılırmı. yanı herhangı bır butona basılınca fılan yazma ıslemı yapmıyorum. bu nedenle eeproma aslında yazamıyor olabılırmıyım.

Maxim

delayms 15 deneyin
ama olması lazım başka birşeye gerek yok

sürekli yazarak eepromun ömrü biter biliyorsunuz değilmi ?

dyonizos

bilmiyorum. Ne kadarlık bir ömürden bahsediyoruz. Yani bu program saatlerce çalıştığında milyonlarca kez yazma işlemi yapacak demektir. Eepromlarda belli bir yazma ömrü olduğunu bilmiyordum.
Peki ben seri porttan okuduğum dataların son hallerini enerji kesilip geldiğinde nasıl öğrenebilirim eeprom dısında. Her seri porttan veri aldığımda bu verileri bir yere yazmam lazım ki tekrar enerji verildiğinde step motorları kaldığı yerden devam ettirebiliyim.


dyonizos

şimdi baktım datasheet içinde 1 milyon yazma ömrü yazıyor :(
ben belkide eepromun yazma ömrünü bile yemiş olabilirim dakikalarca deneme yaparken. O nedenle şu anda yazamıyor yada okuyamıyor olabilirim.
Pekte pahalı bir pic harcamışım farkında olmadan demekki.
Peki bahsettiğim sistem için başka bir yol varmıdır. yani enerji kesildiğinde kesilmeden önceki son dataları yazdırmak gibi bir durum.  seri porttan gelen veri değiştiği zaman yazdırma olayını düşündüm şimdi ancak seri porttan da her saniyede bir veri geliyor ve genelde değişerek geliyor.

Maxim

o başlı başına ayrı bir iş
sitede arama yapınız daha önce çok uygulandı
birkaç yöntemi var
pil takabilirsiniz, büyük kapasite kullanabilirsiniz vs vs

dyonizos

Kondansator ve diyot ile enerji kesilmesinde eeprom a kaydetme olayını deniycem bakalım farkedecekmi. tabi bu arda eeprom ömrünü bitirmediğim yeni bir pic almam gerekecek :)

Yardımlar için çok teşekkür ederim hocam.