질문게시판 > EEPROM 저장 관련 문의

TODAY280 TOTAL2,226,838
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | EEPROM 저장 관련 문의

페이지 정보

작성자 총체적난국 작성일2021-07-14 18:21 조회41,441회 댓글12건

본문

	

전원이 꺼질 때 EEPROM 저장하는 것은 어렵다고 하셔서 일단 스위치를 눌러 값을 저장하는 것부터 해보려고 코드를 짜봤는데 전원을 껐다 키면 값이 저장이 안 되어 있습니다.

혹시 어떤 부분이 틀렸는지 보시고 조언 부탁 드립니다.

 

#include <avr/io.h>

#include <avr/delay.h>

#include <avr/interrupt.h>

 

char fnd[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned int buff4,buff3,buff2,buff1;

unsigned int i = 0;

unsigned char eeget(unsigned int addr);

unsigned int data;

unsigned int k = 0;

 

ISR(INT0_vect)

{

 i++;

 _delay_ms(1);

}

 

int main()

{

  DDRC=0xff; // FND 출력

  DDRD=0b11110000; // TN 출력(7~4), 카운터,리셋 입력(3,2) 

   

  GICR = 0b01000000;

  MCUCR = 0x00;

  SREG = 0x80; 

  

   i = eeget(0x40);

     

  while(1)

 {  

  display();

  fnd_on_0();

  save(); 

 }

}

 

void display()

{

  buff4 =i/1000;

  buff3 =i%1000/100;

  buff2 =i%100/10;

  buff1 =i%10;

}

 

 

void fnd_on_0()

   

 if(i>=1000){

    PORTD=0x10; PORTC=fnd[buff4]; _delay_ms(1); PORTC=0xff;

    PORTD=0x20; PORTC=fnd[buff3]; _delay_ms(1); PORTC=0xff;

    PORTD=0x40; PORTC=fnd[buff2]; _delay_ms(1); PORTC=0xff;

    PORTD=0x80; PORTC=fnd[buff1]; _delay_ms(1); PORTC=0xff;

  }

  else if(i>=100){

    PORTD=0x20; PORTC=fnd[buff3]; _delay_us(1333); PORTC=0xff;

    PORTD=0x40; PORTC=fnd[buff2]; _delay_us(1333); PORTC=0xff;

    PORTD=0x80; PORTC=fnd[buff1]; _delay_us(1333); PORTC=0xff;

  }

  else if(i>=10){

    PORTD=0x40; PORTC=fnd[buff2]; _delay_ms(2); PORTC=0xff;

    PORTD=0x80; PORTC=fnd[buff1]; _delay_ms(2); PORTC=0xff;

  }

  else{

    PORTD=0x80; PORTC=fnd[buff1]; _delay_ms(4); PORTC=0xff;

  }

 

}

 

void save()

{

   if(!(PIND & 0b00001000))

{

        eeput(0x40,i);

          _delay_ms(10);  

     }

}

 

void eeput(unsigned int addr, unsigned int data)

