Мазмуну:

Ардуинону колдонуу менен тышкы EEPROMга маалыматтарды окуу жана жазуу: 5 кадам
Ардуинону колдонуу менен тышкы EEPROMга маалыматтарды окуу жана жазуу: 5 кадам

Video: Ардуинону колдонуу менен тышкы EEPROMга маалыматтарды окуу жана жазуу: 5 кадам

Video: Ардуинону колдонуу менен тышкы EEPROMга маалыматтарды окуу жана жазуу: 5 кадам
Video: Melexis MLX90614 инфра термометрин Arduino менен колдонуу 2024, Ноябрь
Anonim
Ардуинону колдонуу менен тышкы EEPROMга маалыматтарды окуу жана жазуу
Ардуинону колдонуу менен тышкы 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. Breadboard
  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 түрүндө колдонула баштады. Бул атайын уюштурулган ПКБга жайгаштырылган дискреттик жарым өткөргүч диоддордон турган эс болчу. Бул интегралдык микросхемалардын пайда болушу менен Mask ROMго жол ачты. Маска 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 кубаттуулугу байт менен эмес, бит менен өлчөнөт. 512K EEPROM 512Kbits маалыматтарды камтыйт, башкача айтканда, жөн эле 64KB.

3 -кадам: Arduino жабдыктарын туташтыруу

Arduino аппараттык туташуусу
Arduino аппараттык туташуусу
Arduino аппараттык туташуусу
Arduino аппараттык туташуусу

Макул, эми биз EEPROM деген эмне экенин билгенден кийин, келгиле, биригип, анын эмне кыла аларын карап көрөлү! Биздин түзмөктү сүйлөшүү үчүн, биз кубаттуулукту жана I²C сериялык линияларын туташтырышыбыз керек. Бул түзмөк, атап айтканда, 5VDCде иштейт, андыктан биз аны Arduino UNOнун 5В чыгуусуна туташтырабыз. Ошондой эле, I²C линиялары байланыштын туура болушу үчүн тартма каршылыктарга муктаж болот. Бул резисторлордун мааниси сиз билдиргиси келген линиялардын сыйымдуулугуна жана жыштыгына жараша болот, бирок критикалык эмес колдонмолор үчүн жакшы эреже k the диапазонунда сакталат. Бул мисалда, биз 4.7kΩ тартма каршылыгын колдонобуз.

Бул түзмөктө 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га жазуу менен үч кадамдуу процессти камтыйт:

  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'); // EEPROMга 22222 жазат

үчүн (дарек = 0; дарек <5; дарек ++) {Serial.print (readEEPROM (eeprom, дарек), HEX); }}

void loop () {

/*loop () функциясында эч нерсе жок, анткени биз ардуинонун бир эле нерсени EEPROMго кайра -кайра жазышын каалабайбыз. Биз жөн гана бир жолку жазууну каалайбыз, андыктан loop () функциясын EEPROMs менен алдын алууга болот.*/}

// writeEEPROM функциясын аныктайт

Void writeEEPROM (int deviceaddress, unsigned int eeaddress, byte data) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write деп жазат ((int) (eeaddress & 0xFF)); // LSB Wire.write деп жазат (маалыматтар); Wire.endTransmission (); }

// readEEPROM функциясын аныктайт

байт readEEPROM (int deviceaddress, unsigned int eeaddress) {байт rdata = 0xFF; Wire.beginTransmission (түзмөктүн дареги); Wire.write ((int) (eeaddress >> 8)); // MSB Wire.write деп жазат ((int) (eeaddress & 0xFF)); // LSB Wire.endTransmission деп жазат (); Wire.requestFrom (түзмөктүн дареги, 1); if (Wire.available ()) rdata = Wire.read (); rdata кайтаруу; }

Сунушталууда: