İlk Açılışta EEPROM Okuma ve Yazma Sorunları

Başlatan bymrz, 07 Temmuz 2009, 15:05:09

bymrz

Arkadaşlar malum çoğumuz piclerin eepromunu gerektiğinde kullanıyoruz.

Fakat bazen şöyle sıkıntılar çıkabiliyor...

Kodlarımızı yazarken, açılışta veya pic enerjilendikten bir süre sonra başlangıçta ilgili eeprmları oku veya yaz, daha sonra bu okuduğun değerlere göre şu şu işlemleri yap diyoruz.

Fakat bazen öyle bir anda enerji kesildi ki diyelim, o an işlemcinin tam eepromu okuduğu veya yazdığı an oluyor.

Ve daha sonra işlemci yeniden enerjilendiğinde ilgili eeproma bakıyorki hiç olmaması gereken değerler var... Bu sıkıntıyı aşmanın bi formülü var mı.

Biliyorum eeproma yazarken, okurken hata kontrolü var ama işte tam o esnalarda enerji kesildiğinde bi işe yaramıyor sanırım..

Evet çözüm ne olabilir acaba?  :?:

mustafa_cmbz

beslemeye büyük kapasite atarsanız sorun çözülür kanımca...

Salih

Büyük kondansatör bitincede aynı problem olabilir. Hem büyük kondansatör hemde enerjinin kesildiğinin başka bir girişle kontrol edilmesi gerekir diye düşünüyorum. Büyük kondansatörle besleme arasına bir diyot yerleştirilir. Bu diyotun anodundan alınan gerilim bir girişe verilir. Enerji kesildiği anlaşılınca hemen eeproma yazma işlemi yapılır. Ve program durdurulur .

Tagli

Bence yeterli olmayabilir. Diyelim ki 5 kayıt yapacak. Üçüncüde elektrik gitti. Kapasitörle 3.'yü başarılı bir şekilde kaydettik ama bu sefer de tam 4.'nün kaydının ortasındayken kapasitör tükendi?

Ekleme: Ben bu mesajı yazarken salih benden önce davranıp yazıp yollamış :).
Gökçe Tağlıoğlu

bymrz

evet bende öyle düşündüm fakat bunun yazılımsal olarak çözülmesi mümkün değil mi?

Maxim

bunun için benim aklıma kapasite veya pil geliyor
birde enerjinin gittiğini programda anlamak şart,

enerji gittiğinde pilden beslenen pic
eğer o anda eeproma yazma işlemi yapıyorsa işlemi tamamladıktan sonra
iş bitiminde programı dondurması gerekiyor sanırım ?

program içerisine bir subroutine yazılarak enerji kesilmesi durumunda oraya gidilebilir.

Erhan YILMAZ

Dostum diğer arakadaşalrın da dediği gibi denetleyici besleme uçlarına kapasitör eklemen yeterli yazar kasalar özellikle beko yazarkasalarda bu yöntemi kullanıyordu. Resimde gördüğün elektrik kesildiği zaman diyotun katodunda gerilim sıfır olur bunu kesme ile algılanıp gerekli işlemler yapılır. bekolarda nec tarzı bir denetleyici veya işlemci vardı. ve Kapasitör değeride 6.3 v 4700uf idi yanlış hatırlamıyorsam hatta megepin yazar kasa ders notlarında bu konudan bahsediyor 11-12. sayfalarda yazıyor.Göz atmanda fayda var

http://www.megep.meb.gov.tr/modulson/1112/elektrik%20elektronik/yazar%20kasa%20elektrik%20elektronik%20sistemi.zip


bymrz

Bundan sonraki işler için bu yöntemi kullanacağım da  :D


Şimdi ne yapabilirim sizce :o   (yani yazılımsal olarak bi çözümü yok mu :cry: )

Maxim

yazılımsal çözümden kasıt nedir ?
sonuçta bir şekilde beslemenin göçtüğünü anlamamız gerekiyor.

