제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
개요
정확한 시간을 세고 싶다면 타이머를 사용해야 하는데 일반적으로 아두이노 내부 타이머를 사용하는 것은 그리 쉬운 일이 아니기 때문에 이번 튜토리얼에서는 그 사용법을 쉽게 설명하려고 합니다.
delay() 함수 중에는 아무 것도 할 수 없기 때문에 타이머를 사용하는 것이 매우 중요하지만 타이머를 사용하면 모든 것을 할 수 있습니다. 그 순간이 오면 인터럽트를 활성화하기 때문입니다.
저는 TIMER0이 가장 쉬운 타이머이기 때문에 사용하고 있습니다. 아마도 나중에 다른 타이머에 대해 설명할 것입니다.
작동 원리
가장 먼저 봐야 할 것은 ATmega328P의 데이터시트입니다.
이것은 카운터 블록 다이어그램이며 이것을 보면 어떻게 작동하는지 이해할 수 있습니다.
프리스케일러는 클록 사이클에서 펄스를 수신한 다음 제어 로직으로 전달하므로 제어 로직은 TCNTn 레지스터를 1만큼 증가시킵니다.
이제 TCNTn의 값을 특정 값과 비교할 수 있습니다. TCNTn 레지스터가 이 값에 도달하면 특정 시간이 지났음을 알 수 있습니다.
이 방법을 "비교 시 타이머 지우기"에 대한 CTC 모드라고 합니다. 값 TCNTn 레지스터는 OCRn 레지스터와 비교되며, 비교 일치가 발생하면 TOVn이 인터럽트를 생성합니다.
또 다른 중요한 것은 프리스케일러입니다. 이를 통해 클록의 다른 부분을 생성할 수 있습니다. 사실 16MHz는 너무 많지만 프리스케일러 덕분에 이의 일부 하위 배수를 생성할 수 있습니다. 이것은 TCCR0B 레지스터의 구성에 따라 다릅니다.
또 다른 중요한 것은 특정 시간을 계산하기 위해 OCRn 레지스터의 값을 결정하는 것입니다. 약간의 수학이 필요합니다.
이 모든 것이 너무 복잡해 보일 수 있다는 것을 알고 있지만 아래 코드가 각 질문을 해결해 줄 것이라고 확신합니다.
이 경우 0.001초마다 인터럽트 요청을 활성화합니다.
<사전><코드> TCCR0A|=(1<이 명령어 후에 타이머가 카운트를 시작하기 때문에 마지막에 프리스케일러를 설정하는 것이 중요합니다. 타이머를 중지해야 하는 경우 TCCR0B의 모든 비트를 재설정해야 하기 때문입니다.
아래에 예시가 있습니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
/*이 프로그램은 내부 타이머를 사용하여 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){ //인터럽트 요청 타이머입니다++;}
제조공정
구성품 및 소모품 Arduino UNO × 1 초음파 센서 - HC-SR04(일반) × 1 이 프로젝트 정보 HC-SR04용 레이더 화면 시각화 Arduino 코드: 프로세싱에 의해 선택되도록 직렬 포트로 전송된 서보 값에 의해 이동된 모든 각도에 대한 센서 판독값을 전송합니다. https://github.com/faweiz/My-Arduino/blob/master/arduino_radar/Arduino_radar_HC_SR04/Arduino/Arduino_radar
Arduino 자습서 시리즈의 일곱 번째 Arduino 자습서에 오신 것을 환영합니다. 이 튜토리얼에서는 Arduino를 Matlab에 연결하는 방법과 직렬 포트를 사용하여 통신하는 방법을 배웁니다. 또한 Matlab을 사용하여 Arduino Board를 제어하는 예를 만들 것입니다. 이것은 따라하기 쉬운 단계별 비디오 자습서입니다. 또한 동영상 아래에서 이 튜토리얼에 필요한 부분과 동영상의 예제 소스 코드를 찾을 수 있습니다. 이 Arduino 튜토리얼에 필요한 구성요소 아두이노 보드 ..................