Ich habe schon mal schnell reingeschaut (ich kann mir das am WE noch einmal näher ansehen).
Ich bin der Meinung, clock_option muss hier
3 sein, nicht 2.
Bei SPI Mode 3 ist CPOL und CPHA gesetzt. Am Ende der Zeilen das mode1 bis mode4 kenne ich so nicht, ich kenne mode0 ... mode3.
CodeBox C
switch(clock_option)
{
case 0 : {SPCR &= ~((1<<CPOL) | (1<<CPHA)); }break; // mode 1
case 1 : {SPCR |= (1<<CPHA); }break; // mode 2
case 2 : {SPCR |= (1<<CPOL); }break; // mode 3
case 3 : {SPCR |= ((1<<CPOL) | (1<<CPHA)); }break; // mode 4
default: {return 0; }; // error
}
In der verwendeten Lib spi.c wird für MasterSPI auch der SS Pin (PB0) konfiguriert, sowie ein freier SS Pin (PB6).
Auf PB0 liegt auch eine LED, das ist soweit nicht schlimm, weil PB0 für die LED auch ein Ausgang ist.
PB6 wird auch als Ausgang geschaltet, das ist der Software SS Pin.
Achtung nun kommt der eigentliche Fehler:
In deiner Funktion AD7124_read_uint8(...) verwendest du
CodeBox C
void chip_enable_high(void)
{
SS_PORT &= ~(1<<SS_BIT);
}
void chip_disable_low(void)
{
SS_PORT |= (1<<SS_BIT);
}
(Das _high und _low finde ich hier irritierend, da die tatsächlichen logischen Pegel dazu invertiert sind)
Hier wird SS_BIT und SS_PORT genutzt, definert in spi.h. Im Moment ist das PB6.
Du müsstest CS\ also an PB6 angeschlossen haben.
Das ist wahrscheinlich nicht der Fall, da du in main.c einen SYNC pin definiert hast, der liegt aber auf PB5!
CodeBox C
#define SYNC_DDR DDRB
#define SYNC_PORT PORTB
#define SYNC (1<<5)
#define SYNC_HIGH SYNC_PORT |= SYNC
#define SYNC_LOW SYNC_PORT &= ~SYNC
... und dieser wird in deiner Software nicht genutzt.
Entferne dein SYNC. Definiere in spi.h
#define SS_BIT 5
wenn dein CS\ auf PB5 liegt.
Den richtigen SPI Mode nicht vergessen.