산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Arduino의 내부 타이머

구성품 및 소모품

Arduino UNO
× 1
LED(일반)
× 1
저항 220옴
× 1

이 프로젝트 정보

개요

정확한 시간을 세고 싶다면 타이머를 사용해야 하는데 일반적으로 아두이노 내부 타이머를 사용하는 것은 그리 쉬운 일이 아니기 때문에 이번 튜토리얼에서는 그 사용법을 쉽게 설명하려고 합니다.

delay() 함수 중에는 아무 것도 할 수 없기 때문에 타이머를 사용하는 것이 매우 중요하지만 타이머를 사용하면 모든 것을 할 수 있습니다. 그 순간이 오면 인터럽트를 활성화하기 때문입니다.

저는 TIMER0이 가장 쉬운 타이머이기 때문에 사용하고 있습니다. 아마도 나중에 다른 타이머에 대해 설명할 것입니다.

작동 원리

가장 먼저 봐야 할 것은 ATmega328P의 데이터시트입니다.

이것은 카운터 블록 다이어그램이며 이것을 보면 어떻게 작동하는지 이해할 수 있습니다.

프리스케일러는 클록 사이클에서 펄스를 수신한 다음 제어 로직으로 전달하므로 제어 로직은 TCNTn 레지스터를 1만큼 증가시킵니다.

이제 TCNTn의 값을 특정 값과 비교할 수 있습니다. TCNTn 레지스터가 이 값에 도달하면 특정 시간이 지났음을 알 수 있습니다.

이 방법을 "비교 시 타이머 지우기"에 대한 CTC 모드라고 합니다. 값 TCNTn 레지스터는 OCRn 레지스터와 비교되며, 비교 일치가 발생하면 TOVn이 인터럽트를 생성합니다.

또 다른 중요한 것은 프리스케일러입니다. 이를 통해 클록의 다른 부분을 생성할 수 있습니다. 사실 16MHz는 너무 많지만 프리스케일러 덕분에 이의 일부 하위 배수를 생성할 수 있습니다. 이것은 TCCR0B 레지스터의 구성에 따라 다릅니다.

또 다른 중요한 것은 특정 시간을 계산하기 위해 OCRn 레지스터의 값을 결정하는 것입니다. 약간의 수학이 필요합니다.

이 모든 것이 너무 복잡해 보일 수 있다는 것을 알고 있지만 아래 코드가 각 질문을 해결해 줄 것이라고 확신합니다.

이 경우 0.001초마다 인터럽트 요청을 활성화합니다.

<사전><코드> TCCR0A|=(1<

이 명령어 후에 타이머가 카운트를 시작하기 때문에 마지막에 프리스케일러를 설정하는 것이 중요합니다. 타이머를 중지해야 하는 경우 TCCR0B의 모든 비트를 재설정해야 하기 때문입니다.

아래에 예시가 있습니다.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • 내부 타이머
  • 내부 타이머Arduino
    /*이 프로그램은 내부 타이머를 사용하여 1초마다 핀 13의 LED를 켜고 끕니다.*/int timer=0;bool state=0;void setup() { pinMode(13,OUTPUT); TCCR0A=(1<=1000){ state=!state; 타이머=0; } 디지털 쓰기(13, 상태); }ISR(TIMER0_COMPA_vect){ //인터럽트 요청 타이머입니다++;}

    회로도


    제조공정

    1. Arduino 스파이봇
    2. FlickMote
    3. 수제 TV B-Gone
    4. 마스터 시계
    5. 나를 찾기
    6. Arduino Power
    7. Tech-TicTacToe
    8. Arduino Quadruped
    9. Arduino 조이스틱
    10. CNC 기계