Am using mikroC programming language, the code works fine but the first value ds 1820 read is 85 Celsius what is wrong with my code? here are my codes
const unsigned short TEMP_RESOLUTION = 9;
char *text = "000.0000";
unsigned temp;
void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
// check if temperature is negative
if (temp2write & 0x8000) {
text[0] = '-';
temp2write = ~temp2write + 1;
}
// extract temp_whole
temp_whole = temp2write >> RES_SHIFT;
// convert temp_whole to characters
if (temp_whole/100)
text[0] = temp_whole/100 + 48;
else
text[0] = '0';
text[1] = (temp_whole/10)%10 + 48; // Extract tens digit
text[2] = temp_whole%10 + 48; // Extract ones digit
// extract temp_fraction and convert it to unsigned int
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
// convert temp_fraction to characters
text[4] = temp_fraction/1000 + 48; // Extract thousands digit
text[5] = (temp_fraction/100)%10 + 48; // Extract hundreds digit
text[6] = (temp_fraction/10)%10 + 48; // Extract tens digit
text[7] = temp_fraction%10 + 48; // Extract ones digit
// print temperature on LCD
//Lcd_Out(2, 5, text);
}
void main() {
ADCON1=7;
UART1_init(9600);
// ANSEL = 0; // Configure AN pins as digital I/O
// ANSELH = 0;
/*
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD
Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 1, " Temperature: ");
// Print degree character, 'C' for Centigrades
Lcd_Chr(2,13,223); // different LCD displays have different char code for degree
// if you see greek alpha letter try typing 178 instead of 223
Lcd_Chr(2,14,'C');
*/
//--- main loop
while(1) {
//--- perform temperature reading
Ow_Reset(&PORTA, 5); // Onewire reset signal
Ow_Write(&PORTA, 5, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 5, 0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA, 5);
Ow_Write(&PORTA, 5, 0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA, 5, 0xBE); // Issue command READ_SCRATCHPAD
temp = Ow_Read(&PORTA, 5);
temp = (Ow_Read(&PORTA, 5) << 8) + temp;
//--- Format and display result on Lcd
Display_Temperature(temp);
Delay_ms(500);
if(temp>38 || temp<35 )
{
UART1_Write_Text("at\n\r"); //AT command to initialize GSM modem
Delay_ms(100 );
UART1_Write_Text("at+cmgf=1\n\r"); //Text mode
//UART1_Write_Text("at+cpms=10\n\r");
UART1_Write_Text("at+cmgs=\"075xxxxx\"\n\r"); //send message(SMS)
RB0_bit=1;
RB1_bit=0;
UART1_write_text(text);
UART1_Write_Text(" Celcius\n\r");
UART1_Write_Text("Conditon critical\n\r"); //Patient's status
delay_ms(2000); //delay 2 seconds
UART1_Write(26);
Delay_ms(100);
}
else if(temp>=35 && temp<=38) //if temperature is normal
{
RB1_bit=1; //Blue RLED on for norma temperature
RB0_bit=0;
delay_ms(1000);
}
// while (1){
}