[AnalogDevice]/ADucM3602014. 6. 15. 22:30

ADucM360 24bit ADC 테스트

ADucM360 24bit ADC 테스트





ADucM360 은 Cortex-M3코어에 24bit 정밀 ADC를 내장한 MCU이다.

가장 강점이 24비트 ADC테스트를 간단히 진행해 보았다.



ADucM360  ADC블록도

입력 임피던스를 위한 Rail-To-Rail 버퍼와 128 PGA 및 필터가 내장되어 있다.



ADucM360 ADC 레지스터

ADCxCON 레지스터가 가장 중점 적으로 봐야할 레지스터 인것 같다.

 ADC0CON (ADuCM360 Only)

 ADC1CON (ADuCM360 and ADuCM361)


레퍼런스 설정 및 채널 설정등을 할 수 있다.





레퍼런스 제어 레지스터

REFCTRL

REFPD


Power-down reference. This bit must be cleared for the ADCs to work, regardless of if an external 

reference is selected. 

 0: Enable internal reference block. 

 1: Power down internal reference block.

 

 

 ADucM360 ADC초기화 함수

void ADC1INIT(void)

{

    // 인터럽트 사용

    AdcMski(pADI_ADC1,ADCMSKI_RDY,1);


    // ADC filter set for 3.75Hz update rate with chop on enabled

    AdcFlt(pADI_ADC1,124,14,FLT_NORMAL|ADCFLT_NOTCH2|ADCFLT_CHOP); 

     // 내부레퍼런스 , Gain of 1, Signed integer output

    //AdcRng(pADI_ADC1,ADCCON_ADCREF_INTREF,ADCMDE_PGA_G1,ADCCON_ADCCODE_INT); 

    // AVDD레퍼런스 , Gain of 1, Unsigned integer output

   AdcRng(pADI_ADC1,ADCCON_ADCREF_AVDDREF,ADCMDE_PGA_G1,ADCCON_ADCCODE_UINT);

    // Turn off input buffers to ADC and external reference

    AdcBuf(pADI_ADC1,ADCCFG_EXTBUF_OFF,ADCCON_BUFBYPN|ADCCON_BUFBYPP|ADCCON_BUFPOWP|ADCCON_BUFPOWN); 


   // 채널 선택  AIN1 - negative input, AIN0 - postive input

   AdcPin(pADI_ADC1, ADCCON_ADCCN_AIN1, ADCCON_ADCCP_AIN0); 

}



ADC 인터럽트 핸들러 함수

void ADC1_Int_Handler ()

{

   // read ADC result register

   ulADC1Result = AdcRd(pADI_ADC1);

}




ADucM360 24bit ADC테스트 동영상




ADucM360 24bit ADC테스트 예제코드
int main (void)
{
    _SystemInit();
    U0_Init(BAUD_115200);
    U0_PutStr("ADucM360 24bit ADC Test\r\n");
    
    Led1Init();
    Led1On();
    
    // Place ADC1 in Idle mode        
    AdcGo(pADI_ADC1,ADCMDE_ADCMD_IDLE);
    ADC1INIT();
    
    // Start ADC1 for continuous conversions
    AdcGo(pADI_ADC1,ADCMDE_ADCMD_CONT);
    // Enable ADC1 and UART interrupt sources   
    NVIC_EnableIRQ(ADC1_IRQn);
    
    while (1)
    {
        DebugPrint("%d\r\n", ulADC1Result);
        Delay(100);      // Delay routine
    }
}



Posted by nexp
TAG AducM360

댓글을 달아 주세요

[AnalogDevice]/ADucM3602014. 6. 14. 17:53

ADuM360 UART 테스트

ADuM360 UART 테스트




ADucM360 UART 초기화 함수

ADucM360은 UART는 아래와 같이 GPCON레지스터를 이용해 핀맵을 2개의 포트에 할당 할 수 있다. ADucM360 EVM 에서는 P0.6, P0.7에 할당 해 두었고 USB2UART를 이용하여 PC와 UART통신이 가능하다.


P0.1/SCLK1/SCL/SIN

P0.2/MOSI1/SDA/SOUT


P0.7/POR/SOUT

P0.6/IRQ2/SIN



void U0_Init(unsigned char baud)

{

   //Select IO pins for UART.

   //pADI_GP0->GPCON |= 0x3C;                     // Configure P0.1/P0.2 for UART

    pADI_GP0->GPCON |= 0x9000;                   // Configure P0.6/P0.7 for UART

    ClkSel(CLK_CD6,CLK_CD7,CLK_CD0,CLK_CD7);     // Select CD0 for UART System clock

   

    U0_SetBaud(baud);

    

   UrtMod(pADI_UART,COMMCR_DTR,0);              // Setup modem bits

   UART IRQ sources

}




ADucM360 UART 송수신 함수

