2

AVR マイコンを新たに使い始めました。ATmega32-A マイコンを使用しています。外部 ADC (AD7798) を 1 つ接続しました。SPI通信で外部ADCの値を読みたいのですが、いろいろ試してみたのですが、ADCの値を取得できません。私のプロジェクトは、プログラム可能な波形発生器を備えたマイクロコントローラーを使用して波形を生成する必要があることです。私はこれをうまくやっており、この信号をセンサーに与えています。ADCからセンサー出力を読み取りたい。以下に簡単な回路図を添付しました。私はこのようなコードを書きました

// I have initialized PORTB like this

PORTB=0x00;
DDRB=0xBF;

// SPI initialisation
// SPI clock rate fck/16
// SPI master
// SPI MSB first
// SPI CPOL = 1, CPHA = 1

SPCR=0x5D;
PORTB.3 = 1; 

void main (void){

 printf("adc value :%x\n",ReadAd());

}

すべての関数を別のファイルに書きました

データシートを何百回も読みましたが、それでも ADC 値を読み取ることができます。私は自分がしている間違いを混乱させています。すべてのピンをチェックし、オシロスコープを使用して ADC 入力ピンをチェックしたところ、0.6V の入力信号が得られました。この問題を解決するのを手伝ってください。明日がこのプロジェクトの締め切りです。ADC値を読むのを手伝ってください。

前もって感謝します

4

1 に答える 1

2

問題を特定することはできませんでしたが、役立つ可能性があることに気づいたことがいくつかあります。

  • 波形発生器チップが SDATA ラインで何をしているかを調べます。ADC を使用する場合は、同じバス ライン (MOSI) を共有するため、高インピーダンスにする必要があります。チップが常にバスラインを駆動していないことを確認してください。そうしないと、ADC 通信が機能しなくなります。

  • チップ セレクト ラインにプルアップ抵抗がないため、uC の起動中に ADC が異常な状態になる可能性があります。この情報を使用して、ポート 3 と 4 で内部プルアップを有効にすることをお勧めします。 atmega32 データシート (50 ページ) から:

「ピンが入力ピンとして設定されているときに PORTxn にロジック 1 が書き込まれると、プルアップ > レジスタがアクティブになります」

  • SPI クロックの極性と位相が ADC の通信プロトコルと一致していること、および ADC がハードウェア SPI の一度に 8 ビットの通信をサポートしていることを確認してください。

  • ChipSelectAD 関数には不要な行がありますが、ビットが出力として設定されているときにピンを読み取る目的がわからないだけかもしれません

    "while(PINB.3); //チップセレクトピン待ち"

  • ADC のピンは正しく配線されていますか? この図では、電源または基準電圧の接続については何も示していません。

  • ADCはかなり高い入力クロック速度を処理できるように見えますが、問題が確実に機能するまでSPI SCLK周波数を遅くする可能性があります。

  • adc 読み取りが 16 ビット値で行われている間、左シフトを確認してください... SPI 読み取りの 8 ビット文字の結果は、実際には 8 回シフトされているように見えます。コンパイラが自動的に型をアップキャストしない限り、ゼロになります。 .

于 2012-10-01T20:56:23.260 に答える