2015-10-07 7 views
0

данные: (Atmega 324A) http://www.atmel.com/images/Atmel-8272-8-bit-AVR-microcontroller-ATmega164A_PA-324A_PA-644A_PA-1284_P_datasheet.pdfAVR (Atmega 324A) DAC взаимодействия через SPI

данные: (DAC) http://www.ti.com/lit/ds/symlink/dac101s101.pdf

Привет там !!

Я изучаю встроенное программирование в c, поэтому, пожалуйста, несите меня.
Я пытаюсь создать волну с использованием ЦАП (DAC101S101), который подключается к ATmega324A через SPI. Дак является однонаправленным. прямо сейчас, я просто пытаюсь получить выход с dac. Я сделал lut, который я буду использовать, чтобы получить требуемую синусоидальную волну. Также, как мне модулировать частоту волны? (Например, позволяет сказать, что 4000 Гц) (Также я подключен внешний генератор на микросхеме 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); 
} 


} 

Спасибо !!!!

ответ

0

Это немного странный ЦАП, если быть честным. SPI не является «нормальным» интерфейсом для АЦП/ЦАП. Обычно это I2S или что-то еще с монотонными кадрами, поэтому частотный отклик гарантирован.

Независимо от того, скорость обновления ЦАП регулируется SYNC/. ЦАП будет обновлять 16 циклов после SYNC/ идет низко.

Глядя на лист данных, данные сначала отправляются на DAC MSb. Должно быть, 2 не интересуют биты, два «бита режима», затем 10 бит данных, а затем два не интересуют биты. После того, как вы отправили 16 бит, установите SYNC/ максимум (не менее 20 нс), затем вы можете повторить цикл. Если вы отправляете менее 16 бит перед повышением SYNC/, «команда» будет проигнорирована.

Я не знаю, что делает AVR при записи в регистр SPI. Он может опустить SS//SYNC/ для 8 бит, а затем поднять его снова. Это не сработает с этой частью. Возможно, вам придется передать данные бит.

+0

Большинство микроконтроллеров имеют возможность отключать автоматический/SS в SPI, и в этом случае штырь прибегает к использованию GPIO. Таким образом, нужен только «бит бит», это должен быть сам SS-штырь. – Lundin