2014-01-25 3 views
-1

타이머 때문에 arduino에 문제가 있습니다. 먼저 내가 알고있는 것을 설명하겠습니다. 일반적인 타이머로이 문제를 해결할 방법이 있는지 모르겠습니다. 때문에 타이머 기능 :타이머에서 원치 않는 토글 방지

1) 그들은 항상 0에서 시작,

2) 그들은 각각의 타이머는 두 비교 레지스터가)

3, 업 카운트 또는 UP-DOWN 카운트 타이머로 작동합니다.

내 프로젝트는 샘플링 된 시간 (기간)으로 작업하는 경우를 포함합니다. 즉 타이머는 샘플링 된 시간 동안 실행되며 비교 레지스터의 값을 토대로 TIOA 및 TIOB 출력이 전환됩니다. 업 모드에서 작업 중입니다. 이제 문제는 전체 기간 동안 제로 출력 (TIOA 및 TIOB)을 기대하는 비교 레지스터에 0이있을 때입니다. 그러나 타이머는 제로 비교를 위해 출력을 토글합니다. 즉, 항상 제로를 얻는 대신 시간 주기로 (2 * 마침표)가있는 구형파가 나타납니다. 다른 타이머에서도 이와 같은 공통적 인 문제가 있습니까?

혹시이 문제의 해결 방법을 제안 해 주시겠습니까?

미리 감사드립니다. 사용

#include <AdvaDueTC.h> 

int default_clock = 1; 
int RCcntS = 2187*2; 
int period0 = 65536; 
int a = 2180; 
int b = 0; 

void subrtn() 
{ 
changeTC_TC3_Period(RCcntS); // loading sampler TC3 with RCcntS 

changeTC_TC0_Period(RCcntS/2,a,b); // loading timer TC0 with RCcntT 

} 
void setup() { 

setupTC3_Interrupt(period0,default_clock ,subrtn);//setup sampler interrupt 

setupTC_TC0_Timing(period0, default_clock); 

} 

void loop() { 
// put your main code here, to run repeatedly: 

} 

기능은 : 여기

TC3는 UP 모드 및 동작의 TC0 UPDOWN 모드이다. TIOA0 및 TIOB0은 토글 출력을 얻는 데 사용됩니다 (즉, REG_TC0_CMR0, ACPA, BCPB가 3으로 설정 됨). 여기서 TIOB0는 토글 링되며 전체 기간 동안 하나의 밸브 (0 또는 3.3v)에 머물고 싶습니다.

의견을 보내 주셔서 감사합니다.

+0

평소와 마찬가지로 질문이 있으시면 지금까지 시도한 코드의 예를 제시해야합니다. 하나의 코드는 백만 가지 설명 가치가 있습니다! – zmo

답변

0

내가 제로있을 때 나는 제로 출력

내가 출력이 두 번 트리거 할 것으로 예상 (UP과 DOWN) 모든 틱 (난 당신이 기간 호출 생각) 예상 비교 레지스터, 왜냐하면 타이머가 매번 흘러 넘치기 때문입니다.

해결 방법은 타이머 비교 기능을 해제합니다.

이 나에게 PWM을 보인다

, 어쩌면 당신은 전용 HW를 사용하여 더 나은 결과를 얻을 수 있습니다

0

예 당신은 올바른 말. 처음에는 얻을 수 없었지만이 MCU 타이머는 전체 기간 동안 타이머 출력 값을 설정하거나 지울 수있는 옵션이 있습니다. 그래서 항상 TOGGLE을 사용하지 않고 이러한 옵션을 사용하여 원하는 작업을 얻었습니다.