Gast
#3666895
Hallo zusammen,
Ich bin dabei eine 4-wire SPI-Verbindung zwischen dem ATmega16 und dem
Beschleunigungssensor ADXL345 aufzubauen. Dies funktioniert auch soweit.
Nun wollte ich die Daten des ADXL345 am Stück auslesen. Also die erste
Register Adresse senden (inkl. MB Bit -> Multiple byte) und danach alle
6 Register nacheinander auslesen. (Code ganz unten)
Allerdings funktioniert dies nicht. Beim zweiten Aufruf von Receive
bleibt das Programm hängen.
Jetzt also meine grundsätzliche Frage: Unterstützt der ATmega16 dies
eigentlich oder muss ich jedes mal die richtige Adresse zuvor senden?
Oder liegt der Fehler ganz wo anders?
SPI_MasterTransmit((0b11000000 | 0x32));//Bit 7 gesetzt: read; Bit 6
gesetzt: multiple bytes read; 0x32 address of DataX0
for (int i = 0; i<6; i++)
{
xyzDATA[i] = SPI_MasterReceive();
}
Mit:
void SPI_MasterTransmit(char cData)
{
SPDR = cData;
while(!(SPSR & (1<<SPIF)))
;
}
char SPI_MasterReceive()
{
while(!(SPSR & (1<<SPIF)))
;
return SPDR;
}