[Microchip]/PIC16F2014. 11. 1. 22:24

PIC16F723 내부 풀업저항 설정

PIC16F723 내부 풀업저항 설정

PIC16F723/PIC16F724  EVM  보드에서는 P_A7(PB7)이 저항을 통해 스위치로 연결되어 있다.

MCU에서 풀업이 필요하다.

PIC16F723에는 GPIOB에 내부 풀업저항이 있고 WPUB(WEAK PULL-UP PORTB REGISTER) 레지스터를 통해 설정 가능하다.
1일경우 플업이 된다. 




여기서 주의 사항은 OPTION_REG 에서 RBPU비트를 0으로 설정해 주어야 풀업이 가능하다. 



실제 코드에서는 아래와 같이 정의해 주면 된다.

//-----------------------------------------------------------------------------
//Switch Driver
#define SW1_BIT       BIT7
#define SW1_PORT      PORTB
#define Sw1Init()      Sbi(TRISB, SW1_BIT);Cbi(ANSELB, SW1_BIT);nRBPU=0;Sbi(WPUB, SW1_BIT);
#define GetSw1()      !(SW1_PORT&SW1_BIT)
#define WaitForSw1()  

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



Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2013. 4. 7. 23:00

[mTouch] PIC16F274 Capacitive Touch 테스트

[mTouch] PIC16F274 Capacitive Touch 테스트

 

 

 

MICROCHIP사는 Capacitive Touch Sensing 솔루션으로 mTouch 를 제공하고 있다. PIC16F723은 하드웨어 적으로 8채널의 capacitive sensing module 을 제공하고  PIC16F724는 16채널을 제공한다.

 

CPS0~CPS15 핀을 이용하면 부가적인 하드웨어 필요 없이 터치 센싱이 가능하다.

 

 

 

 

CAPACITIVE SENSING MODULE 초기화 코드

void CapInit(void)
{
 // Initialize for Timer0 time base
 OPTION = 0b11000010;    // Timer0 init ( Prescaler:TMR0, 1:8 )
 T0IF = 0;       // enable tmr0 intpt
 T0IE = 1; 

 // Initialize for Timer1 time Resource
 // Timer1 enable, system clock, 1:1 prescale
 T1CON  = 0b11000101;

 // Cap Sense Module
 // CPSON
 CPSON  = 1;
 
 //Cap Sensing Osc Range Bits(18uA)
 CPSRNG0 = 1;
 CPSRNG1 = 1;
 
 // init to channel select = 0 (4 LSb's) 
 CPSCON1 = 0x00;      
}

 

 

 

 

 

mTouch Capacitive Touch 테스트 동영상

기존 Touch Sensing 테스를 위해 제작해 둔 보드를 이용하여 테스트 했다. 터치에 따라 FND에 출력하는 예제 이다.

 

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 6. 11. 01:44

[PIC16F723] RF 전송 테스트 - 무선으로 ACD값 그래프 표시 하기

 [PIC16F723] RF 전송 테스트 - 무선으로 ACD값 그래프 표시 하기

 

 

PIC16F723은 마아크로칩사의 저렴한 저전력  MCU(실제 쇼핑몰에서 600원대에 구매 했다)이다. 저전력으로 구동할 수 있는 어플리케이션으로 RF가 좋은데 915(433)Mhz RF 모듈로 ADC값을 전송하는 테스트를 해 보았다.

 

 

 테스트 보드는 기존에 다른 용도로 제작되었던 보드인데 핀맵이 호환되므로 PIC16F723 보드를 연결하여 사용이 가능하다.

 

 

 

RF모듈 드라이버 코드

 

//-----------------------------------------------------------------------------
#define NRF_PWR_UP                   BIT6
#define NRF_PWR_HIGH()     Sbi(PORTB, NRF_PWR_UP)
#define NRF_PWR_LOW()     Cbi(PORTB, NRF_PWR_UP)

 

#define NRF_TXEN                     BIT3
#define NRF_TXEN_HIGH()     Sbi(PORTA, NRF_TXEN)
#define NRF_TXEN_LOW()     Cbi(PORTA, NRF_TXEN)


#define NRF_TRX_CE                   BIT7
#define NRF_TXCE_HIGH()     Sbi(PORTB, NRF_TRX_CE)
#define NRF_TXCE_LOW()     Cbi(PORTB, NRF_TRX_CE)

 

