질문게시판 > 토글스위치 질문드립니다.

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

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


BASIC4MCU | 질문게시판 | 토글스위치 질문드립니다.

페이지 정보

작성자 412904 작성일2022-06-11 16:29 조회578회 댓글3건

본문

	

ISR(TIMER1_OVF_vect)

{

if(timerFlag==1){

if(switchCnt==0){

PORTA=rotationCW;

ADCSRA|=(0x01<<ADSC);

c=ADCW;

OCR1A=(c>>1)+(c>>2)+(c>>5);

}

else if(switchCnt==1){

PORTA=rotationCCW;

ADCSRA|=(0x01<<ADSC);

c=ADCW;

OCR1A=(c>>1)+(c>>2)+(c>>5);

}

else;

}

else if(timerFlag==0){

OCR1A=0;

PORTA=rotationStop;

}

else;

}

 

ISR(INT0_vect){// toggle switch-related

if(timerFlag==0){

timerFlag=1;

}

else if(timerFlag==1){

timerFlag=0;

}

else;

}

 

ISR(INT1_vect){// toggle switch-related

if(PORTA==rotationStop){// only can change when the motor stopped

if(switchCnt==0){

switchCnt=1;

}

else if(switchCnt==1){

switchCnt=0;

}

else;

}

else;

}

 

 

 

 

 

 

 

 

// 모터를 돌리고 있는데요, 실행 후 처음에는 모터를 정지시켰다가 외부 인터럽트0에 스위치를 연결하여 동작시키고

외부 인터럽트 1번에는 모터가 정지했을 때만 방향 전환이 가능하도록 설정하고 있습니다. 그런데 스위치 동작이 됐다가, 안 됐다가 해서

스위치를 교체도 해봤는데 여전히 문제는 해결되지 않습니다. 혹시나 프로그래밍의 신뢰성(?)이 떨어져 그런 게 아닌가 싶어 이렇게 글 올립니다.

조언해 주시면 감사하겠습니다.

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

댓글 3

조회수 578

master님의 댓글

master 작성일

ISR(TIMER1_OVF_vect){
  if(timerFlag){
    c=ADCW; OCR1A=(c>>1)+(c>>2)+(c>>5); ADCSRA|=(0x01<<ADSC);
    if(switchCnt)PORTA=rotationCCW; else PORTA=rotationCW;
  }
  else{ OCR1A=0; PORTA=rotationStop; }
}
//
ISR(INT0_vect){
  timerFlag^=1;
}
//
ISR(INT1_vect){
  if(PORTA==rotationStop)switchCnt^=1;
}
질문 코드를 정리 한 겁니다.
쓸데없이 else를 남용하고 있군요
현재 문제는 채터링 때문에 오동작 하는 것인데요
스위치에 병렬로 0.1uF 커패시터를 연결하면 채터링이 현저하게 줄어듭니다.
코드 보완은 아래 댓글로 적어드리죠

master님의 댓글

master 작성일

채터링은 누를 때만 발생하는 것이 아니고, 뗄 때도 발생합니다.
누를 때와 뗄 때 발생하는 채터링을 방지하기 위해서는
핀체인지 인터럽트를 사용하는 것이 좋습니다.
핀체인지 인터럽트는 INT4~INT7 에만 있습니다.
따라서 인터럽트는 INT4와 INT5로 변경하세요(핀 연결도 PE4,PE5로)
EICRB=0x00; LOW 레벨, EICRB=0xAA; 하강엣지, EICRB=0xFF; 상승엣지, EICRB=0x55; 핀체인지
아래처럼 인터럽트 설정을 변경합니다.
EICRB=0x55; EIFR=0xFF; EIMSK=0x30; // INT4,INT5 핀체인지 인터럽트 설정
인터럽트 함수는 아래처럼 변경하세요
ISR(TIMER1_OVF_vect){
  if(timerFlag){
    c=ADCW; OCR1A=(c>>1)+(c>>2)+(c>>5); ADCSRA|=(0x01<<ADSC);
    if(switchCnt)PORTA=rotationCCW; else PORTA=rotationCW;
  }
  else{ OCR1A=0; PORTA=rotationStop; }
}
//
ISR(INT4_vect){
  _delay_ms(50); // 채터링이 발생하는 동안 딜레이로 넘기고
  if((PINE&0x10)==0)timerFlag^=1; // 누를 때(PE4=0)만 동작( 뗄 때(PE4=1)는 무시)
  EIFR=0x10; // 딜레이 동안에 발생한 인터럽트 플래그는 clear
}
//
ISR(INT5_vect){
  _delay_ms(50);
  if((PINE&0x20)==0){ // 누를 때만 동작
    if(PORTA==rotationStop)switchCnt^=1;
  }
  EIFR=0x20;
}

