สารบัญ:

การอ่านและเขียนข้อมูลไปยัง EEPROM ภายนอกโดยใช้ Arduino: 5 ขั้นตอน
การอ่านและเขียนข้อมูลไปยัง EEPROM ภายนอกโดยใช้ Arduino: 5 ขั้นตอน

วีดีโอ: การอ่านและเขียนข้อมูลไปยัง EEPROM ภายนอกโดยใช้ Arduino: 5 ขั้นตอน

วีดีโอ: การอ่านและเขียนข้อมูลไปยัง EEPROM ภายนอกโดยใช้ Arduino: 5 ขั้นตอน
วีดีโอ: 09 การอ่าน เขียน eeprom และ arduino Json 2024, กรกฎาคม
Anonim
การอ่านและเขียนข้อมูลไปยัง EEPROM ภายนอกโดยใช้ Arduino
การอ่านและเขียนข้อมูลไปยัง EEPROM ภายนอกโดยใช้ Arduino

EEPROM ย่อมาจากหน่วยความจำแบบอ่านอย่างเดียวที่ตั้งโปรแกรมได้ที่สามารถลบได้ด้วยไฟฟ้า

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

โครงการนี้ได้รับการสนับสนุนโดย LCSC ฉันใช้ชิ้นส่วนอิเล็กทรอนิกส์จาก LCSC.com LCSC มีความมุ่งมั่นอย่างแรงกล้าที่จะนำเสนอชิ้นส่วนอิเล็กทรอนิกส์ของแท้คุณภาพสูงที่มีให้เลือกมากมายในราคาที่ดีที่สุดพร้อมเครือข่ายการจัดส่งทั่วโลกไปยังกว่า 200 ประเทศ ลงทะเบียนวันนี้และรับส่วนลด $8 สำหรับการสั่งซื้อครั้งแรกของคุณ

EEPROM ยังมีประสิทธิภาพมากในแต่ละไบต์ใน EEPROM แบบเดิมที่สามารถอ่าน ลบ และเขียนใหม่ได้อย่างอิสระ ในหน่วยความจำแบบไม่ลบเลือนประเภทอื่นๆ ส่วนใหญ่ วิธีนี้ไม่สามารถทำได้ อุปกรณ์ EEPROM แบบอนุกรม เช่น EEPROM ซีรีส์ 24 ของ Microchip ช่วยให้คุณเพิ่มหน่วยความจำให้กับอุปกรณ์ใดๆ ก็ตามที่สามารถพูด I²C ได้

เสบียง

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz คริสตัล
  4. เขียงหั่นขนม
  5. ตัวต้านทาน 4.7k โอห์ม x 2
  6. ตัวเก็บประจุ 22 pF x 2

ขั้นตอนที่ 1: ข้อมูลเบื้องต้นเกี่ยวกับ EEPROM

ข้อมูลเบื้องต้นเกี่ยวกับ EEPROM
ข้อมูลเบื้องต้นเกี่ยวกับ EEPROM

ชิป Microchip 24LC2512 สามารถซื้อได้ในแพ็คเกจ DIP 8 พิน หมุดบน 24LC512 ค่อนข้างตรงไปตรงมาและประกอบด้วยกำลัง (8), GND(4), การป้องกันการเขียน(7), SCL/SDA(6, 5) และหมุดที่อยู่สามตัว (1, 2, 3)

ประวัติโดยย่อของ ROM

คอมพิวเตอร์ประเภท "Stored-Program" ยุคแรกๆ เช่น เครื่องคิดเลขตั้งโต๊ะและตัวแปลแป้นพิมพ์ เริ่มใช้ ROM ในรูปแบบของ Diode Matrix ROM นี่คือหน่วยความจำที่ประกอบด้วยไดโอดเซมิคอนดักเตอร์แบบแยกส่วนที่วางอยู่บน PCB ที่จัดเป็นพิเศษ สิ่งนี้ทำให้เกิด Mask ROM ด้วยการกำเนิดของวงจรรวม Mask ROM นั้นเหมือนกับ Diode Matrix ROM เพียงแต่ถูกใช้งานในระดับที่เล็กกว่ามาก ซึ่งหมายความว่าคุณไม่สามารถย้ายไดโอดสองสามตัวไปรอบ ๆ ด้วยหัวแร้งแล้วตั้งโปรแกรมใหม่ได้ ผู้ผลิตต้องตั้งโปรแกรม Mask ROM และหลังจากนั้นไม่สามารถแก้ไขได้

