ITGenerations
[AVR] LED 깜빡이기 속도 제어/LED 2개중 하나가 더빠르게 (2배 빠르게) 본문
// 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);
}
*/
'Univ > AVR atmega128' 카테고리의 다른 글
[AVR] Atmega128 오류 줄이는법 (0) | 2017.12.13 |
---|---|
[AVR]LED 2개중 하나가 더빠르게 (2배 빠르게)/LED 속도제어/OCRn 숫자 변경방법 (0) | 2017.12.10 |
[AVR] LED 2개 동시에 켜기[깜빡이기] (0) | 2017.12.10 |
[AVR] LED 3개 전원 제어 타이머 0 CTC모드 (0) | 2017.12.10 |
[AVR] LED 전원 제어 타이머 0 CTC모드 (0) | 2017.12.10 |