Så här tänkte jag att man skulle kunna göra det. Att jag föst skickar 1byte med en adress om vilken info jag vill ha till baka och sedan lägger slave den datan i registret.
Men nu verkar problemet uppstå med att den lite då och då inte hinner med det utan skickar till baka adressen som den nyss fick istället

jag kör timern i 8mhz/1024
Kod: Markera allt
SIGNAL(TIMER0_OVF_vect)
{
data = (int)SPI_Read(VOLYM1);
Volym1L=data;
_delay_us(5);
data = (int)SPI_Read(BAS1);
Bas1L = data;
_delay_us(5);
data = (int)SPI_Read(DIS1);
dis = data;
}
unsigned char SPI_Read(unsigned char addr)
{
// Activate the CS pin
SPI_PORT &= ~(1<<SPI_CS);
SPDR= addr;
while(!(SPSR & (1<<SPIF)));
_delay_us(10);
// Send Dummy transmission for reading the data
SPDR = 0x00;
// Wait for transmission complete
while(!(SPSR & (1<<SPIF)));
// CS pin is not active
SPI_PORT |= (1<<SPI_CS);
return(SPDR);
}
Kod: Markera allt
unsigned char SPI_WriteRead(unsigned char dataout)
{
volatile uint8_t data;
// Put Slave Data On SPDR
SPDR=dataout;
// Wait for transmission complete
while(!(SPSR & (1<<SPIF)));
// Return Serial In Value (MISO)
return SPDR;
}
Kod: Markera allt
while(1){
datain = SPI_WriteRead(dataout);
switch(datain) {
case VOLYM1:
dataout=volym1;
break;
case VOLYM2:
dataout=volym2;
break;
case VOLYM3:
dataout=volym3;
break;
case BAS1:
dataout = bas1;
break;
case BAS2:
dataout = bas2;
break;
case BAS3:
dataout = bas3;
break;
case DIS1:
dataout = dis1;
break;
case DIS2:
dataout = dis2;
break;
case DIS3:
dataout = dis3;
break;
}
}
EDIT: Vid närmare ditt nu så verkar det vara ett annat värde den skciar först adressen 0x10 och ska då få svaret 0x3C men den får ibland svaret 0x13. Har inte den blekaste var 0x13 kommer ifrån då jag inte har någon "adress" som är på 0x13 eller värde.