我是微控制器的新手,我正在尝试读取外部ADC值。最初我必须设置 ADC 寄存器。我正在使用SPI通信来读取 ADC 值。我正在使用AD7798 ADC。我检查了一些寄存器没有配置。要在 ADC AD7798 中配置寄存器,我必须使用通信寄存器来选择要配置的寄存器。例如,我想设置 AD7798 的配置寄存器(16 位)。我是这样写的:
#include <io.h>
#define ADC_CS PORTB.3
#define WG_CS PORTB.4
#define MOSI PORTB.5
#define MISO_PU PORTB.6
#define MISO_PIN PINB.6
#define SCK PORTB.7
//global functions.
unsigned int adcConfig;
unsigned int adcMode;
unsigned int adcId;
void init_io(void)
{
DDRB = 0xBF; // make SCK, MOSI, CS1, CS2 outputs
ADC_CS = 1; //disable ADC
WG_CS = 1; //disable WaveGenerator
MISO_PU = 1; //enable pull-up on MISO so we can test !RDY
}
unsigned char spi(unsigned char data)
{
//Start transmision
SPDR = data;
//Wait for transmision complete
while (!(SPSR & (1<<SPIF)));
return SPDR;
}
unsigned int ReadAdIdReg(void)
{
SPCR = 0x5D;
ADC_CS = 0;
while (MISO_PIN != 0) ;
spi(0x60);
adcId = spi(0xFF);
ADC_CS = 1;
return adcId;
}
当我打印配置寄存器时,它给出的值是“16383”。但是当我关闭/打开目标时,我得到“1808(相当于0x0710)”,之后它给出的值与“16383”相同。我也用不同的配置进行了测试,但它没有改变,总是打印“16383”,除了电源关闭/打开。我认为默认值。
即使使用模式寄存器,它也总是打印“10(相当于 0x000A)”,但这是我总是得到的值,即使我将配置更改为“0x0022”。
即使我尝试读取 Id 寄存器,但它给出的是“0x48”。但在数据表中,它提到了 AD7798 的“0xX8”。