วิธีใช้ Arduino EEPROM เพื่อบันทึกข้อมูลระหว่างรอบพลังงาน

วิธีใช้ Arduino EEPROM เพื่อบันทึกข้อมูลระหว่างรอบพลังงาน

คุณรู้หรือไม่ว่า Arduino สามารถเก็บข้อมูลได้เมื่อปิดเครื่อง? ไม่ใช่ภาพสเก็ตช์ที่เก็บไว้ในหน่วยความจำแฟลช ฉันกำลังพูดถึงข้อมูลตัวแปรใน EEPROM เข้าร่วมกับฉันในขณะที่ฉันแสดงให้คุณเห็นถึงวิธีการอ่านและเขียน และสิ่งที่สามารถทำได้สำหรับโครงการของคุณ





หากคุณยังใหม่กับ Arduino อย่าลืมตรวจสอบ .ของเรา คู่มือสำหรับผู้เริ่มต้น .





EEPROM คืออะไร?

EEPROM ย่อมาจาก หน่วยความจำแบบอ่านอย่างเดียวที่ตั้งโปรแกรมได้แบบลบได้ด้วยไฟฟ้า . เป็นหน่วยความจำแบบไม่ลบเลือนประเภทหนึ่ง ไม่ต้องกังวลหากคุณไม่เข้าใจความหมายของสิ่งนั้น มันเพียงแค่จัดเก็บข้อมูลแม้จะถอดไฟออกแล้ว (ไม่เหมือน แกะ ซึ่งต้องใช้ไฟฟ้าในการเก็บข้อมูล)





EEPROM สร้างขึ้นในโปรเซสเซอร์มากมาย เช่น field-programmable gate array (FPGA) ที่ใช้ใน Matrix Creator Pi HAT Arduinos ทั้งหมดมี EEPROM ให้ใช้งาน แต่ความจุจะแตกต่างกันไปตามรุ่น ตรวจสอบให้แน่ใจว่าคุณได้อ่านคู่มือการซื้อของเราสำหรับรายละเอียดเพิ่มเติมในแต่ละกระดาน

มันทำงานอย่างไร?

EEPROM ถูกลบด้วยไฟฟ้าและตั้งโปรแกรมโดยใช้ อุโมงค์ฟาวเลอร์-นอร์ดไฮม์ . คุณไม่จำเป็นต้องทราบรายละเอียดทางเทคนิคจึงจะสามารถใช้งานได้ หลักฐานพื้นฐานคือไฟฟ้าใช้ในการเปลี่ยนข้อมูลไบนารี (ไบนารีคืออะไร) สามารถอ่าน ลบ และเขียนใหม่ทางอิเล็กทรอนิกส์ได้



โชคดีที่ ภาษา Arduino ทำให้ง่ายต่อการเปลี่ยนข้อมูล โดยไม่ต้องมีปริญญาด้านวิทยาการคอมพิวเตอร์

อายุขัย

แม้ว่า EEPROM จะใช้ง่ายใน Arduino แต่ก็มีอายุการใช้งานที่จำกัด EEPROM ถูกกำหนดให้จัดการรอบการอ่าน/การลบ 100,000 รอบ ซึ่งหมายความว่าคุณสามารถเขียนแล้วลบ/เขียนข้อมูลใหม่ได้ 100,000 ครั้งก่อนที่ EEPROM จะไม่เสถียร ในความเป็นจริง, Atmel (ผู้ผลิต Arduino 'Chip') เซมิคอนดักเตอร์อาจรองรับจำนวนรอบที่สูงขึ้นหรือต่ำลง ขึ้นอยู่กับความคลาดเคลื่อนของโปรเซสเซอร์แต่ละตัวและทุกตัว





เมื่อสถานที่ถูกเขียนและลบหลายครั้งเกินไป สถานที่นั้นอาจเริ่มไม่น่าเชื่อถือ อาจไม่ส่งคืนข้อมูลที่ถูกต้อง หรือคืนค่าจากบิตที่อยู่ใกล้เคียง

นี้อาจดูเหมือนเป็นการเขียนจำนวนมาก แต่ก็สามารถบรรลุขีด จำกัด นี้ได้ง่ายหากอ่านและเขียนโดยทางโปรแกรม (ใน ห่วง , ตัวอย่างเช่น). การอ่านข้อมูลไม่ทำให้ซิลิคอนเสื่อมสภาพ การเขียนเท่านั้นไม่ . คุณสามารถอ่านข้อมูลจาก EEPROM ได้มากเท่าที่คุณต้องการโดยไม่ต้องกลัว!





สิ่งสำคัญคือต้องทราบว่าขีดจำกัดนี้ใช้กับตำแหน่งหน่วยความจำแต่ละตำแหน่ง Arduino ของคุณอาจมีตำแหน่งหน่วยความจำ 1,000 ตำแหน่งขึ้นไปใน EEPROM ดังนั้นหากคุณเขียนหลายครั้งเกินไปในตำแหน่งเดียว ตำแหน่งนั้นจะได้รับผลกระทบเท่านั้น และไม่ได้รับผลกระทบใดๆ ต่อไปผมจะมาคุยนะครับ สวมปรับระดับ ซึ่งสามารถลดการสึกหรอของ EEPROM โดยการกระจายข้อมูลอย่างเท่าเทียมกัน ซึ่งเป็นสิ่งที่ SSD ใช้ประโยชน์

มีประโยชน์สำหรับอะไร?

EEPROM มีประโยชน์อย่างเหลือเชื่อสำหรับโครงการ Arduino ของคุณ เนื่องจากสามารถจดจำข้อมูลได้แม้ในขณะที่ไฟถูกถอดออก คุณจึงสามารถจัดเก็บสถานะของ Arduino ได้ บางทีคุณอาจสร้างป้อมปืนเลเซอร์ที่จดจำตำแหน่งของมันหรือว่า 'กระสุน' เหลืออยู่เท่าใด คุณสามารถใช้มันเพื่อควบคุมอุปกรณ์ของคุณ และบันทึกจำนวนครั้งที่เปิดใช้งานอุปกรณ์ของคุณ

EEPROM เหมาะที่สุดสำหรับสิ่งต่างๆ เช่น การตั้งค่าหรือคะแนนสูง หากคุณต้องการเขียนข้อมูลที่ซับซ้อนเป็นประจำ ให้ลองใช้อีเธอร์เน็ตชิลด์ (พร้อมช่องเสียบ SD ในตัว) หรือ Raspberry Pi

อ่านและเขียน

เมื่อทฤษฎีออกมาแล้ว มาดูวิธีการอ่านและเขียนข้อมูลกัน! ขั้นแรก รวมไลบรารี่ (ซึ่งมาพร้อมกับ Arduino IDE):

#include

ตอนนี้เขียนข้อมูลบางส่วน:

EEPROM.write(0, 12);

นี้เขียนหมายเลข 12 ไปยังตำแหน่ง EEPROM 0 . การเขียนแต่ละครั้งใช้เวลา 3.3 มิลลิวินาที ( นางสาว , 1000ms = 1 วินาที) สังเกตว่าคุณไม่สามารถเขียนจดหมายได้อย่างไร ( char ) อนุญาตเฉพาะตัวเลขตั้งแต่ศูนย์ถึง 255 เท่านั้น นี่คือเหตุผลที่ EEPROM เหมาะอย่างยิ่งสำหรับการตั้งค่าหรือคะแนนสูง แต่ไม่ดีสำหรับชื่อผู้เล่นหรือคำ เป็นไปได้ที่จะจัดเก็บข้อความโดยใช้วิธีนี้ (คุณสามารถจับคู่ตัวอักษรแต่ละตัวกับตัวเลขได้) อย่างไรก็ตาม คุณจะต้องมีตำแหน่งหน่วยความจำหลายตำแหน่ง - หนึ่งตำแหน่งสำหรับตัวอักษรแต่ละตัว

นี่คือวิธีที่คุณอ่านข้อมูลนั้น:

วิธีสร้างโฟลว์ชาร์ตใน word
EEPROM.read(0);

Zero คือที่อยู่ที่คุณเขียนถึงก่อนหน้านี้ หากคุณไม่เคยเขียนไปยังที่อยู่มาก่อน มันจะคืนค่าสูงสุด ( 255 ).

มีวิธีการที่เป็นประโยชน์มากกว่าเล็กน้อย สมมติว่าคุณต้องการเก็บตำแหน่งทศนิยมหรือสตริง:

EEPROM.put(2,'12.67');

สิ่งนี้จะเขียนข้อมูลไปยังหลาย ๆ ที่ ซึ่งเป็นสิ่งที่ง่ายต่อการเขียนด้วยตัวคุณเอง แต่ก็มีประโยชน์ไม่น้อย คุณยังคงต้องติดตามว่าข้อมูลนี้เขียนถึงสถานที่กี่แห่ง ดังนั้นคุณจะไม่เขียนทับข้อมูลของคุณโดยไม่ได้ตั้งใจ! คุณต้องใช้ รับ วิธีการดึงข้อมูลนี้อีกครั้ง:

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

