Güç Döngüleri Arasında Veri Kaydetmek için Arduino EEPROM Nasıl Kullanılır

Güç Döngüleri Arasında Veri Kaydetmek için Arduino EEPROM Nasıl Kullanılır

Arduino'nun kapatıldığında veri depolayabildiğini biliyor muydunuz? Flash bellekte saklanan çizim değil. EEPROM'daki değişken verilerden bahsediyorum. Nasıl okuyacağınızı ve yazacağınızı ve projeleriniz için neler yapabileceğini gösterdiğimde bana katılın.





Arduino'da yeniyseniz, kontrol ettiğinizden emin olun. Yeni başlayanların rehberi .





EEPROM Nedir?

EEPROM'un kısaltması elektrikle silinebilir programlanabilir salt okunur bellek . Bir tür kalıcı bellektir. Bunların ne anlama geldiğini anlamıyorsanız endişelenmeyin. Güç kesildiğinde bile verileri basitçe depolar (farklı olarak Veri deposu , herhangi bir veriyi tutmak için elektriğe ihtiyaç duyar).





EEPROM, Matrix Creator Pi HAT'ta kullanılan alan programlanabilir kapı dizisi (FPGA) gibi sayısız işlemciye yerleştirilmiştir. Tüm Arduino'larda EEPROM mevcuttur, ancak kapasite modele göre değişir. Her pano hakkında daha fazla ayrıntı için satın alma kılavuzumuza göz attığınızdan emin olun.

O nasıl çalışır?

EEPROM elektriksel olarak silinir ve kullanılarak programlanır. Fowler-Nordheim tüneli . Kullanmak için teknik detayları bilmenize gerek yok. Temel öncül, elektriğin ikili verileri (ikili olan) değiştirmek için kullanılmasıdır. Elektronik olarak okunabilir, silinebilir ve yeniden yazılabilir.



Neyse ki, Arduino Dili bilgisayar bilimi diplomasına ihtiyaç duymadan verileri değiştirmeyi kolaylaştırır.

yaşam beklentisi

Arduino'da EEPROM'u kullanmak kolay olsa da, sınırlı bir ömre sahiptir. EEPROM, 100.000 okuma/silme döngüsünü işlemek üzere belirtilmiştir. Bu, EEPROM kararsız hale gelmeden önce verileri 100.000 kez yazıp ardından silip/yeniden yazabileceğiniz anlamına gelir. Gerçekte, Atmel (Arduino 'Chip' üreticileri) yarı iletkenler, her işlemcinin toleranslarına bağlı olarak daha yüksek veya daha düşük sayıda döngü işleyebilir.





Bir konum çok defa yazıldıktan ve silindikten sonra güvenilmez olmaya başlayabilir. Doğru verileri döndürmeyebilir veya komşu bir bitten değer döndürmeyebilir.

Bu, kulağa çok fazla yazma işlemi gibi gelebilir, ancak programlı olarak okuma ve yazma işleminde bu sınıra ulaşmak kolay olabilir (bir döngü , Örneğin). Veri okumak silikonu bozmaz, sadece yazmak yapar . EEPROM'dan istediğiniz kadar veri okuyabilirsiniz korkmadan!





Bu sınırın her bellek konumu için geçerli olduğuna dikkat etmek önemlidir. Arduino'nuz EEPROM'da 1.000 veya daha fazla bellek konumuna sahip olabilir, bu nedenle bir konuma çok fazla yazarsanız, yalnızca bu konum etkilenir, diğerlerinden hiçbiri etkilenmez. Daha sonra tartışacağım aşınma tesviye Bu, verileri eşit şekilde dağıtarak EEPROM aşınmasını azaltabilir - SSD'lerin kullandığı bir şey.

Neye Faydalıdır?

EEPROM, Arduino projeleriniz için inanılmaz derecede faydalıdır. Güç kesildiğinde bile verileri hatırladığı için Arduino'nun durumunu kaydedebilirsiniz. Belki konumunu veya ne kadar 'cephane' kaldığını hatırlayan bir lazer taret inşa edebilirsiniz. Cihazlarınızı kontrol etmek için kullanabilir ve cihazınızın kaç kez etkinleştirildiğini kaydedebilirsiniz.

EEPROM, ayarlar veya yüksek puanlar gibi şeyler için en uygunudur. Düzenli olarak karmaşık veriler yazmak istiyorsanız, bir ethernet kalkanı (dahili SD yuvalı) veya bir Raspberry Pi düşünebilirsiniz.

Oku ve yaz

Artık teori ortadan kalktığına göre, bazı verilerin nasıl okunup yazılacağına bakalım! İlk olarak, kütüphaneyi ekleyin (bu, Arduino IDE ile birlikte gelir):

#include

Şimdi biraz veri yazın:

EEPROM.write(0, 12);

