 |
 |
View previous topic :: View next topic |
Author |
Message |
xuxa
Joined: 07 Jul 2009 Posts: 4
|
display only shows -0.5 C |
Posted: Tue Jul 07, 2009 8:00 pm |
|
|
I am having the same problem of ''ishmael'' and I use CCS in Mplab, I've tried the 16f628a and the 16f877a, both only shows -0.5 C on display...
I'm from Brazil, my english is not perfect, thanks for any help |
|
 |
ishmael
Joined: 02 Jun 2009 Posts: 4
|
|
Posted: Tue Jul 07, 2009 11:54 pm |
|
|
xuxa, I solved the problem. I'm sorry I haven't posted a follow-up, it's just that the project is my bachelor's degree, and the exam is tomorrow, so I am a bit stressed. As far as I can remember, the -0.5 problem in the proteus simulation got solved when I loaded the proper configuration word onto the pic (from the end of the ccs exported lst file). If necessary, delete and add the pic and/or ds18s20, or even start a new project (maybe there are some bugs regarding applying the changes to those settings). Also pay attention to the oscillator setting, so that the pic speed you used in the C code, will match the speed set up in proteus.
And if your problem is not in simulation, remember to attach the pull-up resistor to the 1-wire bus. Upon checking my original post, I discovered I changed the port to, it's RA6 used as I/O , - pic uses internal oscillator. try using my fuse list : NOWDT, INTRC_IO, MCLR, PUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD
config word : 0x3F70
Hope it will work for you too. |
|
 |
xuxa
Joined: 07 Jul 2009 Posts: 4
|
-0.5 C problem |
Posted: Wed Jul 08, 2009 3:03 pm |
|
|
In the project with 16f877A, I solved the problem using the same oscillator setting as I 've been using in my CCS code (20Mhz). Than the LCD only displayed multiples of 8, like: -16 C, -8 C, 0 C, 8 C, 16 C .....So I went to the ds1820.c code and changed the configuration to ds18B20, in a escale of 0.1 , (just by changing the comment of two lines):
Code: |
//result = (float) temp3 / 2.0; //Calculation for DS18S20 with 0.5 deg C resolution
result = (float) temp3 / 16.0; //Calculation for DS18B20 with 0.1 deg C resolution
|
So....it worked fine in simulation!
To the 16f628A project, it worked too, but the configuration of the fuses and the clock are :
Code: | #use delay(clock=4000000)
#fuses NOWDT, HS, PUT, NOPROTECT, BROWNOUT, MCLR, NOLVP, NOCPD
#fuses INTRC_IO,NOWDT,PUT,BROWNOUT,NOLVP,NOMCLR |
Thanks very much!
I will try it on Protoboard next month, bye |
|
 |
milkman41
Joined: 16 Jun 2008 Posts: 30
|
|
Posted: Fri Mar 05, 2010 3:01 pm |
|
|
Hi all,
I'm using the original code posted by Han Solo on the first page, and I can't get a temperature other than 85 C, which I think I read was the startup temperature. I'm using a PIC16F876A with a DS18B20. The code I'm using is pretty much exactly the one Han Solo posted; all I've changed is the one wire pin, and then made some minor changes to the main code, but nothing to any of the actual one wire functions. Any help would be greatly, greatly appreciated.
thanks. |
|
 |
deperkin
Joined: 04 Feb 2009 Posts: 83 Location: PA
|
ds18s20 |
Posted: Mon Sep 20, 2010 1:56 pm |
|
|
I am trying to connect a ds18s20. (I am using a 4.7k pullup).
I am using the original hans solo code, with the only difference that the clock is set to 500 kHz. And I am trying to use pin D2 on an 18F4550.
I also am constantly reading a -0.5 C temperature.
Any ideas? Due to other things on the circuit I need to stick with this clock speed.
I am using compiler 4.093 as well.
I am NOT using Proteus.
If I use the updated code from http://www.ccsinfo.com/forum/viewtopic.php?t=42648&highlight=ds1820
then I constantly get 4095.0 C
I have also tried various input pins.
Thanks all! |
|
 |
atai21
Joined: 30 Dec 2010 Posts: 31
|
|
Posted: Tue May 10, 2011 1:49 am |
|
|
I'm sorry but I don't understand what this line means:
Code: |
setup_adc_ports(no_ANALOGS);
|
Does it mean I can't put analog in my code? If I want to measure voltage from solar cell, I need to connect it with pin A3. Can someone help me? |
|
 |
tejca
Joined: 16 Sep 2011 Posts: 2 Location: SLOVENIJA
|
|
Posted: Mon Oct 03, 2011 2:34 pm |
|
|
atai21 wrote: | I'm sorry but I don't understand what this line means:
Code: |
setup_adc_ports(no_ANALOGS);
|
Does it mean I can't put analog in my code? If I want to measure voltage from solar cell, I need to connect it with pin A3. Can someone help me? |
it means analog-digital converter on specific ports are disabled and yes that part of code means you can not put analog on pins which have that converter. _________________ --
Not Found (aka 404)
You're looking for something that does not, has not, will not, might not or
must not exist ...
... but you're always welcome to search for it. |
|
 |
