マイクロコントローラーは初めてで、外部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」と記載されています。