COMLSR 레지스터에서 UART 송수신 상태를 읽어서 처리하면 간단히 해결된다. 수신시는 DR비트를 송신시에는 THRE비트를 확인하여 처리한다.

unsigned char U0_GetByte(void)

{

//데이터가 수신되면

while (!(pADI_UART->COMLSR & COMLSR_DR));


//데이터 읽어옴

return pADI_UART->COMRX;

}


void U0_PutByte(unsigned char Data)

{

      //송신 FIFO가 비어지면

      while(!(pADI_UART->COMLSR & COMLSR_THRE));

    

      //데이터 전송

      pADI_UART->COMTX = Data;

}






ADucM360 UART 테스트 예제코드

int main (void)

{

    unsigned int cnt = 0;

    

    _SystemInit();

    U0_Init(BAUD_115200);

    U0_PutStr("ADucM360 UART Test\r\n");

    

    Led1Init();

    Led1On();

    

    while (1)

    {

        Led1Toggle();

        DebugPrint("CNT=%d\r\n", cnt++);

        Delay(500);      

    }

}



Posted by nexp

댓글을 달아 주세요

[AnalogDevice]/ADucM3602014. 6. 8. 23:00

ADucM360 디버깅 및 펌웨어 다운로드 (CM3WSD)

ADucM360 디버깅 및 펌웨어 다운로드 (CM3WSD)

ADucM360 은 Cortex-M3코어 이기 때문에 JLINK와 같은 ARM디버깅툴을 이용아여 디버깅 및 펌웨어 다운로드가 가능하다.

그리고 칩 자체의 부트로더를 이용하여 시리얼 포트로도 펌웨어 다운로드를 할 수 있다.



아래 핀맵은 표준으로 사용하고 있는 SWD커넥터이다.




디버깅툴이 없다면 자체 부트로더를 이용하여 시리얼 포트로 펌웨어 다운로드 가능하다.

AnalogDevice사에서 CM3WSD 라는 프로그램을 제공한다.(ADuC7K에서는 ARMSWD라는 프로그램을 제공 했었다)


cm3wsd.zip





ADucM360에서 부트모드 진입은 P2.2(BM) 핀을 GND로 한 상태에서 리셋하면 된다.

주의 사항은 부트모드에서 UART 포트는 P0.1, P0.2로 고정되어 있다는 점이다.






Posted by nexp

댓글을 달아 주세요

[AnalogDevice]/ADucM3602014. 6. 8. 22:30

ADucM360 - 개발환경설정 (IAR컴파일러)

ADucM360 - 개발환경설정 (IAR컴파일러)


ADucM360은 Cortex-M3코어이기 때문에 IAR의 EWARM으로 개발 할 수 있다.


예전 버전 IAR은 예제를 제공하지 않기 때문에 AnalogDevice사에서 제공하는 예제를 다운 받아서 테스트 가능하다.

ADuCM360_361_Code_Examples_Function_Libraries.zip







ADucM360 디바이스를 선택해서 프로젝트 생성할 수 있다.



AnalogDevice 사에서 제공하는 라이버러리를 이용하면 페리 관련된 다양한 설정들을 편하게 사용할 수 있다.



제공되는 예제의 헤더파일은 IAR 컴파일러가 설치된폴더에서 찾을 수 있다.

C:\Program Files\IAR Systems\Embedded Workbench 6.5\arm\inc\AnalogDevices


Posted by nexp

댓글을 달아 주세요

[AnalogDevice]/ADucM3602014. 6. 8. 22:00

ADucM360 EVM 보드 제작 - 24bit 정밀 ADC 포함 MCU

ADucM360 EVM 보드 제작 - 24bit 정밀 ADC 포함 MCU



Cortex 코어의 대세 속에서 아날로그디바이스사도 Cortex-M3코어 MCU ADucM36x를 출시 했다.

아날로그가 강점인 Analog Device사의 특징을 살려 24bit ADC를 내장한 MCU이다.


ADC특징으로 3.9 kSPS, 24-bit, 0.1% 정밀 레퍼런스를 포함하고 있다. 그리고 12bit (NPN mode for 4mA to 20mA)  DAC가 있다.

 24bit ADC를 내장한 MCU 중에는 가장 성능이 좋지 않을까 생각된다.


다만 아쉬운점은 MCU클럭 속도가 16Mhz라 속도가 필요 할때는 한계가 있다는 것이다.





ADucM360 EVM 보드 회로도 










ADucM360 블록도

블록도를 보면 24bit ADC가 독립적으로 2채널이 있고 버퍼 및 게인과 필터 까지 아날로그 측면에서는 완벽해 보인다.






ADucM360 EVM 보드는 표준화 핀맵을 이용하기 위해 SM-Type EVM 형태로 제작했다.









Posted by nexp

댓글을 달아 주세요