질문게시판 > 답변 : 답변 : avreeprom 질문입니다

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

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


BASIC4MCU | 질문게시판 | 답변 : 답변 : avreeprom 질문입니다

페이지 정보

작성자 master 작성일2018-10-17 15:16 조회36,041회 댓글15건

본문

	

 

// DateTime : 2018-10-17 오후 3:20:54
// by Ok-Hyun Park
//
// 수정 사항  2016.12.31 TIMER INTERR 0  Routine
// 080709: 입력 접점이 붙었을때부터 10초 딜레이
//
#include <mega8.h>
#include <delay.h>
//
//#define LED_AC           PORTC.0 // 교류입력에 대한 출력 포트
#define LED_M1_ERROR     PORTC.1
#define LED_EQUALITY     PORTC.2
#define LED_NO_EQUALITY  PORTC.3
#define OUT_M1_PLAY      PORTC.4
#define OUT_R1_PLAY      PORTC.5
#define IN_M2_PLAY       PINB.1
#define IN_M2_FAIL       PINB.0
#define IN_AC            PIND.7 // 교류입력연결 확인 변수
#define IN_EQUALITY      PIND.6
#define IN_AUTO          PIND.5
#define IN_PLAY          PINB.7
#define IN_M1_FAIL       PINB.6
//
#define ON               0 //변수 값 지정
#define OFF              1
#define RUN              1
#define STOP             0
#define FAIL             0
#define normal           1
//
eeprom   char EE_r,EE_m;
         char r,m;
unsigned char r1_play_Cnt=0;
//==========================================================
// 타이머 1 CTC 비교매치 인터럽트 함수
//==========================================================
interrupt [TIM1_COMPAvoid timer1_compa_isr(void){ // 100ms
  flag=1;
  //
  if(OUT_R1_PLAY==OFF){
    if(IN_M2_PLAY==STOP)r1_play_Cnt++;
    else                r1_play_Cnt=0;
  }
}
//
void main(void){ ///풀업저항 사용
  DDRC=0xff;
  TCCR1B=0x0BOCR1A=12499TIMSK=0x10TCNT1=12498// 100ms
  //==========================================================
  #pragma optsize-
  WDTCR=0b00011000WDTCR=0b00001111//WATCHDOG setting // WDTCR=0x1F; WDTCR=0x0F;
  #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
  #endif
  //==========================================================
  r=EE_rif(r>1){ r=0EE_r=r; } OUT_R1_PLAY=r;
  m=EE_mif(m>1){ m=0EE_m=m; } OUT_M1_PLAY=m;
  //
  SREG|=0x80;
  while(1){
    #asm("wdr")
    //
    if(flag){ flag=0;
      LED_M1_ERROR=~IN_M1_FAIL;
      //
      if(IN_EQUALITY){ LED_EQUALITY=1LED_NO_EQUALITY=0; } // 균등시 1 부동시 0
      else           { LED_EQUALITY=0LED_NO_EQUALITY=1; }
      //
      if(OUT_R1_PLAY==OFF){ LED_M1_ERROR=0LED_EQUALITY=0LED_NO_EQUALITY=0; }
      //----------------------------------------------------------------------------
      if(IN_PLAY==STOP){      // 작동 정지시
        if(eeprom_save_on==1){ eeprom_save_on=0;
          if(r!=OUT_R1_PLAY)EE_r=r=OUT_R1_PLAY;
          if(m!=OUT_M1_PLAY)EE_m=m=OUT_M1_PLAY;
        }
        OUT_R1_PLAY=OFFOUT_M1_PLAY=OFF;
      }
      //----------------------------------------------------------------------------
      else{                  // 작동중
        if(IN_AUTO==0){      // 오토모드
          eeprom_save_on=1;
          if(IN_M1_FAIL==FAIL)OUT_M1_PLAY=OFF;
          else                OUT_M1_PLAY=ON;
          //-----------------------------------------------------------// 수정 한부분  2016.12.31
          if(OUT_R1_PLAY==OFF){
            if((r1_play_Cnt>=7)&&(IN_M2_PLAY==STOP)){ OUT_R1_PLAY=ONr1_play_Cnt=0; } // 7=700ms
            else                                    { OUT_R1_PLAY=OFF;               }
          }
          //-----------------------------------------------------------
          if(IN_M2_FAIL==normal){ OUT_R1_PLAY=OFF; }
        }
        elseOUT_R1_PLAY=ONOUT_M1_PLAY=ON; } // 오토모드 아닐 때
      }
    }
  }
}

 

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

