본문 바로가기

[MODULE]/ADC

[개발일지] 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까지 값이 잘 들어온다.


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


반응형