น่าเสียดายที่ Mask ROM มีราคาแพงและใช้เวลานานในการผลิต เนื่องจากแต่ละโปรแกรมใหม่ต้องใช้อุปกรณ์ใหม่เอี่ยมเพื่อผลิตโดยโรงหล่อ อย่างไรก็ตาม ในปี ค.ศ. 1956 ปัญหานี้ได้รับการแก้ไขด้วยการประดิษฐ์ PROM (Programmable ROM) ซึ่งอนุญาตให้นักพัฒนาตั้งโปรแกรมชิปเองได้ นั่นหมายความว่าผู้ผลิตสามารถผลิตอุปกรณ์ที่ไม่ได้ตั้งโปรแกรมเดียวกันได้หลายล้านเครื่อง ซึ่งทำให้ราคาถูกลงและใช้งานได้จริงมากขึ้น อย่างไรก็ตาม PROM สามารถเขียนได้เพียงครั้งเดียวโดยใช้อุปกรณ์การเขียนโปรแกรมแรงดันสูง หลังจากที่ตั้งโปรแกรมอุปกรณ์ PROM แล้ว ไม่มีทางที่จะทำให้อุปกรณ์กลับสู่สถานะที่ไม่ได้ตั้งโปรแกรมไว้ได้

สิ่งนี้เปลี่ยนไปในปี 1971 ด้วยการประดิษฐ์ EPROM (Erasable Programmable ROM) ซึ่งนอกจากจะเพิ่มตัวอักษรอื่นลงในตัวย่อแล้ว ยังทำให้สามารถลบอุปกรณ์และกลับสู่สถานะ "ว่างเปล่า" โดยใช้แหล่งกำเนิดแสง UV ที่แรง ใช่แล้ว คุณต้องฉายแสงที่สว่างบน IC เพื่อทำการตั้งโปรแกรมใหม่ มันเจ๋งแค่ไหน? ปรากฎว่ามันค่อนข้างเจ๋งเว้นแต่คุณจะเป็นนักพัฒนาซอฟต์แวร์ที่ทำงานเกี่ยวกับเฟิร์มแวร์ ซึ่งในกรณีนี้ คุณต้องการโปรแกรมอุปกรณ์ใหม่โดยใช้สัญญาณไฟฟ้า ในที่สุดสิ่งนี้ก็กลายเป็นความจริงในปี 1983 ด้วยการพัฒนา EEPROM (Electrically Erasable Programmable ROM) และด้วยเหตุนี้เราจึงมาถึงตัวย่อที่ไม่เอื้ออำนวยในปัจจุบัน

ขั้นตอนที่ 2: ความแปลกประหลาดของ EEPROM

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

ประการแรก เทคโนโลยีที่ทำให้ EEPROM ทำงานยังจำกัดจำนวนครั้งที่เขียนซ้ำได้ สิ่งนี้เกี่ยวข้องกับอิเล็กตรอนที่ติดอยู่ในทรานซิสเตอร์ที่ประกอบเป็น ROM และสร้างขึ้นจนไม่สามารถจดจำความแตกต่างของประจุระหว่าง "1" และ "0" แต่ไม่ต้องกังวล EEPROM ส่วนใหญ่มีจำนวนการเขียนซ้ำสูงสุด 1 ล้านหรือมากกว่า ตราบใดที่คุณไม่ได้เขียนถึง EEPROM อย่างต่อเนื่อง ไม่น่าจะถึงขีดจำกัดสูงสุดนี้ ประการที่สอง EEPROM จะไม่ถูกลบหากคุณถอดพลังงานออก แต่จะไม่เก็บข้อมูลของคุณไว้อย่างไม่มีกำหนด อิเล็กตรอนสามารถลอยออกจากทรานซิสเตอร์และผ่านฉนวน ลบ EEPROM เมื่อเวลาผ่านไปอย่างมีประสิทธิภาพ ที่กล่าวว่าสิ่งนี้มักเกิดขึ้นในช่วงหลายปีที่ผ่านมา (แม้ว่าจะสามารถเร่งความเร็วได้ด้วยความร้อน) ผู้ผลิตส่วนใหญ่บอกว่าข้อมูลของคุณปลอดภัยบน EEPROM เป็นเวลา 10 ปีหรือมากกว่าที่อุณหภูมิห้อง และมีอีกสิ่งหนึ่งที่คุณควรคำนึงถึงเมื่อเลือกอุปกรณ์ EEPROM สำหรับโครงการของคุณ ความจุ EEPROM วัดเป็นบิตไม่ใช่ไบต์ EEPROM 512K จะเก็บข้อมูล 512Kbits หรืออีกนัยหนึ่งคือ 64KB

