One Wire 8051 Example - Testing Output LED when Temp is HiLo

General discussion on mikroC PRO for 8051.
Post Reply
Author
Message
cpu*1000
Posts: 2
Joined: 27 Jan 2019 23:56
Location: Canada

One Wire 8051 Example - Testing Output LED when Temp is HiLo

#1 Post by cpu*1000 » 28 Jan 2019 02:20

HI there,

I am testing the OneWire example (v3.6.0) and added minor code in blue to the example. Trying to test output LED when temperature is high or low, the LED just stays on, simulated on Proteus and on the Easy8051 v6 development board. Advise is much appreciated thanks.

**************************************************************

sbit LED at P3_3_bit;

// LCD module connections
sbit LCD_RS at P1_0_bit;
sbit LCD_EN at P1_2_bit;

sbit LCD_D4 at P1_4_bit;
sbit LCD_D5 at P1_5_bit;
sbit LCD_D6 at P1_6_bit;
sbit LCD_D7 at P1_7_bit;
// End LCD module connections

// OneWire pinout
sbit OW_Bit at P1.B3;
// end OneWire definition

// Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor:
// 18S20: 9 (default setting; can be 9,10,11,or 12)
// 18B20: 12
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() {

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
do {
//--- perform temperature reading
Ow_Reset(); // Onewire reset signal
Ow_Write(0xCC); // Issue command SKIP_ROM
Ow_Write(0x44); // Issue command CONVERT_T
Delay_us(120);


Ow_Reset();
Ow_Write(0xCC); // Issue command SKIP_ROM
Ow_Write(0xBE); // Issue command READ_SCRATCHPAD

temp = Ow_Read();
temp = (Ow_Read() << 8 ) + temp;


//--- Format and display result on Lcd
Display_Temperature(temp);

if (temp >= 25)
{
Led = 1; //0x00;
}
else
if (temp < 25)
{
Led = 0; //0xff;
}


Delay_ms(500);
} while (1);
}
Attachments
Proteus one wire example.jpg
Proteus one wire example.jpg (231.71 KiB) Viewed 2060 times

User avatar
jovana.medakovic
mikroElektronika team
Posts: 986
Joined: 18 Dec 2018 10:36

Re: One Wire 8051 Example - Testing Output LED when Temp is

#2 Post by jovana.medakovic » 28 Jan 2019 17:16

Hello,

Your if statement is not correct.

In the end of Display_Temperature function you need to write:

if (temp_whole >= 25)
{
Led = 1; //0x00;
}
else
{
Led = 0; //0xff;
}


Kind regards,
Jovana

cpu*1000
Posts: 2
Joined: 27 Jan 2019 23:56
Location: Canada

Re: One Wire 8051 Example - Testing Output LED when Temp is

#3 Post by cpu*1000 » 29 Jan 2019 03:06

Thank you very much Jovana for the quick reply, the LED now turns on/off when temp is high or low.

User avatar
jovana.medakovic
mikroElektronika team
Posts: 986
Joined: 18 Dec 2018 10:36

Re: One Wire 8051 Example - Testing Output LED when Temp is

#4 Post by jovana.medakovic » 29 Jan 2019 08:43

You're welcome!
If you have additional questions, feel free to ask.

Kind regards,
Jovana

Post Reply

Return to “mikroC PRO for 8051 General”