전체상품목록 바로가기

본문 바로가기

오늘하루 열지않기


현재 위치

  1. 고객센터
  2. 자료실

자료실

자료실입니다.

게시판 상세
제목 [PIC 프로그래밍] 10. PIC16F887 입출력 포트
작성자 가치창조기술 (ip:)
  • 작성일 2011-08-18 14:28:25
  • 추천 추천하기
  • 조회수 3075
평점 0점

 

입력/출력 포트

마이크로컨트롤러의 8비트 구조와 맞추기 위하여, I/O포트는 레지스터와 비슷하게 A, B, C, D, E의 5개의 포트로 그룹지어 있습니다. 5개의 포트는 비슷한 특징을 가지고 있는데,

  • 대부분의 I/O핀은 여러가지 기능을 가지고 있고, 이 기능을 수행할 경우 범용 I/O핀으로는 사용이 불가합니다.
  • 모든 포트는 포트에 대응되는 TRIS 레지스터를 가지고 있습니다: TRISA, TRISB, TRISC 등등. TRIS레지스터는 포트 비트의 쓰임을 결정합니다.

TRIS레지스터의 비트를 0으로 클리어하면 이에 상응하는 포트 핀은 출력으로 설정이 됩니다. 비슷하게 TRIS레지스터의 비트를 1로 설정하면 이에 상응하는 포트는 입력으로 설정됩니다. 쉽게 이렇게 기억하면 좋습니다. 0 = Output, 1 = Input.

PORTA와 TRISA register

Port A는 8비트 양방향 포트입니다. TRISA와 ANSEL 레지스터가 PORT A 핀을 제어합니다. 모든 PORT A 핀은 디지털 입력/출력으로 동작하며, 그중 다섯은 아날로그 입력으로도 사용이 가능합니다.:

RA0 = AN0 (ANSELregister 의 ANS0 비트에 의해 결정)

RA1 = AN1 (ANSELregister 의 ANS1 비트에 의해 결정)

RA2 = AN2 (ANSELregister 의 ANS2 비트에 의해 결정)

RA3 = AN3 (ANSELregister 의 ANS3 비트에 의해 결정)

RA5 = AN4 (ANSELregister 의 ANS4 비트에 의해 결정)

TRISA 레지스터가 입력으로 쓰일것인지 출력으로 쓰일것인지를 결정하는 것처럼, ANSEL 레지스터의 비트도 아날로그 입력으로 사용될 것인지 아니면 디지털 입출력으로 사용될 것인지를 설정하는데 사용됩니다.

Let's do it in mikroC...

// The PORTA.2 pin is configured as a digital input. 
// All other PORTA pins are digital outputs


ANSEL = ANSELH = 0; // All I/O pins are configured as digital
PORTA = 0; // All PORTA pins are cleared
TRISA = 0b00000100; // All PORTA pins except PORTA.2 are configured as outputs
...

ULPWU UNIT

마이크로컨트롤러는 배터리로 동작하는 장치에 흔히 사용됩니다. 이러한 장치에서는 낮은 전력 소비가 매우 중요합니다. 클럭주파수를 낮추어 전력소비를 줄이는 방법도 있지만,

ULPWU Unit

마이크로컨트롤러를 슬립모드로 셋팅하는 것도 다른 방법입니다. 문제는 슬립모드일시 마이크로컨트롤러를 어떻게 다시 깨우느냐하는 것이죠. 외부에서 MCU 핀중의 하나에 로직상태를 변경시켜주어야 하는것은 명확한데, 그 신호를 만들어 주는 추가 장치는 더많은 전력을 잡아 먹을지도 모릅니다.

이상적인 해결책은 마이크로컨트롤러가 스스로 주기적으로 일어나는 것이며, 이것은 불가능한 사항이 아닙니다.

작동원리는 간단합니다:

한개의 핀을 출력으로 설정하고 로직1을 줍니다. 이것은 캐패이시터를 충전되게 만듭니다. 바로 직후에, 동일 핀을 입력으로 설정합니다. 로직상태의 변화시 인터럽트를 활성화시키고 마이크로 컨트롤러는 슬립모드로 셋팅됩니다. 남은것은 입력 핀을 통해 전류가 흘러가면서 캐패이시터가 방전되기를 기다리는 것입니다. 방전이 될때, 인터럽트가 발생하고 마이크로컨트롤러는 정상모드로 프로그램을 실행합니다. 이러한 과정이 반복 되게 됩니다.

Sleep Mode

