[MODULE]/AD/DA2018. 2. 25. 07:15

LTC2704 - Quad 12-, 14- and 16-Bit DAC 테스트

LTC2704 - Quad 12-, 14- and 16-Bit Voltage Output SoftSpan DACs 테스트




우선 SPI 2 정상 출력되는것만 확인.
/LDAC 핀을 흔들어 줘야 정상 출력이 나올것 같은데... 설명이 조금 에매하다...
테스트 해봐야 정확하게 알수 있을듯.

When the asynchronous load pin, LDAC, is taken low, all DACs are updated with code and span data (data in B1 buffers is copied into B2 buffers). CS/LD must be high during this operation. The use of LDAC is functionally identical to the “Update B1→B2” commands.













LTC2704 초기화 코드

void LTC2704_Init(void)

{

    LTC2704_CS_INIT();

    LTC2704_CS0_HI();

    LTC2704_CS1_HI();

    LTC2704_SPI_INIT();    

    

    LTC2704_CS0_LO(); 

    LTC2704_SPI_Send(0x2F);   //range

    LTC2704_SPI_Send(0x00);

    LTC2704_SPI_Send(0x01);   //+10V

    LTC2704_CS0_HI();  

}       






LTC2704 Data 출력 코드



void LTC2704_DataSet0(unsigned char Ch, unsigned short Data)

{

    unsigned char chanel[4] = {0, 2, 4, 6};    

    

    LTC2704_CS0_LO(); 

    LTC2704_SPI_Send(0x30+chanel[Ch]);

    LTC2704_SPI_Send(Data>>8);

    LTC2704_SPI_Send(Data);

    LTC2704_CS0_HI();

}


void LTC2704_DataOut0(unsigned char Ch)

{

    unsigned char chanel[4] = {0, 2, 4, 6};    

    

    LTC2704_CS0_LO(); 

    LTC2704_SPI_Send(0x40+chanel[Ch]);

    

    LTC2704_SPI_Send(0x00);

    LTC2704_SPI_Send(0x00);

    LTC2704_CS0_HI(); 

}


Posted by nexp
TAG DAC, LTC2704

댓글을 달아 주세요

[MODULE]/AD/DA2018. 2. 25. 07:07

Analog Devices 16Bit ADC AD7606 테스트

Analog Devices 16Bit ADC AD7606 테스트



RESET 핀

Reset Input. When set to logic high, the rising edge of RESET resets the AD7606/AD7606-6/AD7606-4. The device should receive a RESET pulse directly after power-up. The RESET high pulse should typically be 50 ns wide. If a RESET pulse is applied during a conversion, the conversion is aborted. If a RESET pulse is applied during a read, the contents of the output registers reset to all zeros.






클럭 나오는것 까지 확인 

AD쪽에 +-15V가 필요하다



AD7606 핀맵 정의


//------------------------------------------------------------------------------

//ADC AD7606 Driver

#define AD7606_CS_HI()       (LATD |= BIT0)

#define AD7606_CS_LO()       (LATD &= ~BIT0)


#define AD7606_RST_HI()       (LATD |= BIT1)

#define AD7606_RST_LO()       (LATD &= ~BIT1)


#define AD7606_START_HI()       (LATD |= BIT2)

#define AD7606_START_LO()       (LATD &= ~BIT2)


#define AD7606_CS_INIT()     (TRISD &= ~BIT0)

#define AD7606_RST_INIT()    (TRISD &= ~BIT1)

#define AD7606_START_INIT()    (TRISD &= ~BIT2)

#define AD7606_SPI_INIT         SPI1_Init

//------------------------------------------------------------------------------





AD7606 Data Read 코드


void AD7606_ReadBuf(short *pBuff)

{

    AD7606_START_LO();

     Delay_Us(10);

     AD7606_START_HI();


     AD7606_CS_LO();

     pBuff[0] = SPI1_WriteReadByte(0);

     pBuff[0] |= SPI1_WriteReadByte(0)<<8;


     pBuff[1] = SPI1_WriteReadByte(0);

     pBuff[1] |= SPI1_WriteReadByte(0)<<8;


     pBuff[2] = SPI1_WriteReadByte(0);

     pBuff[2] |= SPI1_WriteReadByte(0)<<8;


     pBuff[3] = SPI1_WriteReadByte(0);

     pBuff[3] |= SPI1_WriteReadByte(0)<<8;

     

     //-----------------------------------------

     pBuff[4] = SPI1_WriteReadByte(0);

     pBuff[4] |= SPI1_WriteReadByte(0)<<8;


     pBuff[5] = SPI1_WriteReadByte(0);

     pBuff[5] |= SPI1_WriteReadByte(0)<<8;


     pBuff[6] = SPI1_WriteReadByte(0);

     pBuff[6] |= SPI1_WriteReadByte(0)<<8;


     pBuff[7] = SPI1_WriteReadByte(0);

     pBuff[7] |= SPI1_WriteReadByte(0)<<8;      

     AD7606_CS_HI();

}


Posted by nexp
TAG AD7606, ADC

댓글을 달아 주세요

[MODULE]/AD/DA2016. 5. 9. 11:43

AD8275 level translator/ADC driver - ±10 V Analog Front End Signal Conditioner

AD8275 level translator/ADC driver - ±10 V Analog Front End Signal Conditioner




https://www.element14.com/community/docs/DOC-53765/l/analog-devices-cn0225-reference-design-for-high-impedance-high-cmr-10-v-analog-front-end-signal-conditioner-for-industrial-process-control-and-automation



Posted by nexp

댓글을 달아 주세요

[MODULE]/AD/DA2011. 1. 12. 17:31

