«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ITGenerations

[AVR] LED 깜빡이기 속도 제어/LED 2개중 하나가 더빠르게 (2배 빠르게) 본문

Univ/AVR atmega128

[AVR] LED 깜빡이기 속도 제어/LED 2개중 하나가 더빠르게 (2배 빠르게)

ITGenerations 2017. 12. 10. 17:54

// source 20

// LED 2개중 하나가 더빠르게 (2배 빠르게)

// LED 깜빡이기 속도 제어

// e_enter 함수 변경 방법 

/*

#include <avr/io.h>

#include <avr/interrupt.h>

ISR(TIMER0_COMP_vect)

{

static int led=0;

static char n_enter=0;


n_enter++;


if(n_enter == 50) // 50*10 = 500ms

{

n_enter = 0;

if (led)

led = 0;

PORTA |= 0x01;

}

else 

{

led = 1;

PORTA &=  ~(0x01);

}

}


}



ISR(TIMER2_COMP_vect)

{

static int led=0;

static char n_enter=0;


n_enter++;



// n_enter ==25로 하는 이유: 카운트가 0~25 /0~50보다  2배 적으므로 2배 빠름.

// 속도 변경 방법 1

// 다른 속도 변경방법은 아래 int main() 함수 참고 

if(n_enter == 25) // 50*10 = 500ms

{

n_enter = 0;

if (led)

led = 0;

PORTA |= 0x02;

}

else 

{

led = 1;

PORTA &=  ~(0x02);

}

}


}



int main()

{

DDRA=0xFF;

PORTA=0xFF;


// 타이머를 하나 추가했으므로 

// 타이머 0은 00 이런식으로 작성

// 타이머 2는 20 이런식으로 작성

// 타이머 0,2 둘다 00으로 해도 정상 작동 

TCCR0 = (1<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(1<<CS02)|(1<<CS01)|(1<<CS00);

TCCR2 = (1<<WGM21)|(0<<WGM20)|(0<<COM21)|(0<<COM20)|(1<<CS22)|(0<<CS21)|(1<<CS20);


// OCR0 시정수 

// (1/16M) * 분주비(1024) * OCR0 = 10ms --> OCR0 = 156.25 = 약156



// 속도 변경 방법2

//  OCRn 숫자를 변경 , 숫자를 절반으로 변경 (78)


// TCNn 0부터 카운트

TCNT0 = 0x00;

// ORCn 156 까지 카운트 

OCR0 = 0x9C;//156

// 0 == 0x00

// 156 == 0x9c

// 이 숫자는 같으므로 어느걸 써도 무방 

TCNT2 = 0;

OCR2 = 156;//156


TIMSK = (1<<OCIE0)|(1<<OCIE2); // Output Compare Interrupt Enable 0

sei();

while(1);


}

*/