전체상품목록 바로가기

본문 바로가기

오늘하루 열지않기


현재 위치

  1. 고객센터
  2. 자료실

자료실

자료실입니다.

게시판 상세
제목 [PIC 프로그래밍] 12. PIC 타미어 TMR1
작성자 가치창조기술 (ip:)
  • 작성일 2011-08-22 14:21:40
  • 추천 추천하기
  • 조회수 2434
평점 0점

타이머 TMR1

타미어 TMR1 모듈은 두개의 TMR1L, TMR1H로 이루어진 16-bit 타이머/카운터로 65.535개의 펄스까지 셀수 있습니다.

타이머 TMR0와 비슷하게 이 레지스터들은 언제 든지 읽고 쓸수 있으며, 오버플로우 발생시 인터럽트를 생성할 수 있습니다.

타이머 TMR1 모듈은 타이머나 카운터 두가지중 하나의 모듈로 동작이 가능합니다. TMR0 타이머와 다른 점은 이 두가지 모드가 추가적인 기능을 가지고 있다는 점입니다.

TMR1 의 특징:

  • 16-bit 타이머/카운터 레지스터
  • 프로그래밍 가능한 내부/외부 클럭 소스
  • 3-bit 프리스케일러;
  • Optional LP oscillator;
  • 동기 및 비동기식 동작
  • 컴패레이터나 T1G 핀을 통한 타이머 TMR1 gate control (count enable)
  • 오버플로우시 인터럽트
  • 오버플로우시 Wake-up (external clock)
  • 시간 베이스 Capture/Compare 기능

타이머 TMR1 클럭소스 선택

T1CON레지스터의 TMR1CS 비트는 클럭소스를 선택하는데 사용됩니다.

Clock Source TMR1CS
Fosc/4 0
T1CKI pin 1

내부 클럭소스가 선택되었을때 TMR1H-TMR1L 레지스터는 프리스케일러에 의해 정해진 배수 만큼 Fosc 펄스에 증가 됩니다.

외부 클럭소스가 선택되었을때 본 타이머는 타이머나 카운터처럼 동작될수 있습니다. 카운터모드에서의 클럭은 MCU 내부 클럭과 동기화 시키기거나 비동기화 할 수 있습니다. 외부 클럭 오실레이터가 필요할 경우 PIC16F887 MCU는 INTOSC(CLKOUT과 함께)를 사용합니다. 타이머 TMR1은 클럭소스로 LP oscillator를 사용할수 있습니다.

타이머 TMR1 프리스케일러

타이머 TMR1은 입력 클럭 주파수의 1, 2, 4, 8 디비전을 허용하는 완전히 분리된 프리스케일러를 가지고 있습니다. 이 프리스케일러는 직접적으로 읽거나 쓸수 없지만 TMR1H, TMR1L 레지스터를 쓰고난 후 프리스케일러 카운터가 자동으로 클리어 됩니다.

TIMER TMR1 OSCILLATOR

RC0/T1OSO와 RC1/T1OSI 핀은 주변 회로부터 오는 펄스를 인식하기 위해 기본적으로 사용되지만 추가적인 기능이 있습니다. 그림에서 보듯 두개의 빈은 추가적인 LP quartz 오실레이터의 입력(RC1)과 출력으로 동시에 설정이 될수 있습니다. 이 회로는 원래 낮은 주파수에서 작동되게 하기 위해 디자인 되었습니다(up to 200 KHz). 좀더 자세히 말하면 32,768 KHz quartz crystal를 위해 디자인되었는데 이런 크리스탈은 1초 길이의 펄스를 얻기가 쉬어 quartz 시계에 많이 사용됩니다.

오실레이터는 내부클럭에 의존하지 않기때문에 슬립모드에서도 동작이 가능합니다. T1CON레지스터의 T1OSCEN 제어비트를 셋팅하면 활성화 시킬 수 있고 사용자는 소프트웨어 타임 딜레이를 주어 오실레이터가 적절하게 시작할수 있게 하여 주어야 합니다.

Timer TMR1 Oscillator

아래의 테이블은 Quartz 오실레이터에 맞는 케페이시터 값들입니다. 이런 값들은 정확할 필요는 없지만 일반적으로 용량이 높을수록 안정성이 높아집니다.

