Witam!
Problem przedstawia się następująco : Atmega32 (zew. kwarc 20Mhz) wysyła dane do przetwornika C/A - AD5532 po SPI wg. poniższego kodu (pod PA0 podpięte /LDAC AD5322) :
No i niestety na wyjściu przetwornika 0V. Domyślam się iż problem tkwi w 8 bitowym SPI od strony AVR. Jeśli tak czy jest opcja zmiany SPI w AVR z 8 na 16 bit?
Problem przedstawia się następująco : Atmega32 (zew. kwarc 20Mhz) wysyła dane do przetwornika C/A - AD5532 po SPI wg. poniższego kodu (pod PA0 podpięte /LDAC AD5322) :
/*
* AVR644P_LSR_AD5322_ADC.c
*
* Parts:
* ATMEGA32
* AD5322 + AD820
* FT232RL
* Created: 7/3/2011 5:13:47 PM
*/
//AVR DEFINE
#ifndef F_CPU
#define F_CPU 20000000UL
#endif
//SPI DEFINE
#define DDR_SPI DDRB
#define PORT_SPI PORTB
#define DD_MOSI DDB5
#define DD_MISO DDB6
#define DD_SCK DDB7
#define DD_SYNC DDB4
#define P_SYNC PB4
#include <avr/io.h>
#include <util\delay.h>
//----------------SPI Functions-----------------
void SPI_MasterInit(void)
{
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SYNC);
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPHA);
DDRA = 0xFF;
}
void SYNC_LO(void)
{
PORT_SPI &= ~(_BV(P_SYNC));
}
void SYNC_HI(void)
{
PORT_SPI |= _BV(P_SYNC);
}
void SPI_MasterTransmit(char cData)
{
SPDR = cData;
while(!(SPSR & (1<<SPIF)))
;
}
//-------------------------Main-------------------------
int main(void)
{
void SPI_MasterInit();
while(1)
{
PORTA = 0xFF;
SYNC_HI();
_delay_us(100);
SYNC_LO();
SPI_MasterTransmit(0x0F);
SPI_MasterTransmit(0xFF);
SYNC_HI();
PORTA = 0x00;
_delay_us(100);
}
}
No i niestety na wyjściu przetwornika 0V. Domyślam się iż problem tkwi w 8 bitowym SPI od strony AVR. Jeśli tak czy jest opcja zmiany SPI w AVR z 8 na 16 bit?