412904님의 댓글

412904 댓글의 댓글 작성일

정말 감사드립니다. 하루 종일 고민하던 문제가 덕분에 단숨에 해결되었습니다...

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
답변 답변글 답변 : steppermulti5 질문댓글[1] master 22-06-22 216
질문 atmega128 avr usart 질문 snoflak 22-06-21 344
답변 답변글 답변 : atmega128 avr usart 질문댓글[5] master 22-06-21 665
질문 사용자 정의 함수 변환 하는 방법댓글[2] 이미지첨부파일 da0800 22-06-21 290
질문 atmega128댓글[1] 이미지 양의노래 22-06-20 390
질문 아두이노 동시동작 재질문댓글[9] 이미지첨부파일 죠르디 22-06-20 912
질문 초음파센서로 dc모터 제어하기댓글[1] 첨부파일 난쟁2 22-06-20 469
질문 아두이노 동시동작댓글[7] 죠르디 22-06-19 595
질문 ATMEGA128 UART,FND 연동 질문 JMOD 22-06-19 400
답변 답변글 답변 : ATMEGA128 UART,FND 연동 질문댓글[1] master 22-06-20 331
질문 atmeg128 질문이요댓글[1] 이미지첨부파일 공대생er 22-06-18 341
질문 atmega128 초음파 센서로 신호등 시간초 늘리기 서동씨 22-06-18 362
답변 답변글 답변 : atmega128 초음파 센서로 신호등 시간초 늘리기댓글[1] master 22-06-18 449
질문 atmega128댓글[2] 망경이 22-06-18 493
질문 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다. (온도에따른 자동 수동 선풍기 )댓글[1] 따랑해영 22-06-18 801
답변 답변글 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다. (온도에따른 자동 수동 선풍기 )댓글[1] 이미지첨부파일 따랑해영 22-06-19 266
답변 답변글 질문 : 앱인벤터 이용해서 수동 자동 할라고하는데 ..잘안됩니다. (온도에따른 자동 수동 선풍기 ) 앱인벤… 이미지첨부파일 따랑해영 22-06-19 1299
질문 서보모터와 초음파센서댓글[1] 브링미히어 22-06-17 631
질문 LCD 도와주세요 ㅜㅠㅠㅠ댓글[2] 이미지첨부파일 dentist22 22-06-17 567
질문 안녕하세요 atmega128 질문드리고 싶습니다. (자동 분리수거 기계, 소리 주파수 변환)댓글[3] dlcldl 22-06-17 721
질문 아두이노 delay를 millis로 바꾸고 싶습니다. 슨슨슨모 22-06-16 879
답변 답변글 답변 : 아두이노 delay를 millis로 바꾸고 싶습니다. master 22-06-17 456
질문 아두이노 LCD 시계 이미지첨부파일 dentist22 22-06-16 632
답변 답변글 답변 : 아두이노 LCD 시계 master 22-06-17 598
질문 ATMEGA128 HIGH LOW신호 수신 질문 yhj2644 22-06-16 550
답변 답변글 답변 : ATMEGA128 HIGH LOW신호 수신 질문댓글[3] master 22-06-17 638
질문 보드레이트 관련 재질문댓글[9] 죠르디 22-06-16 720
질문 서보모터, 사운드센서 질문댓글[3] 죠르디 22-06-16 724
질문 안녕하세요! 아두이노 로봇팔 질문! 이미지첨부파일 구찌만두 22-06-16 665
답변 답변글 답변 : 안녕하세요! 아두이노 로봇팔 질문! master 22-06-16 621
게시물 검색

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