Oscillator Frequency C1 C2
LP
32 kHz 33 pF 33 pF
100 kHz 15 pF 15 pF
200 kHz 15 pF 15 pF

타이머 TMR1 GATE

TMR1 게이트 소스는 T1G핀이나 컴패레이터 C2의 출력에 의해 소프트웨어 설정 가능합니다. 이 게이트는 타이머가 T1G핀의 로직상태나, 컴페레이터 C2 출력을 이용한 아날로그 이벤트를 이용하여 직접적으로 외부 이벤트를 측정하게 합니다. 신호지속기간을 측정하기 위해 이 게이트를 활성화 시키고 게이트를 통과하는 펄스를 카운트하는 것으로 충분합니다.

TMR1 OSCILLATOR의 사용

MCU의 전력소리는 오실ㄹ이터가 작동하지 않는 슬립모드일때 최저가 됩니다. SLEEP 명령을 실행시켜서 슬립모드로 변경하여 주는 것은 쉽습니다만 다시 mcu를 깨우는 것이 문제가 됩니다.

이 문제를 해결하기 위해 완전히 독립적이며 슬립모드 중에도 동작이 가능한 Low Power quartz oscillator를 PIC16F887 에 집어 넣어 놓고 TMR1에 할당하였습니다. T1CON레지스터의 T1OSCEN비트를 셋팅함으로써 오실레이터를 활성화 할 수 있고 TMR1CS 비트는 TMR1을 이 오실레이터에서 오는 펄스들을 사용할수 있게 활성하하여 줍니다.

  • 앞서 설명한 quartz 오실레이터는 T1SYNC비트를 클리어함으로서 MCU와 동기화 할 수 있습니다. 이 경우에 타이머는 동기화 회로가 MCU클럭을 사용하기 때문에 슬립모드로 동작할 수 없습니다.
  • TMR1 레지스터 오버플로우 인터럽트도 활성화 될수 있습니다. T1SYNC 비트가 셋팅이 되면 그러한 인터럽트는 슬립모드시에 발생합니다.

TMR1 타이머 모드

타이머모드를 선택하기 위해서는 TMR1CS 비트를 클리어해야 합니다. 타이머모드가 되면 16-bit 레지스터는 내부 오실레이터에 의해 발생되는 매 펄스마다 하나씩 증가가 됩니다 만얀 4MHz 크리스탈이 사용된다면 매 microsecond마다 증가 됩니다.

이 모드에서는 T1SYNC 비트는 내부 클럭펄스를 세기 대문에 타이머에 영향을 미치지 않습니다. 전체 회로가 이러한 펄스를 사용하기 때문에 동기화할 필요가 없습니다.

MCU클럭 오실레이터는 슬립모드시에 동작하지 않으며 그러므로 타이머 레지스터 오버플로우는 인터럽트를 발생시키지 않습니다.

Let's do it in mikroC...

// In this example, TMR1 is configured as a timer with the prescaler rate 1:8. Every time
// TMR1H and TMR1L registers overflow occurs, an interrupt will be requested.