댓글 15

조회수 36,041

율이님의 댓글

율이 작성일

감사합니다. 혹수 추가적으로 간단한 주석으로 이해하는데 힌트를 주실수 없을까요???
제가 궁금했던건 답이 아닌 소스에 대한 내용을 통해서 iar로 직접 스스로 변환해보려고 했었습니다.

master님의 댓글

master 작성일

사이트 왼쪽 메뉴 중 아래에서 12번째에 보면 <AVR 따라하기>가 있습니다.
클릭하면 <2015년 강좌>가 있는데요
8페이지
63 2015년 강좌 001 - 데이터형  이미지
이 강좌글부터 차근차근 공부해보세요

쉬운 예제를 많이 공부해야지 포기하지 않고 초보자를 벗어날 수 있습니다.

율이님의 댓글

율이 댓글의 댓글 작성일

혹시 죄송하지만 위의 프로그램 순서도를 받을 수 있겠습니까??

master님의 댓글

master 댓글의 댓글 작성일

프로그램 순서도는 본인이 그리셔야지요..

율이님의 댓글

율이 댓글의 댓글 작성일

r=EE_r; if(r>1){ r=0; EE_r=r; } OUT_R1_PLAY=r;
  m=EE_m; if(m>1){ m=0; EE_m=m; } OUT_M1_PLAY=m;
부분에 대한 저장값을 통하여 두개의 보드가 어떻게 서로 확인되어지는지가 모르겠습니다. eeprom은 그냥 초기에 초기화시키는 것만 조심하란 말밖에 없어서 이떻게 구동되는지를 모르겠습니다

master님의 댓글

master 댓글의 댓글 작성일

두개의 보드가 어떻게 서로 확인되어지는지가 모르겠습니다. <-- 보드가 두개인가요? 무슨 뜻인지 모르겠습니다.

master님의 댓글

master 댓글의 댓글 작성일

eeprom에 저장하는 이유는
출력중이라면 (정전등의 이유로) 전원을 껏다 키더라도 출력을 계속 하겠다는 뜻이겠죠

율이님의 댓글

율이 댓글의 댓글 작성일

좀더 자세히 설명하겠습니다. 제가 설명이 부족했던거 같습니다.
일단 두개의 파워서플라이가 작동을 하는데 A,B라고 칭하면
일단 각각에 파워서플라이에는 보드가 하나씩 내장되어 있고
출력하던 A가 이상이 생겨서 파워가 약해지거나 하면 B서플라이가 대신 작동되는 소스라고 전해 들었습니다.

master님의 댓글

master 댓글의 댓글 작성일

저에게 설명을 들으시려면 회로도부터 첨부하셔야합니다.
//
소스코드는 몇라인 안되고
c문법적으로 어려운 것은 없으며
장비의 기능을 구현한 것이 대부분입니다.
장비 기능은 알고 계실테고, c문법이 부족하면 c언어만 조금 공부하면 되겠죠?
남에게 물어볼 내용은 아닌 것 같습니다.

율이님의 댓글

율이 댓글의 댓글 작성일

문법적으로는 거의다 이해했습니다.
제가 궁금했던 것은 A파워서플라이에서 IN_M1_FAIL값이 들어와서 출력으로 내보내주는데 반대쪽 B서플라이가 작동을 하게 되는데 어떻게 값이 전달 되는지 궁금했습니다 많은 답변 감사합니다

master님의 댓글

master 댓글의 댓글 작성일

  LED_M1_ERROR=~IN_M1_FAIL;
입력 받아서 LED 표시하고
  if(IN_M1_FAIL==FAIL)OUT_M1_PLAY=OFF;
  else                OUT_M1_PLAY=ON;
OUT_M1_PLAY 출력
//
문법을 다 이해 했는데 이렇게 쉬운 내용이 분석 안되던가요?
//
  if(IN_M1_FAIL==FAIL)OUT_M1_PLAY=OFF;
  else                OUT_M1_PLAY=ON;
이 두 라인도 한라인으로 줄일 수 있습니다.
  OUT_M1_PLAY=~IN_M1_FAIL;

율이님의 댓글

율이 댓글의 댓글 작성일

