|  
					  ISR(TIMER4_CAPT_vect)을 사용해서 PWM으로 출력되는 센서값을 확인하고 싶습니다. 도와주세요.   
										
						아두이노개발개발 | 2018-08-16					 
				 | 
				
			
			|
|---|---|
| 
					 1. 프로젝트 사용한 보드 종류 아두이노 메가 2560 보드 
 
 2. 사용한 개발 프로그램명 아두이노 IDE 
 
 3. 사용한 센서 모델명 CO2센서 (MH-Z19B) 
 
 4. 연결한 회로 설명 PWM핀을 ICP4(D49) 연결함 
 
 5. 소스코드 ISR(TIMER4_CAPT_vect)   ICP4 핀에서 low->high, high->low 감지시 인터럽트 발생 
{ 
    if (mu08RisingEdge == TRUE)   // ICP4 핀으로 rising edge 감지시 
    { 
        TCNT4L = 0; 
        TCNT4H = 0; 
        TCCR4B &= ~(1 << ICES4);  // falling edge 감지를 위해 ICES4 "0" set 
        mu08RisingEdge = FALSE; 
        digitalWrite(4, HIGH);          // PWM 입력이 제대로 되는지 확인하고 싶어서 출력 
    } 
    else 
    { 
        TCCR4B |= (1 << ICES4);    // rising edge 감지를 위해 ICES4 "1" set 
        mu08RisingEdge = TRUE; 
        mu16Low = ICR4L; 
        mu16High = ICR4H; 
        mu16CO2HighLevelCount = ICR4; //mu16High - mu16Low; 
        digitalWrite(4, LOW); 
    } 
} 
 void setup() {     noInterrupts(); 
    pinMode(4, OUTPUT); 
    pinMode(49, INPUT); 
    // clk I/O / 1024 (prescaling, 64us) ///////////////////////// 
    SET_BIT(TCCR4B, CS40); 
    CLEAR_BIT(TCCR4B, CS41); 
    SET_BIT(TCCR4B, CS42); 
    ////////////////////////////////////////////////////////////// 
    TCNT4 = 0; 
    ICR4 = 0; 
    mu16CO2HighLevelCount = 0; 
    SET_BIT(TCCR4B, ICES4); // enable input capture 
    SET_BIT(TIMSK4, ICIE4); // enable input capture interrupt for timer 4 
    interrupts(); 
    Serial.begin(9600); 
} 
void loop() 
{ 
    Serial.print(mu16CO2HighLevelCount); 
} 
 6. 문제점 및 에러 내용 CO2센서가 PWM으로 현재 센서의 값을 데이터로 보내주고 있습니다. 그래서 Input Capture Register를 사용하려고 했습니다. Timer4를 이용하였구요. 1024 분주해서 1count당 64us로 2ms ~ 1004ms를 커버하려고 했습니다. 
 ICP4핀으로 PWM이 제대로 입력되는지 확인하기 위해서 D4핀을 Output으로 두고, 로직 분석기로 확인하였습니다. 로직 분석기로 확인했을 때, 보통 200ms정도 high 출력을 확인하였습니다. 그러면 mu16CO2HighLevelCount는 약 3,125(200,000us / 64us)는 찍혀야 된다고 생각했습니다. 그런데 시리얼 모니터로 찍히는 값이 100도 되지 않았습니다.    ICR을 사용하는데.....잘못한 부분이 있는지 확인 부탁드립니다. 구글링을 계속해봐도 찾지를 못하겠네요ㅠ. 
  | 
			|
| 이전글 | 질문드립니다.. | 2018-08-15 | 
| 다음글 | 아두이노 mpu6050 | 2018-08-17 |