# [AVR]Atmega644P interfacing CS5460A power meter

Status
Not open for further replies.

#### Alex Aldridge Arabaolaza

##### Newbie level 2
Hi mates. I'm really stuck trying to communicate both ATMega644P controller and a Cirrus Logic CS5460A power meter. I've read the datasheet carefully several times but I haven't been able to solve the problem yet. My problem is that the MISO line is always 0. I leave the code i use just in case you notice any kind of error.

Atmega644P is running @20Mhz while CS5460A is running @3.6864Mhz.

SPI initialization in ATMEGA644P:

Code:
/**
* Initialize and configure the SPI
* SPI Type: Master
* SPI Clock Rate: 1,25MHz
* SPI Clock Phase: Cycle Half
* SPI Clock Polarity: Low
* SPI Data Order: MSB First
*/
__C_task void InitSPI(void)
{
SPCR0= (1<<SPE0) | (1<<MSTR0) | (1<<SPR00);
SPSR0=0x00;
SPI_initialized = TRUE;
}

Then I initialize the CS5460A by sending these commands:

Code:
void init_CS5460A_send_sequence(){

CLRBIT(CS5460A_SS);                    //Enable CS5460A
for(int i = 0; i < 20000; i++);

//Send Synchronization commands
cs5460_sync();

//soft reset
cs5460_Write_data(CONFIG_REGISTER, 0x000080);

//Resync
cs5460_sync();

//configure (x10 gain for current)
cs5460_Write_data(CONFIG_REGISTER, 0x000061);

//set integration period (72 clocks)
cs5460_Write_data(CYCLE_COUNT_REGISTER, 0x000048);

//reset all bits in status register (IC* bit ignored)
cs5460_Write_data(STATUS_REGISTER, 0xFFFFFF);

//set DRDY in mask register (for INT*)
cs5460_Write_data(MASK_REGISTER, 0x800000);

//start continuous computation cycles
cs5460_send(0xE8);

SETBIT(CS5460A_SS);                   //Disable CS5460A
for(int i = 0; i < 20000; i++);
}

And then, to retrieve data from CS5460A i use this code:

Code:
CLRBIT(CS5460A_SS);
for(int i = 0; i < 20000; i++);
cs5460_sync();
cs5460_rst_st_reg();
cs5460_Read_data(0x18);
SETBIT(CS5460A_SS);
for(int i = 0; i < 20000; i++);

I know the MISO line is always 0 as I looked carefully into it using an oscilloscope. The rest of the lines seem to be working fine. Do you have any idea about what can be going on?

Status
Not open for further replies.