질문게시판 > 답변 : 답변 : atmega128 내부 EEPROM 사용하기

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

답변 : 답변 : atmega128 내부 EEPROM 사용하기

페이지 정보

작성자 master 작성일20-01-30 15:44 조회15,463회 댓글5건

본문

 

// DateTime : 2020-01-30 오후 3:46:06
// by Ok-Hyun Park
//
#define  F_CPU 16000000L
#include <avr/io.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
//
#define add_A 20
#define add_B 50
#define add_C 80
//
int      count,d=0;
uint16_t a,b,c;
//
void disp(){
  char s[20];
  sprintf(s,"%2d.%d  %2d.%d  %2d.%d",a/10,a%10,b/10,b%10,c/10,c%10);
  LCD_goto_XY(0,0); LCD_write_string(" T1    T2    T3 ");
  LCD_goto_XY(1,0); LCD_write_string(s);
}
//
ISR(TIMER0_OVF_vect){
  static int sec=99;
  if((PINE&8)==0){ count=0sec=0; }
  //
  if(++count>=100){ count=0if(sec<a+b+c)sec++; }
  //
  if(d){
    if     (sec<a    ){ PORTB=1; }
    else if(sec<a+b  ){ PORTB=2; }
    else if(sec<a+b+c){ PORTB=4; }
    else              { PORTB=0; }
  }
}
//
int main(){
  LCD_init();
  DDRF=0x01;  DDRB=0x07;
  a=eeprom_read_word((uint16_t*)20);
  b=eeprom_read_word((uint16_t*)50);
  c=eeprom_read_word((uint16_t*)80);
  disp();
  TCCR0=0x04TIMSK|=(1<<TOIE0); //분주비 64 설정
  sei();
  while(1){
    if((PINE&1)==0){ if(++d>=4)d=0disp(); _delay_ms(100); }
    //
    if(d==1){
      if( (PINE&2)==0    ){ a+=5eeprom_update_word((uint16_t*)add_A,a); if(sec>=a+b+c)sec+=5; }
      if(((PINE&4)==0)&&a){ a-=5eeprom_update_word((uint16_t*)add_A,a); }
    }
    if(d==2){
      if( (PINE&2)==0    ){ b+=5eeprom_update_word((uint16_t*)add_B,b); if(sec>=a+b+c)sec+=5; }
      if(((PINE&4)==0)&&b){ b-=5eeprom_update_word((uint16_t*)add_B,b); }
    }
    if(d==3){
      if( (PINE&2)==0    ){ c+=5eeprom_update_word((uint16_t*)add_C,c); if(sec>=a+b+c)sec+=5; }
      if(((PINE&4)==0)&&c){ c-=5eeprom_update_word((uint16_t*)add_C,c); }
    }
    //
    if(d)disp();
    //
    _delay_ms(10);
  }
}

 

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

댓글 : 5

조회수 : 15,463

전자학습자님의 댓글

전자학습자 작성일

안녕하세요. 깔끔하게 정리해주셔서 감사드립니다.
어떤식으로 바꾸셨는지 적용해보고 모르는건 검색해보고해서 나름대로
이것저것 또 바꿔보고했습니다. 수정하다가 궁금한것이 생겨서 질문드립니다.
맨처음 뜬 에러는 main함수안에 sec 변수가 선언이안되어이어서 에러가나서
main안에 if(sec>=a+b+c)sec+=5; 는 다 삭제하고 if( ((PINE&2)==0)&&a<=60 )으로해서
타임 하나당 60초를 넘기지못하게하고 static int sec=200 로 넉넉하게 선언해주었습니다.
질문1. if(((PINE&4)==0)&&a>0) 을 if(((PINE&4)==0)&&a) 로 수정하신것은 a가 1이상? 이면 'H'로 인식해서
결국 a>0과 같기때문에 수정해주신건가요?
질문2.  sprintf(s,"%2d.%d  %2d.%d  %2d.%d",a/10,a%10,b/10,b%10,c/10,c%10);
에서 %2d는 2자리수 표시하라는 명령인거같은데 실제로 돌려보면
6400이 넘는 숫자가 나옵니다. 최초에 숫자가 저장되는 위치에 0값이아닌?
64xx.x 이었는데 정확한숫자는 조작하면서 바뀌어버려서 확인을못했습니다.
저 상태에서 버튼으로 감소하거나 증가하면 6200.0 이런식으로 바꾼뒤
전원을 껏다키면 6200으로 나옵니다. 저장하기전 최초에 0으로 만들려면 어떻게 선언해야할까요?

