DK-128 실습 EEPROM 제어 아이티즌 기술연구소 2009.12.10
DK-128 메인보드 – 연산, 제어 확장보드 - 입출력 Serial port Parallel port FND LED high low FND low high LED low high EEPROM & Sensor ATmega 4K EEPROM Tact Switch EEPROM Power 1:TWI clock, 2:TWI data, 상위5~8:Infrared sensor
DK-128의 결선 8 line j19 red - j15 + black j18 j16 - + 8 line 1 1 2 61 1 25 j16 54 - + 35 42 8 line
LED OUT ATMEGA128 Key IN ADC=아날로그신호입력 Port A : I/O, 상위어드레스(ALE의한제어) 아날로그전원 프로그램 쓰기 LED OUT 전원 Port E : I/O, 외부인터럽트, ISP 프로그래밍 데이터/주소 모드 ATMEGA128 Key IN 전원 Port B : I/O, 타이머, 카운터, PWM, SPI 외부데이터메모리 접근 모드 Oscillator Port D : I/O, TWI, UART직렬통신 Real time clock시 Oscillator
1. EECR (Control Register) EERE (Read Enable) EEAR에 지정된 주소의 1바이트를 읽어 EEDR에 저장 EEWE (Write Enable) 쓰기 기능 동작, 시스템에 의한 클리어, EEMWE (Master Write Enable) EEWE 동작 전 1 지정해야 함, 시스템에 의한 클리어 EERIE (Ready Interrupt Enable) EEWE가 클리어 될때 인터럽트 발생 여부 SREG I 비트도 활성화 되어 있어야 함. 비트 7 6 5 4 3 2 1 EECR - EERIE EEMWE EEWE EERE 모드 R R/W 초기값 X
2. EEAR (Address Register) 16비트 레지스터(12비트 사용) 비트 7 6 5 4 3 2 1 EEARH - EEAR11 EEAR10 EEAR9 EEAR8 모드 R R/W EEARL EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 초기값 12비트 = 4,096개 번지 관리 가능 Ex) EEAR = (unsigned int)0~4095
3. EEDR (Data Register) 읽거나 쓰기 위한 데이터를 저장하는 레지스터 비트 7 6 5 4 3 2 1 EEDR MSB LSB 모드 R/W 초기값 Ex) EEDR = (unsigned char)0~255
한 바이트 쓰기/읽기 절차 쓰기 시작 읽기 시작 쓰기 중인가? 쓰기 중인가? 쓸 주소 설정 읽을 주소 설정 쓸 데이터 설정 YES YES 쓰기 중인가? 쓰기 중인가? NO NO 쓸 주소 설정 읽을 주소 설정 쓸 데이터 설정 읽기 명령 쓰기 명령 데이터 읽기 쓰기 종료 읽기 종료
AVR-GCC의 EEPROM 함수 헤더파일 주요 함수 주의 사항 avr/eeprom.h 기능 eeprom_is_ready() EECR 레지스터에서 EEWE 비트가 Clear 될 때까지 대기 eeprom_write_byte(addr, val) 해당 주소에 바이트 단위 쓰기 eeprom_read_byte(addr) 해당 주소에서 바이트 단위 읽기
실습 예제 1/3
실습 예제 2/3 // 1번 스위치를 누르면 EEPROM에 데이터 기록 // EEPROM의 i 주소에 들어있는 데이터를 읽어옴 { ch = 0; for(unsigned int i=0; i<10; i++) eeprom_write(i, ch++); ch = 9; eeprom_write(10+i, ch--); } // EEPROM의 i 주소에 들어있는 데이터를 읽어옴 // 읽어온 데이터를 FND에 출력
실습 예제 3/3 // 쓰기 작업 중이면 루프 // 쓸 주소값 입력 // 쓸 데이터 입력 // EEWE 할 준비해라 // 쓰기 명령 // 쓰기 작업 중이면 루프 // 읽을 주소값 입력 // 읽기 명령 // 데이터 읽기
실습 문제 [요구사항] LED와 KEY를 사용한다. 각 LED는 이웃한 각 KEY버튼과 짝이 된다. 현재의 상태를 매번 EEPROM에 기억 시킨다. DK-128의 전원을 껐다가 켰을 때, 이전의 LED 상태를 그대로 표시해야 한다.