How can I wait for a response from an SPI slave with an ATmega16?
What PeterJ said in his comment is correct. For any device that works based on commands, you must send a command to it like you are, then send a "dummy command" or just a character of data, say 0xFF.

Here is what happens with most SPI communication: the master sends a command, after the command is sent, the slave reads it and prepares its response. Then the slave sends its response at the same time the master sends the next byte.

What this means for you is that you need to add a dummy command:

char SPI_sendchar(char chr) {
  char receivedchar = 0;
  SPDR = chr;
  while(!(SPSR &amp; (1&lt;&lt;SPIF)));

  SPDR = 0xFF;
  while(!(SPSR &amp; (1&lt;&lt;SPIF)));

  receivedchar = SPDR;
  return (receivedchar);
}


Hope this helps.