Quote Originally Posted by lerameur View Post
simple I need to take the difference. I believe pic basic pro can only handle unsigned numbers. So but keeking the original forula we get negative number for zero temperature. So by putting the 3200 in front , we get a positive number and add a minus sign.

for -15 degrees celcius
we have 15*100 =1500 in the euqation
=3200 - (1500/5*9) = 500
= 500/100 ------divide by hundred caus ewe multiplied by a 100 initially
=5
= -5 ----- here we just add the minus

but anyway , remember when i said my decimal values was going reverse. I was thinking and that is similar from doing 2,s compliment . so i decided to do 2,s compliment on everything..

Zerotemp: '------------- cases when zero celcius and positive Fahrenheit
temperature = ( ~ temperature ) + 1
count_per_c = ( ~ count_per_c) + 1
count_remain= ( ~count_remain) + 1
temp1 = temperature

temperature = ((( temperature >>1 ) *100)- 25) + (((count_per_c - count_remain) * 100) / count_per_c)
if tempF <= 0 then goto ZeroF

': tempf = ( ~ tempF ) + 1 ' added this
tempF = (((temperature /5) *9 ) + 3200)
lcdout $FE,1, "TempC: ", "-", dec (temperature / 100) , ".", dec2 temperature," ",$DF,"C"
lcdout $FE,$C0, "TempF: ", dec (tempF / 100) , ".", dec2 tempF ," ",$DF,"F"
goto loop

ZeroF: '---------------- cases when zero celcius and 0 Fahrenheit
tempF = 3200 - ((temperature /5) * 9)

lcdout $FE,1, "TempC: ", "-", dec (temperature / 100) , ".", dec2 temperature," ",$DF,"C"
lcdout $FE,$C0, "TempF: ", "-", dec (tempF / 100) , ".", dec2 tempF ," ",$DF,"F"

goto loop

end
I'm thinking that the easiest way to solve this whole mess is to add an offset to the original C value.
The 1820 will only handle temps up to +85C and has an operating range of -55 -> +125C. So, that's a total range of 180C. So, add, say 200 to the original Celsius input. You still have 3 cases to deal with (+C/F , -C/+F and -C/-F), but it might be easier to deal with this way... (and it will still work in the confines of a word value, 200 + 125 = 325 , 20000 + 12500 = 32500).

At the receiving end,
If C temp is => 200 (20000) , then subtract 200 (20000) and handle it like normal, which already works fine. +C and +F

If the C temp is => 182.22 (18222) AND < 20000....handle it for -C and +F

If the C temp is < 182.22 (18222).....handle it for -C and -F.

In the last 2 cases when you have a negative temp, I think setting a display flag and converting the temp's to a positive range, then displaying them is the way to go (flip them back over the zero, i.e. -10 = 10 with a display flag), but you're already doing that (even though it isn't working at the moment).