정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

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