Bu numarayı yazar 12 EEPROM konumuna 0 . Her yazma işlemi 3,3 milisaniye sürer ( Hanım , 1000ms = 1 saniye). Harfleri nasıl yazamadığınıza dikkat edin ( karakter ), yalnızca sıfırdan 255'e kadar olan sayılara izin verilir. Bu nedenle EEPROM, ayarlar veya yüksek puanlar için idealdir, ancak oyuncu adları veya kelimeler için o kadar iyi değildir. Bu yöntemi kullanarak metin depolamak mümkündür (alfabenin her harfini bir sayıya eşleyebilirsiniz), ancak birden fazla bellek konumunuz olması gerekir - her harf için bir konum.

İşte bu verileri nasıl okuduğunuz:

roku ile yerel kanallar nasıl edinilir
EEPROM.read(0);

Sıfır, daha önce yazdığınız adrestir. Daha önce bir adrese yazmadıysanız, maksimum değeri döndürür ( 255 ).

Biraz daha kullanışlı yöntemler var. Bir ondalık basamak veya dize saklamak istediğinizi söyleyin:

EEPROM.put(2,'12.67');

Bu, verileri birden çok konuma yazar - kendiniz yazması kolay, ancak yine de kullanışlı olan bir şey. Yine de bunun kaç konuma yazdığını takip etmeniz gerekecek, böylece yanlışlıkla verilerinizin üzerine yazmazsınız! kullanmak zorundasın elde etmek bu verileri tekrar alma yöntemi:

float f = 0.00f;
EEPROM.get(2, f);

get'den gelen değer şamandıraya kaydedilir. F değişken. Bunun nasıl başlatıldığına dikkat edin 0.00f değer olarak. NS F derleyicinin bu değişkende çok sayıda depolamak isteyebileceğinizi bilmesini sağlar, böylece derleme sırasında bazı ek yapılandırmalar ayarlar.

NS EEPROM belgeleri üzerinde Arduino web sitesi daha birçok örneği var.

Aşınma Tesviye

Aşınma dengeleme, aşınmayı azaltmak ve EEPROM'un ömrünü uzatmak için kullanılan bir tekniktir. Yalnızca küçük bir proje üzerinde çalışıyorsanız, bunun için endişelenmenize gerek olmayabilir.

EEPROM ömrünü korumak için yapabileceğiniz en basit şey, yazmalarınızı belirli bir konumla sınırlamaktır. Bunu önce adresi okuyarak yapabilirsiniz ve eğer yazmak istediğiniz değer zaten mevcutsa tekrar yazmaya gerek yoktur (unutmayın, verileri okumaktan zarar gelmez). Bunu nasıl yapacağınız aşağıda açıklanmıştır:

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

Bu oldukça basit bir koddur, ancak yalnızca tamsayılar için çalışır! Tekerleği yeniden icat etmek yerine Arduino EEPROM kitaplığında yerleşik işlevi kullanın:

EEPROM.update(address, val);

Bu yöntem ile tam olarak aynı imzaya sahiptir. yazı yazmak yöntemi, ancak gereken yazma sayısını büyük ölçüde azaltabilse de!

Çok fazla veri yazmanız gerekiyorsa ve silikonun yıpranmasıyla ilgili endişeleriniz varsa, daha fazla veri kullanmasına rağmen kaç tane yazma yaptığınızı takip edebilirsiniz. İşte kaba bir uygulama sözde kod :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

Adresi ve writeCount'u EEPROM'da saklamanız gerekecek (ve writeCount'un adres konumlarına bölünmesi gerekecek). Çoğu zaman, bu koruma seviyesi gerekli olmayacaktır. Arduino'lar da çok ucuz, bu yüzden bir yedek satın almayı daha kolay bulabilirsiniz!

Artık bazı harika projeler yapmak için yeterince bilgi sahibi olmalısınız. Havalı bir şey yaparsan bize haber ver! Resimlerdeki tüm cihazları tanıyabildiniz mi? Aşağıda bize bir yorum bırakın!

Paylaş Paylaş Cıvıldamak E-posta VirtualBox Linux Makinelerinizi Güçlendirmek için 5 İpucu

Sanal makinelerin sunduğu düşük performanstan bıktınız mı? İşte VirtualBox performansınızı artırmak için yapmanız gerekenler.

Sonrakini Oku
İlgili konular
  • kendin yap
  • Arduino
  • Elektronik
Yazar hakkında Joe Coburn(136 Makale Yayınlandı)

Joe, İngiltere'deki Lincoln Üniversitesi'nden Bilgisayar Bilimleri mezunudur. Profesyonel bir yazılım geliştiricisi ve drone uçurmadığı veya müzik yazmadığı zamanlarda, genellikle fotoğraf çekerken veya video çekerken bulunabilir.

Joe Coburn'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın