คุณรู้หรือไม่ว่า 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
- อิเล็กทรอนิกส์
โจสำเร็จการศึกษาด้านวิทยาการคอมพิวเตอร์จากมหาวิทยาลัยลินคอล์น ประเทศอังกฤษ เขาเป็นนักพัฒนาซอฟต์แวร์มืออาชีพ และเมื่อเขาไม่ได้ขับโดรนหรือเขียนเพลง เขามักจะถูกมองว่าถ่ายภาพหรือผลิตวิดีโอ
เพิ่มเติมจาก Joe Coburnสมัครรับจดหมายข่าวของเรา
เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!
คลิกที่นี่เพื่อสมัครสมาชิก