2017-12-29 18 views
-2

Arduino 타이머 인터럽트를 도와주세요.핀 컨트롤을 사용하지 않는 Arduino 타이머 인터럽트

핀 조정없이 타이머 OCR0A 또는 OCR2A를 시작하여 맞춤 기능을 시작하는 방법 output1Display()? 1ms의 간격.

ATmega328P, 8MHz 석영.

+1

어떻게하면 좋은 질문을 할 수 있습니까? https://stackoverflow.com/help/how-to-ask – dda

+1

Minimal, Complete 및 Verifiable 예제를 만드는 방법 https://stackoverflow.com/help/mcve – dda

답변

0

우선 타이머 설정의 세부 사항을 다루는 328P 데이터 시트를 검색해야합니다. Timer0은 엉망이되고 싶지 않은 다른 것들에 사용되므로 Timer2 만 사용하는 것이 좋습니다.

처음 시작할 때 데이터 시트가 혼란 스러울 수 있으므로 다음과 같이하십시오. 먼저 시계 스케일러를 선택해야합니다. Timer2는 주 클럭을 직접 카운트하거나 느린 속도의 경우 8, 32, 64, 128, 256 또는 1024로 나눌 수 있습니다. Timer2는 8 비트 카운터를 사용하므로 가장 느린 속도 (255의로드 사용)는 사전 설정된 클록의 256 틱입니다. 8MHz 클록을 가지고 있고 1msec의 타이머 간격을 원하면 1/32에 프리스케일러를 설정하여 250000Hz의 카운터 클록을 얻은 다음 OCR2A에 249를로드하여 1000Hz 인터럽트에 대해 250으로 나누십시오 율. 귀하의 인터럽트 핸들러는 다음과 같이 선언

TCCR2A = 2;   // Set CTC mode. Same as TCCR2A = _BV(WGM21); 
TCCR2B = 3;   // Prescaler to divide by 32 (CS21 and CS20 only) 
TCNT2 = 0;    // Clear the counter 
OCR2A = 249;   // Set for 1 msec rate 
TIMSK2 = 2;   // Set OCIE2A to begin counting with Compare A 

설치 후 루프에 출석해야하는 : 타이머가 메인 루프에서 설정 될 수 있음을

ISR(TIMER2_COMPA_vect) 
{ 
// Your code goes here 
} 

참고 설정 코드는 다음과 같습니다 다른 필요한 데이터가있을 때까지 인터럽트를 시작하지 않으려는 경우와 같이 필요한 경우 직렬의 on 명령을 사용하십시오. 또는 최종 TIMSK2 = 2를 제외하고는 모든 설정을 그대로 둘 수 있습니다. 귀하의 시리얼 명령에 의해 제공 될 수 있습니다.