안녕하세요. 오늘은 아두이노 우노에있는 EEPROM 기능을 사용해보겠습니다
EEPROM이란 Electrically Erasable Programmable Read-Only Memory의 약자로 비휘발성 데이터를 의미합니다
아두이노 우노는 일반적으로 ATMEGA32를 사용하므로 데이터시트를보면 EEPROM은 1024Bytes의 크기를 가지고있고 100,000번 write/erase 사용가능합니다. 제조사가 제시한 횟수를 초과하면 데이터 손실이 있을 수 있습니다
EEPROM라이브러리를 사용하면 매우쉽게 사용이 가능합니다.
* Write하기
EEPROM.write(address,value)
address는 0~1023까지 가능하고 value에는 1byte 값을 적으면 됩니다
*Read하기
EEPROM.read(address);
address에는 읽을 주소를 적으면 됩니다
#include <EEPROM.h>
byte value=0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
EEPROM.write(0, 100);
value = EEPROM.read(0);
Serial.print(value);
}
void loop() {
// put your main code here, to run repeatedly:
}
*Update기능
update함수는 write와 비슷합니다만 update를 사용하면 기존에 저장되어있는 값이랑 다를때만 값을 저장합니다
EEPROM은 수명이 있으므로 update함수를 사용하면 수명을 절약할수있습니다
EEPROM.update(address,value)
사용방식은 write와 같습니다.
*사용예시
하나의 장소에 1byte를 저장하므로 0~255까지 저장이 됩니다.
만약 256이상 저장하고싶다면 시프트레지스터를 사용하면 편리합니다
예를들어 1000을 저장하고싶다면 1000이면 16진수로 0x3e8입니다. 2바이트가 필요하므로 한 곳에는 0xe8을 저장하고 한 곳에는 0x03을 저장하면 됩니다.
#include <EEPROM.h>
int value=1000;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
EEPROM.update(0, value);
EEPROM.update(1, value>>8);
Serial.print("EEPROM.read(0) : 0x");
Serial.println(String(EEPROM.read(0), HEX));
Serial.print("EEPROM.read(1) : 0x");
Serial.println(String(EEPROM.read(1), HEX));
Serial.println("EEPROM.read(0) | EEPROM.read(1)<<8 : " + String(EEPROM.read(0) | (EEPROM.read(1) << 8)));
}
void loop() {
// put your main code here, to run repeatedly:
}
아두이노 외에 다른 MCU를 사용할 때 EEPROM을 사용해야 할 상황이 생겼을 때 아두이노에서 제공해 주는 함수와 유사한 방식으로 함수를 만든다면 사용하기 편할 것 같습니다
'아두이노 > 이론' 카테고리의 다른 글
아두이노 레오나르도 VID,PID 변경하기 (0) | 2023.12.09 |
---|---|
SPI통신 아두이노와 오실로스코프로 확인해보기 2편 (0) | 2023.01.31 |
아두이노 shiftOut함수 알아보기 (1) | 2022.12.26 |
SPI통신 아두이노와 오실로스코프로 확인해보기 1편 (0) | 2021.11.21 |
I2C통신 아두이노와 오실로스코프로 확인해보기 3편 (0) | 2021.10.04 |