PDA

View Full Version : Value of temperature



cobuccit
- 13th April 2020, 12:41
Hi, I'm always grappling with my firmware on the PIC 16F88 trying to dust some programming.


1) Ascertained that as PIC I have 16F88
2) My temperature sensor is an LM235H
3) located on analog port 0 (PIN17)
4) The assembly scheme of sensor is:

8827


I looked a bit at the results obtained in the calculations.
I used, not for my skill but sifting left and right of the codes found on line of the formulas.

Ex .:

to find the temperature, average 20 values read on the analog port and then apply the formula



temperature= (temp*10) */ quanta


and I'd like to understand why?

Also, another string makes me do this:


lcdout $ FE, 2, "Temp.", dec2 (temperatures / 100), ".", dec1 (temperatures // 100), $ DF, "C"


That is, the result obtained from the first, set it in this way to represent it on the display as a number with a comma.

But making some insights I pull out such a times table:




temp
Temperature= (temp*10) */ quanta
Temperature/100
Temperature//100
Display


666
32519
325,19

25,9


667
32568
325,68

25,8


668
32617
326,17

26,7


669
32666
326,66

26,6


670
32714
327,14

27,4


671
32762
327,62

27,3


672
32812
328,12

28,2


673
32861
328,61

28,1


674
32910
329,1

29


675
32958
329,58

29,8


676
33007
330,07

30,7


677
33056
330,56

30,6


678
33105
331,05

31,5


679
33154
331,54

31,4




I read in the PicBasic manual what the various mathematical operators indicate.
But what amazes me is the fact that worth
32617 corresponds to a temperature of 26.7 ° C and that to the value of
32666 corresponds to a temperature of 26.6 ° C and so on on the table.

So what is represented on the display is a lying value?

Or am I doing something wrong?

Thanks for the answers.

Charlie
- 13th April 2020, 14:03
You did not post enough code that we can answer your question. Post all of your code.

cobuccit
- 13th April 2020, 14:40
You did not post enough code that we can answer your question. Post all of your code.






define osc 4
adcon1.7=1
ANSEL = 0001 'Disable Inputs Tranne AN0
ADCON1 = 001110
OSCCON = 100000 'Internal RC set to 4MHZ
TRISA = 000001 ' impostazioni INP/OUT
TRISB = 000000 ' delle porte
'----------------------------------------------------
DEFINE LCD_DREG PORTB 'Porta B DATA OUT
DEFINE LCD_DBIT 4 '0 --> Bit 0-3 : 4 --> Bit 4-7
DEFINE LCD_RSREG PORTB 'LCD register select port - Porta B --> RS
DEFINE LCD_RSBIT 2 'LCD register select bit - Pin RS B2
DEFINE LCD_EREG PORTB 'LCD enable port - Porta B --> EN
DEFINE LCD_EBIT 3 'LCD enable bit - Pin EN B3DEFINE LCD_BITS 4 'LCD bus size 4 or 8
DEFINE LCD_LINES 2 'Number lines on LCD DEFINE LCD_COMMANDUS 2000 'Command delay time in us
DEFINE LCD_DATAUS 50 'Data delay time in us


Rele VAR PORTA.6 ' Pin 15
'--------------------------------------------------------------
'---------Define ADCin Parameters
DEFINE ADC_BITS 10 'set number of bits in result
DEFINE ADC_CLOCK 3 'set clock source (3=rc)
DEFINE ADC_SAMPLEUS 50 'Set sampling time in uS




' RAM Assignments and Variables
'================================================= ==========================
temp var word
temperature var word
samples var word
sample VAR BYTE
quanta con 1250
Tmax VAR byte
Tmin VAR byte
'================================================= ==========================
Tmin=16
Tmax=30

START:
Lcdout $FE, 1


low rele


main:
sample = 1
samples= 0
FOR sample = 1 TO 20 'Take 20 samples
ADCIN 0, temp 'Read AN0 into temp variable
samples = samples + temp
PAUSE 50 ' Wait 1/4 seconds per reading
NEXT sample
temp = samples/20 'Average over 20 samples (Every 5 seconds)
temperature= temp */ quanta


if temp > 675 then high rele 'Instead 675 write the correct RAW number for 30degC
if temp < 675 then low rele 'Instead 675 write the correct RAW number for 30degC


LCDOUT $FE, 2 ' ritorna al primo carattere
lcdout $FE, 2, "Temp ",dec2 (temperature/10),".", dec1 (temperature/10),"C"
'lcdout $FE, $C0, "Tmin ",#Tmin, " Tmax ",#Tmax FOR NORMAL OPERATION UNCOMMENT LINE
lcdout $FE, $C0, "RAW:",dec temp 'this show the ADC value FOR NORMAL OPERATION COMMENT OR DELETE THIS LINE
'lcdout $FE, $C0, "RAW:",dec temperature

'When the display show 30,0 degC look at the RAW number on LCD and rewrite it in lines: if temp > 675 then high rele
'and if temp < 675 then low rele .


goto main

Dave
- 13th April 2020, 16:33
I believe you are going wrong by not subtracting the zero degree C. offset before you calculated the final value of quanta. Here is what I calculate:

0 degrees C. = 273.15 degrees K.
273.15 degrees K. x .01 volts = 2.7316 volts @ 0 degrees C.
5 volts / 1023 counts = .004887586 volts per count
2.7315 volts / .004887586 volts per count = 588.86484 counts
588.86484 raw counts = 0 degrees C. = 273.15 degrees K.

After subtracting the 588.86 counts from the raw reading, you end up with:
.01 volts per degree C. / .004887586 volts per count which equals 1 degree C.

louislouis
- 13th April 2020, 18:10
Everything is solved in previous thread.
Did you read this?
http://www.picbasic.co.uk/forum/attachment.php?attachmentid=8825&d=1586510417
This is the working code for LM335 probably for LM235 too. Compile it, load to pic and thats all.

cobuccit
- 13th April 2020, 18:29
Everything is solved in previous thread.
Did you read this?
http://www.picbasic.co.uk/forum/attachment.php?attachmentid=8825&d=1586510417
This is the working code for LM335 probably for LM235 too. Compile it, load to pic and thats all.


Thanks louislouis you were very kind!

Ioannis
- 14th April 2020, 22:31
I suppose that cobuccit has hard times understanding the maths behind */ operator and how to find the number used with that operator.

1. The PBP manual is your friend

2. Look at this page (down) that is primarily for the Basic Stamp but most if not all apply to PBP too: http://emesystems.com/OLDSITE/BS2index.htm

Ioannis

Acetronics2
- 26th May 2020, 10:16
Hi, Ioannis,

for those calculations ... I suggest you to have a look here : https://www.miscel.dk/MiscEl/miscel.html
e (https://www.miscel.dk/MiscEl/miscel.html)specially here : https://www.miscel.dk/MiscEl/miscelIntegerMath.html

t (https://www.miscel.dk/MiscEl/miscelIntegerMath.html)he program is a bit old ... but just answer "yes" if it shows an error , and it will run fine ...

best regards
Alain