aklıma vrcon registeri geldi ama hiç kullanmadım ,
bazı piclerde olduğunu biliyorum sadece ,
mesela 16F628A
"voltage referance module" işe yararmı acaba ?

bymrz

yani hocam şimdiki problemimde donanımsal olarak diyot+kondansatör olayını yapamıyorum...

Böyle bi algılama sistemi yok yani. Bu durumda yazılımsal olarak ne yapmak lazım işte onu düşünüyorum. O register ın da işe yarayacağını sanmıyorum hocam.


Ya benim anlamadığım yazarken neyse de okurken niye bu eeprom değişiyor?

Tagli

Alıntı yapılan: "maxiboost""voltage referance module" işe yararmı acaba ?
Bildiğim kadarıyla bu komparatörler için kullanılıyor. İşe yarayacağını sanmıyorum, çünkü referans voltajını üretmek için de yine bir referensa ihtiyaç var.

18 serisi PIC'lerde "High - Low Voltage Detect" diye bir modül var. Sanırım bu işe yarayabilir. 16 serisinde bu özelliği olan PIC var mı bilmiyorum. Ayrıca bu özellik elektrik kesintisini farkedebilir mi o da şüpheli. Voltajın yavaş yavaş düşeceğini sanmıyorum.

Bence en rahat çözüm tamirci_erhan'ın verdiği şekildeki gibi olanı.

Alıntı yapılan: "alone_lover"Ya benim anlamadığım yazarken neyse de okurken niye bu eeprom değişiyor?
Okurken bir sorun olmaz, yani EEPROM'daki verinin bozulacağını sanmıyorum.
Gökçe Tağlıoğlu

bymrz

Alıntı yapılan: "Tagli"Okurken bir sorun olmaz, yani EEPROM'daki verinin bozulacağını sanmıyorum.


Bozuluyor hocam maalesef...

bymrz

Arkadaşlar peki Protonde Eread komutunun asm de ne iş yaptığını nasıl öğrenebiliriz.

Ee@rd gibi bi rutin çağırıyor ama o rutin(macro) nerde bulamadım

Tagli

Muhtemelen benim EEPROM okumak için assembly'de yazdığım komutlardan çok da farklı değildir. Yazımın aksine okumada bir süreye ihtiyaç yok. Önce okunacak adres değeri adres register'larına yüklenir sonra bank değiştirilir ve okuma işlemini başlatan bit 1 yapılır. Sonra bir önceki banka geri dönülür ve okunmuş olan değer ilgili register'da hazır beklemektedir. Yani okuma emrinden sonraki turda (cycle'da) değer hazır olur. Bu yüzden okuma sırasında EEPROM'da sorun olacağını düşünmüyordum.

Ayrıca EEPROM'da birşeylerin değişebilmesi için bazı ön şartlar gerekli. Yanlışlıkla EEPROM'a veri yazılmasını engellemek için özel bir düzenek koymuşlar. EEPROM'a ulaşmadan önce pek de bir mantığı olmayan birkaç komutun arka arkaya sıralanması gerekiyor (bir register'a iki adet saçma değeri arka arkaya yazmayı gerektiriyor). Ancak bundan sonra yazma başlatılabiliyor. Bu yüzden EEPROM'daki verinin kolay kolay bozulacağını sanmıyorum. Ancak yazma işlemi başladıktan sonra işlem devam ederken elektrik giderse sorun olabilir bence.

Ama hocam benim bu konuda deneyimim olmadı. Sen okurken de sorun çıkıyor diyorsan öyledir...
Gökçe Tağlıoğlu

Maxim

Alıntı yapılan: "alone_lover"
Alıntı yapılan: "Tagli"Okurken bir sorun olmaz, yani EEPROM'daki verinin bozulacağını sanmıyorum.


Bozuluyor hocam maalesef...

işte bu süpriz,
okurken niye bozulsunki ?
enteresan ,
kesin başka bir tuhaflık olması lazım .