로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Arduino Open Source
아듀이노 함수의 상세설명
작성자 avrtools™        
작성일 2012/04/10
ㆍ추천: 0  ㆍ조회: 2346   
  EEPROM 읽기, 쓰기 함수
EEPROM은 무었인가?
Flash ROM은 ISP나 부트로더로 굽기만 하고, 실행시에는 변경이 불가능한 읽기전용 영구 주기억장치이다. 
SRAM은 CPU의 실행시 변수나 데이터를 임시로 저장하는 읽기, 쓰기를 할 수 있는 휘발성 주기억장치이다.
 
영구기억 장치는 전기를 꺼도 기억하는 장치이고, 휘발성 기억장치는 전기를 끄면 지워진다. 
EEPROM은 영구 주기억장치로 읽고 쓰기가 느리지만, 영구적으로 기억시킬 수 있다.
 
주기억 장치란 CPU나 CPU 회로에 내장된 Flash ROM, SRAM, EEPROM 기억장치를 말한다.
보조 기억장치란 CPU나 CPU 회로에 내장하지 않고, 별도의 장치나 부품에 저장한 장치이다. 
(예, 별도의 칩 EEPROM, CF/SD 카드 메모리, USB Flash 메모리, USB HDD, EIDE HDD, SATA2 SDD 등 이다.) 
 
아듀이노 데시밀라나 M168 USB에 사용하는 ATMEGA168은
16K 바이트의 FLASH ROM과 1K 바이트의 SRAM, 512 바이트의 EEPROM이 있다.
(512 바이트 즉, 0.5K 바이트는 address 0x000~0x1FF의 범위이다)
 
MEGA328P를 사용한, UNO나 M328-mini는
32K 바이트의 Flash ROM, 2K바이트 SRAM, 1024 바이트 EEPROM을 내장하고 있다.
(1024 바이트 즉, 1K 바이트는 address 0x000~0x3FF의 범위이다 )
 
EEPROM을 읽거나 쓰려면 우선 라이브러리를 사용하는 것이 편리하다.
아니면 EEPROM을 비트단위로 직렬 시프트하고 일일이 클럭을 주는, 하위함수를 만들어야 한다.
 
어떤 라이브러리를 쓰든지, 직접 만들든지 관계없이, AVR 칩에 내장된 EEPROM을 사용하려면,
EEPROM의 address는 int로, data는 char로 정의하고 호출해야 한다.
특별한 이유는 없다. 이것은 AVR의 하드웨어가 그렇게 만들어졌기 때문이다.
 
EEPROM 사용예
Arduino 스케치에 포함된 C++ 컴파일러 WinAVR의 표준 라이브러리를 쓸 때
#include <avr/eeprom.h>    // 표준 WInAVR의 하위함수 EEPROM(라이브러리)을 내 소스에 추가한다.
 
별도의 eerpom 라이브러리 myeep.h와 myeep.c가 있다면 #include "myeep.h" 로 정의한다.
#include "myeep.h"            // 소스폴더 안에 myeep.h와 myeep.c를 내 소스에 추가한다. 
이제 EEPROM을 쉽게 읽거나 쓸 수 있다.
 
EEPROM 읽기
주함수에서 int X =read_eeprom(0x1FE); 라고 함수를 부르면 (즉, 실행하면)
이 함수에서 2 바이트의 주소 eep_adrs인 0xFE와 0xFF의 EEPROM을 읽어서
16 비트 변수로 읽은 값을 가지고 주함수로 돌아간 다음,  X =,,,,에 의해 변수 X에 저장된다.
 
int read_eeproml(unsigned int eep_adrs) 
{   
   unsigned char Hi;
   unsigned char Lo;  
  _EEGET(Hi, eep_adrs);   
  _EEGET(Lo, eep_adrs+1);   
  return (Hi <<8) + Lo;
}
 
위 eeprom 읽기 함수는 eeprom에 데이터가 저장되어 있다고 가정한 것이다.
AVRISP 나 JTAGICE와 AVR Studio를 써서 AVR 칩의 EEPROM에 HEX 파일로 된 데이터를
AVR Studio의 굽기모드에서 AVRISP 나 JTAGICE로 AVR 칩의 eeprom에 직접 저장할 수도 있다.
 
EEPROM 읽기
16 비트 EEPROM의 지정된 주소에서 8 비트 데이터를 읽어오는 함수이다.
 
#include <avr/eeprom.h>
unsigned int ee_adrs;    // EEPROM 주소
unsigned char ee_data;  // EEPROM 데이터
// ee_adrs에서 1 바이트를 읽어서 ee_data에 저장한다.
ee_data =eeprom_read_word((uint8_t *) ee_adrs);
 
EEPROM 쓰기
8 비트 데이터를 16 비트 EEPROM의 지정된 주소에 저장하는 함수이다.
 
#include <avr/eeprom.h> 
 