[ADS8320] 16bit ADC테스트

[ADS8320] 16bit ADC테스트



모터 가속도 측정 장치 개발 프로젝트에 적용한 16bit ADC중 저렴하면서 정밀한 AD8320을 테스트 해 보았다.
노이즈 레벨도 적은것 같고 상당히 안정적이다.

AD8320 SPI 타이밍도






AD8320 테스트 코드

unsigned int AD8320_Read()
{
     :
  AD8320_CS0_ASSERT();

  byte0 = AD8320_SPI_READ(0);
  byte1 = AD8320_SPI_READ(0);
  byte2 = AD8320_SPI_READ(0);  
     
  byte0 = byte0 << 14;
  byte1 = byte1 << 6;
  byte2 = byte2 >> 2;

  adc_data = (byte0 | byte1 | byte2);

  AD8320_CS0_DEASSERT();

  return adc_data;
}


ADC테스트 결과
STM32 + AD8320 보드를 이용하여 USB로 16bit ADC데이터 전송하여 그래프로 출력해 보았다.



ECG데이터도 받아 보았다. 깨끗하게 로깅 되는것을 확인 할 수 있다.


Posted by nexp

댓글을 달아 주세요

[MODULE]/AD/DA2008. 11. 18. 09:54

[개발일지] ADS1216 테스트

[개발일지] ADS1216 테스트


로드셀 데이터를 읽어 무게값을 측정하기 위해 SensorMat 프로젝트에 적용한 ADS1216 를 테스트 중이다.


데이터 시트 보고 진행하고 있는데... 정상적으로 동작을 하지 않는다. 

설계전에 데이터시트 꼼꼼히 봐야 하는데...
Vref 는 AVDD를 5V로 입력시 2.5V, 3.3V로 입력시 1.25V까지 가능하다고 한다.



레지스터 읽고 부분은 정상 동작하는것 같다.
반드시 두바이트를 읽어야 하고 두번째 바이트가 의미 있는 값이된다.
이부분이 이상하다. 1바이트만 읽으면 다음 클럭에서 정상 값이 출력된다.

unsigned int ADS1216_ReadReg(unsigned char Reg)
{
    unsigned char h=0, l=0;
   
    ADS1216_CS_ASSERT();

    ADS1216_SPI_READ(0x10|(0x0F&Reg));
    ADS1216_SPI_READ(1);
   
    Delay_us(4);
        
    h = ADS1216_SPI_READ(0);
    l = ADS1216_SPI_READ(0);    
    
    ADS1216_CS_DEASSERT(); 
  
    return l;
}


일단 0~15레지스터 값을 읽어보면 데이터시트의 값과 동일하게 출력되는것을 볼 수 있다.
reg[0]=008E
reg[1]=0001
reg[2]=0000
reg[3]=0000
reg[4]=0000
reg[5]=0000
reg[6]=0000
reg[7]=00FF
reg[8]=0080
reg[9]=0007
reg[10]=0000
reg[11]=0000
reg[12]=0000
reg[13]=0024
reg[14]=0090
reg[15]=0067


계속되는 실험으로 동작은 하긴 하지만 데이터 시트 내용과 좀 다른 부분이 있다.
레지스터 쓰기는 1바이트가 가능하다.
void ADS1216_WriteReg(unsigned char Reg, unsigned int Data)
{
    unsigned char h=0, l=0;
   
    ADS1216_CS_ASSERT();

    ADS1216_SPI_READ(0x50|(0x0F&Reg));
    ADS1216_SPI_READ(0);
   
    Delay_us(4);
   //ADS1216_SPI_READ(Data>>8);
    ADS1216_SPI_READ(Data&0xFF);    
     
    ADS1216_CS_DEASSERT();
}


ADC 데이터값는 이상하게 올라온다.
DRDY를 찍어보니 계속 High가 나온다.  데이터시트를 다시한번 확인해 봐야 할것 같다.



The DRDY output is used as a status signal to indicate when data is ready to be read from the ADS1216. DRDY goes low when new data is available. It is reset high when a read operation from the data register is complete. It also goes high prior to the updating of the output register to indicate when not to read from the device to ensure that a data read is not attempted while the register is being updated.

DSYNC is used to provide for synchronization of the A/D conversion with an external event. Synchronization can be achieved either through the DSYNC pin or the DSYNC command. When the DSYNC pin is used, the filter counter is reset on the falling edge of DSYNC. The modulator is held in reset until DSYNC is taken high. Synchronization occurs on the next rising edge of the system clock after DSYNC is taken high.

/DSYNC 핀이 High 일때 DRDY신호가 출력 된다고 한다. Low이면


한채널에 대해서는 정상 동작 했는데...
채널 바꾸니 좀 이상하다.. 채널 바꾸고 레지스터 값을 읽어보면 이상한 값들이 읽혀진다.
래자스터값 읽거나 쓸때 딜레이값을 주니 정상동작한다. 한바이트씩 읽고 쓰는것이 가능하다.

Ref 변경하고 또 정상적인 값이 들어오지 않아 코드를 살펴보니 Setup레지스터의 값을 잘못 설정했다.
ByteOder을 변경하고 말았네..
//ADS1216_WriteReg(ADS1216_SETUP, 0x8B); 
-> ADS1216_WriteReg(ADS1216_SETUP, 0x8A);

수정 후 정상 동작한다.

0~Vref까지 값이 잘 들어온다.


그런데 채널 변경시 변경 시간이 오래 거리는것 같다.
현재 보드가 없어 테스트를 진행하지 못하는데... 정확한 원인을 파악해 봐야 할것 같다.


Posted by nexp

댓글을 달아 주세요