0

データシート:(Atmega 324A) http://www.atmel.com/images/Atmel-8272-8-bit-AVR-microcontroller-ATmega164A_PA-324A_PA-644A_PA-1284_P_datasheet.pdf

データシート:(DAC) http://www.ti.com/lit/ds/symlink/dac101s101.pdf

やあ!!

私はcで組み込みプログラミングを学んでいるので、ご容赦ください。
SPI 経由で ATmega324A に接続されている DAC (DAC101S101) を使用して波形を生成しようとしています。Dac は一方向性です。今は、DAC から出力を取得しようとしています。必要な正弦波を得るために使用する lut を作成しました。また、波の周波数を変調するにはどうすればよいですか? (4000Hzとしましょう)(また、ATmegaチップに外部発振器を接続しました。)

 i Have connected:  
 PB5 -- MOSI -------> DIN (DAC)  
 PB7 -- SCK  -------> SCK (DAC)  
 PA1 --------------->#Sync(DAC) 

void init_SPI_Master(void) {
/*
 *  Set MOSI and SCK output, all others input
 *  DDR_SPI = (1<<DD_MOSI)| (1<<DD_SCK);    
 *  
 *  (for ATmega 324A
 *  
 *  DDRB = (1<<DDB5) | (1<<DDB7)
 *
 */

DDRB = (1<<5) | (1<<7);

/*
 *Enable SPI, Master, set clock rate fck/16;
 *
 */

SPCR0 = (1<<SPE0) | (1<< MSTR0) | (1<<SPR00) | (1<<CPOL0);

}

void Tx_SPI_Master (unsigned char data) {
/*
 *  Start transmition 
 *
 */

SPDR0 = data;

/*
 *  is Tx complete ?
 *
 */


}


int main(void)
{   
unsigned char data1 = 0x04;
unsigned char data2 = 0xFC; 
DDRA    = 1 << 1;
PORTA   = 1 << 1;   
init_SPI_Master();  
while(1)
{
    //TODO:: Please write your application code
    //sync: i'm not sure as how to provide sync to the dac 
    // according to the datasheet as soon as the sync bit goes low the  
    //    register starts accepting data into Din.   
    //    so right now i am trying to input 0000001111111100 into
    //    the dac.
    PORTA = 1 << PINA1;
    PORTA = 0 << PINA1;


    Tx_SPI_Master(data1);
    Tx_SPI_Master(data2);
}


}

ありがとうございました!!!!

4

1 に答える 1

0

正直なところ、これは少し変わった DAC です。SPI は、ADC/DAC の「通常の」インターフェイスではありません。通常は I2S か、周波数応答が保証される単調なフレーム クロックを備えたものです。

とにかく、DAC 更新レートは SYNC/によって制御されます。DAC は、 SYNC/が Lowになってから 16 サイクル後に更新します。

データシートを見ると、データは DAC の MSb に最初に送信されます。2 つの don't care ビット、2 つの「モード ビット」、10 ビットのデータ、2 つの don't care ビットが続く必要があります。16 ビットを送信したら、SYNC/ハイ (少なくとも 20ns) を設定すると、サイクルを繰り返すことができます。SYNC/を上げる前に 16 ビット未満を送信すると、「コマンド」は無視されます。

SPIレジスタに書き込むときにAVRが何をするかわかりません。SS/ / SYNC/を 8 ビット下げてから、再度上げます。これは、この部分では機能しません。それにデータをビットバンする必要があるかもしれません。

于 2015-10-07T13:15:30.170 に答える