이론적으로 이방법은 완벽한 해결책입니다. 문제는 이러한 방법으로 인터럽트를 발생시킬수 있는 모든 핀들이 디지털이며, 핀들의 전압이 Vdd(1)이나 Vss(0)에 가깝지 않다면 상대적으로 많은 전류 누수를 가진다는 점입니다. 이경우에는 콘덴서는 짧은 시간동안에 방전됩니다. 이러한 이유때문에 ULPWU 회로가 디자인되었는데 ULPWU는 최소의 전력소비로 천천히 전압강하가 일어나게 만듭니다. ULPWU의 출력은 인터럽트를 발생시키고 반면에 입력은 MCU 핀(RA0)에 연결이 되어 있습니다. 위의 그림상에서 R=200 ohms, C=1nF 이므로, 방전시간은 대략 30mS이고 전력소비는 1000배 정도 낮습니다.

PORTB와 TRISB register

Port B는 8비트이며 양방향 포트입니다. TRISB 레지스터는 핀의 기능을 결정합니다.

port A와 비슷하게 TRISB은 PORTB핀을 설정할수 있습니다. 포트중 여섯개의 핀은 아날로그 입력(AN)으로 동작합니다. ANSELH 레지스터의 비트들은 핀들이 아날로그 입력으로 동작할지 디지털 입출력으로 동작할지는 결정합니다:

RB0 = AN12 (ANSELH register의 ANS12 비트에 의해 결정)

RB1 = AN10 (ANSELH register의 ANS10 비트에 의해 결정)

RB2 = AN8 (ANSELH register의 ANS8 비트에 의해 결정)

RB3 = AN9 (ANSELH register의 ANS9 비트에 의해 결정)

RB4 = AN11 (ANSELH register의 ANS11 비트에 의해 결정)

RB5 = AN13 (ANSELH register의 ANS13 비트에 의해 결정)

각각의 포트B 핀은 빌트인된 주변 유닛과 관련된 추가적인 기능이 있습니다.

이 포트는 다른 포트와 구별되는 특별한 기능들이 있고 많이 사용되고 있습니다.

  • 모든 포트B 핀들은 내장 풀업저항을 가지고 있습니다. 그래서 푸쉬버튼, 스위치, 옵토커플러 등을 연결하기에 이상적입니다. 포트에 이런 풀업저항을 연결하기 위해서는 WPUB레지스터의 비트가 적절하게 셋팅되어야 합니다.

*WPUB register의 비트를 제외하고, 풀업레지스터에 영향을 미치는 다른 비트가 있는데 OPTION_REG의 RBPU비트입니다.

  • 만약 활성화되어 있다면, 각각의 입력으로 설정된 포트B 비트는 로직상태가 변하게 되면 인터럽트를 발생시킬수 있습니다. 인터럽트를 발생시키게 핀을 활성화하려면, IOCB레지스터의 해당비트가 설정되어 있어야 합니다.

이 기능때문에 port B 핀들은 키보드의 푸쉬버튼을 체크하기 위해 흔히 사용되며, 버튼을 항상 스캔할 필요가 없어집니다.

X, Y, Z 핀이 출력으로 설정되고 로직1로 셋팅되면, 버튼이 눌림에 따라 발생하는 인터럽트 요청을 기다리기만 하면 됩니다. 이후에는 어떤 버튼이 눌리어 졌는지 체크하면 됩니다.

Let's do it in mikroC...

/* The PORTB.1 pin is configured as a digital input. Any change of its logic state will cause
an .i.n.terrupt. It also has a pull-up resistor. All other PORTB pins are digital outputs.*/


ANSEL = ANSELH = 0; // All I/O pins are configured as digital
PORTB = 0; // All PORTB pins are cleared
TRISB = 0b00000010; // All PORTB pins except PORTB.1 are configured as outputs
RBPU = 0; // Pull-up resistors are enabled
WPUB1 = 1; // Pull-up resistor is connected to the PORTB.1 pin
IOCB1 = 1; // The PORTB.1 pin may cause an interrupt on logic state change
RBIE = GIE = 1; // Interrupt is enabled
...

PIN RB0/INT

RB0/INT 핀은 외부 인터럽트 소스입니다. 이 핀은 rising edge나 falling edge에 반응할수 있도록 설정할 수 있습니다. OPTION_REG의 INTDEG비트는 적절한 신호를 선택할수 있게 합니다.

RB6와 RB7 PINS