ค่าจาก get จะถูกเก็บไว้ใน float NS ตัวแปร. สังเกตว่าสิ่งนี้เริ่มต้นด้วย 0.00f เป็นค่า NS NS ให้คอมไพเลอร์รู้ว่าคุณอาจต้องการเก็บจำนวนมากในตัวแปรนี้ ดังนั้นจึงตั้งค่าคอนฟิกเพิ่มเติมในระหว่างการคอมไพล์

NS เอกสาร EEPROM บน เว็บไซต์ Arduino มีตัวอย่างอีกมากมาย

สวม Leveling

การปรับระดับการสึกหรอเป็นเทคนิคที่ใช้เพื่อลดการสึกหรอและเพิ่มอายุการใช้งานของ EEPROM หากคุณทำงานในโครงการขนาดเล็กเท่านั้น คุณอาจไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้

สิ่งที่ง่ายที่สุดที่คุณสามารถทำได้เพื่อรักษาอายุ EEPROM คือการจำกัดการเขียนของคุณไว้ที่ตำแหน่งใดตำแหน่งหนึ่ง คุณสามารถทำได้โดยการอ่านที่อยู่ก่อน และหากค่าที่คุณต้องการเขียนมีอยู่แล้ว คุณไม่จำเป็นต้องเขียนมันอีก (จำไว้ว่า การอ่านข้อมูลไม่เป็นอันตราย) นี่คือวิธีที่คุณจะทำ:

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

นั่นค่อนข้างง่ายของรหัส แต่มันใช้ได้กับจำนวนเต็มเท่านั้น! แทนที่จะสร้างวงล้อขึ้นใหม่ ให้ใช้ฟังก์ชันที่สร้างไว้ในไลบรารี Arduino EEPROM:

EEPROM.update(address, val);

วิธีนี้มีลายเซ็นเหมือนกันทุกประการกับ เขียน เมธอด แม้ว่ามันอาจจะลดจำนวนการเขียนที่จำเป็นลงอย่างมาก!

หากคุณต้องการเขียนข้อมูลจำนวนมาก และกังวลว่าซิลิคอนจะเสื่อมสภาพ คุณสามารถติดตามจำนวนการเขียนที่คุณเขียนได้ แม้ว่าวิธีนี้จะใช้ข้อมูลมากกว่าก็ตาม นี่คือการใช้งานคร่าวๆใน รหัสเทียม :

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

คุณจะต้องจัดเก็บที่อยู่และ writeCount ใน EEPROM (และ writeCount จะต้องแยกตามตำแหน่งที่อยู่) โดยส่วนใหญ่ การป้องกันระดับนี้จะไม่จำเป็น Arduinos ก็มีราคาถูกเช่นกัน ดังนั้นคุณอาจหาซื้อตัวสำรองได้ง่ายขึ้น!

ตอนนี้คุณน่าจะรู้มากพอแล้วที่จะทำโปรเจกต์เจ๋งๆ แจ้งให้เราทราบหากคุณทำสิ่งที่เจ๋ง! คุณสามารถจดจำอุปกรณ์ทั้งหมดในรูปภาพได้หรือไม่? แสดงความคิดเห็นด้านล่าง!

แบ่งปัน แบ่งปัน ทวีต อีเมล 5 เคล็ดลับในการเพิ่มพลังให้เครื่อง VirtualBox Linux ของคุณ

เบื่อกับประสิทธิภาพที่ย่ำแย่ของเวอร์ชวลแมชชีนหรือไม่? นี่คือสิ่งที่คุณควรทำเพื่อเพิ่มประสิทธิภาพ VirtualBox ของคุณ

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • DIY
  • Arduino
  • อิเล็กทรอนิกส์
เกี่ยวกับผู้เขียน โจ โคเบิร์น(136 บทความที่ตีพิมพ์)

โจสำเร็จการศึกษาด้านวิทยาการคอมพิวเตอร์จากมหาวิทยาลัยลินคอล์น ประเทศอังกฤษ เขาเป็นนักพัฒนาซอฟต์แวร์มืออาชีพ และเมื่อเขาไม่ได้ขับโดรนหรือเขียนเพลง เขามักจะถูกมองว่าถ่ายภาพหรือผลิตวิดีโอ

เพิ่มเติมจาก Joe Coburn

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก
หมวดหมู่ Diy