-
Hallo,
das dient ja nur zum schlafen legen. Ich will den Sensor ja nicht schlafen legen. Ich sende jetzt einfach 0x00. Da nur das 3. Bit wichtig ist, sollen die anderen ja null sein. Das 3. Bit ist dann eben auch null, also der Sensor wird nicht schlafen gelegt.
Ich bin irgendwie soweit, dass ich immer die gleichen Daten empfange, wobei ich allerdings das Gefühl habe, dass der Datenmüll weniger vom Sensor kommt, als mehr durch meine Speicherung und Verarbeitung der Daten.
Code:
uint16_t data= 0;
unsigned char str[8];
/* Daten auslesen */
PORTE &= ~(1<<PE2); // Sensor aktivieren, CS -> LOW
_delay_us(10); // wait
SPDR= 0x00;
while(!(SPSR & (1<<SPIF)));
data= (SPDR<<8) & 0x3FFF; // 8 Bit auslesen
SPDR= 0x00;
while(!(SPSR & (1<<SPIF)));
data+= SPDR; // Weitere 8 Bit auslesen
_delay_us(10); // wait
PORTE |= (1<<PE2); // Sensor deaktivieren
// Daten umrechnen, Formeln aus Datenblatt
if ((0x2000 & temp_data) == 0x2000)
{
data = (int)(data - 16384)/32;
}
else
{
data = (int)(data/32);
}
utoa(data,(char*)str,10);
send(str);
-
Ich würde einmal versuchen 2 einzelne 8Bit variablen zu verwenden. Wenn das funktioniert kann man weiterschauen.
In etwa so:
....
data1=spdr
....
data2=spdr
Anschließend kann man die 2x 8bit in 16bit wandeln (wenn es so funktioniert).
PS: Mit dem Shutdownbit hast du recht. Habe ich falsch gelesen (zu schnell drübergeschaut).
MfG Hannes
-
Hallo,
an den einzelnen Variablen kann es nicht liegen.
Es werden immer die gleichen Daten ausgelesen, egal, welche Temperatur herscht. Das konnte ich mitlerweile mit einem kleinen LogicAnalyzer überprüfen. Die Clock läuft auch, CS tuts auch.
Anhand der Daten des LogicAnalyzers konnte ich dann eben auch sehen, dass die Daten, die dann rein kommen auch richtig umgerechnet werden. Es kommen aber eben keine sinnvollen Daten rein.
Ich würde sagen, dass es nur an den Einstellungen des SPI liegen kann, aber ich finde den Fehler einfach nicht.
Beste Grüße