Eeprom omrunu dengeli kullanma?

Başlatan Franisto, 22 Aralık 2017, 01:14:27

Franisto

Merhaba,

Arduino mega ile bir proje üzerinde uğraşmaktayım.  Projeme bir numaratör koyarak iş parçasını saymayı düşünüyorum. Fakat numaratör dakikada 20-30 defa artacaktır. günlük çalışma süresine göre de 5.000-10.000 civarında artış olabilir. Doğal olarak eproma yazma ömrü kafamı kurcalamaya başladı. Önce numaratörü belli zaman aralıkları ile eproma yazmayı düşündüm. Örneğin saatte bir yazsam günde 10 defa yazma işlemi gerçekleşerek yazma ömrüne aşırı faydalı olurdu. Fakat bir kesinti olması durumunda son zaman aralığında ki numarator artışları kaybolacaktır. Çok hoş olmasa da enerji kesintisi nadiren olacağından belki kayıp gözardı edilebilir.


Şöyle bir yöntem daha geliyor aklıma. sayaç dışında epromda birkaç settings değeri tutacağım ve neredeyse birdaha hiç değişmeyecek. Epromun %90 lık bölümünü numarator için ayırabilirim. Kullanılacak blok aralığını bir döngü ile kontrol edip ilk boş bloğa kaydetsem okurken de ilk boş bloğun bir gerisindeki değeri okusam, tüm bloklar dolunca da tüm bloğu boşaltım tekrar yazsam olur mu? Kabaca hesapla 4 bayt bilgi saklasam 4 kb epromda her bin seferde bir defa aynı adresi kullanırım. Dolayısı ile normalde 100.000 olan eprom ömrünü 1000 kat artırarak (aslında artırma değil dengeli yaşlandırma) 100.000.000 (yüzmilyon) rakamına ulaşırım. Eproma günde 10.000 defa yazsam; Yılda 3.650.000 kayıt, 10 yılda 36.000.000 kayıt... 20 Yıl Münkün gibi görünüyor.

Biraz sesli düşünme gibi yazarak düşündüm. Mantık hatam var mıdır, daha basit/doğru yöntem varmıdır. Yorumlarınızı bekliyorum.

Tagli

#1
Bildiğim kadarıyla EEPROM'larda yazma ömürleri page'ler üzerinden değerlendiriliyor. Örneğin bir page 128 byte ise, bu page içindeki byte'lara yapılan her kayıt aynı page'in ömründen yiyor. Çünkü yazma sırasında bir page'deki tüm byte'lar aynı anda yazılıyor. Sen sadece 1 byte bile yazsan, 128 byte'ın ömrü azalıyor. Ama tabi yine de yazma işlerini page'lere paylaştırarak ömrü uzatmak mümkün. Dediğin gibi 1000 kart artacağını sanmıyorum ama EEPROM'daki page sayısı kadar katlayabilirsin ömrü. Büyük EEPROM'larda page boyutları da büyük olur, o yüzden yazılacak veri miktarı fazla değilse büyük bir EEPROM seçmek ömür konusunda bir avantaj sağlamayacaktır.

Diğer bir seçenek ek bir pil veya süper kapasite ile yedek güç kullanmak. Elektrik kesildiğinde sistem EEPROM'a kayıt yapıp daha sonra kendini kapatır. Zaten birkaç milisaniye daha çalışsa kayıt için yeterli olur.
Gökçe Tağlıoğlu

MrDarK

Yazdığın eeprom adresini değiştirerek de ömür koruması sağlayabilirsin. Benim bildiğim ömürden yenilen durum 1 olan bit durumunu 0'a çevirmek. Zaten silme işlemi yapıldığında tüm bitler 1 durumuna geldiğinden programladığınız anda ömründen yemiş oluyorsunuz. Yani 1 olan biti tekrar 1 olarak programlarsan ömründen yemiş olmazsın.
Adres değiştirmek içinde şöyle bir algoritma kurulabilir.
1. Veri Adresi -> Şu an hangi adresi programlıyorumu tutan değer ( Adres sürekli değiştiği için ihtiyacın olacaktır )
2. Veri Adresi -> Mevcut adres kaç kere programlandı
3. Veri Adresi -> Kaydetmek istediğin değer grubu

