Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronic 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.

Register Log in

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
 

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

}
 

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

andre_teprom

Super Moderator
Staff member
Joined
Nov 7, 2006
Messages
9,187
Helped
1,141
Reputation
2,301
Reaction score
1,116
Trophy points
1,403
Location
Brazil
Activity points
53,388
That´s your choice.
Any analog and digital I/O can be choosen.

+++
 

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
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.
Toggle Sidebar

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top