ขั้นตอนที่ 3: การเชื่อมต่อฮาร์ดแวร์ Arduino

การเชื่อมต่อฮาร์ดแวร์ Arduino
การเชื่อมต่อฮาร์ดแวร์ Arduino
การเชื่อมต่อฮาร์ดแวร์ Arduino
การเชื่อมต่อฮาร์ดแวร์ Arduino

เอาล่ะ เมื่อเรารู้แล้วว่า EEPROM คืออะไร เรามาลองใช้งานกันดูว่ามันทำอะไรได้บ้าง! เพื่อให้อุปกรณ์ของเราพูดได้ เราจะต้องเชื่อมต่อสายไฟและสายซีเรียล I²C โดยเฉพาะอุปกรณ์นี้ทำงานที่ 5VDC ดังนั้นเราจะเชื่อมต่อกับเอาต์พุต 5V ของ Arduino UNO ของเรา นอกจากนี้ สายI²Cจะต้องใช้ตัวต้านทานแบบดึงขึ้นเพื่อให้การสื่อสารเกิดขึ้นได้อย่างถูกต้อง ค่าของตัวต้านทานเหล่านี้ขึ้นอยู่กับความจุของเส้นและความถี่ที่คุณต้องการสื่อสาร แต่กฎง่ายๆ ที่ดีสำหรับการใช้งานที่ไม่สำคัญคือให้อยู่ในช่วง kΩ ในตัวอย่างนี้ เราจะใช้ตัวต้านทานแบบดึงขึ้น4.7kΩ

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

เราจะใช้เขียงหั่นขนมเพื่อเชื่อมต่อทุกอย่างเข้าด้วยกัน แผนภาพด้านล่างแสดงการเชื่อมต่อที่ถูกต้องสำหรับอุปกรณ์ I²C EEPROM ส่วนใหญ่ รวมถึง Microchip 24-series EEPROM ที่เราจำหน่าย

ขั้นตอนที่ 4: การอ่านและการเขียน

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

เขียนอะไรบางอย่าง

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

การเขียนไบต์ของหน่วยความจำไปยัง EEPROM มักเกิดขึ้นในสามขั้นตอน:

  1. ส่งไบต์ที่สำคัญที่สุดของที่อยู่หน่วยความจำที่คุณต้องการเขียนถึง
  2. ส่งไบต์ที่มีนัยสำคัญน้อยที่สุดของที่อยู่หน่วยความจำที่คุณต้องการเขียนถึง
  3. ส่งไบต์ข้อมูลที่คุณต้องการจัดเก็บที่ตำแหน่งนี้

อาจมีคำสำคัญสองสามคำที่อธิบายไม่ได้:

ที่อยู่หน่วยความจำ

หากคุณจินตนาการถึงไบต์ทั้งหมดใน EEPROM 512 Kbit ที่เรียงต่อกันตั้งแต่ 0 ถึง 64000 - เนื่องจากมี 8 บิตเป็นไบต์ ดังนั้นคุณจึงสามารถใส่ 64000 ไบต์ลงใน EEPROM 512 Kbit ได้ ดังนั้นที่อยู่หน่วยความจำจะอยู่ในตำแหน่งนั้น บรรทัดที่คุณจะพบไบต์เฉพาะ เราจำเป็นต้องส่งที่อยู่นั้นไปยัง EEPROM เพื่อให้รู้ว่าจะวางไบต์ที่เรากำลังส่งไปไว้ที่ไหน

ไบต์ที่มีนัยสำคัญและมีค่าน้อยที่สุด

เนื่องจากมีความเป็นไปได้ 32,000 ตำแหน่งใน EEPROM 256 Kbit - และเนื่องจาก 255 เป็นจำนวนที่ใหญ่ที่สุดที่คุณสามารถเข้ารหัสได้ในหนึ่งไบต์ เราจึงต้องส่งที่อยู่นี้เป็นสองไบต์ ขั้นแรก เราส่ง Most Significant Byte (MSB) - 8 บิตแรกในกรณีนี้ จากนั้นเราจะส่งไบต์ที่มีนัยสำคัญน้อยที่สุด (LSB) - 8 บิตที่สอง ทำไม? เพราะนี่คือสิ่งที่อุปกรณ์คาดว่าจะได้รับ นั่นคือทั้งหมด