2. ve 3. veri adresi her yeni 3. veri adresi için oluşturulmalıdır. Adreslemesini de 2 ve 3. grubun boyutlarının katları şeklinde bir algoritma ile yapabilirsin. Ayrıca kullandığın datalarda min 1 byte'da CRC kullanmayı unutma epey güvenli olur. Kullanmayı düşündüğün eepromun ömrü konusunda da datasheet'de kaç kere yazabileceğin konusunda bilgi veriliyor. Genelde 100K veya 300K gibi değerler görüyorum
Picproje Eğitim Gönüllüleri ~ MrDarK

yldzelektronik

İlk önerim RTC için registeri olan bir mcu tercih edin ve RTC pili kullanın. Yazmak istediğiniz veri miktarı çok büyük değilse sizin için uygun olacaktır. Yazın oraya RTC pili bitene kadar durur. O da kolayca bitmez.


Diğer önerim FRAM. Bu bir ram. Ancak kalıcı RAM. Enerjisi kesilse de devam eder.Ve ömrü çok çok uzundur.Ayrıca page page değil, byte byte yazma yapabilirsiniz.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

gokhangokcen

@franisto üstad yazacak olduğun veri boyutu çok büyük değil ise ilave bir kaç kondansatör ve devre enerjisinin kesildiğini algılayacak bir sistem kurarsan fazlasıyla işini görür. Ben genelde böyle yapıyorum. 7805 ya da kullandığın regülatör öncesinde bir diyot(kapasite kısmındaki voltaj kaynağa geri gitmesin diye) ve 7805 çıkışında 5v kısmında 1000uf ya da zamana göre daha büyük değerli kondansatörler ekleyerek çözüme gidebilirsin. Diyot öncesinden de bir gerelim bölücüler ile giriş yapıp enerjinin kesildiğini anladığın anda anında değerleri eeproma yazmaya gidersin. Zaten çok küçük sürelerde eeproma yazma işlemi sonuçlanıyor.
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

Maxim

#5
ben 18F26K22 de şöyle yaptım oldu
HLVD registerı var (high/low voltage detect)

5volt kapasiteleri biraz büyük tuttum, 2x 1000uf gibi
sonra tam voltaj kesilme anında mesela voltaj 4.2 nin altına düştü diyelim
ilgili adrese eeproma değeri yazdırdım, güzel oldu

dolayısı ile, zırt pırt eeproma yazmak yerine sadece enerji kesilince yazmış oldum

dumansiz

@Maxim
Merhaba, konuyu açan ben değilim ama ilgimi çekti.
Datasheetteki register ayarlarında:
bit 3-0 HLVDL<3:0>: Voltage Detection Level bits(1)
1111 = External analog input is used (input comes from the HLVDIN pin)
1110 = Maximum setting
.
.
.
0000 = Minimum setting

Minimum 1.024V mu?
Maximum 5V mu?
Ara değerlerde Max Voltaj ile min voltaj arasında oransal mı artıyor?

Maxim

table 27-5 de o ayarın voltaj karşılığı yazıyor.
ben 1010 yapmışım o da 3.69v demek
yani voltaj 3.69 altına düşünce aktif oluyor sistem
HLVDCON=%01111010 'HLVD FALLING ENABLE

not: ama bu voltaj ip gibi sabit değil, min ve max aralığı var şöyle yazıyor
1010 3.44 3.69 3.94 V

dumansiz

Hmm...
Tablo aynı bölümün altına koyulmayınca, "Note"lara da dikkat etmeyince, gözümden kaçmış.
Teşekkür.

Franisto

Yorumlar icin tesekkur ederim. Kondansator ile kesinti durumunda yazdirmak cok mantikli. Bende oyle yapmaya karar verdim.

Franisto

Ek olarak soyle bir sey daha sorayim. Eepromun omrunu  bitirdinizmi hic? Bitince ne oluyor. Verimi okumuyor? Yazmayimi birakiyor. Programmi kitleniyor?

gokhangokcen

Veri yazılıyordu bende ama okurken bazen farklı değerler geri dönüyordu.Bendeki tek sorun buydu dahada ileri boyutu tamamen saçma değerler dönüyordu.
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

eti

HLVD detection  olayını test edip stabil çalışıp çalışmadığını foruma bildirirseniz sevinirim.
Brow out detection dan ayrı birşey mi bilmiyorum. BOR daha önce devreye girip PIC resetlenirse HLVD bir işe yaramaz.