master님의 댓글

master 작성일

if(a){}
조건식에 변수만 있는 경우
a==0 이면 거짓 (이 정도는 아실테고)
0 을 제외한 모든 수는 참 입니다.(음수도 참)
음수든 양수든 값이 있다 없다로 생각하면 됩니다.
//
if(a>0)
여기서 a가 음수도 나온다면
if(a)
이 문장을 사용하지 못합니다만
a가 양수만 사용한다면 if(a>0) 와 if(a) 는 동일합니다.

master님의 댓글

master 작성일

uint16_t a,b,c;
데이터형을 16비트로 선언하지 않고 8비트로 선언한 것은 아닐까요?
아니면 float 실수형으로 선언 했든지..

master님의 댓글

master 작성일

%2d
0~99는 2자리를 확보하면서 출력, 3자리 이상이면 3자리 이상의 숫자를 그대로 출력함
(1자리일 때의 왼쪽) 여백은 ' '(0x20, 스페이스)를 출력함
//
%02d
0~99는 2자리를 확보하면서 출력,  3자리 이상이면 3자리 이상의 숫자를 그대로 출력함
(1자리일 때의 왼쪽) 여백은 '0'(0x30)을 출력함

전자학습자님의 댓글

전자학습자 댓글의 댓글작성일

답변감사드립니다 ^^

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[25] master  17-10-29
질문 PIC 블루투스 연결 댓글[18] 픽공부 새글 10:28
질문 PIC18F452 블루투스 연결 댓글[4] 마이컴 새글 22-08-08
질문 아두이노 코드 해석을 못하겠습니다... 댓글[2] 김가헌 새글 22-08-08
질문 아두이노 코드를 avr로 변환해 주세요 ...ㅠ 댓글[3] 옹냥냥 새글 22-08-08
질문 아두이노 녹음-스피커모듈 관련 질문있습니다 ㅠㅠ 댓글[2] 방귀뿡뿡 새글 22-08-08
질문 Serial EEPROM 실수값 저장.. 댓글[2] 첨부파일광이  22-08-07
질문 STM32 Live Expression 값들이 깜빡이는… 댓글[3] 둠둠  22-08-05
질문 아두이노 ESP32 wifi module 댓글[1] Yoon  22-08-03
질문 atmega128과 dht11, lcd를 연결했는데 0… 댓글[1] 고양이33  22-08-02
질문 ATMEGA 128 코드를 합치려고 하는데 어렵네요 댓글[2] 고양이33  22-08-02
질문 서보모터 제어에 대해 질문있습니다. 댓글[2] 첨부파일뉴비에오  22-07-30
질문 적외선 통신 알려주실분있나요 ㅠㅠ 댓글[1] hkjsj10  22-07-30
질문 아두이노 관련 궁금합니다. 댓글[1] 뱝뱝  22-07-28
질문 아두이노 우노 MCP4725 댓글[3] opqr  22-07-27
질문 레오나르도 인체감지센서 알림 안옴 면지지  22-07-24
답변 답변 : 레오나르도 인체감지센서 알림 안옴 master  22-07-25
질문 Uno에서 엔코더값 놓치는 이유가 뭘까요... 댓글[3] MAKTUB  22-07-24
질문 아두이노 압력센서 연동 질문 댓글[4] dbice  22-07-23
질문 아두이노 버튼 누르기 문의 댓글[1] 김형근  22-07-23
질문 HM10 다중페어링 댓글[1] ㅎㅋㅎㅋㅎ  22-07-22
질문 모터드라이브 선정 댓글[6] 조숩인  22-07-22
질문 ad9850 sin파 2 댓글[6] 첨부파일opqr  22-07-21
질문 ad9850 sin파 합성 댓글[7] 첨부파일opqr  22-07-20
질문 특정값이 n초이상,n번 이상 연속될경우를 감지하는 함수… 댓글[4] 우수  22-07-17
질문 delay를 millis함수로 바꾸는데 질문있습니다. 댓글[12] 첨부파일뉴비에오  22-07-16
질문 피에조 부저로 맬로디 만들기인대 코딩 까지 했는데 아두… 댓글[2] 첨부파일mingu123  22-07-15
질문 블루투스와 안드로이드 연동관련 질문입니다! ㅎㅇㅎㅇ  22-07-14
질문 아두이노간 블루투스 통신에 대해서 질문있습니다 첨부파일뉴비에오  22-07-13
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전