{

 while(EECR & 0x02);

 EEAR = addr; 

 EEDR = data;

 EECR |= (1<<EEMWE); 

 EECR |= (1<<EEWE);

 

unsigned char eeget(unsigned int addr)

 

{

 while(EECR & 0x02);

 EEAR = addr;

 EECR |= (1<<EERE);

 

 return EEDR;

}


  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 12

조회수 41,441

master님의 댓글

master 작성일

eeprom 헤더파일 추가해서 함수를 사용하세요
https://studymake.tistory.com/304

코드비젼 경우에는 내부 SRAM 데이터 사용하는 것처럼 아주 편합니다.

총체적난국님의 댓글

총체적난국 작성일

EEPROM에 저장된 값을 FND에 표현하려면 추가적인 변환 과정(ex. 진수변환)이 필요한지 궁금해서 댓글 남깁니다.
FND에 표현되는 숫자는 10진수인데 EEPROM에 저장되어 있는 값은 10진수가 아니니 이 값을 변환하는 과정이 필요할 것으로 생각되는데 만약 필요하다면 어떤 과정을 거쳐야하는지 안내 부탁 드립니다.

master님의 댓글

master 작성일

char fnd_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //캐소드
char fnd_table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //애노드
일반적으로 10진수를 사용하지만 16진수로도 표시 가능합니다.

master님의 댓글

master 작성일

2바이트 크기의 카운터 (0~9999)값을 10진수로 FND에 표시하는 예제는 어렵지 않게 찾을 수 있을겁니다.
n/1000; // 천의자리
n/100%10; // 백의자리
n/10%10; // 10의자리
n%10; // 1의자리

총체적난국님의 댓글

총체적난국 작성일

eeprom에 저장되는 데이터의 형식이 16진수라는 의미신가요? eeprom에 저장한 i 값을 다시 fnd로  표시하기 위해 16진수 -> 10진수의 변환이 필요한지요..

master님의 댓글

master 댓글의 댓글 작성일

eeprom이든 sram이든 flash든 메모리에 저장되는 것은 각각의 비트 값이 0,1이고
이 것을 2진으로 표현하든, 10진으로 표현하든, 16진으로 표현하는 것은 인간이 필요에 의해서 선택할 뿐입니다.
FND는 10진 또는 16진으로 표현(출력)할 수 있습니다.
저야 16진을 봐도 10진수 처럼 이해가 가지만, 본인이 16진수에 익숙하지 않다면 10진수를 사용하세요

총체적난국님의 댓글

총체적난국 작성일

답변 감사합니다. 하나만 더 여쭤볼게요.
제가 어디서 본 코드인데 어떠한 값 i에 예를 들어 hi = i % 0xff / lo = i / 0xff라는 두 수식을 넣은 것을 봤는데 이게 혹시 어떤 의미인지 알 수 있을까요? 0xff를 %와 / 처리한 것이 어떤 의민지 궁금합니다..

master님의 댓글

master 댓글의 댓글 작성일

hi = i % 0xff / lo = i / 0xff
i는 unsigned int 형이고, hi,lo는 byte(or unsigned char) 형입니다.
high byte 와 low byte로 나누는 연산입니다.

총체적난국님의 댓글

총체적난국 작성일

그리고 마스터님이 알려주신 eeprom 헤더파일을 이용하지 않고 io.h 헤더파일을 이용해 코드를 짜는 것도 가능하다고 해서 짜본 것인데 제가 올려드린 코드에 문제점이 있는지도 가능하시면 확인 부탁 드립니다.

master님의 댓글

master 댓글의 댓글 작성일

헤더파일을 이용한 코드로 잘 동작하도록 작성한 후에
해당 코드를 분석해서 이해하고
그 후에 헤더파일 없이 작성하는 것이 순서입니다.
물론 이 과정에는 우선적으로 헤더파일을 분석해야겠죠

헤더파일 분석과정 없이 작성한 코드가 제대로 동작하는지 아닌지 체크 해달라고요?
무슨 의미가 있을까요?
(구지 의미를 찾아본다면 숙제를 대신 해달라는.. 그정도로 생각됩니다.)

총체적난국님의 댓글

총체적난국 댓글의 댓글 작성일

eeprom.h 헤더파일을 적용해보려니 어떻게 변경해야하는지 잘 모르겠습니다..
void eeput(unsigned int addr, unsigned int data)를 eeprom.h의 void eeprom_write_byte (uint8_t *__p, uint8_t __value)로
unsigned char eeget(unsigned int addr)을  uint8_t eeprom_read_byte (const uint8_t *__p) __ATTR_PURE__로 어떻게 바꾸는지 알려주심 감사하겠습니다..

master님의 댓글

master 작성일

코드비전을 사용하면 헤더파일이 필요없이 정말로 간단하게 작성이 가능합니다.
AVR용 컴파일러는 몇가지가 많이 사용되는데
유일하게 코드비전만 임베디드용 컴파일러 입니다.(다른 컴파일러 들은 모두 PC용을 개조해서 AVR용으로 만든 정도)
여러가지 장점이 있죠

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 10607
공지 사이트 이용 안내댓글[25] master 17-10-29 30567
질문 아두이노 while문 탈출 질문 yhj2644 22-07-01 31
답변 답변글 답변 : 아두이노 while문 탈출 질문댓글[6] 새글 master 22-07-01 39
질문 ESP32-C3 리튬폴리머 ADC 전압 체크 관련 문의 (2)댓글[3] 이미지 cansad 22-06-30 47
질문 ESP32-C3 리튬폴리머 ADC 전압 체크 관련 문의댓글[3] cansad 22-06-30 69
질문 빵판없이 디스플레이 넣을 수 있을까요?댓글[2] 이미지첨부파일 오소로롯 22-06-29 55
질문 라즈베리파이4 신형 선택문제댓글[1] maximum 22-06-26 131
질문 음전압 ADC댓글[2] 412904 22-06-26 140
질문 아두이노 센서값 출력 질문입니다!댓글[1] 아궁2 22-06-24 185
질문 ATmega128, ATmega28 RS232통신 이미지첨부파일 Moon4201 22-06-24 211
답변 답변글 답변 : ATmega128, ATmega28 RS232통신댓글[1] master 22-06-25 198
질문 서보모터, 온습도센서 코드 질문댓글[2] 첨부파일 kshdlfaldfh 22-06-22 146
답변 답변글 답변 : 서보모터, 온습도센서 코드 질문댓글[15] master 22-06-22 399
질문 steppermulti5 질문 응애 22-06-21 124
답변 답변글 답변 : steppermulti5 질문댓글[1] master 22-06-22 105
질문 atmega128 avr usart 질문 snoflak 22-06-21 171
답변 답변글 답변 : atmega128 avr usart 질문댓글[5] master 22-06-21 320
질문 사용자 정의 함수 변환 하는 방법댓글[2] 이미지첨부파일 da0800 22-06-21 140
질문 atmega128댓글[1] 이미지 양의노래 22-06-20 197
질문 아두이노 동시동작 재질문댓글[9] 이미지첨부파일 죠르디 22-06-20 333
질문 초음파센서로 dc모터 제어하기댓글[1] 첨부파일 난쟁2 22-06-20 195
질문 아두이노 동시동작댓글[7] 죠르디 22-06-19 209
질문 ATMEGA128 UART,FND 연동 질문 JMOD 22-06-19 204
답변 답변글 답변 : ATMEGA128 UART,FND 연동 질문댓글[1] master 22-06-20 118
질문 atmeg128 질문이요댓글[1] 이미지첨부파일 공대생er 22-06-18 163
질문 atmega128 초음파 센서로 신호등 시간초 늘리기 서동씨 22-06-18 165
답변 답변글 답변 : atmega128 초음파 센서로 신호등 시간초 늘리기댓글[1] master 22-06-18 204
질문 atmega128댓글[2] 망경이 22-06-18 221
질문 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다. (온도에따른 자동 수동 선풍기 )댓글[1] 따랑해영 22-06-18 343
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기