[Microchip]/PIC24F2013. 1. 12. 23:30

[PIC24F16KA EVM] ADC 테스트 - TSL251 Light to Voltage Converter

[PIC24F16KA EVM] ADC 테스트 - TSL251 Light to Voltage Converter

 

 

PIC24F16KA는 500ksps 10bit ADC를 내장하고 있다.

하드웨어적으로 약간의 차이는 있지만 코드는 dsPIC33 ADC 테스트와 거의 호환이 된다.

 

 

 

 

PIC24F ADC 테스트 동영상

PIC24의 ADC는 10bit이고 광센서 TSL251 Light to Voltage Converter를 이용해서 ADC값을 출력해 보았다.

LX1971 센서와 비교해서 광센서의 성능차이도 확이해 볼 수 있다.

 

 

 

 

PIC24F ADC 초기화코드

void AdcInit(void)
{
 //ADCON1 레지스터 설정
 AD1CON1bits.SAMP = 0;  //ADC 샘플/홀드 홀딩
 AD1CON1bits.ASAM = 1;  //ADC 변환 즉시 샘플링 시작 설정
// AD1CON1bits.SIMSAM=0;  //순서대로 멀티플 채널 샘플 설정
 AD1CON1bits.SSRC = 7;  //샘플 클럭 설정: 내부 카운터 샘플링 끝나고 변환시작
 AD1CON1bits.FORM = 0;  //데이터 출력 형식: Integer

 //AD1CON2 레지스터
 AD1CON2bits.CSCNA=0;  //CH0+ 입력에 대한 스캔 입력 설정: Scan inputs
 AD1CON2bits.VCFG = 0;  //AD변환 기준 전압 설정: Vreg+ = Vdd, Vreg- = Vss

 //AD1CON3 레지스터
 AD1CON3bits.ADCS = 0x3F; //ADC 변환 클럭 설정 : 최대치 설정
        //Tad=Tcy*(ADCS+1)=(1/40M)*64 = 1.6us (625KHz)
        //10비트 ADC 변환 시간 Tc = 12*Tad = 19.2us (52KHz)
 AD1CON3bits.SAMC=31;   //Auto Sample Time = 31*Tad
 AD1CON3bits.ADRC=0;   //ADC Clock을 시스템 클럭 사용 설정

 //AD1CHS0 레지스터 :
// AD1CHS0=0;     //디폴트 값

 //AD1CSSL 레지스터 : AN0 ~ AN15 아날로그 입력 핀 설정
 AD1CSSL = 0;
  Sbi(AD1CSSL, BIT0);  //AN0 ~ AN1 AD 입력 핀 설정


 //ADC1 인터럽트 설정  
 IFS0bits.AD1IF = 0;   //ADC1 인터럽트 플래그 클리어
 IEC0bits.AD1IE = 0;   //ADC1 인터럽트 시작 설정

 //ADC1 컨버터 동작 개시 설정
 AD1CON1bits.ADON = 1;  //ADC1 컨버터 동작
}

 

 

#define adc_WaitForCoversion()    while(!AD1CON1bits.DONE)
#define adc_GetData()       (ADC1BUF0)
#define adc_SetChannel(Ch)     //AD1CSSL = ~(Ch);AD1PCFGL = (Ch); 
#define adc_Run()       AD1CON1bits.SAMP = 0;

 

 

//Read ADC Value
unsigned int AdcRead(unsigned char Channel)
{
 adc_SetChannel(Channel);
 adc_Run();

 adc_WaitForCoversion();

 return adc_GetData();
}

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352011. 11. 13. 18:12

[DSP28335 EVM] ADC테스트 - 보드의 광센서 그래프 출력 예제

[DSP28335 EVM] ADC테스트 - 보드의 광센서 그래프 출력 예제



[DSP28335 EVM] 보드에는 ADC를 테스트 하기 위한  CdS 센서가 있고, ADCA1에 연결되어 있다
CdS센서를 사용하지 않는다면 R157을 제거하면 된다.





TMS320F28335 ADC테스트용 PC프로그램





TMS320F28335 ADC테스트 동영상




TMS320F28335 ADC초기화 함수
//ADC Initialize
void AdcInit(void)
{
   EALLOW;
   SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/ADC_MODCLK
   EDIS;
    
   InitAdc();  // For this example, init the ADC

// Specific ADC setup for this example:
   AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
   AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    
   AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode
   AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
   AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run 
  
     // Start SEQ1
   AdcRegs.ADCTRL2.all = 0x2000;
}


채널별 ADC 값 읽기 함수
//Read ADC Value
unsigned int AdcRead(unsigned char Channel)
{
 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = Channel;
 AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run

 while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt
    // Software wait = (HISPCP*2) * (ADCCLKPS*2) * (CPS+1) cycles
    //               = (3*2)      * (1*2)        * (0+1)   = 12 cycles
    asm(" RPT #11 || NOP");
    AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
    return (AdcRegs.ADCRESULT0>>4);
}



