PIC Eeprom okuma/yazma problemi

Başlatan Nedenler, 27 Kasım 2013, 12:08:28

Nedenler

Arkadaşlar merhaba,

Bir projede 18F452 kullanıyorum. 10-15 değeri -içerik değiştikçe- eeproma kaydedip program açılışında ana döngüye girmeden de okuyup öyle çalıştırmaya başlıyorum. LCD ekranda bu bilgilerin bazılarını gösteriyorum bunlar set değerleri vs. Fakat okuma veya yazmada oluşan bir problem nedeniyle 20-30 kapat açta bir bu değerlerin hatalı değerler aldığını kapatırkenki mevcut değerler olmadığını görüyorum. Genelde 5260'lı bir değer oluyor word değişkenlerde. Ki bunun 65binli bir şey olduğunu düşünüyorum 4 hane gösterdiğim için anlaşılmıyor. Byte değişkenlerde de 255 oluyor.

- Besleme gayet düzgün ve pic girişinde 10 nf var.
- Kapat aç yapıldığındaki voltaj seviyesiyle alakalı olabilir diye PWRT ON ve BOR 4.2V ayarlı.
- INT1, INT2 ve ve TMR0 kesmelerini kullanıyorum. Fakat WRITE ve READ komutlarını işlerken bitlerini sıfırlayıp kesmeleri iptal ediyorum.
- WRITE komutunun kendinden zamanlı olduğunu bildiğim için gecikme vermedim fakat her READ komutundan sonra 10 us bekliyorum.
- Program picbasic ile yazıldı. PIC'te problem olabilir diye değişik piclerle de denedim.
- Değişkenlerden herhangi biri hatalı okunabiliyor ve değer rastgele değil genelde aynı değerler oluyor.

Yardım edelim, sahip çıkalım desteklerinizi bekliyorum :)

Kabil ATICI

İşlemci kapanırken bir ihtimal bazı durumlarda eeprom'a atlıyor. Bu değeri farklı bir eprom adresini atayabilirsin.

Daha önce bu tür problemle karşılaşanlar için epprom adresinin 0x00-0x0F aralığı kullanılmaması önerilmişti.

Eeprom ile ilgili sıkıntılı durumlarda kalabileceğimi düşünerek, kendim bu iş için back-up eeprom adresi kullanmayı düşünmüştüm.

Yani ayar için kullandığın EEPROM veri alanlarının bir benzeri daha üst eeprom adreslerinde oluşturmayı (her kayıtta her ikisini de güncellemeyi ) ve sürekli kullandığım adreslerdeki verilerde örneğin hic olmaması gereken 0xFF gibi  bir değer ile karşılaşınca back-up adresdeki veriyi okumayı düşünmüştüm.(örneğin 10'luk sayı sisteminde verileri saklıyorsan zaten 0xFx direkt olarak hataı temsil ediyor)
Tabii her ikisi de gidebilir bu durumda yapacak bir şey yok.
ambar7

Maxim

read için bekleme yapmaya gerek yok
fakat yazma için 10us değil 10ms gerekli diye biliyorum

birde yazmanın bir sınırı var, atıyorum 1milyon kere yazdıktan sonra eeprom geberir not olarak yazayım

Veli B.

#3
Hangi dil ile yazıyorsunuz?  // Edit: pbp,gördüm...
Eprom okuma ve yazma rutinleriniz ile, ilgili değişkenlerin tanımlandığı satırları ve işleme girdiği fonksiyonları vermeniz lazım.

Muhtemel sebepler;
1- Timing hatası,
2- Değişkende taşma sorunu,(hep aynı değerler mi dönüyor bakmak lazım, aynı değerler dönüyor ise fonksiyonda kodlama hatası olma ihtimali var)
3- Derleyici hatası,
4- Donanımsal sorun...

En kolay debug yöntemi; uart üzerinden dışarıya print etmek...

Nedenler

PWRT ve BOR'u açtıktan sonra sanki daha az sorun çıkarmaya başlamış gibiydi zaten. Bir de eeproma kaydettiğim değişkenleri üçer farklı alana kaydedip açılışta üçünü de okuyup birbirleriyle karşılaştırarak doğru değeri bulmayı denedim ve bu şekilde çözüldü gibi. En azından 30-40 kapat-açta sorun çıkarmadı. Sorunu hala bilemiyorum tabi ama hasır altı etmiş olduk. En azından çalışıyor sağolun :)