#define NRF_CS_PORT      PORTC
#define NRF_CS_BIT      BIT2

#define NRF_CS_HIGH()     Sbi(NRF_CS_PORT, NRF_CS_BIT)
#define NRF_CS_LOW()     Cbi(NRF_CS_PORT, NRF_CS_BIT)

 

#define NRF_DR_BIT      BIT2
#define NRF_GET_DR()     (PORTB&NRF_DR_BIT)

#define NRF_AM_BIT      BIT3
#define NRF_GET_AM()     (PORTB&NRF_AM_BIT)

 

 

#define NRF_SendByte     SPI0_WriteReadByte
#define NRF_InitSpi()     SPI0_Init()
#define NRF_SpiSpeed_Low()    SPI0_SetSpeed(SPI_SPEED_1MHZ)
#define NRF_SpiSpeed_High()    SPI0 _SetSpeed(SPI_SPEED_4MHZ)

 

 

#define NRF_PORT_INIT()     Cbi(TRISB, (BIT6|BIT7));Sbi(TRISB, (BIT2|BIT3));Cbi(ANSELB, (BIT2|BIT3|BIT6|BIT7));\
          Cbi(TRISA, BIT3);Cbi(ANSELA, BIT3);\
          Cbi(TRISC, BIT2);
//-----------------------------------------------------------------------------

 

 

 

PIC16F723 RF테스트 동영상

저렴하게 구성한 RF모듈임에도 실제 전송되는 속도는 2ms로 아주 고속으로 전송이 가능하다.

아래는 PIC16F723 보드에서 가변저항의 ADC값을 RF로 전송하는 테스트 데모이다.

 

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 6. 9. 01:31

[PIC16F73] SPI 테스트

[PIC16F73] SPI 테스트

 

- FOSC/4 (or TCY)
- FOSC/16 (or 4 • TCY)
- FOSC/64 (or 16 • TCY)
- (Timer2 output)/2 data rate of 5 Mbps(at FOSC = 20 MHz).

 

 

PIC16F723 SPI 블록도

 

 

 

 

 

 

PIC16F723 SPI 레지스터

 

 

 

 

 

PIC16F723 SPI초기화 함수

void SPI0_Init(void)
{
 //RC3 pin => SCK output
 //RC4 pin => SDI input
 //RC5 pin => SDO output
 SSPBUF = 0x00;  //SSPBUF Clear
 ADCON1 = 0x06;

 Cbi(TRISC, (BIT3|BIT5));
 Sbi(TRISC, (BIT4));

 SSPSTAT = 0;
 SSPEN = 1;    //spi enable
 SSPM2 = 0;    //master 

 SSPM1 = 0;SSPM0 = 0; // FOSC/4
 
 CKE = 1;        // data transmitted on rising edge
 CKP = 0;        // clock idle state low
}

 

 

PIC16F723 SPI Write Read함수 포팅

unsigned char SPI0_WriteReadByte(unsigned char Data)
{
 SSPBUF = Data;           // write to buffer for TX
 while ( !BF );          // wait until cycle complete
 return ( SSPBUF );      // return with byte read
}

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 5. 14. 01:10

[PIC16F723] Timer0 인터럽트 테스트

 

[PIC16F723] Timer0 인터럽트 테스트

 

 

 

 

 

PIC16F723 타이머 구조

 

 

 

OPTION레지스터를 이용하여 Timer0관련 클럭 설정을 할 수 있다.

 

 

PIC16F723 타이머 초기화

void InitTimer0(void)
{

 // TMR0 Associate Registers Initial
 PS0 = 1        // Prescaler 1:4

 

 TMR0 = INTERVAL_1mS;  // Initial TMR0
 
 // Interrupt Associate Registers Initial
 T0IF = 0;     //Clear TMR0 Interrupt Flag
 T0IE = 1;     //Enable TMR0 Interrupt


 GIE = 1;     //Enable Global Interrupt

}

 

 

 

PIC16F723 타이머 인터럽트 핸들러(HTC)

//인터럽트 핸들러 

interrupt ServiceRoutine()
{
   // Timer0 Interrupt 발생하면

   if(T0IF)

  { 

    TMR0 = INTERVAL_1mS;  // Initial TMR0

    T0IF = 0;     // Clear Interrupt Flag

  }

 

 

 

 

Posted by nexp

댓글을 달아 주세요