[Microchip]/PIC16F2012. 8. 18. 18:17

[PIC16F150x EVM] PIC16F1509 ADC, PWM 테스트

[PIC16F150x EVM] PIC16F1509 ADC, PWM 테스트

 

 

 

 

PIC16F1509는 4개의 10비트 PWM출력이 있다. 20Mhz에서 최대 208khz, 6.5bit 해상도로 출력 가능하다.

 

 

 

 

PIC16F1509 PWM초기화 코드

void Pwm1Init(void)
{
 Cbi(TRISC, BIT5);Cbi(ANSELC, BIT5);

 PWM1CON = 0x00; 
 T2CON = 0b00000111;
 
 PR2 = 255;

 PWM1DCH = PWM1DCL = 0x00; 
 
 T2CON = 0b00000100;  
 
 PWM1DCH = 0b00100000;


 PWM1EN = 1;

 PWM1OE = 1;

 PWM1OUT = 0

 PWM1POL = 0;

 }



void PWM1_SET(unsigned int Duty)

{

PWM1DCH = (Duty >> 2); PWM1DCL = (Duty << 6);

}

 

 

 

PIC16F157x PWM출력 핀맵

 

 

PIC16F1509 ADC, PWM테스트 예제 소스코드

ADC 4에 연결되어 있는 VR값에 따라 PWM을 가변하여 출력 하는 예제 코드 이다.

 

void main(void)
{
 unsigned int ad_value;
 unsigned int pwm = 0;

 SystemInit();
    Led1Init();
 Led1On();
 
 U0_Init(BAUD_57600);
 DebugPrint("PIC16F1509 EVM Test\r\n");
 
 AdcInit();
 Pwm1Init();
 
    while(1)
    {
 
  ad_value = AdcRead(4);
 
  pwm = ad_value;
  PWM1_SET(pwm);


  DebugPrint("PWM(ADC)=%d\r\n", pwm);;
  Delay(50);
    }
}

 

 

 

PIC16F1508 ADC, PWM테스트 동영상

ADC에 연결되 가변저항의 전압값에 따라 PWM을 출력하여 램프 밝기를 조절하는 테스트 동영상

 

 

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 8. 16. 01:08

[PIC16F150x EVM] PIC1509 초기화 및 클럭 설정

[PIC16F150x EVM] PIC1509 초기화 및 클럭 설정

 

PIC16F15xx 시리즈는 Enhanced Mid-range Core 로 저렴하면서 강력한 페리를 가진 MCU로 이전 PIC16시리즈와 클럭 시스템과 약간 다른 점이 있어 설정이 필요하다.

 

 

 

내부 클럭을 사용하면 31Khz에서 16Mhz로 설정 가능하고 기존 코드 호환을 위해 SystemInit()함수에 설정하였다.

void SystemInit(void)
{
 //grobal interrupt disable
 disable();   


 //Internal Oscillator Frequency Select bits
 /*
1111 = 16MHz
1110 = 8MHz
1101 = 4MHz
1100 = 2MHz
1011 = 1MHz
1010 = 500 kHz(1)
1001 = 250 kHz(1)
1000 = 125 kHz(1)
0111 = 500 kHz (default upon Reset)
0110 = 250 kHz
0101 = 125 kHz
0100 = 62.5 kHz
001x = 31.25 kHz
000x = 31kHz LF 
 */
 IRCF0 = 1;
 IRCF1 = 1;
 IRCF2 = 1;
 IRCF3 = 1;


  //SCS 1x = Internal oscillator block
 SCS0 = 1; 
 SCS1 = 1; 

}

 

 

 

클럭설을 16Mhz로 설정하고 정상적으로 클럭이 동작하는지 확인하기 위해 CLKOUT핀(RA4)으로 출력해 보았다.

CONFIG1 레지스터에 CLKOUT_ON을 설정하면 시스템 클럭의 1/4이 출력되는것을 확인 할 수 있다. 4Mhz출력 되는것이 확인된다.

RA4(CLKOUT)

 

CONFIG1

1 = CLKOUT function is disabled. I/O function on the CLKOUT pin
0 = CLKOUT function is enabled on the CLKOUT pin

 

 

__CONFIG(WDTE_OFF&MCLRE_ON&FOSC_INTOSC&CLKOUTEN_ON);

 

 

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 8. 12. 21:15

[PIC16F150x EVM] 보드 제작

 [PIC16F150x EVM] 보드 제작

 

 

PIC16F15xx 시리즈는 새롭게 출시된 저가격, 저전력의 MCU이다. 시리얼 포트 있고 저렴하기 때문에 저렴한 솔루션으로 사용될 곳이 많을것 같은아 테스트 하기 위해 s-Type 형태로 제작 해 보았다.

저렴한 16bit MCU임에도 10bit ADC, PWM, UART, SPI, I2C가 있고 특이하게 DAC출력까지 있다.

 

 

기존 PIC18F14K50 PCB동일한 핀맵이므로 PCB를 그대로 사용해서 테스트 했다.

 

 

s-Type 형태로 제작 해서 기존 확장 보드를 그대로 이용 가능하다.

 

 

 

 

저렴한 가격

PIC16F1508은 실제로 저렴한 가격인데 쇼핑몰에서 1350에 구매 가능하다.(이번에 PIC16F1509 25개 구매 했다.)

 

 

 

 


PIC16F150x EVM 회로도

 

 

 

 


 

PIC16F1508/PIC1509 핀맵

 

 

 

 

 

 

 

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

댓글을 달아 주세요