Ich hab hier eine thermo_11.c in der folgende Funktion zu finden ist (prüf mal ob das bei Dir der gleiche Code
ist):
char temperature(void)
{
int i;
unsigned int data;
data=0;
p3_2=0;//CS=Low
for(i=0;i >3);//gib 12-Bit Wert zurück
}
((Verdammt, ich bekomme aus irgendwelchen Gründen den Code hier nur verkrüppelt rein, egal, wichtig sind 1. und letzte Zeile))
Hier werden 16bit vom Max6675 geholt und bei der Rückgabe des Funktionswertes 3 Stellen nach rechts geschoben (also der Zahlenwert durch 8 geteilt).
1. Ergibt 16 Stellen weniger 3 Stellen bei mir immer noch
13 Bit und nicht 12 wie im Kommentar, aber das ist im Grunde nicht der Fehler, sonst würdest Du immer falsche
Werte bekommen.
2. Egal ob 16, 13 oder 12 Bit, es sind immer mehr als 8
und in einen Datentyp "char" gehen nun mal nur 8Bit rein. Die lokale Variable "data" Innerhalb der Funktion hat den richtigen Datentyp (unsigned int, ist hier 16 Bit),
aber am Ende "return (data>>3);" wird der Wert zurückgegeben. Und zwar mit dem Datentyp mit dem der
Rückgabewert definiert ist:
char temperature(void)
^^ und der ist nur 8bittig, damit werden die oberen Stellen einfach abgeschnitten und es kommen nur Werte von 0 bis 255 "aus der Funktion raus". Ab einer bestimmten Temperaur (kannst Du Dir ausrechnen wenn Du Dir die weitere Berechnung Anschaust) wird der ausgegebene Wert plötzlich Null und dann gehts wieder von vorne los 1...2...
Es gibt 2 Möglichkeiten das zu ändern, je nachdem welcher Temperaturbereich wirklich ausgegeben werden soll und was der Rest des Programms kann.
1. Man macht die komplette Temperaturberechnung in der Funktion "temperature". Dann kann man z.B. Temperaturen von 0-255°C ausgeben lassen
(dadrüber hat man dann wieder das gleiche Spielchen)
2. Man ändert den Datentyp vor der Funktion von char in unsigned int. Dann kann die Funktion auch richtig funktionieren

Es tauchen aber an anderer Stelle noch Probleme auf:
So wie ich das sehe können nur 4-Stellige Dezimalzahlen ohne Komma und Vorzeichen wiedergegeben werden,
wenn die Temperatur also negativ wird hat man wieder Unsinn in der Anzeige stehen. Wenn Du lust hast probier doch mal das Teil "Minustauglich" zu machen.
Stichworte wären signed int, Zweierkomplement.
Oder man kann auch noch die Nachkommastelle(n) ausgeben.