TCCR1B=0x0B; OCR1A=12499; TIMSK=0x10; TCNT1=12498;        // 100ms
  //==========================================================
  #pragma optsize-
  WDTCR=0b00011000; WDTCR=0b00001111; //WATCHDOG setting // WDTCR=0x1F; WDTCR=0x0F;
  #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
  #endif

이부분에대한 적용하는 값이 달라진것도 궁금합니다.
인터럽트를 이용하여 원래 1ms를 만들기위해서 계산하여 131을 구한건데 어떻게 변경하신건지 궁금합니다.

master님의 댓글

master 댓글의 댓글 작성일

16비트 타이머를 사용해서 100ms 주기로 바꿨습니다.
16비트 타이머는 (16MHz 클럭에서) 최대 4초까지 가능합니다.
질문 보드는 8MHz를 사용하는 것 같으니 최대 8초까지 가능하겠죠

율이님의 댓글

율이 댓글의 댓글 작성일

위의 코딩에서 혹시 OUT_R1_PLAY값이 초기에 어떻게 되는지 알수있을까요??

master님의 댓글

master 댓글의 댓글 작성일

전원 키지마자 0V
 r=EE_r; if(r>1){ r=0; EE_r=r; } OUT_R1_PLAY=r;
잠시 후 EEPROM에서 읽어서 출력 합니다.

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 601
공지 사이트 이용 안내댓글[8] master 17-10-29 7640
공지 [무료 공개] 소스코드 하이라이트 v2.0 beta [2013.02.07]댓글[1] 이미지첨부파일 master 18-01-23 2855
질문 아두이노 질문입니다!댓글[2] 이미지새글 M4E2A8 19-08-19 19
질문 atmega128a 카운터/타이머 출력비교 질문이요댓글[1] 초짜 19-08-17 33
질문 모터드라이버 병렬 연결댓글[3] 박준2 19-08-16 46
질문 서로 다른전원(5v 12v) 제어방법 질문 master 19-08-16 18
질문 모터드라이버 관련 질문 드립니다.댓글[4] 박준이 19-08-15 58
질문 Atmega128, 초음파센서 ,부저 gksl 19-08-14 29
답변 답변글 답변 : Atmega128, 초음파센서 ,부저댓글[1] master 19-08-15 39
질문 led 전력소모에 관하여,,,댓글[11] 슬레a 19-08-14 323
질문 알고리즘 문의댓글[1] 벅바 19-08-13 31
질문 블루투스가 한번 작동하고 그 다음부터 작동을 하지 않습니다.댓글[1] 아야어여 19-08-13 32
질문 아두이노 코딩 질문입니다 너무 급해요 ㅠㅠ댓글[3] 전민결 19-08-12 70
질문 코딩 작성좀 부탁드립니다. 너무 급합니다 ㅠㅠ댓글[1] 아두이노보초 19-08-10 74
질문 stm32f1 계열에서 USB로 스마트폰 연결 방법(CDC)댓글[2] 에르테르 19-08-08 53
질문 코딩을 합치고 싶습니다.. 알려주세요 19-08-08 44
답변 답변글 답변 : 코딩을 합치고 싶습니다.. master 19-08-08 44
질문 금속센서를 이용한 서보모터 돌리기댓글[1] 후우 19-08-07 58
질문 아두이노로 빛 파장 계산하기 이미지 master 19-08-07 40
질문 ISP 질문이요댓글[2] 초짜 19-08-06 47
질문 atmega128a 다시 질문이요~댓글[4] 이미지첨부파일 초짜 19-08-05 118
질문 atmega128a SCK 질문이요댓글[1] 초짜 19-08-04 56
답변 답변글 답변 : atmega128a SCK 질문이요 master 19-08-04 40
질문 A4988 모터드라이버 발열에 대해...댓글[1] 이미지첨부파일 눈티이 19-07-30 73
질문 아두이노 코딩 질문댓글[1] 119min 19-07-27 86
질문 아두이노 코딩질문 붕붕 19-07-26 69
답변 답변글 답변 : 아두이노 코딩질문댓글[6] master 19-07-26 209
질문 적외선 센서 송수신 코딩 알려주세요댓글[3] 이미지첨부파일 뱀비 19-07-22 139
질문 BLDC 모터 정역회전 알고리즘대로 코딩 이미지첨부파일 CIE18 19-07-21 83
게시물 검색

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