-
[AVR]타이머/카운터 - 정확히 1초 주기로 LED 점등AVR study 2013. 1. 26. 00:39반응형
정확하게 1초 주기로 LED를 점등하는 영상입니다.
아이폰 스탑워치로 체크를 해보니 계속해서 오차없이 1초 주기로 점등하는것을 알 수 있었습니다.
좀 더 정확한 오차를 계산하기 위해선 오실로스코프가 필요할 것 같네요.
#include <avr/io.h>
#include <avr/interrupt.h>volatile unsigned int cnt=0; // 타이머 발생 횟수
volatile unsigned int flag=0;
ISR(TIMER0_OVF_vect) // 타이머0 오버플로 언터럽트 서비스루틴
{
TCNT0=0x06; // 타이머/카운터 레지스터 6부터 시작
cnt++; //타이머 발생 횟수 1증가if(cnt<1000)
PORTA = 0X01; // 타이머 발생 1000번째에 LED 켜기
else if ((cnt>1000)&&(cnt<2000)) {
PORTA=0X00; // 타이머 발생 1000번 이후에 1000번 동안 LED 끄기
}else if(cnt>2000)
cnt=0; // 타이머 발생 2000번 이후에 발생 횟수 초기화
}int main(void) {
TCNT0 = 0x06; // ---------------------> 1ms 만들기 위한 시스템 타이머 레지스터 설정
TCCR0 = 0x04; // ----------------> freescale 64배수
TIMSK = 0x01; // --------------> 오버플로우 인터럽트 사용
SREG = 0x80; // --------------> 인터럽트 허용 레지스터
DDRA = 0xff; // ---------> PORTA 출력 방향 설정 레지스터
while(1) {}
}반응형'AVR study' 카테고리의 다른 글
LCD란? LCD의 동작원리와 장단점 (1) 2013.01.27 [AVR]타이머/카운터 - LED패턴 변화 (0) 2013.01.26 Atmega128의 타이머/카운터 및 관련 레지스터 (0) 2013.01.25 M.A.I 회사의 Atmega128 모듈, ISP 다운로더 구입기 (0) 2013.01.20 [AVR] 오버플로우 인터럽트를 이용한 카운터 - LED 제어 (0) 2013.01.20