'PIC12F683'에 해당되는 글 2건

  1. 2011.03.03 [PIC12F EVM] Soft UART 테스트
  2. 2011.03.01 [PIC12F EVM] ADC테스트
[Microchip]/PIC12F_PIC10F2011. 3. 3. 21:00

[PIC12F EVM] Soft UART 테스트

[PIC12F EVM] Soft UART 테스트


소형 MCU에서 UART를 이용하면 디버깅 하기에 편리한 점이 많다. PIC12F683 보드도 Soft UART를 이용하여 시리얼 제어 [LCD Module] 에 디버깅 정보를 표시하는 테스트를 해 보았다.

먼저 Serial.c 코드를 좀 수정하여 기존 코드와 호환 가능하도록 수정한다.
//  GPIO.0 as UART Rx, and 1 as Tx
#define SOFT_UART_INIT()     do{ \
         TRISIO = 0x39;\
         ANSEL = 0x00;\
         GPIO = 0;\
         Soft_UART_Init(&GPIO,0, 1, 9600, 0 );\
         }while(0)


#define U0_PutByte             Soft_UART_Write


void U0_Init(unsigned char baud)
{
        SOFT_UART_INIT();
}


PIC12F683 UART테스트 예제 코드
void main()
{
    unsigned char buf[6];

    SystemInit();

    //UART초기화
    U0_Init(BAUD_9600);

    Delay(1000);

    Led1Init();

    U0_PutByte(4);
    Delay(500);
   
             //0123456789abcdef
    U0_PutStr("PIC12 LCD Test");
    U0_PutStr("\r\n");
 
    while(1)
    {
                Led1Toggle();
   
                PutInt(0, count++, buf);
                U0_PutStr(buf);
                U0_PutStr("\n");

                Delay(300);
    }
}

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC12F_PIC10F2011. 3. 1. 23:00

[PIC12F EVM] ADC테스트

[PIC12F673 EVM] ADC테스트



PIC12F 에는 10비트 ADC가 4채널 포함되어 있다.
아래는 PIC12F683의 ADC블록도 이다.



사용법은 간단하다.  ADCON0레지스터에 초기화 해주고 ADRES레지스터 값을 읽으면 된다.



PIC12F683 ADC 제어 코드
void ADC_Init(void)
{
    Cbi(ANSEL, BIT3);
    Sbi(TRISIO, BIT4);
   ADCON0 = 0x8D;
}

unsigned int ADC_Read(unsigned char Ch)
{
 if(Ch == 0)Cbi(ADCON0, BIT2|BIT3);
 else if(Ch == 1){Sbi(ADCON0, BIT3);Sbi(ADCON0, BIT2);}
 else if(Ch == 2){Sbi(ADCON0, BIT3);Cbi(ADCON0, BIT2);}
 else if(Ch == 3)Sbi(ADCON0, BIT2|BIT3);
 
 GODONE = 1;while(GODONE);  
  
 return (ADRESH<<8)|ADRESL; 
}


VR이 연결된 채널3의 ADC값을 LCD에 출력해서 확인하는 테스트를 해 보았다.
먼저 PIC12F683보드의 전원을 연결하고 VR을 연결한다.



LCD에 표기하기 위해  [LCD Module] 을 이용한다. 브레드보드에서 쉽게 확장하기 위해 만들었던 PCB를 이용하면 쉽게 연결가능하다.



PIC12F683 ADC테스트 예제 소스코드
void main(void)
{
 unsigned int cnt = 0;

 //시스템 초기화
 SystemInit();
 
 //LED초기화
 Led1Init();

 //ADC초기화
 ADC_Init();

 //LCD초기화
 InitShfitRegister();
 LcdInit();
 
 //               0123456789abcdef
 LcdDspStr(0, 0, "1:PIC12F683 EVM ");
 LcdDspStr(0, 1, "ADC:");

 while(1)
 {
  SendIntStr(5, 1, ADC_Read(3));
  Delay(50);
 }
}



테스트 동영상


Posted by nexp

댓글을 달아 주세요