질문게시판 > master님 정말감사합니다! 마지막 질문드릴께요 ㅠㅠ

TODAY922 TOTAL273,869
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


▼ BASIC4MCU 후원업체 최신 정보 ▼

▲ BASIC4MCU 후원업체 최신 정보 ▲

BASIC4MCU | 질문게시판 | master님 정말감사합니다! 마지막 질문드릴께요 ㅠㅠ

페이지 정보

작성자 이민호 작성일2018-09-07 17:13 조회4,078회 댓글16건

본문

	

// 

 

#include <iom128.h>

 

#include <ina90.h>

 

// 

 

unsigned char fnd[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; 

 

char flag=0,run=0,mode=0,buf[2]; 

 

int  cnt=0;

 

//

 

#pragma  vector=TIMER0_OVF_vect 

 

__interrupt void TIMER0_OVF_Isr(void){ // 1ms 

 

  static char fnd_cnt=0; 

 

  TCNT0=131; 

 

  PORTC&=~0x80; PORTD=0x7F; // 세그먼트 OFF

 

  if(run){

 

    switch(fnd_cnt){ 

 

      case 0: PORTD=fnd[buf[0]]; PORTD|=0x80; break; 

 

      case 1: PORTD=fnd[buf[1]]; PORTC|=0x80; break; 

 

    }

 

    if(++fnd_cnt>1)fnd_cnt=0; 

 

    //

 

    if(mode==0){ if(++cnt>15000)cnt=0; } // 30 // 15sec

 

    if(mode==1){ if(++cnt>10000)cnt=0; } // 60 // 10sec

 

    if(mode==2){ if(++cnt> 5000)cnt=0; } // 90 // 5sec

 

    if(cnt==0){

 

      if(PORTC&1){ PORTC&=~1; PORTC|=2; }

 

      else       { PORTC&=~2; PORTC|=1; }

 

    }

 

  } 

 

  else{ PORTC&=~3; }

 

 

// 

 

void main(){ 

 

  char n=30;

 

  DDRC=0x83; DDRD=0xFF; 

 

  TCCR0=4; TCNT0=131; TIMSK=1; //8000000/64/(256-131),1ms  

 

  __enable_interrupt(); 

 

  while(1){ 

 

    if(PINA&1)run=1;

 

    else      run=0; // PA0 // 토글스위치 // ON/OFF

 

    //

 

    if(PINA&2){

 

      if(flag==0){ flag=1; if(++mode<2)mode=0; cnt=0; } // PA1 // 푸쉬스위치

 

    }

 

    flag=0;

 

    //

 

    if(mode==0){ buf[0]=3; buf[1]=0; } // 30 // 15sec

 

    if(mode==1){ buf[0]=6; buf[1]=0; } // 60 // 10sec

 

    if(mode==2){ buf[0]=9; buf[1]=0; } // 90 // 5sec

 

  } 

 

}

 

보내주신대로 코딩했는데 위에 회로랑 맞는지 한번만 확인해주실수 있나요?ㅠㅠ

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

댓글 16

조회수 4,078

이민호님의 댓글

이민호 작성일

위에 회로는 말씀해주신대로 변경한 회로입니다!

master님의 댓글

master 작성일

스위치 풀다운 저항 사용하라고 했더니 풀업저항 사용하는 형식으로 바꿨군요?

    if(PINA&1==0)run=1;
    if(PINA&2==0){
스위치 체크하는 문장 수정하세요

이민호님의 댓글

이민호 댓글의 댓글 작성일

감사합니다 근데 궁금한게 있습니다 결과에대한건데
Warning[Pe177]: variable "n" was declared but never referenced C:\Users\com1-1\Documents\asdk\ox.c 65
 
 418 bytes of CODE memory (+ 18 bytes shared)
  18 bytes of DATA memory (+  8 bytes shared)
 
Errors: none
Warnings: 1
 
Done. 0 error(s), 1 warning(s)
이렇게 뜨는데 괜찮은건가요?? 저도 warning은 신경안써도된다고 들어서 괜찮을거같은데 밑에뜨는 글을보면 main문으로 돌아가지않는다고 되있어서 궁금합니다 ㅠ

master님의 댓글

master 댓글의 댓글 작성일

변수 n을 선언만 하고 사용하지 않았다는 워닝입니다.
변수 선언 삭제하세요
//
인터럽트에서 사용하는 전역 변수는 volatile 형을 사용해야 합니다.
volatile unsigned char fnd[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
volatile char flag=0,run=0,mode=0,buf[2];
volatile int  cnt=0;

master님의 댓글

master 작성일

세그먼트 저항을 1K에서 330옴으로 변경하고
핀번호 맞추세요
PD0---seg A
PD1---seg B
PD2---seg C
PD3---seg D
PD4---seg E
PD5---seg F
PD6---seg G

PD7---10자리 common
PC7---1자리 common

이민호님의 댓글

이민호 댓글의 댓글 작성일

회로도 상에서 말씀이신가요??? 아니면 용접해서 연결할때를 말씀하시는 건가요??

master님의 댓글

master 댓글의 댓글 작성일

둘 다 하세요

이민호님의 댓글

이민호 댓글의 댓글 작성일

감사합니다 말씀해주신대로 코딩 수정해봤습니다
//

#include <iom128.h>

#include <ina90.h>

//

volatile unsigned char fnd[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

volatile char flag=0,run=0,mode=0,buf[2];

volatile int  cnt=0;

//

#pragma  vector=TIMER0_OVF_vect

__interrupt void TIMER0_OVF_Isr(void){ // 1ms

  static char fnd_cnt=0;

  TCNT0=131;

  PORTC&=~0x80; PORTD=0x7F; // 세그먼트 OFF

  if(run){

    switch(fnd_cnt){

      case 0: PORTD=fnd[buf[0]]; PORTD|=0x80; break;

      case 1: PORTD=fnd[buf[1]]; PORTC|=0x80; break;

    }

    if(++fnd_cnt>1)fnd_cnt=0;

    //

    if(mode==0){ if(++cnt>15000)cnt=0; } // 30 // 15sec

    if(mode==1){ if(++cnt>10000)cnt=0; } // 60 // 10sec

    if(mode==2){ if(++cnt> 5000)cnt=0; } // 90 // 5sec

    if(cnt==0){

      if(PORTC&1){ PORTC&=~1; PORTC|=2; }

      else      { PORTC&=~2; PORTC|=1; }

    }

  }

  else{ PORTC&=~3; }

}

//

void main(){


  DDRC=0x83; DDRD=0xFF;

  TCCR0=4; TCNT0=131; TIMSK=1; //8000000/64/(256-131),1ms 

  __enable_interrupt();

  while(1){

    if(PINA&1==0)run=1;

    else      run=0; // PA0 // 토글스위치 // ON/OFF

    //

    if(PINA&2==0){

      if(flag==0){ flag=1; if(++mode<2)mode=0; cnt=0; } // PA1 // 푸쉬스위치

    }

    flag=0;

    //

    if(mode==0){ buf[0]=3; buf[1]=0; } // 30 // 15sec

    if(mode==1){ buf[0]=6; buf[1]=0; } // 60 // 10sec

    if(mode==2){ buf[0]=9; buf[1]=0; } // 90 // 5sec

  }

}
맞는지 확인한번 해주실수있나요??

master님의 댓글

master 댓글의 댓글 작성일

체크는 직접 해보세요

이민호님의 댓글

이민호 댓글의 댓글 작성일

감사드립니다 직접연결후 프로그램 다운로드까지 했는데 실행이되지않습니다. 혹시 입력포트가 A0, A1 이맞는지랑 릴레이출력포트가 C0,C1이맞는지 궁금합니다. 추가적으로 입출력포트선언을 따로 안해주신것같은데 안해도 괜찮은건가요? 마지막으로 if(mode==0){ buf[0]=3; buf[1]=0; } // 30 // 15sec

    if(mode==1){ buf[0]=6; buf[1]=0; } // 60 // 10sec

    if(mode==2){ buf[0]=9; buf[1]=0; } // 90 // 5sec
이코드의 주석이 궁금합니다.ㅠㅠ 감사합니다!!

master님의 댓글

master 작성일

회로도에 스위치 A0,A1 릴레이 C0,C1으로 되어 있지 않나요?
입력포트는 리셋 디폴트 값이라서 안해도 됩니다.
모드에 따라서 30,60,90 넣어주는겁니다.

이민호님의 댓글

이민호 댓글의 댓글 작성일

네 회로도상으로 했습니다. 그런데 작동이 안됩니다..ㅠㅠ 배선도 10번이나 다시 해봤는데 혹시 스위치 쪽 저항이 너무 높은건가요?? A0포트 쪽 on/off스위치를 누르면 C0 릴레이 먼저 작동되서 15초 뒤에 꺼지고 C1 릴레이가 켜져야되는데 작동을 안합니다. 혹시 따로 아트메가 128보드에 5v를 넣어주는 코드선이 있는데 그것을 연결해서 그런건가요??? 배선이 반대로 되었을까봐 A1푸시 스위치도 눌러 봤는데 작동이 안됩니다..ㅠㅠ

master님의 댓글

master 댓글의 댓글 작성일

보드가 없는 사람은 디버깅을 할 수가 없습니다.
공부해서 직접 디버깅해보세요

이민호님의 댓글

이민호 댓글의 댓글 작성일

128보드를 이용해서 디버깅은 하였습니다

master님의 댓글

master 댓글의 댓글 작성일

디버깅은 회로와 소스코드에 문제가 없도록 수정하는 작업을 말합니다.

이민호님의 댓글

이민호 댓글의 댓글 작성일

어제 하루동안 열심히 공부를 했습니다. 부분부분 디버깅을 하려고하는데 처음이라서 제가 한동작씩 확인을 해봐야된다는것을 숙지하지 못했습니다.
그래서 그런데 5v릴레이 두개를 8Mhz를 이용해서 on/off 스위치(입력포트는 A0)를 이용하여 15초간간격으로 출력포트 C0릴레이를 먼저 켜주고 15초뒤에 출력포트C1릴레이를 켜주는 코드를 부탁드려도 될까요?

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.

ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017