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

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

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


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

페이지 정보

작성자 총체적난국 작성일2021-07-14 18:21 조회109회 댓글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

조회수 109

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 3586
공지 사이트 이용 안내댓글[17] master 17-10-29 19161
질문 아두이노 시리얼통신에 관하여댓글[1] 이미지새글첨부파일 뚤밥 21-08-03 14
질문 아두이노 무게센서와 스텝모터댓글[2] 새글 dnener 21-08-02 28
질문 라즈베리파이 스텝모터를 사용한 자동 블라인드댓글[1] 새글 glaemfdj 21-08-02 17
질문 아두이노 지문인식 질문드립니다.댓글[2] 아두이노111 21-08-01 26
질문 아두이노 코드 질문드립니다.댓글[1] 아두이노111 21-08-01 30
질문 mm단위로 빠르게 제어가능한 모터를 만들고싶습니다댓글[4] includj 21-07-28 79
질문 위치센서로 쓸만한게 있을까요댓글[1] 조도센서 21-07-26 80
질문 *.s19 파일을 c언어 파일로 바꿀수 있나요?댓글[2] 화니 21-07-26 83
질문 코드비전 외부인터럽트댓글[8] HOTDOKYU 21-07-22 340
질문 라즈베리파이 회로 연결이 제대로 되었는지 확인 부탁드립니다.댓글[3] 이미지 qo11 21-07-22 222
질문 FT232BL USB to TTL 시리얼 모듈 업로드 문제댓글[3] 김국진 21-07-21 103
질문 아두이노 led 제어 코딩질문입니다댓글[8] 무야더싱 21-07-20 343
질문 안녕하세요댓글[3] HOTDOKYU 21-07-19 121
질문 아두이노 메가 다중시리얼통신 질문입니다댓글[2] 뚤밥 21-07-18 113
질문 atmega128 도트매트릭스 질문입니다댓글[1] ahn1 21-07-16 127
질문 아두이노 mp3모듈 관련 질문입니다!댓글[4] 이느님 21-07-15 134
질문 avr 블루투스 데이터 송신하는 코드댓글[8] 초보자s 21-07-15 120
질문 avr에서 Am2322 i2c address 설정 문의입니다.댓글[4] 첨부파일 공부중 21-07-15 103
현재글 EEPROM 저장 관련 문의댓글[12] 총체적난국 21-07-14 110
질문 스텝 모터 드라이버 선정댓글[3] 저겯 21-07-14 106
질문 프로그램 오류 문의합니다.댓글[1] 오늘도 21-07-10 87
질문 전원 꺼질 때 EEPROM에 값을 저장하고 싶습니다.댓글[1] 총체적난국 21-07-09 100
질문 [아두이노] MAX 30102를 사용해 측정된 심박수를 매핑하고 싶습니다.댓글[1] 뭉글적 21-07-09 103
질문 led모듈 제작의뢰 할려고 합니다댓글[1] 이미지첨부파일 올리브스타일 21-07-08 133
질문 ATmega128 에 HC-06 연결하기댓글[3] 이미지 초보자s 21-07-08 156
질문 IR,RF리모콘을 이용한 LED초 시간차 점등댓글[1] 이미지 럽디 21-07-06 100
질문 [아두이노] BPM 질문드립니다.댓글[7] 통김 21-07-05 234
질문 아두이노 외부에서 입력되는 펄스를 통해 시간구하기댓글[6] dnener 21-07-04 209
게시물 검색

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
모바일버전으로보기