adrix
Joined: 04 May 2012 Posts: 24
|
|
Posted: Sun May 13, 2012 4:44 am |
|
|
How can I make that the output would be 0,1 deg accuracy? I'm using DS18S20, so the division by 16 doesn't work. |
|
 |
Mike Walne
Joined: 19 Feb 2004 Posts: 1785 Location: Boston Spa UK
|
|
Posted: Sun May 13, 2012 5:26 am |
|
|
Of course it doesn't work.
I don't even use these parts, but I can read the data sheet.
Best ACCURACY is 0.5C.
DS18S20 is 9 bit RESOLUTION part.
LSB represents 0.5C, so that's the best it can do.
If you want better RESOLUTION, maybe use the DS18B20 which goes to 12 bits.
Each LSB is then 0.0625C, you get nearest 0.1C by rounding off.
But ACCURACY is still only 0.5C at best.
I'm assuming you understand the difference between ACCURACY and RESOLUTION.
Mike |
|
 |
stoyanoff
Joined: 20 Jul 2011 Posts: 375
|
|
Posted: Tue Aug 21, 2012 1:06 am |
|
|
I have a problem. I tried your codes but the 18B20 returned very high temperatures - 85 degrees for example. The temperature in the room is not more the 25 degrees.
Where is the problem??? |
|
 |
shaharyar
Joined: 09 Jan 2013 Posts: 1 Location: Pakistan
|
|
Posted: Wed Jan 09, 2013 1:23 pm |
|
|
Thanks jds-pic and scanan
the code worked like a charm with a single error
cheers |
|
 |
yuripace
Joined: 26 Nov 2013 Posts: 21
|
|
Posted: Tue Dec 31, 2013 4:15 am |
|
|
i have ds18b20.
all is working good at 5v.
at 3.23v temp is stucked to 127.93. I'm using 4,7k resistor connected to datapin on A0 pin of a pic16f876.
any suggestion? |
|
 |
Mike Walne
Joined: 19 Feb 2004 Posts: 1785 Location: Boston Spa UK
|
|
Posted: Tue Dec 31, 2013 9:02 am |
|
|
Are you using parasite power mode?
Mike |
|
 |
yuripace
Joined: 26 Nov 2013 Posts: 21
|
|
Posted: Sat Jan 04, 2014 2:53 am |
|
|
on ds18b20 Pin1 connected to gnd, pin3 to 3.5v, DQ connected to A0 pin of pic16f876 with a resistor connected to vcc |
|
 |
yuripace
Joined: 26 Nov 2013 Posts: 21
|
|
Posted: Sat Jan 04, 2014 4:03 am |
|
|
i'm trying different configuration. i'm using scanan code, pic16f876 and external 16mhz clock. I dont know why, now also 5v dont work, stucked at 85°.
1 - parasite power mode: pin 1 and 3 connected to gnd, pin 2 connected to A0 with a pullup resistor: result, 85°
2 - normal mode, pin 1 gnd, pin 2 dataline to A0 pin, pin3 VCC, no resistor result: -0,06
whats wrong?
Code: | #include <16F876.h>
#use delay(clock = 16000000)
#fuses HS, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#include "flexlcd.c"
#include "1wire.c"
void ds18b20_init()
{
//for 10 bit resolution mod
onewire_write(0xCC);
onewire_write(0x4E);
onewire_write(125);
onewire_write(-55); //this should be done for proper working of DS18B20
onewire_write(127);
onewire_reset();
onewire_write(0xCC);
onewire_write(0x48);
delay_ms(15);
}
float ds1820_read()
{
int8 busy=0, temp1, temp2;
signed int16 temp3;
float result;
onewire_reset();
onewire_write(0xCC);
onewire_write(0x44);
while (busy == 0)
busy = onewire_read();
onewire_reset();
onewire_write(0xCC);
onewire_write(0xBE);
temp1 = onewire_read();
temp2 = onewire_read();
temp3 = make16(temp2, temp1);
//result = (float) temp3 / 2.0; //Calculation for DS18S20 with 0.5 deg C resolution
result = (float) temp3 / 16.0; //Calculation for DS18B20 with 0.1 deg C resolution
delay_ms(200);
return(result);
}
void main()
{
delay_ms(500);
float temperature;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
delay_ms(500);
ds18b20_init();
delay_ms(500);
lcd_init();
delay_ms(1000);
while (1)
{
output_high(PIN_B4);
lcd_gotoxy(1,1);
temperature = ds1820_read();
printf(lcd_putc,"\nTEMP: %f ", temperature);
output_low(PIN_B4);
delay_ms(1000);
}
} |
|
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|