Съдържание:

Четене и запис на данни във външен EEPROM с помощта на Arduino: 5 стъпки
Четене и запис на данни във външен EEPROM с помощта на Arduino: 5 стъпки

Видео: Четене и запис на данни във външен EEPROM с помощта на Arduino: 5 стъпки

Видео: Четене и запис на данни във външен EEPROM с помощта на Arduino: 5 стъпки
Видео: HOW TO DEVELOPING PROJECT IN AUTOMATION FROM START WITH TASK / ASSIGNMENT [ BULGARIAN ] 2024, Юли
Anonim
Четене и запис на данни във външен EEPROM с помощта на Arduino
Четене и запис на данни във външен EEPROM с помощта на Arduino

EEPROM означава Електрически изтриваема програмируема памет само за четене.

EEPROM е много важен и полезен, тъй като е енергонезависима форма на памет. Това означава, че дори когато платката е изключена, чипът EEPROM все още запазва програмата, която е записана на него. Така че, когато изключите платката и след това я включите отново, програмата, която е написана в EEPROM, може да се стартира. Така че по принцип EEPROM съхранява и изпълнява програма независимо от всичко. Това означава, че можете да изключите устройство, да го изключите за 3 дни и да се върнете и да го включите и той все още може да изпълнява програмата, която е програмирана в него. Ето как работят повечето потребителски електронни устройства.

Този проект е спонсориран от LCSC. Използвах електронни компоненти от LCSC.com. LCSC има силен ангажимент да предлага богат избор от оригинални, висококачествени електронни компоненти на най-добра цена с глобална корабна мрежа в над 200 страни. Регистрирайте се днес и вземете $ 8 отстъпка за първата си поръчка.

EEPROM също е много ефективен, тъй като отделните байтове в традиционния EEPROM могат да се четат, изтриват и презаписват независимо. В повечето други видове енергонезависима памет това не може да се направи. Серийните EEPROM устройства, като EEPROM от Microchip 24-та серия ви позволяват да добавите повече памет към всяко устройство, което може да говори I²C.

Консумативи

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz кристал
  4. Платка
  5. Резистор 4.7k Ohm 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 с появата на интегрални схеми. Mask ROM много приличаше на Diode Matrix ROM, но беше реализиран в много по -малък мащаб. Това обаче означаваше, че не можете просто да преместите няколко диода с поялник и да го препрограмирате. Маската ROM трябваше да бъде програмирана от производителя и след това не можеше да се променя.

За съжаление, Mask ROM беше скъп и отне много време за производството му, тъй като всяка нова програма изискваше чисто ново устройство да бъде произведено от леярна. През 1956 г. обаче този проблем е решен с изобретяването на PROM (Programmable ROM), което позволява на разработчиците сами да програмират чиповете. Това означаваше, че производителите могат да произведат милиони едно и също непрограмирано устройство, което го направи по -евтино и по -практично. PROM обаче може да бъде записан само веднъж с помощта на устройство за програмиране с високо напрежение. След програмиране на PROM устройство, нямаше начин да върнете устройството в непрограмирано състояние.

Това се промени през 1971 г. с изобретяването на EPROM (Erasable Programmable ROM), който - освен добавяне на друга буква към акронима - донесе със себе си възможността да изтрие устройството и да го върне в „празно“състояние, използвайки силен източник на UV светлина. Точно така, трябваше да светиш ярка светлина върху интегралната схема, за да я препрограмираш, колко готино е това? Оказва се, че е доста готино, освен ако не сте разработчик, работещ върху фърмуера, в този случай наистина бихте искали да можете да препрограмирате устройството, използвайки електрически сигнали. Това най -накрая стана реалност през 1983 г. с разработването на EEPROM (Електрически изтриваем програмируем ROM) и с това стигаме до днешния тромав акроним.

Стъпка 2: Странности на EEPROM

Има два основни недостатъка на EEPROM като метод за съхранение на данни. В повечето приложения плюсовете надвишават недостатъците, но трябва да сте наясно с тях, преди да включите EEPROM в следващия си дизайн.

На първо място, технологията, която кара EEPROM да работи, също ограничава броя пъти, когато може да се пренаписва. Това е свързано с това, че електроните попадат в капана на транзисторите, които съставляват ROM и се натрупват, докато разликата в заряда между "1" и "0" е неразпознаваема. Но не се притеснявайте, повечето EEPROM имат максимален брой презапис от 1 милион или повече. Докато не пишете непрекъснато в EEPROM, е малко вероятно да постигнете този максимум. Второ, EEPROM няма да бъде изтрит, ако изключите захранването от него, но няма да задържи данните ви за неопределено време. Електроните могат да се изнесат от транзисторите и през изолатора, като ефективно изтриват EEPROM с течение на времето. Въпреки това, това обикновено се случва в продължение на години (въпреки че може да се ускори от топлина). Повечето производители казват, че вашите данни са безопасни в EEPROM в продължение на 10 или повече години при стайна температура. И има още нещо, което трябва да имате предвид, когато избирате EEPROM устройство за вашия проект. Капацитетът на EEPROM се измерва в битове, а не в байтове. 512K EEPROM ще съдържа 512Kbit данни, с други думи, само 64KB.

