AVR > 스위치 8개 피아노 - 타이머모드 설명

TODAY325 TOTAL2,925,188
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | AVR | 타이머 | 스위치 8개 피아노 - 타이머모드 설명

페이지 정보

작성자 키트 작성일2017-08-29 09:42 조회4,801회 댓글0건

본문

 

    DDRB=0x20;  //포트 B.5 펄스출력

OC1A에 출력을 하기 위해서 출력으로 지정 합니다.

 

//-----------

    TCCR1A=0x40;

데이터시트 133페이지

TCCR1A 레지스터

COM1A1 COM1A0 COM1B1 COM1B0 COM1C1 COM1C0 WGM11 WGM10

0x40 이면 위에 적색 비트만 1입니다.

Table 58. Compare Output Mode, non-PWM

Toggle OCnA/OCnB/OCnC on compare match.

compare match 시 OC1A 핀이 토글 된다고 적혀있습니다.

 

데이터시트 135페이지

Table 61. Waveform Generation Mode Bit Description

Mode 4 - CTC 모드( WGM13 WGM12 WGM11 WGM10 )

TCCR1A의 최하위 두개의 비트 WGM11 WGM10는 00입니다.

 

TOP - OCR1A

TCNT는 0부터 OCR1A까지 증가를 반복합니다.

//-----------

    TCCR1B=8;

데이터시트 136페이지

TCCR1B 레지스터

ICNC1 ICES1 – WGM13 WGM12 CS12 CS11 CS10

모드4 CTC모드를 설정 하기 위한 WGM12만 1입니다.

 

데이터시트 136페이지

Table 62. Clock Select Bit Description

위 표를 보고서 CS12 CS11 CS10를 설정 하세요

 

//------

    TCCR1C=0x80;

TCCR1B 레지스터

FOC1A FOC1B FOC1C – – – – –

OC1A핀 출력을 결정하는 레지스터입니다.

 

//-------

    OCR1A=0x??; 
타이머 클럭과 연동해서 이 값으로 출력의 반주기를 결정 합니다.

TCNT1이  OCR1A과 같아지면 OC1A핀이 출력토글(반전) 됩니다.

//-------

 

OCR1A 레지스터와 OC1A핀을 구분하지 못하는 분이 계시면

데이터시트 2페이지에서 OC1A핀이 어디에 있는지 찾아보세요 (포트 B.5 펄스출력)

 

//---------

//---------

//---------

 

카페의 많은 타이머 예제에서 비교매치 인터럽트를 사용 해서

카페 예제를 많이 돌려본 분은 비교매치가 뭔지 잘 이해 하실겁니다.

비교매치 인터럽트와 아주 유사합니다.

차이점은

1. DDRB=0x20;  //포트에 출력을 해야 하니 당연히 출력 지정 해야겠죠

2. TCCR1C=0x80; // Force Output Compare for Channel A

위 두가지만 추가되면 되는 간단한 모드입니다.

//--------

 

사용은

예를들어서 50Hz 펄스를 출력 한다고 하면

주기가 50Hz이고 (20ms)

출력의 토글은 반주기마다 이뤄져야 하므로 10ms입니다.

 

비교매치 인터럽트의 10ms 타이머를 만드는 것은 간단합니다.

 


// 타이머1 A매치 인터럽트
    TCCR1B=0x09; OCR1A=1474;  TIMSK=0x10; //14745600/  1/(1+ 1474)=9997.01695Hz=100.02984us
    TCCR1B=0x09; OCR1A=1599;  TIMSK=0x10; //16000000/  1/(1+ 1999)=10KHz=100us
    TCCR1B=0x09; OCR1A=15999; TIMSK=0x10; //16000000/  1/(1+15999)=1000Hz=1ms
    TCCR1B=0x09; OCR1A=31999; TIMSK=0x10; //16000000/  1/(1+31999)= 500Hz=2ms
    TCCR1B=0x0A; OCR1A= 1999; TIMSK=0x10; //16000000/  8/(1+ 1999)=1000Hz=1ms
    TCCR1B=0x0A; OCR1A= 3999; TIMSK=0x10; //16000000/  8/(1+ 3999)= 500Hz=2ms
    TCCR1B=0x0A; OCR1A= 9999; TIMSK=0x10; //16000000/  8/(1+ 9999)= 200Hz=5ms
    TCCR1B=0x0A; OCR1A=19999; TIMSK=0x10; //16000000/  8/(1+19999)= 100Hz=10ms
    TCCR1B=0x0C; OCR1A= 6249; TIMSK=0x10; //16000000/256/(1+ 6249)=  10Hz=100ms
    TCCR1B=0x0C; OCR1A=31249; TIMSK=0x10; //16000000/256/(1+31249)=   2Hz=500ms
    TCCR1B=0x0C; OCR1A=62499; TIMSK=0x10; //16000000/256/(1+62499)=1Hz=1sec

 

인터럽트를 사용할 것은 아니므로 TIMSK=0x10은 필요없고

TCCR1B=0x0A; OCR1A=19999;

이 두개의 레지스터는 위의 값으로 설정하면 됩니다.

댓글 0

조회수 4,801

등록된 댓글이 없습니다.

AVRHOME > AVR > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기