Агуулгын хүснэгт:

Arduino ашиглан гадаад EEPROM руу өгөгдөл унших, бичих: 5 алхам
Arduino ашиглан гадаад EEPROM руу өгөгдөл унших, бичих: 5 алхам

Видео: Arduino ашиглан гадаад EEPROM руу өгөгдөл унших, бичих: 5 алхам

Видео: Arduino ашиглан гадаад EEPROM руу өгөгдөл унших, бичих: 5 алхам
Видео: Контроллер температуры мобильного телефона с модулем WIFI DT 06 | Программирование LDmicro-Roboremo 2024, Долдугаар сарын
Anonim
Arduino ашиглан гадаад EEPROM руу өгөгдөл унших, бичих
Arduino ашиглан гадаад EEPROM руу өгөгдөл унших, бичих

EEPROM гэдэг нь цахилгаан арилгадаг програмчлагдах зориулалттай зөвхөн унших санах ойн товчлол юм.

EEPROM нь санах ойн тогтворгүй хэлбэр учраас маш чухал бөгөөд ашигтай байдаг. Энэ нь самбарыг унтраасан ч гэсэн EEPROM чип нь түүнд бичигдсэн програмаа хадгалсаар байгаа гэсэн үг юм. Тиймээс та самбарыг унтраагаад дахин асаахад EEPROM -д бичигдсэн програмыг ажиллуулж болно. Үндсэндээ EEPROM нь ямар ч хамаагүй програмыг хадгалж, ажиллуулдаг. Энэ нь та төхөөрөмжийг унтрааж, 3 хоногийн турш унтрааж, буцаж ирээд асааж, дотор нь програмчлагдсан програмыг ажиллуулж чадна гэсэн үг юм. Ихэнх хэрэглэгчийн электрон төхөөрөмж иймэрхүү байдлаар ажилладаг.

Энэхүү төслийг LCSC ивээн тэтгэж байна. Би LCSC.com цахим бүрэлдэхүүн хэсгүүдийг ашиглаж ирсэн. LCSC нь дэлхийн тээврийн сүлжээгээр 200 гаруй оронд жинхэнэ, өндөр чанартай электрон бүрэлдэхүүн хэсгүүдийг хамгийн сайн үнээр санал болгох хүчтэй үүрэг хүлээдэг. Өнөөдөр бүртгүүлээд эхний захиалгаа 8 доллараар хямдруулаарай.

EEPROM нь уламжлалт EEPROM дахь байтуудыг бие даан уншиж, устгаж, дахин бичиж чаддаг тул маш үр дүнтэй байдаг. Бусад ихэнх төрлийн санах ойд үүнийг хийх боломжгүй байдаг. Microchip 24 цуврал EEPROM гэх мэт цуваа EEPROM төхөөрөмжүүд нь I²C ярих чадвартай аливаа төхөөрөмжид илүү их санах ой нэмэх боломжийг олгодог.

Хангамж

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 МГц болор
  4. Талхны самбар
  5. Эсэргүүцэл 4.7k Ом x 2
  6. Конденсатор 22 pF x 2

Алхам 1: EEPROM -ийн үндэс

EEPROM -ийн үндэс
EEPROM -ийн үндэс

Microchip 24LC2512 чипийг 8 зүү DIP багцаар худалдаж авах боломжтой. 24LC512 дээрх тээглүүр нь нэлээд шууд бөгөөд хүч (8), GND (4), бичих хамгаалалт (7), SCL/SDA (6, 5), гурван хаягийн зүү (1, 2, 3) -ээс бүрдэнэ.

ROM -ийн товч түүх

Ширээний тооцоолуур, гар орчуулагч гэх мэт "Хадгалагдсан -Програм" төрлийн анхны компьютерууд ROM -ийг диод матриц ROM хэлбэрээр ашиглаж эхэлсэн. Энэ бол тусгай зохион байгуулалттай ПХБ дээр байрлуулсан салангид хагас дамжуулагч диодуудаас бүрдсэн санах ой байв. Энэ нь нэгдсэн хэлхээ бий болсноор Маск ROM -д зам тавьж өгсөн юм. Маск ROM нь Diode Matrix ROM -тэй маш төстэй байсан бөгөөд үүнийг арай бага хэмжээгээр хэрэгжүүлсэн. Гэсэн хэдий ч та хэд хэдэн диодыг гагнуурын төмрөөр хөдөлгөж, дахин програмчилж болохгүй гэсэн үг юм. Маск ROM -ийг үйлдвэрлэгч програмчлах ёстой байсан бөгөөд дараа нь өөрчлөх боломжгүй байв.

Харамсалтай нь Mask ROM нь үнэтэй байсан бөгөөд үйлдвэрлэхэд удаан хугацаа шаардагддаг байсан тул шинэ програм бүр цоо шинэ төхөөрөмжийг цутгах үйлдвэрээр үйлдвэрлэх шаардлагатай байв. Гэсэн хэдий ч 1956 онд энэ асуудлыг PROM (Programmable ROM) зохион бүтээсэнээр шийдсэн бөгөөд энэ нь хөгжүүлэгчдэд чипсийг өөрсдөө програмчлах боломжийг олгосон юм. Энэ нь үйлдвэрлэгчид сая сая програмчлаагүй төхөөрөмжийг үйлдвэрлэж, илүү хямд, илүү практик болгож чадна гэсэн үг юм. Гэхдээ PROM-ийг зөвхөн өндөр хүчдэлийн програмчлалын төхөөрөмж ашиглан ганцхан удаа бичиж болно. PROM төхөөрөмжийг програмчилсны дараа төхөөрөмжийг програмчлаагүй байдалд нь буцааж оруулах ямар ч боломжгүй байсан.

Энэ нь 1971 онд EPROM (Erasable Programmable ROM) -ыг зохион бүтээснээр өөрчлөгдсөн бөгөөд товчлол дээр өөр үсэг нэмж оруулахаас гадна төхөөрөмжийг хэт ягаан туяаны хүчтэй эх үүсвэр ашиглан устгаж, "хоосон" төлөвт буцаах боломжийг авчирсан юм. Энэ нь зөв, та үүнийг дахин програмчлахын тулд IC дээр тод гэрэл асаах ёстой байсан, ямар гоё юм бэ? Хэрэв та програм хангамж дээр ажилладаг хөгжүүлэгч биш бол цахилгаан дохио ашиглан төхөөрөмжийг дахин програмчлахыг хүсч байгаа бол энэ нь үнэхээр гайхалтай юм. Энэ нь эцэст нь 1983 онд EEPROM (Electrically Erasable Programmable ROM) хөгжүүлснээр бодит байдал болсон бөгөөд үүний ачаар бид өнөөгийн тохиромжгүй товчлолыг олж авлаа.

Алхам 2: EEPROM -ийн онцлог шинж чанарууд

Өгөгдөл хадгалах арга болох EEPROM -ийн хоёр том дутагдал байдаг. Ихэнх аппликешн дээр давуу тал нь сул талуудаас илүү байдаг боловч EEPROM -ийг дараагийн дизайнд оруулахаасаа өмнө тэдгээрийг мэдэж байх ёстой.

Нэгдүгээрт, EEPROM-ийг ажиллуулдаг технологи нь түүнийг дахин бичих хугацааг хязгаарладаг. Энэ нь электронууд ROM -ийг бүрдүүлдэг транзисторуудад гацаж, "1" ба "0" хоорондох цэнэгийн зөрүүг танигдах хүртэл хуримтлагдахтай холбоотой юм. Гэхдээ санаа зовох хэрэггүй, ихэнх EEPROM-ууд хамгийн ихдээ 1 сая ба түүнээс дээш тоог дахин бичих боломжтой байдаг. Хэрэв та EEPROM -д тасралтгүй бичээгүй бол энэ дээд хэмжээнд хүрэх магадлал багатай юм. Хоёрдугаарт, хэрэв та хүчийг салгавал EEPROM арилахгүй, гэхдээ энэ нь таны өгөгдлийг хязгааргүй хадгалахгүй. Электронууд транзистороос тусгаарлагчаар дамжин гарч, EEPROM -ийг үр дүнтэй арилгаж чаддаг. Энэ нь ихэвчлэн хэдэн жилийн туршид тохиолддог (үүнийг дулаанаар хурдасгаж болох боловч). Ихэнх үйлдвэрлэгчид таны өгөгдөл тасалгааны температурт 10 ба түүнээс дээш жил EEPROM дээр аюулгүй байдаг гэж ярьдаг. Төсөлдөө EEPROM төхөөрөмж сонгохдоо бас нэг зүйлийг анхаарч үзэх хэрэгтэй. EEPROM -ийн хүчин чадлыг байтаар биш битээр хэмждэг. 512K EEPROM нь 512Kbits өгөгдөл, өөрөөр хэлбэл ердөө 64KB багтаамжтай болно.