Стъпка 3: Свързване на хардуера на Arduino

Хардуерно свързване на Arduino
Хардуерно свързване на Arduino
Хардуерно свързване на Arduino
Хардуерно свързване на Arduino

Добре, сега, когато знаем какво е EEPROM, нека свържем един и да видим какво може да направи! За да накараме нашето устройство да говори, ще трябва да свържем захранване, както и I²C серийни линии. Това устройство, по -специално, работи на 5VDC, така че ще го свържем към 5V изхода на нашия Arduino UNO. Също така, линиите I²C ще се нуждаят от издърпващи се резистори, за да може комуникацията да се осъществи правилно. Стойността на тези резистори зависи от капацитета на линиите и честотата, с която искате да го съобщите, но добро правило за некритични приложения е просто да го държите в диапазона kΩ. В този пример ще използваме 4,7 kΩ издърпващи се резистори.

На това устройство има три пина за избор на I²C адрес, по този начин можете да имате повече от един EEPROM в шината и да ги адресирате по различен начин. Можете просто да ги заземите всички, но ние ще ги окабелим, за да можем да включим устройство с по-голям капацитет по-късно в урока.

Ще използваме макет, за да свържем всичко заедно. Диаграмата по-долу показва правилното свързване за повечето I²C EEPROM устройства, включително EEPROM от Microchip 24-та серия, които продаваме.

Стъпка 4: Четене и писане

През повечето време, когато използвате EEPROM заедно с микроконтролер, всъщност няма да е необходимо да виждате цялото съдържание на паметта наведнъж. Просто ще четете и пишете байтове тук и там, ако е необходимо. В този пример обаче ще запишем цял файл в EEPROM и след това ще го прочетем обратно, за да можем да го видим на нашия компютър. Това би трябвало да ни успокои с идеята за използване на EEPROM и също така да ни даде усещане за това колко данни наистина могат да се поберат на малко устройство.

Напиши нещо

Нашата примерна скица просто ще вземе всеки байт, който идва през серийния порт и ще го запише в EEPROM, като следи по пътя колко байта сме записали в паметта.

Записването на байт памет в EEPROM обикновено се извършва в три стъпки:

  1. Изпратете най -значимия байт от адреса на паметта, на който искате да пишете.
  2. Изпратете най -малкия байт от адреса на паметта, на който искате да пишете.
  3. Изпратете байта с данни, който искате да съхранявате на това място.

Вероятно има няколко ключови думи, които го обясняват:

Адреси на паметта

Ако си представите всички байтове в 512 Kbit EEPROM, стоящи в ред от 0 до 64000 - защото има 8 бита в байт и следователно можете да поставите 64000 байта в 512 Kbit EEPROM - тогава адресът на паметта е мястото в ред, където ще намерите определен байт. Трябва да изпратим този адрес до EEPROM, за да знае къде да постави байта, който изпращаме.

Най -значимите и най -малко значимите байтове

Тъй като има 32000 възможни места в 256 Kbit EEPROM - и тъй като 255 е най -големият брой, който можете да кодирате в един байт - трябва да изпратим този адрес в два байта. Първо, изпращаме най -значимия байт (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

void setup () {

Wire.begin (); // създава обект Wire

Serial.begin (9600);

неподписан int адрес = 0; // първи адрес на EEPROM

Serial.println ("Пишем пощенския код 22222, пощенски код"); за (адрес = 0; адрес <5; адрес ++) напишете EEPROM (eeprom, адрес, '2'); // Записва 22222 в EEPROM

за (адрес = 0; адрес <5; адрес ++) {Serial.print (readEEPROM (eeprom, адрес), HEX); }}

void loop () {

/*няма нищо във функцията loop (), защото не искаме arduino да записва едно и също нещо в EEPROM отново и отново. Ние просто искаме еднократно записване, така че функцията loop () се избягва с EEPROM.*/}

// дефинира функцията writeEEPROM

void 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 (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // пише MSB Wire.write ((int) (eeaddress & 0xFF)); // записва LSB Wire.endTransmission (); Wire.requestFrom (deviceaddress, 1); if (Wire.available ()) rdata = Wire.read (); връщане на rdata; }

Препоръчано: