PORTB|=_BV(ADCVCS);
spi_hw_adcV_data_send(ADCCHANEL0);
//mode register //#define ADCCHANEL0 0x38
PORTB|=_BV(ADCVCS);
spi_hw_adcV_data_send(0x4A); //-
//single conversion; dump mode, 24bit mode
PORTB|=_BV(ADCVCS);
while(SPIPIN & _BV(ADCRDYVPIN));
spi_hw_adcV_data_send(READADC0);
//data register; ch0 //#define READADC0 0x48
PORTB|=_BV(ADCCS);
SPIPORT&= ~_BV(ADCVCS);
SPDR=0x00;
while((SPSR & _BV(SPIF)) == 0);
SPSR |= _BV(SPIF);
cData=SPDR;
SPIPORT|=_BV(ADCVCS);
vstatus = cData; //reading status
SPIPORT&= ~_BV(ADCVCS);
SPDR=0x00;
while((SPSR & _BV(SPIF)) == 0);
SPSR |= _BV(SPIF);
cData=SPDR;
AdcVFrame[2]=cData; //first byte 1/3
SPIPORT|=_BV(ADCCS);
PORTB|=_BV(ADCVCS);
SPIPORT&= ~_BV(ADCVCS);
SPDR=0x00;
while((SPSR & _BV(SPIF)) == 0);
SPSR |= _BV(SPIF);
cData=SPDR;
SPIPORT|=_BV(ADCCS);
PORTB|=_BV(ADCVCS);
AdcVFrame[1]=cData; //second byte 2/3
SPIPORT&= ~_BV(ADCVCS);
SPDR=0x00;
while((SPSR & _BV(SPIF)) == 0);
SPSR |= _BV(SPIF);
cData=SPDR
SPIPORT|=_BV(ADCCS);
PORTB|=_BV(ADCVCS);
AdcVFrame[0]=cData; //last byte 3/3
if(vstatus& _BV(OVR))
{ //error reading
if(vstatus& _BV(SIGN))
{
AdcVFrame[1] = 0x00;
AdcVFrame[0] = 0x00;
AdcVFrame[2] = 0x00;
}
else
{
AdcVFrame[1] = 0xff;
AdcVFrame[0] = 0xff;
AdcVFrame[2] = 0xff;
}
}
uartput(AdcVFrame[2]) ; //byte3
uartput(AdcVFrame[1]) ; //byte2
uartput(AdcVFrame[0]) ; //byte1