การเขียนหน้า

การเขียนทีละไบต์นั้นใช้ได้ แต่อุปกรณ์ EEPROM ส่วนใหญ่มีสิ่งที่เรียกว่า "บัฟเฟอร์การเขียนหน้า" ซึ่งช่วยให้คุณเขียนหลายไบต์พร้อมกันได้เช่นเดียวกับการเขียนไบต์เดียว เราจะใช้ประโยชน์จากสิ่งนี้ในตัวอย่างแบบร่างของเรา EEPROM ใช้ตัวนับภายในที่เพิ่มตำแหน่งหน่วยความจำโดยอัตโนมัติด้วยแต่ละไบต์ข้อมูลต่อไปนี้ที่ได้รับ เมื่อส่งที่อยู่หน่วยความจำแล้ว เราสามารถติดตามข้อมูลได้สูงสุด 64 ไบต์ EEPROM ถือว่า (ถูกต้อง) ว่าที่อยู่ 312 ตามด้วย 10 ไบต์จะบันทึกไบต์ 0 ที่ที่อยู่ 312 ไบต์ 1 ที่ที่อยู่ 313 ไบต์ 2 ที่ที่อยู่ 314 เป็นต้น

อ่านอะไรสักอย่าง

การอ่านจาก EEPROM เป็นไปตามกระบวนการสามขั้นตอนเดียวกันกับการเขียน EEPROM:

  1. ส่งไบต์ที่สำคัญที่สุดของที่อยู่หน่วยความจำที่คุณต้องการเขียนถึง
  2. ส่งไบต์ที่มีนัยสำคัญน้อยที่สุดของที่อยู่หน่วยความจำที่คุณต้องการเขียนถึง
  3. ขอไบต์ข้อมูลที่ตำแหน่งนั้น

ขั้นตอนที่ 5: แผนผังและโค้ด

แผนผังและรหัส
แผนผังและรหัส

รหัส:

#รวม

#define eeprom 0x50 //กำหนดที่อยู่พื้นฐานของ EEPROM

การตั้งค่าเป็นโมฆะ () {

Wire.begin(); //สร้างวัตถุ Wire

Serial.begin(9600);

ที่อยู่ int ที่ไม่ได้ลงชื่อ = 0; // ที่อยู่แรกของ EEPROM

Serial.println("เราเขียนรหัสไปรษณีย์ 22222 รหัสไปรษณีย์"); สำหรับ(ที่อยู่ = 0; ที่อยู่< 5; ที่อยู่++) writeEEPROM(eeprom, ที่อยู่, '2'); // เขียน 22222 ไปยัง EEPROM

สำหรับ (ที่อยู่ = 0; ที่อยู่ < 5; ที่อยู่ ++) { Serial.print (readEEPROM (eeprom, ที่อยู่), HEX); } }

วงเป็นโมฆะ () {

/* ไม่มีอะไรในฟังก์ชันลูป () เพราะเราไม่ต้องการให้ Arduino เขียนสิ่งเดียวกันซ้ำ ๆ ไปยัง EEPROM ซ้ำแล้วซ้ำอีก เราแค่ต้องการเขียนเพียงครั้งเดียว ดังนั้นจึงหลีกเลี่ยงฟังก์ชัน loop() ด้วย EEPROM*/ }

//กำหนดฟังก์ชัน writeEEPROM

เป็นโมฆะ writeEEPROM (ที่อยู่อุปกรณ์ int, eeaddress int ที่ไม่ได้ลงชื่อ, ข้อมูลไบต์) { Wire.beginTransmission (ที่อยู่อุปกรณ์); Wire.write((int)(ที่อยู่ >> 8)); //เขียน MSB Wire.write((int)(eaddress & 0xFF)); // เขียน LSB Wire.write (ข้อมูล); Wire.endTransmission(); }

//กำหนดฟังก์ชัน readEEPROM

ไบต์ readEEPROM (ที่อยู่อุปกรณ์ int, eeaddress int ที่ไม่ได้ลงชื่อ) { ไบต์ rdata = 0xFF; Wire.beginTransmission(ที่อยู่อุปกรณ์); Wire.write((int)(ที่อยู่ >> 8)); //เขียน MSB Wire.write((int)(eaddress & 0xFF)); //เขียน LSB Wire.endTransmission(); Wire.requestFrom(ที่อยู่อุปกรณ์, 1); ถ้า (Wire.available()) rdata = Wire.read(); ส่งคืน rdata; }

แนะนำ: