atmega128에서 타이머/카운터 사용을 위한 초기치 셋팅하는법

//atmega128에서 타이머/카운터 사용을 위한 초기치 셋팅하는법

// 타이머0 오버플로우 인터럽트 1msec

// X-TAL클럭 / TCCR0분주비 / TCNT0타이머값 = 주파수, 역수를 취하면 시간 //16000000Hz/128/125=1000Hz, (256-125)=131

TCCR0=5; TCNT0=131; TIMSK=1;

 

// 타이머0 오버플로우 인터럽트 5msec //16000000Hz/1024/78=200.32Hz, (256-78)=178

TCCR0=7; TCNT0=178; TIMSK=1;

 

// 타이머0 오버플로우 인터럽트 10msec //16000000Hz/1024/156=100.16Hz, (256-156)=100

TCCR0=7; TCNT0=100; TIMSK=1;

 

1msec는 분주비 128을 사용해서 정확한 1msec를 만들었지만

8비트 타이머로는 더 긴 시간을 만들 수 없으므로

오차가 있더라도 1024를 사용 했습니다.

 

8비트 타이머0로 만들 수 있는 시간 범위는 여기까지이며

더 긴 50msec 와 100msec는

타이머 인터럽트 함수 내에서 사용자 변수로 처리 하면 됩니다.

 

 

int count=0;

 

ISR(TIMER0_OVF_vect){ // 타이머0 오버플로우 인터럽트 1msec

// interrupt

[TIM0_OVF] void timer0_ovf_isr(void){ // 코드비젼용

    count++;

    if(count==50){ count=0; } // 50msec

}

 

ISR(TIMER0_OVF_vect){ // 타이머0 오버플로우 인터럽트 1msec

// interrupt [TIM0_OVF] void timer0_ovf_isr(void){ // 코드비젼용

    count++;

    if(count==100){ count=0; } // 100msec

}

 

5msec와  10msec도 사용자 변수인 count로 만들 수 있습니다.

 

 

 

 

// 타이머1 오버플로우 인터럽트 1msec // X-TAL클럭 / TCCR1B분주비 / TCNT1타이머값 = 주파수, 역수를 취하면 시간 // 클럭 / 분주비 / 타이머값 = 타이머 인터럽트 주파수, 역수를 취하면 시간 //16000000Hz/64/250=1000Hz,(65536-250)=65286

TCCR1B=3; TCNT1=65286; TIMSK=4;

 

// 타이머1 오버플로우 인터럽트 5msec //16000000Hz/64/1250=200Hz,(65536-1250)=64286

TCCR1B=3; TCNT1=64286; TIMSK=4;

 

// 타이머1 오버플로우 인터럽트 10msec //16000000Hz/64/2500=100Hz,(65536-2500)=63036

TCCR1B=3; TCNT1=63036; TIMSK=4;

 

// 타이머1 오버플로우 인터럽트 50msec //16000000Hz/64/12500=20Hz,(65536-12500)=53036

TCCR1B=3; TCNT1=53036; TIMSK=4;

 

// 타이머1 오버플로우 인터럽트 100msec //16000000Hz/64/25000=10Hz,(65536-25000)=40536

TCCR1B=3; TCNT1=40536; TIMSK=4;

 

 

2018-03-15T10:38:14+00:00 2010/04/26|Categories: 땜질|Tags: , , |0 Comments