PIC16F887는 ROM 프로그래밍 전용 핀을 가지고 있지 않습니다. 범용IO핀을 이 용도로 사용하는데, 좀더 자세히 말하면 프로그래밍시 RB6을 clock, RB7을 데이터 전송용으로 사용합니다. 플래쉬 프로그래밍을 위해서는 Vdd 5V와 Vpp 12-14V가 적용되어야 하고, 프로그래밍시 Vpp전압은 MCLR핀에 적용이 되어야 합니다. 이런 것들은 프로그래머 회로가 다 처리해주기 때문에 구체적인 내용에 대해 신경쓰지 않아도 됩니다. 중요한 것은 MCU가 타켓보드상에 납땜되어도 위에서 언급한 방법으로 MCU 프로그래밍이 가능하다는 점입니다.이러한 기능을 ICSP (In-Circuit Serial Programming)이라고 합니다.

마이크로컨트롤러에 프로그래밍에 필요한 전압을 공급하기 위한 5핀 커넥터만 설치하면 되기때문에 간단합니다. 프로그래밍 전압이 다른 회로를 간섭하는것을 방지하기 위해 프로그래밍시에는 다른 주변장치와는 연결을 끊어주어야합니다.

On-board connector for ICSP programming Programmer's socket

프로그래머 소켓에 적용된 접압과 ICSP 프로그래밍시 사용된 전압이 같음을 알수있습니다.

PORTC와 TRISC register

Port C는 8비트 양방향 포트입니다. TRISC레지스터의 비트가 각 핀의 기능을 결정합니다. 다른 포트와 비슷하게 TRISC레지스터에 로직1을 주어 해당 핀을 입력으로 설정할수 있습니다.

 

PORTD와 TRISD register

Port D는 8비트 양방향 포트입니다. TRISD레지스터의 비트가 각 핀의 기능을 결정합니다. 다른 포트와 비슷하게 TRISD레지스터에 로직1을 주어 해당 핀을 입력으로 설정할수 있습니다.

PORTE와 TRISE register

Port E는 4비트의 양방향 포트입니다.

TRISE 레지스터 비트는 핀의 기능을 결정합니다. 다른 포트와 비슷하게 TRISE레지스터에 로직1을 주어 해당 핀을 입력으로 설정할수 있습니다.

RE3 핀은 항상 입력으로만 설정됩니다.

ports A, B와 비슷하게 세개의 핀은 아날로그 입력으로 설정이 가능합니다.ANSELH 레지스터 비트가 핀이 아날로그 입력(AN)으로 사용될지 디지털 입/출력으로 사용될지를 결정합니다.:

RE0 = AN5 (ANSELregister의 ANS5비트에 의해 결정);

RE1 = AN6 (ANSELregister의 ANS6비트에 의해 결정);

RE2 = AN7 (ANSELregister의 ANS7비트에 의해 결정).

Let's do it in mikroC...

/* The PORTE.0 pin is configured as an analog input while another three pins of the same
port are configured as digital. */

...
ANSEL = 0b00100000; // The PORTE.0 pin is configured as analog
ANSELH = 0; // All other I/O pins are configured as digital
TRISE = 0b00000001; // All PORTE pins except PORTE.0 are configured as outputs
PORTE = 0; // All PORTE pins are cleared
...

ANSEL와 ANSELH register

ANSEL와 ANSELH 레지스터는 I/O핀의 입력모드를 아날로그 혹은 디지털로 설정하는데 사용됩니다.

The rule is:

아날로그 입력으로 핀을 설정하기 위해서는 ANSEL/ANSELH레지스터의 해당비트를 1로 셋팅해야하며 디지털 입출력으로 셋팅하기 위해서는 해당비트를 0으로 클리어 해야합니다.

ANSEL비트의 상태는 디지털 출력에 아무런 영향을 미치지 못합니다. 아날로그로 설정된 핀을 읽을려는 시도에 대한 결과값은 0이 됩니다.

정리하면,

  • 장치를 디자인할때, 어떤 포트를 통해 주변 환경과 통신할 것인지를 고릅니다. 디지털 입출력만 이용할 것인지 아날로그 입력도 이용할 것인지를 선택한후 포트를 고릅니다.
  • 각각의 포트는 입력이나 출력으로 구성이 될수 있습니다. TRISA, TRISB, TRISC, TRISD, TRISE 레지스터의 비트는 해당 포트 핀의 동작(입력/출력)을 결정합니다.
  • 아날로그 입력을 사용한다면, ANSEL, ANSELH 레지스터의 해당비트를 프로그램 시작시 셋팅해주어야 합니다.
  • 스위치나 푸쉬버튼을 입력신호 소스로 사용한다면, 그것들을 풀업레지스터가 있는 포트B핀에 연결하십시오. 이 레지스터의 사용은 OPTION_REG레지스터의 RBPU비트에 의해 활성화 되며 반면에 각각의 풀업저항은 WPUB레지스터에 의해 활성화됩니다.
  • 입력핀의 로직상태가 변화면 바로 응답하는 것이 보통 필요합니다만 핀의 로직상태를 체크하기 위한 프로그램을 작성하는 것을 필요하지 않습니다. 차라리 그러한 입력을 PORTB에 연결하고 접압변화에 인터럽트가 발생하도록 활성화 시키는것이 훨씬 간단합니다. IOCB/INTCON레지스터의 비트를 통해 활성화가 가능합니다.

 

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

