안녕하세요 L입니다.
오늘 AVR 시간에는 잠시 C연습문제
별로 X그리기를 해보고
Rand 난수생성 함수 사용과
아트메가에서의 타이머카운터 사용법에대해 알아 보겠습니다.
본문 강의 자료는 첨부파일에 있어요 !
6장 타이머카운터 사용법.ppt
★ C연습문제
Ex) *로 X 그리기
< 프로그램 설명 >
cnt →
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
0 | * |
|
|
|
|
| * |
1 |
| * |
|
|
| * |
|
2 |
|
| * |
| * |
|
|
3 |
|
|
| * |
|
|
|
4 |
|
| * |
| * |
|
|
5 |
| * |
|
|
| * |
|
6 | * |
|
|
|
|
| * |
↑
num
ㆍ별이그려지는 지점
0.0 0.6
1.1 1.5
2.2 2.4
3.3
4.2 4.4
5.1 5.5
6.0 6.6
ㆍ공통점은 서로같거나 합이 6이된다는 사실이다.
결과
★ Atmega128 타이머카운터
< 사용 헤더파일 및 환경설정 값 >
< TCCR0 (T/C Control Register) >
< TCNT0 (Timer Counter Register) >
< TIMSK (Interrupt Mask Register) >
< 1초마다 LED 깜빡이는 프로그램 구현 >
Ex) 랜덤으로 20번 LED켜지도록 하기.
난수를 발생하여 LED on/off를 각각 0.5초간 유지
------------------------------------------------------
#include <개.h>
#include<stdlib.h>
#define CPU_CLOCK 16000000
#define TICKS_PER_SEC 1000
#define PRESCALER 64
volatile unsigned int g_elapsed_time;
void sleep(unsigned int elapsed_time);
void __vector_16(void) __attribute__ ((signal, used, externally_visible));
void initLED(void);
int main(void)
{
initLED();
TCCR0 = 0x04;
TCNT0 = 0x06;
TIMSK = 0x01;
SREG = SREG | (1 << 7);
int cnt = 0;
int r;
while(cnt <= 20)
{
r = (rand()%2);
if(r==0)
{
PORTF = 0x00;
sleep(500);
}
else if(r==1)
{
PORTF = 0xFF;
sleep(500);
}
++cnt;
}
}
void initLED(void)
{
DDRF = 0xFF;
PORTF = 0x00;
}
void sleep(unsigned int elapsed_time)
{
g_elapsed_time = 0x00;
for(; g_elapsed_time < elapsed_time;);
}
void __vector_16(void)
{
TCNT0 = 6;
++g_elapsed_time;
}
------------------------------------------------------
궁금하신 점은 댓글로 남겨 주세요 !!
오늘도 좋은 하루 되세요
아트메가128 ( PC기반 직렬통신 기초 ) [20120531] (0) | 2016.09.30 |
---|---|
아트메가128 (EEPROM제어) [20120530] (0) | 2016.09.30 |
아트메가128 ( FND 실습 / 적외선 센서 실습 ) (0) | 2016.09.29 |
아트메가128 ( FND / FND예제 ) [20120516] (0) | 2016.09.29 |
DK - 128 회로 명칭 ( 아트메가128 / AVR ) (0) | 2016.09.29 |