// 미리 정의하지 않고, 변수를 정의하면서 동시에 변수를 사용하는 방법도 있다.
eeprom_write_byte((unsigned char*) ee_adrs, ee_data);
이렇게 호출하면 어느 함수안에서도 실행된다.
내부에서 한번 정의한 변수를 내부에서 다시 정의하면 안된다.
 
그러나 다른 함수에서 내부변수로 같은 이름을 반복사용해도 된다.
다른 함수에 사용한 같은 이름의 내부변수는 이름만 같지 전혀 다른 변수이다.
 
바이트 단위로 계속 저장하면, 다음번 adress를 자동으로 증가시키는 방법도 있다.
//----------------------------------------------------------------------------
// eeprom_write_byte((uint8_t*) adrs, char)
//----------------------------------------------------------------------------
void eerpom_write(unsigned int ee_adrs, unsigned char ee_data){
  eeprom_write_byte((unsigned char*) ee_adrs, ee_data);
  ee_adrs =ee_adrs +1;
  if (ee_adrs > 511) ee_adrs =0;
}
EEPROM 사용 예
이번에는 직렬포트로 들어온 데이터를 EEPROM에 저장하는 방법을 알아 보겟습니다.
EEPROM의 100 번지에 저장하고, 101 번지의 데이터를 읽어서 y에 저장합니다.
 
Arduino 스켓치에 내장된 Arduino 전용 라이브러리를 쓸 때
#include <EEPROM.h> // sketch의 EEPROM 하위함수(라이브러리)를 내 소스에 추가한다.
#include <EEPROM.h>
int ee_adrs =0;
 
seup() {
  Serial.begin(9600);
}
 
void loop() {
  char y;
  y =Serial.read();
  ee_adrs =100;
  eeprom_write(y);
  y =eerom_read();
}
 
void eerpom_write(char ee_data){
  EEPROM.write(ee_adrs, ee_data);
  ee_adrs =ee_adrs +1;
  if (ee_adrs > 511) ee_adrs = 0;
  return n;
}

char eerpom_read(){
  char x;
  x = EEPROM.read(ee_adrs);
  ee_adrs =ee_adrs +1;
  if (ee_adrs > 511) ee_adrs = 0;
  return(x);
}
 
이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
 AVRTOOLS™
   
  0
9999
윗글 디지털 신호의 펄스폭을 측정하는 함수
아래글 변수의 크기
    N         제목    글쓴이 작성일 조회 추천
판매상품의 사용설명서는 다른 자료실에,,, avrtools™ 2011/08/30 (화) 1496 0
23 LCD 문자표시 (신형) avrtools™ 2012/04/12 (목) 2156 0
22 아듀이노 멜로디 연주 avrtools™ 2008/08/22 (금) 3493 0
21 아듀이노 4비트 LCD (구형) avrtools™ 2008/09/02 (화) 4370 0
20 아듀이노 가변저항 avrtools™ 2008/08/26 (화) 3114 0
19 직렬 데이터 이동(shift) 출력 avrtools™ 2012/04/10 (화) 1748 0
18 디지털 신호의 펄스폭을 측정하는 함수 avrtools™ 2012/04/10 (화) 2007 0
17 EEPROM 읽기, 쓰기 함수 avrtools™ 2012/04/10 (화) 2346 0
16 변수의 크기 avrtools™ 2012/04/10 (화) 1658 0
15 플레시 메모리에 상수를 저장하고 읽는 함수 avrtools™ 2012/04/10 (화) 1965 0
14 소프트웨어 Serial 함수 avrtools™ 2012/04/10 (화) 1847 0
13 아듀이노 터치스위치 [3] avrtools™ 2008/08/11 (월) 4156 0
12 아듀이노 shiftOut avrtools™ 2008/09/10 (수) 3412 0
11 아듀이노 스위치와 LED점등 avrtools™ 2008/08/13 (수) 4730 0
10 아듀이노의 주파수 출력 함수 avrtools™ 2009/10/20 (화) 2798 0
9 One Button Switch Library avrtools™ 2012/03/09 (금) 1882 0
8 아듀이노 논리연산 avrtools™ 2008/08/26 (화) 3053 0
7 아듀이노 PS2 키보드 읽기 avrtools™ 2008/09/10 (수) 4148 0
6 아듀이노 가로채기 함수 avrtools™ 2008/08/23 (토) 3253 0
5 아듀이노 전용명령 avrtools™ 2008/09/16 (화) 3959 0
4 아듀이노 PWM 출력과 타이머1 전용명령 avrtools™ 2008/08/19 (화) 3608 0
3 8비트 포트의 단일비트 조작방법 avrtools™ 2010/10/30 (토) 2406 0
2 직렬포트에서 문자를 받아 숫자 int로 저장 avrtools™ 2012/04/08 (일) 1722 0
1 직렬통신포트의 초기화 avrtools™ 2012/04/06 (금) 1500 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0