void main() {
PIR1.TMR1IF = 0; // Reset the TMR1IF flag bit
TMR1H = 0x22; // Set initial value for the timer TMR1
TMR1L = 0x00;
TMR1CS = 0; // Timer1 counts pulses from internal oscillator
T1CKPS1 = T1CKPS0 = 1; // Assigned prescaler rate is 1:8
PIE1.TMR1IE = 1; // Enable interrupt on overflow
INTCON = 0xC0; // Enable interrupt (bits GIE and PEIE)
TMR1ON = 1; // Turn the timer TMR1 on
...

카운터 모드 TMR1

TMR1은 TMR1CS비트를 셋팅하면 카운터로 작동하기 시작합니다. PC0/T1CKI 핀으로 오는 펄스를 세고 외부 클럽입력 T1CKI의 라이징 에지에 증가됩니다. T1SYNC의 컨트롤비트가 클리어되면 외부 클럽 입력은 TMR1 레지스터에 동기화 됩니다. 다시말하면 TMR1은 MCU시스템 클럭과 동기화 되고 동기식 카운터가 됩니다.

이러한 방법으로 동작될때, MCU가 슬립모드로 진입하면 TMR1H와 TMR1L 타이머 레지스터는 클럭펄스가 입력핀에 검출되어도 증가되지 않습니다. MCU시스템 클럭이 이 모드에서는 동작하지 않기 대문에 동기화를 위해 사용될 클럭 입력이 없습니다. 하지만 플리스케일러는 계속 작동되게 됩니다.

이 카운터는 입력 핀의 로직 1을 인식합니다. 펄스 카운팅을 시작하기 전에 최소한 한개의 falling edge가 인식되어야 합니다.

T1CON Register

T1GINV - Timer1 Gate Invert bit는 T1G핀 게이트상에서 로직 상태 컨버터나 comparator C2 출력 게이트 역확을 하며 이는 게이트가 high나 low일시에도 시간을 측정할수 있게 하여 줍니다.

  • 1 - Timer 1은 T1G핀이나 C2OUT 게이트가 하이(1)일시 카운트합니다.
  • 0 - Timer 1은 T1G핀이나 C2OUT 게이트가 로우(0)일시 카운트합니다.

TMR1GE - Timer1 Gate Enable bit는 T1G핀이나 C2OUT 게이트를 활성화 할지 안할지를 결정합니다. 이 비트는 TMR1이 ON되어 있을때 기능을 합니다. OFF일시는 무시됩니다.

  • 1 - Timer TMR1는 Timer1 게이트가 비활성화될 경우만 ON
  • 0 - 게이트는 TMR1에 아무런 영향 못줌

T1CKPS1, T1CKPS0 - TMR1에 할당된 프리스케일러의 rate 결정

T1CKPS1 T1CKPS0 Prescaler Rate
0 0 1:1
0 1 1:2
1 0 1:4
1 1 1:8

T1OSCEN - LP Oscillator Enable Control bit

  • 1 - LP oscillator가 TMR1클럭을 위해 활성화
  • 0 - LP oscillator는 OFF

T1SYNC - Timer1 External Clock Input Synchronization Control bit는 LP 오실레이터 입력 이나 T1CKI핀 입력을 MCU내부 클럭과 동기화 시켜줌. 메인 오실레이터부터의 펄스를 카운트하고 있을때 이 비트는 무시됨(bit TMR1CS = 0).

  • 1 - 외부 클럭 입력에 동기화 하지 않음
  • 0 - 외부 클럭 입력에 동기화

TMR1CS - Timer TMR1 Clock Source Select bit

  • 1 - T1CKI 핀의 펄스 카운트(rising edge 0-1).
  • 0 - MCU 내부 클럭의 펄스 카운트

TMR1ON - Timer1 On bit

  • 1 - timer TMR1 활성화
  • 0 - timer TMR1 중지

정리하면

TMR1를 적절하게 사용하기 위해서는 아래의 내용을 잘 숙지해야함

  • 프리스케일러는 OFF시키는 것이 불가능하므로, 프리스케일러의 rate는 T1CON레지스터의 T1CKPS1과 T1CKPS0비트를 이용하여 조절한다.
  • TMR1CS비트로 모드를 선택한다(TMR1CS: 0= 클럭소스 quartz oscillator, 1= 외부 클럭소스).
  • T1OSCEN bit를 셋팅하여 오실레이터를 활성화 시키고 TMR1H과 TMR1L 레지스터는 매 클럭 입력시마다 증가됨. 본 비트를 클리어하면 카운트 중지.
  • 프리스케일러는 카운터 레지스터를 클리어하면 클리어됨
  • 타이머 레지스터를 채워서 TMR1IF 플래그가 셋팅되며 0부터 카운트가 시작됨

제품정보: http://ubiquitics.co.kr/front/php/product.php?product_no=163&main_cate_no=1&display_group=2

가치창조기술 www.ubiquitics.co.kr | www.vctec.co.kr

 

 

첨부파일
비밀번호 삭제하려면 비밀번호를 입력하세요.
관리자게시 스팸신고 스팸해제
목록 삭제 수정 답변
댓글 수정

비밀번호 :

수정 취소

/ byte

댓글 입력

댓글달기이름 :비밀번호 : 관리자답변보기

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

관리자에게만 댓글 작성 권한이 있습니다.

 

이전 제품  
다음 제품