Posted by nexp

댓글을 달아 주세요

[INTERFACE]/ZIGBEE2009. 6. 10. 16:48

[ Zigbee ] CC2480 모듈 조도센서(Cds) 전송 테스트

Zigbee 모듈 (CC2480) 조도센서(Cds) 전송 테스트



조도센서(Cds)
P2.1을 High로 출력해서 밝기를 측정한다.
 
 


코드 추가
CC2480 예제 soruce code에는 CdS관련 데모가 없으므로 함수 추가
void halReadLight(void)
{
  ADC10CTL1 = 0;
  ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
  ADC10AE0 |= 0x01;                                                    // P2.0 ADC option select
 
  halDelay(ADC_WAIT_MSECS, TRUE);      // Allow Vref to      ADC to charge.
  ADC10CTL0 |= ENC | ADC10SC;             // Sampling and conversion start
}
 
main함수에 스위치를 누를때 데이터를 전송할 수 있도록 코드 수정
main()
{
 :
 
 while(1)
 {
 if (!appExecHal())
    {
      // If all HAL and Host events have been processed, it is ok to go to low power.
      if (!appExecHost() && (appFlags & appLowPwrF))
      {
        HAL_LOW_POWER_MODE();
      }
    }
 
 //Switch 처리
    if((GetSw1())
    {
        SwProcess();
    }
 }
}
 
스위치 처리함수
SwProcess()
{
    halReadLight();
 
    srceReport[0] = (halAdcVal) / 4;   
    srceReport[1] = gCounter++;
   
   //데이터 전송
    zb_SendDataRequest (ZB_BINDING_ADDR, SRCE_REPORT_ID, appMsgHandle,
                        0, AF_DEFAULT_RADIUS, SRCE_REPORT_SZ, srceReport);
   
 HAL_TOGGLE_RED();
 halDelay(DEBOUNCE_MSECS, TRUE);
}
 
그밖에 초기에 코디네이터 있으면 무조건 바인딩 되도록 수정하고 필요없는것들 다이어트..

 

테스트 동영상
Zigbee모듈에서 스위치를 누르면 조도센서 및 데이터 인덱스를 무선으로 전송하여 PC에서 그래프로 표시하는 테스트



스위치 및 LED 회로도
 
커넥터 회로도

Posted by nexp

댓글을 달아 주세요

[SENSOR]/Sensor2009. 2. 4. 18:10

LX1971 광센서 테스트 보드 - PIC12보드를 이용여 제작

LX1971 광센서 테스트 보드 - PIC12보드를 이용여 제작




데이터 시트

핀맵



블럭도


예제 회로


저항값 설정
0.25V ~ 1.25V 레인지로 설정할 경우
R1 = R2 [ 3.0V/0.25V - 1] = 11 * R2

R2 = [ 1.25V / 50uA ] = 25KΩ ∴ R1 = 11 * R2 = 275KΩ


예전에 만들었던 PIC12x EVM 보드를 이용하여 광센서 LX1971 전원핀이 호완되므로 쉽게 수정하여 제작할 수 있었다.




MSP430F1232 ([MSP430_TSSOP EVM]) 보드와 USB2UAR를 이용하여 광센서 데이터 수집 할수 있는 보드로 제작했다.



테스트 동영상 : [ MSP430F12x EVM] 보드를 이용한 광센서 LX1971 테스트



최종 제작된 LX1971 테스트 보드



LX1971 테스트 동영상
광센서 테이터를 USB를 이용하여 PC로 전송 및 그래프로 표시하는 테스트 이다. 빛에 대한 민감도가 상당히 우수하며 리니어하게 출력되는것을 확인할 수 있다. 
CdS센서 와 비교하면 확실한 장점을 느낄 수 있다.


Posted by nexp

댓글을 달아 주세요

  1. park

    하나 여쭤볼께요~~
    마지막 회로에서 SRC단자를 ISP의 1번단자와 연결을 하셨는데, 1번단자에서는
    어떻게 꾸며져 있는지 알수 있나요?
    앞단까지는 datasheet에도 나와있어서 알수 있는데,
    그이후를 어떻게해야 할지 모르겠습니다.

    제생각에는
    전류값을 어떤방식으로 READ를 할것 같은데, 어떻게 해야할지 몰라서요...
    글리고, R93은 275K옴 을 안다셨네요? 위의 계산식 하고 다른값을 다신 이유가 있나요??
    답장은 언제 올지 몰라도 글 작성해봅니다 ㅠㅠ

    2009.10.26 21:48 [ ADDR : EDIT/ DEL : REPLY ]