Мазмұны:

Arduino көмегімен сыртқы EEPROM -ге деректерді оқу және жазу: 5 қадам
Arduino көмегімен сыртқы EEPROM -ге деректерді оқу және жазу: 5 қадам

Бейне: Arduino көмегімен сыртқы EEPROM -ге деректерді оқу және жазу: 5 қадам

Бейне: Arduino көмегімен сыртқы EEPROM -ге деректерді оқу және жазу: 5 қадам
Бейне: DT 06 WIFI модулі бар ұялы телефонның температура реттегіші | 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 -ды Diode Matrix ROM түрінде қолдана бастады. Бұл арнайы ұйымдастырылған ПХД -ге орналастырылған дискретті жартылай өткізгіш диодтардан тұратын жады болды. Бұл интегралды схемалардың пайда болуымен Mask ROM -ға жол берді. Mask 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 -ды тиімді түрде өшіре отырып, транзисторлардан және изолятордан шығып кетуі мүмкін. Айтуынша, бұл әдетте жылдар бойы болады (бірақ оны жылумен жеделдетуге болады). Көптеген өндірушілер сіздің деректеріңіз EEPROM -де бөлме температурасында 10 жыл немесе одан да көп уақыт бойы қауіпсіз екенін айтады. Жобаңызға EEPROM құрылғысын таңдағанда тағы бір нәрсені есте ұстау қажет. EEPROM сыйымдылығы байтпен емес, битпен өлшенеді. 512K EEPROM 512Кбит деректерді, басқаша айтқанда, 64КБ құрайды.

3 -қадам: Arduino аппараттық құралдарын қосу

Arduino аппараттық құралдарын қосу
Arduino аппараттық құралдарын қосу
Arduino аппараттық құралдарын қосу
Arduino аппараттық құралдарын қосу

Жарайды, енді біз EEPROM дегенді білетін болсақ, оны қосамыз және оның не істей алатынын көрейік! Құрылғымен сөйлесу үшін бізге қуатты, сонымен қатар I²C сериялық желілерін қосу қажет. Бұл құрылғы, атап айтқанда, 5VDC жұмыс істейді, сондықтан біз оны Arduino UNO 5В шығысына қосамыз. Сонымен қатар, 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-ге жазу сияқты үш сатылы процестен өтеді:

  1. Сіз жазғыңыз келетін жад адресінің ең маңызды байтын жіберіңіз.
  2. Сіз жазғыңыз келетін жад адресінің ең аз байтын жіберіңіз.
  3. Деректер байтын сол жерде сұраңыз.

5 -қадам: Схемалар мен код

Схема және код
Схема және код

Код:

#қосу

#define eeprom 0x50 // EEPROM негізгі мекенжайын анықтайды

жарамсыз орнату () {

Wire.begin (); // Wire нысанын жасайды

Serial.begin (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 () функциясын EEPROM көмегімен болдырмауға болады.*/}

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

жарамсыз writeEEPROM (int deviceaddress, unsigned int eeaddress, байт деректері) {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 (); деректерді қайтару; }

Ұсынылған: