AVR > 타이머 오버플로우 인터럽트로 오차없는 시계만들기

TODAY3,726 TOTAL7,750,052
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | AVR | 타이머 | 타이머 오버플로우 인터럽트로 오차없는 시계만들기

페이지 정보

작성자 키트 작성일2017-08-29 09:22 조회5,614회 댓글0건

본문

//타이머 오버플로우 인터럽트로 오차없는 시계만들기
통신용 클럭중에 하나인 11.058200MHz 사용
오차를 일으키지 않는 방법은 타이머 인터럽트 내에서  TCNT0 값을 갱신 하지 않는 것이다.
( 프리런닝 식으로 동작 )

TCCRB의 분주비는
TCCRB    x-tal        분주비        TCNT0    인터럽트주기
1일 때 11059200Hz /    1       /    256 =    43200Hz
2일 때 11059200Hz /    8       /    256 =    5400Hz
3일 때 11059200Hz /    64      /    256 =    675Hz
4일 때 11059200Hz /    256     /    256 =    168.75Hz
5일 때 11059200Hz /    1024    /    256 =    42.1875Hz
수가 작으면서 소숫점이 없는 분주비 1/64이 적당


//코드비젼 atmega2560, 11.0582MHz
#include 
<mega2560.h> 
U_I    msec=0;
U_C    clock_sec=0, clock_min=0, clock_hour=0;

interrupt [TIM0_OVF] void timer0_ovf_isr(void){
    msec++;
    if(msec>=675){ msec=0; sec++; };
    if(sec>59){    sec=0;  min++; };
    if(min>59){    min=0;  hour++; };
    if(hour>23)    hour=0;
}

void main(void){
    TCCRA=0
    TCNT0=0;    
    TIMSK1=0x01;    
// Overflow Interrupt Enable,
    TCCRB=3;        
// 1=1, 2=8, 3=64, 4=256, 5=1024
    #asm("sei")
    while(1){}
}






14.7456MHz일 때 TCCRB의 분주비는
1 때 14745600Hz /    1       / 256 =    57600Hz
2 때 14745600Hz /    8       / 256 =    7200Hz
3 때 14745600Hz /    64      / 256 =    900Hz
4 때 14745600Hz /    256     / 256 =    225Hz
5 때 14745600Hz /    1024    / 256 =    56.25Hz
수가 작으면서 소숫점이 없는 분주비 1/256 적당
U_C    msec=0// char type

 

interrupt [TIM0_OVF] void timer0_ovf_isr(void){
    msec++;
    if(msec>=225){ msec=0; sec++; };
}

 

 


16MHz일 때 TCCRB의 분주비는
1 때 16000000Hz /    1       / 256 =    62500Hz
2 때 16000000Hz /    8       / 256 =    7812.5Hz
3일 때 16000000Hz /    64      / 256 =    976.5625Hz
4 때 16000000Hz /    256     / 256 =    244.140625Hz
5일 때 16000000Hz /    1024    / 256 =    61.03515625Hz
1/64 적당
이경우 계산이 조금 지저분 해지겠군요

U_L    msec=0
// long type

interrupt [TIM0_OVF] void timer0_ovf_isr(void){
    msec+=10000;
    if(msec>=9765625){ msec-=9765625; sec++; };
}

오버 플러우 인터럽트로 시계 만들기에는

통신용 클럭중에 하나인 14.7456MHz이 제일 좋군요

댓글 0

조회수 5,614

등록된 댓글이 없습니다.

AVRHOME > AVR > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기