Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

DS 1820 digital sensor

Status
Not open for further replies.

esweya

Newbie level 6
Joined
Jan 15, 2011
Messages
13
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Location
Dar es Salaam Tanzania
Activity points
1,386
Hi guys! Am using ds1820 digital temperature sensor to measure body temperature, but tho code am writing does not work well. Can some one help me with he codes which will display(lcd) the value of temperature and condition status of the body? Am using pic 16F876A. hanx
 

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){

}
 

am using MkroC pro for pic and c language. Up to now i have managed to display the correct temperature from the ds1820 digital sensor but i still have trouble on how to connect the digital temperature sensor and analogue pressure sensor, am using fldt-028 piezo-electric sensor
 

That´s your choice.
Any analog and digital I/O can be choosen.

+++
 

i have tried to assign different pins as analogue and digital input but still i have the same problem. am using pic16F876A.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top