millis ()가 타이머 0과 관련된 PWM 핀과 충돌합니까?


9

millis()함수는 몇 개의 PWM 핀과 동일한 타이머를 사용 한다는 것을 읽었습니다 .

해당 PWM 핀을 사용하는 경우 millis()여전히 올바른 값을 반환합니까?

답변:


6

로 그들은 충돌하지 않는 millis()엄격에서 즉시 값 읽어 TCNT0타이머 0 사용을 통해의 값을 비교하는 하드웨어의 능력 PWM 반면을 TCNT0의 값을 OCR0x그 중 하나의 값에 영향을주지 않고 있습니다.


millis()타이머 0 오버 플로우 카운트 만 사용합니다. micros()의 즉시 값을 읽습니다 TCNT0.
Nick Gammon

5

귀하의 질문에 직접 답변 한 @Ignacio의 답변에 추가하십시오. 당신이 말하는 "충돌"은 Timer0프리스케일러 와 관련이 있습니다.

대부분의 경우, 당신은 문제없이 PWM 가진 사람 핀 (우노에 우연히 핀 5, 6)를 사용할 수 있습니다, 그리고 정확한 값을 읽을 수 millis()(뿐만 아니라에서 예상되는 지연을 얻을 수로 delay)

프리스케일러를 변경하려는 경우 (일반적으로 PWM 신호의 주파수를 수정하려는 경우) 문제가 발생합니다. 이를 변경하면의 계산 및보고 millis()및 길이에 직접 영향을 미칩니다 delay(x).


Serial.println (TCCR0A, BIN)의 맨 아래 비트로 타이머의 프리스케일러를 읽을 수 있습니다. 이들이 '11'이면 프리스케일러는 clk / 64입니다. 그런 다음 millis () 및 delay () 수정에 대한 계수를 계산할 수 있습니다.
Dave X

그것은 매우 좋은 지적이며 항상 수정을 피하려고 노력했지만 실제로 원하거나 필요로 할 이유가 없습니다. 다른 점은 수정 한 경우 이미 새로운 프리스케일러를 알고 있으며 래퍼를 작성 millis ()하거나 delay ()어쨌든 작성할 수 있다는 것입니다.
Madivad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.