[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

댓글을 달아 주세요

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

[PIC16F723-S EVM] ADC테스트 - TFT LCD에 그래프 표시

[PIC16F723-S EVM] ADC테스트 - TFT LCD에 그래프 표시

 

 

PIC16F723은 저렴한 MCU 임에도 8bit ADC가 13채널이 있다. 8bit라 약간 아쉬움이 있지만 VREF도 있고 속도도 빨라 여러가지로 사용가능할것 같다.

 

PIC16F723 ADC 블록도

 

 

 

 

 

PIC16F723 ADC 레지스터

 

PIC16F723 ADC  초기화 함수

//ADC Initialize
void AdcInit(void)
{
 // initial A/D channel 0,1
 Sbi(TRISA, BIT0);
 Sbi(ANSELA, BIT0);

 VCFG1 = 0; //Low Voltage refences = VSS
 VCFG0 = 0; //High Voltage refences = VDD

 GODONE = 0; //A/D Conversion Start and Check this bit, if done,ADGO => 0
 ADON = 1; //A/D Conversion Operating

 //Sampling rate
 ADCS1 = 1;
 ADCS0 = 1;
}

 

 

PIC16F723 ADC Read 함수

unsigned char AdcRead(unsigned char port)
{
 ADCON0 = (0x3C&(port<<2)) | BIT0;

 //AD Converter Start
 GODONE  = 1;

 //AD End Check  
 while(GODONE)continue;

 //Read AD Converting Value
 return ADRES;
}

 

 

 

PIC16F723 ADC테스트 동영상

PIC16F723 EVM 확장 보드 ADC0 에 연결된 가변저항의 전압값을 TFT LCD에 표시하는 예제 이다.

 

 

 

PIC16F723 ADC 테스트 소스코드

void main(void)
{
 unsigned char adc_value;

 SystemInit();
    Led1Init();

 

 U0_Init(BAUD_57600);
 DebugPrint("PIC16F723 EVM Test\r\n");

 

 IntAdc();

 

    while(1)
    {
        adc_value = AdcRead(0);
 
        DebugPrint("%d\r\n", adc_value );

        Delay(10);

    }
}

 

 

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요

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

[PIC16F723 EVM] UART 테스트

[PIC16F723 EVM] UART 테스트

 

 

 

 

PIC16F723 UART 블록도

 

 

 

 

 

PIC16F723 UART 보레이트 설정

 

 

 

PIC16F723 UART 초기화 함수

// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned char baud)
{
 U0_SetBaud(baud);
 
 TRISC6 = 0;     // TX Output
 TRISC7 = 1;     // RX Input
 
 TXSTA = 0b00000100;   // 8bit Transmission, Asynchronous Mode
        // High Speed,
 RCSTA = 0b10000000;   // Serial Port Enable, 8bit Reception
     `  
 TXEN = 1;     // TX Enable
 CREN = 1;     // RX Enable
}

 

 

 

PIC16F723 UART 송수신 함수

unsigned char U0_GetByte(void)
{
 while(!RCIF); // Wait for data in the UARTRx.

    return (RCREG);
}

 

void U0_PutByte(unsigned char Data)
{
 while(!TRMT);

 TXREG = Data;
}  

 

 

* 참고로 Hitech C 컴파일러는 무료버전을 사용하므로 printf는 지원이 안된다. 약간 다른 방법으로 구현 했는데.. 용량은 그렇게 많지 않는것 같다.

 

    Program space        used   3E9h (  1001) of  1000h words   ( 24.4%)
    Data space           used    37h (    55) of    C0h bytes   ( 28.6%)
    EEPROM space         None available
    Configuration bits   used     1h (     1) of     2h words   ( 50.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

 

 

 

PICF723 UART 테스트 프로그램 소스

void main(void)
{
 unsigned char rx;
 unsigned int cnt = 0;
 SystemInit();
    Led1Init();
 
 U0_Init(BAUD_57600);
 DebugPrint("PIC16F723 EVM Test\r\n");

    while(1)
    {
  rx = U0_GetByte();

  switch(rx)
  {
   case '0':
    Led1Off();
    DebugPrint("LED Off = %d\r\n", cnt++);
    break;

   case '1':
    Led1On();
    U0_PutStr("LED On\r\n");
    break;
  }
    }
}

 

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 5. 14. 00:54

[PIC16F723] 클럭 설정 - 성능 측정

 

[PIC16F723] 클럭 설정 - 성능 측정

 

 

 

PIC16F723  은 최대 20Mhz로 동작 가능하고 내부 오실레이터 이용시 16Mhz로 동작한다.

입력 클럭의 설정은 Config레지스터를 이용하여 설정 가능하다. 디폴트는 내부 오실레이터이다.

 

 

__CONFIG(WDTE_OFF&PLLEN_ON&FOSC_INTOSCCLK&MCLRE_ON);

 

 

 

내부 오실레이터 구조

PIC16F72x 는 내부에 1%정밀도의 오실레이터가 있기 때문에 외부 실레이터 연결할 필요 없이 간단히 사용할 수 있다.

최대 16Mhz까지 가능하고 디폴트 8Mhz로 동작한다.

 

오실레이터 관련 설정은  OSCCON 레지스터에서 가능하다.

 

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

 

 // Set internal oscillator frequency

//16MHz Internal Clock Select : 
 OSCCON = 0x30; 

}

 

 

 

 

 

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 5. 14. 00:52

[PIC16F723-S EVM] 보드 제작 - 500원대 저전력 MCU

 [PIC16F723-S EVM] 보드 제작 - 500원대 저전력 MCU

 

 

 

저렴한 저전력 솔루션 으로 쓸만한 MCU(실제 쇼핑몰에서 500원대로 몇개 구매 했다.)로 PIC16F nanoWatt XLP Technology 테스트 보드를 제작했다.

 

 

 

 

 

PIC16F723 확장 테스트 보드

[S-Type EVM] 보드 형태로 제작해 표준 핀맵으로 여러 확장 보드에서 테스트 가능하다.

 

 

 

 

PIC16F723 보드 회로도

 

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요