개발용 보드

제품특징

  • PIC, dsPIC, PIC24, PIC32MX, AVR, PSoC, 8051, ARM 마이크로프로세서 지원
  • 프로그래머 및 ICD 디버거가 개발보드에 내장되어 있어 경제적
  • COG/LCD/GLCD 장착
  • MCU의 모든 핀들은 개발보드상의 인터페이스 핀에 연결되어 있음
  • 개발보드상의 DIP스위치를 이용하여 개발보드를 설정
  • MCU 핀에 LED 및 푸시버튼이 보드상에 연결되어 있음
  • 즉시 사용가능한 다양한 예제 지원
  • 마이크로일렉트로니카 컴파일러 지원
  • 다양한 개발용 악세사리를 개발보드상에 연결하여 사용이 가능

제품군:

제품군 설명
Microchip PIC

Microchip PIC용 개발보드 제품군

Microchip dsPIC Microchip dsPIC용 개발보드 제품군
Microchip dsPIC24-33 Microchip dsPIC24-dsPIC33용 개발보드 제품군
Microchip PIC32MX Microchip PIC32MX용 개발보드 제품군
Atmel AVR 및 XMega Atmel AVR 및 XMega용 개발보드 제품군
Cypress PSoC Cypress PSoC용 개발보드 제품군
Atmel 8051 Atmel 8051용 개발보드 제품군
NXP ARM NXP ARM용 개발보드 제품군
GPS 개발보드 GPS 개발보드 제품군
MCU 컴파일러

제품특징

  • PIC, dsPIC, PIC24, PIC32, AVR, 8051 마이크로프로세서 지원
  • 편리하고 직관적인 IDE환경
  • 500개 이상의 라이브러리 함수지원으로 개발시간 절약
  • 다양한 개발용 툴 지원
  • mikroProg 하드웨어 In-Circuit Debugging 지원
  • 즉시 사용가능한 예제 지원

제품 모델:

제품 설명
PIC용 컴파일러 Microchip PIC용 컴파일러
AVR용 컴파일러 Atmel AVR용 컴파일러
dsPIC30/33 및 PIC24용 컴파일러 Microchip dsPIC30/33 및 PIC24용 컴파일러
PIC32용 컴파일러 Microchip PIC32용 컴파일러
8051용 컴파일러 Atmel 및 Silicon Labs 8051용 컴파일러

개발용 악세사리보드

제품특징

  • 악세사리보드로 다양한 MCU와 주변장치의 기능을 테스트
  • 통신/저장/시간측정/디스플레이/측정/오디오/전원공급/기타 등의 악세사리보드
  • Mikroelektronika 개발보드에 연결하여 사용 가능
  • 즉시 사용 가능한 예제 제공

제품군:

제품군 설명
통신용 보드 통신용 악세사리보드
스토리지 보드 스토리지용 악세사리보드
시간측정용 보드 시간측정용 악세사리보드
디스플레이 보드 디스플레이용 악세사리보드
센서 및 측정보드 센서 및 측정용 악세사리보드
오디오 및 보이스 보드 오디오 및 보이스용 악세사7리보드
전원제어보드 전원제어용 악세사리보드
기타보드 릴레이, RFID, 센서 등의 다양한 악세사리보드

MCU 개발용 키트

제품특징

  • PIC, dsPIC, PIC24, PIC32, AVR, 8051 마이크로프로세서 지원 개발용 키트
  • 개발에 필요한 개발보드, 컴파일러 및 악세사리보드 포함
  • 개발용 키트 묶은 구매로 개별구매보다 저렴

제품군:

Part Number 모델 설명
PIC 개발용 키트 Microchip PIC 개발용 키트
dsPIC30 개발용 키트 Microchip dsPIC30 개발용 키트
dsPIC33-PIC24 개발용키트 Microchip dsPIC33-PIC24 개발용 키트
AVR 및 XMega 개발용키트 Atmel AVR 및 XMega 개발용 키트

8051 개발

용 키트

Atmel 및 Silicon Labs 8051 개발용 키트         


 



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

비밀번호 :

수정 취소

/ byte

댓글 입력

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

확인

/ byte

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

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

 

이전 제품  
다음 제품