Алхам 3: Arduino Hardware Hookup

Arduino техник хангамжийн холболт
Arduino техник хангамжийн холболт
Arduino техник хангамжийн холболт
Arduino техник хангамжийн холболт

За, одоо бид EEPROM гэж юу болохыг мэдэж байгаа болохоор нэгийг нь холбоод юу хийж болохыг харцгаая! Төхөөрөмжөө ярихын тулд бид I²C цуваа шугам болон тэжээлийг холбох шаардлагатай болно. Энэ төхөөрөмж, ялангуяа 5VDC дээр ажилладаг тул бид үүнийг Arduino UNO -ийн 5V гаралттай холбох болно. Түүнчлэн, I²C шугамд харилцаа холбоо зөв ажиллахын тулд татах эсэргүүцэл хэрэгтэй болно. Эдгээр резисторуудын утга нь дамжуулахыг хүсч буй шугамын багтаамж, давтамжаас хамаарна, гэхдээ чухал бус хэрэглээний сайн дүрэм бол түүнийг kΩ мужид хадгална. Энэ жишээнд бид 4.7 кОм-ийн татах эсэргүүцэл ашиглах болно.

I²C хаягийг сонгохын тулд энэ төхөөрөмж дээр гурван тээглүүр байдаг бөгөөд ингэснээр та автобусанд нэгээс олон EEPROM суулгаж, өөр өөр хаягаар хандаж болно. Та тэдгээрийг бүгдийг нь газардуулж болно, гэхдээ бид дараа нь зааварчилгаанд илүү өндөр хүчин чадалтай төхөөрөмжийг оруулахын тулд бид утсыг холбож өгөх болно.

Бид бүх зүйлийг хооронд нь холбохын тулд талхны самбар ашиглах болно. Доорх диаграм нь ихэнх I²C EEPROM төхөөрөмжүүдийн зөв холболтыг харуулж байна, үүнд бидний зардаг Microchip 24 цуврал EEPROM.

Алхам 4: Унших ба бичих

Ихэнх тохиолдолд та EEPROM -ийг микроконтроллертой хамт ашиглахдаа санах ойн бүх агуулгыг нэг дор үзэх шаардлагагүй болно. Шаардлагатай бол та энд тэнд байт уншиж, бичих болно. Гэхдээ энэ жишээнд бид EEPROM -д бүхэл бүтэн файл бичээд дараа нь бүгдийг нь уншаад компьютер дээрээ үзэх боломжтой болно. Энэ нь EEPROM -ийг ашиглах санааг бидэнд өгөхөөс гадна жижиг төхөөрөмж дээр хэр их өгөгдөл багтахыг мэдрэх болно.

Ямар нэг зүйл бичих

Бидний үлгэр жишээ зураг нь цуваа порт дээр орж ирсэн аливаа байтыг аваад EEPROM -д бичиж, санах ойд бичсэн хичнээн байтыг дагаж мөрдөх болно.

EEPROM -д нэг байт санах ой бичих нь ихэвчлэн гурван үе шаттайгаар явагддаг.

  1. Бичихийг хүсч буй санах ойн хаягийнхаа хамгийн чухал байтыг илгээнэ үү.
  2. Бичихийг хүссэн санах ойн хаягийнхаа хамгийн бага байтыг илгээнэ үү.
  3. Энэ байршилд хадгалахыг хүсч буй өгөгдлийн байтыг илгээнэ үү.

Тэнд тайлбарлахад цөөхөн хэдэн түлхүүр үгс байгаа байх.

Санах ойн хаягууд

Хэрэв та 512 кбит EEPROM -д байгаа бүх байтыг 0 -ээс 64000 хүртэл дараалан зогсож байна гэж төсөөлж байгаа бол 8 байт байт байгаа тул 512 кбит EEPROM дээр 64000 байт багтаах боломжтой бол санах ойн хаяг нь энэ хэсэгт байх болно. тодорхой байт олох мөр. Бид энэ хаягийг EEPROM руу илгээх ёстой бөгөөд ингэснээр бидний илгээж буй байтыг хаана байрлуулахаа мэддэг болно.

