Nenapsal jsi, co se Ti na tom nedaří. Jestli komunikace nebo nesmyslný data. Pokud se Ti vrací nesmyslný data, viděl bych problém tady :
Data z převodníku jsou B23,…,B0. Jenže Ty je do r ukládáš B7,…,B0,B15,…,B8,B23,…,B16, protože :
do r uložíš bity B23-B16
přečteš bity B15-B8, posuneš je o 8 pozic doleva a přidáš k r
přečteš bity B7-B0, posuneš je o 16 pozic doleva a přidáš k r
Správně by to měo být takhle :
unsigned long read_spi_data() {
unsigned long r = 0UL;
while(!(SPSR & _BV(SPIF)));
r |= SPDR;
while(!(SPSR & _BV(SPIF)));
r <<= 8;
r |= SPDR;
while(!(SPSR & _BV(SPIF)));
r <<= 8;
r |= SPDR;
return r;
}
do r uložíš bity B23-B16
otočíš r o 8 bitů doleva
přečteš bity B15-B8 a přidáš k r
otočíš r o 8 bitů doleva
přečteš bity B7-B0 a přidáš k r