Sitter och skriver kod till min krets men har kört fast på SPI. Jag får igång kommunikationen men får inte ut rätt temperatur när kör simuleringar. Eftersom MAX6675 skickar två byte varav bara 12 bit innehåller mätdata så måste jag bit-shifta vilket jag inte får att fungera. Har försökt läsa på så mycket som möjligt och när jag kollar med en SPI debugger i simuleringen så får jag inte ut något rimligt värde på temperaturen.
Vad gör jag för fel?
Om jag sätter en temp på 177 så motsvarar det 200 i picen och en temp på 279 motsvarar 300.
Men om jag sätter "Ambient Temp." i max6675 till 0 istället för 25 så får jag ett spel på ca +4 grader.
Min kod:
Kod: Markera allt
void init_temp(void)
{
TC_CS =0; // Slave select
TC_DATA =0;
TC_CLK =0;
OpenSPI(SPI_FOSC_64, MODE_01, SMPEND);
TC_CS =1; // Slave select
read_temp();
}
void read_temp(void)
{
unsigned int Data,Temp;
unsigned char DataH,DataL;
TC_CS =0; // Slave select
DelayMs(16);
DataH = ReadSPI();
DataL = ReadSPI();
TC_CS =1; // Slave select
DelayMs(1);
Data = ((unsigned int)DataH << 8) +DataL;
Data = Data>>3;
Temp = (unsigned int)(Data/4);
if(Temp == 200){
LED = 1;
}
else LED = 0;
}