자, 이제 시작을 해 보도록 합시다.
우선 소스부터 하나 읽고 시작할까요?
출처 : 따르미 Pro 2008(하늘아이 社) - main.h
void TIMER_INIT(void)
{
TIMSK=((1<<TOIE2)|(1<<TOIE0)|(1<<TOIE1));
TCCR0=(1<<CS01)|(1<<CS00);
TCNT0=256-62.5;
TCCR2=1<<CS20;
TCNT2=0;
TCCR1A=(1<<WGM11)|(1<<WGM10);
TCCR1B=(0<<WGM12)|(1<<CS10);
TCNT1=1000;
OCR1A=0;
OCR1B=0;
}
void SYS_INIT(void)
{
TIMER_INIT();
DDRA=0x00;
DDRB=0x4F;
DDRC=0xFF;
DDRD=0xFF;
PORTA=0x00;
PORTB=0xFC;
PORTC=0xFF;
PORTD=0xFF;
SREG=0x80;
sei();
sbi(PORTB,7);
while(bit_is_set(PINB,7));
while(bit_is_clear(PINB,7));
DELAY_MSEC(500);
time_sec=0;
}
.
.
.
.
.
아아, 어디에 쓰는 코드인가?
설명을 안하고 코드 먼저 풀어놓으니 참 어렵죠?
제가 풀어서 설명을 해 드리겠습니다.
1. TIMSK : 여러 타이머 중 어느 타이머를 쓸지를 미리 정해놓는 거에요.
2. TCCR(포트) : 로봇의 처리 속도는 매~우 빠른데, 시간을 그렇다고 해서 사람이 눈치채지도 못할 시간에 한 번씩 세는건 들어가는 숫자가 너무 커져서 오버플로가 빵빵 터질겁니다. 이걸 방지하는 데 쓰는 거에요.
3. TCNT(포트) : 지금 카운터가 몇 까지나 갔나를 설정하는 거에요.
4. OCR(포트) : A, B포트가 일치했을 때 포트를 통해서 밖으로 출력되거나 비교를 하게 됩니다.
5. DDR(포트) : 각 포트를 입력으로 설정할지, 출력으로 설정할지 고릅니다.
6. PORT(포트) : 각 포트의 데이터를 입력합니다.
7. SREG : 이게 들어와야지만 비로소 타이머가 동작을 시작한답니다.
자, 그럼 이제 저 코드를 풀어볼까요?
1. 타이머 사용 선언(TIMER_INIT 1번째 줄, TIMSK)
2. 타이머 분주 설정(TIMER_INIT 2,4,6,7번째 줄, TCCR)
3. 타이머 시작점 설정(TIMER_INIT 3,5,8번째 줄, TCNT)
4. 입출력 방향 설정(SYS_INIT 2,3,4,5번째 줄, DDR)
5. 포트 초기값 설정(SYS_INIT 6,7,8,9번째 줄, PORT)
6. 시작 버튼 눌릴때까지 기다린다. 줄~창 기다린다(SYS_INIT 13,14번째 줄)
7. 0.5초 기다린다(SYS_INIT 15번째 줄)
8. 타이머를 0으로 바꿔준다(SYS_INIT 16번째 줄)
이것이 우리가 자주 사용하는 라인트레이서의 시작인 초기화 부분입니다.
다른 회사 로봇에서도 거의 마찬가지의 과정으로 진행되죠.
사실 얼마 안되는 내용인데다가 눈에 익은 C코드인데 저 코드는 참 어렵죠?
그게 우리가 사용하는 컴퓨터와 임베디드의 차이입니다.
C 한 번 배우면 모든 장치에서 다 써먹는다는거, 다 거짓말입니다.
ps. 타이머 자체의 원리
1. 타이머 시작
2. CPU가 일정 시간마다 한 번씩 타이머에 숫자를 쌓는다
3. 타이머 숫자가 넘친다
4. 일정 시간마다 하는 일을 한다
5. 초기화
ps. 타이머 자체의 원리
1. 타이머 시작
2. CPU가 일정 시간마다 한 번씩 타이머에 숫자를 쌓는다
3. 타이머 숫자가 넘친다
4. 일정 시간마다 하는 일을 한다
5. 초기화
'나래온 1기(~2012.6) > 라인트레이서 이야기' 카테고리의 다른 글
(3부작) 라인트레이서 이야기 - 번외 #5 라인트레이서의 꽃, 길 찾기! (0) | 2011.08.03 |
---|---|
(3부작) 라인트레이서 이야기 - 번외 #4 힘찬 시작을 위하여, 모터 파워 온! (0) | 2011.08.03 |
(3부작) 라인트레이서 이야기 - 번외 #2 WinAVR은 뭘까? (0) | 2011.08.03 |
(3부작) 라인트레이서 이야기 - 번외 #1 AVRStudio는 뭘까? (0) | 2011.08.03 |
(3부작) 라인트레이서 이야기 - 4. BreezeCore 독해 길잡이 (0) | 2010.07.31 |