данные: (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);
}
}
Спасибо !!!!
Большинство микроконтроллеров имеют возможность отключать автоматический/SS в SPI, и в этом случае штырь прибегает к использованию GPIO. Таким образом, нужен только «бит бит», это должен быть сам SS-штырь. – Lundin