Хамгийн чухал ба хамгийн бага ач холбогдолтой байтууд

256 кбит EEPROM -д 32000 боломжит газар байдаг бөгөөд 255 нь таны нэг байтаар кодлох хамгийн том тоо учраас бид энэ хаягийг хоёр байтаар илгээх шаардлагатай болно. Нэгдүгээрт, бид хамгийн чухал байт (MSB) - энэ тохиолдолд эхний 8 битийг илгээдэг. Дараа нь бид хамгийн бага байт (LSB) илгээдэг - хоёр дахь 8 бит. Яагаад? Учир нь төхөөрөмж ийм байдлаар тэднийг хүлээж авна гэж найдаж байгаа болохоор тэр.

Хуудас бичих

Нэг удаад нэг байт бичих нь зөв боловч ихэнх EEPROM төхөөрөмжүүд нь "хуудас бичих буфер" гэж нэрлэдэг бөгөөд энэ нь нэг байт шиг олон байт бичих боломжийг олгодог. Бид үүнийг жишээ зурахдаа ашиглах болно. EEPROM нь хүлээн авсан өгөгдлийн байт бүрээр санах ойн байршлыг автоматаар нэмэгдүүлдэг дотоод тоолуурыг ашигладаг. Санах ойн хаягийг илгээсэний дараа бид 64 байт хүртэлх өгөгдлийг дагаж мөрдөх боломжтой болно. EEPROM нь 312 гэсэн хаяг 10 байтаар 312 гэсэн хаягаар 0 байт, 313 хаягаар 1 байт, 314 хаягаар 2 байт гэх мэтийг бичнэ гэж EEPROM үздэг.

Ямар нэг юм уншаарай

EEPROM-ээс унших нь үндсэндээ EEPROM-д бичихтэй адил гурван үе шаттай үйл явцыг дагана.

  1. Бичихийг хүсч буй санах ойн хаягийнхаа хамгийн чухал байтыг илгээнэ үү.
  2. Бичихийг хүссэн санах ойн хаягийнхаа хамгийн бага байтыг илгээнэ үү.
  3. Тухайн байршилд байгаа өгөгдлийн байтыг асууна уу.

Алхам 5: Схем ба код

Схем ба код
Схем ба код

Код:

#оруулах

#define eeprom 0x50 // нь EEPROM -ийн үндсэн хаягийг тодорхойлдог

хүчингүй тохиргоо () {

Wire.begin (); // нь Wire объект үүсгэнэ

Цуваа эхлэх (9600);

гарын үсэггүй int хаяг = 0; // EEPROM -ийн эхний хаяг

Serial.println ("Бид 22222 зип код, зип код бичдэг"); for (address = 0; address <5; address ++) writeEEPROM (eeprom, address, '2'); // EEPROM -д 22222 бичдэг

for (address = 0; address <5; address ++) {Serial.print (readEEPROM (eeprom, address), HEX); }}

void loop () {

/*loop () функцэд юу ч байхгүй, учир нь бид arduino нэг зүйлийг EEPROM -д дахин дахин бичихийг хүсдэггүй. Бид зүгээр л нэг удаа бичихийг хүсч байгаа тул loop () функцээс EEPROMs ашиглан зайлсхийдэг.*/}

// writeEEPROM функцийг тодорхойлдог

хүчингүй бичихEEPROM (int төхөөрөмжийн хаяг, гарын үсэггүй int eeaddress, байтын өгөгдөл) {Wire.beginTransmission (төхөөрөмжийн хаяг); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write бичдэг ((int) (eeaddress & 0xFF)); // LSB Wire.write бичдэг (өгөгдөл); Wire.endTransmission (); }

// readEEPROM функцийг тодорхойлдог

байт уншихEEPROM (int deviceaddress, unsigned int eeaddress) {байт rdata = 0xFF; Утас.beginTransmission (төхөөрөмжийн хаяг); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write бичдэг ((int) (eeaddress & 0xFF)); // LSB Wire.endTransmission () гэж бичдэг; Wire.requestFrom (төхөөрөмжийн хаяг, 1); if (Wire.available ()) rdata = Wire.read (); өгөгдлийг буцаах; }

Зөвлөмж болгож буй: