Hallo,
Ik wil de tempeatuur op een aantal plaatsen meten en op een LCD weergeven.
Dit wil ik doen met een LM75 een PIC 16F628 en een LCD in PIC Basic.
Nu lukt het mij wel om de LM75 uit te lezen maar ik krijg het niet voor elkaar om een temperatuur in graden C op de dislay te krijgen.
Ik krijg waardes in binair , decimaal of hexadecimaal, maar hoe reken je zoiets om ?
Een volgende stap is het serieel overzenden van de temperatuur en verwerken in een grafiek op de PC,
maar dat is denk ik voor later.
Wie o wie kan mij helpen..
je moet er DEC voor zetten (decimale weergave)
stel T is de waarde van de temperatuur decimaal:
print at 1,1, "Temp= " , DEC T, $0000111 ,"C"
geeft dan de graden is decimalen weer , Door er een 1,2,3,4 achter te zetten geeft het aantal digits aan die maxiaal worden weer gegeven
stel je nauwkeurig heid is 18,2345647 graden en je doet :
DEC2 dan staat er op je display 18 G
doe je DEC3 dan staat er 18,2 G
granden teken moet ik even zoeken
Als ik dat doe kom ik in mijn kamer waar het ongeveer 18 graden is uit op een decimale waarde van 4864 C.
Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Datasheet LM75 al gelezen ?
1.4 TEMPERATURE DATA FORMAT
Temperature data can be read from the Temperature, TOS
Set Point, and THYST Set Point registers; and written to the
TOS Set Point, and THYST Set Point registers. Temperature
data is represented by a 9-bit, two's complement word with an LSB (Least Significant Bit) equal to 0.5°C
Kortom je moet de waarde uit de LM75 dus nog bewerken.
stukje bascom:
Call I2c_lm75_read
Tempint = Makeint(tempbytelo , Tempbytehi) 'Put into 16 bit var
Tempsign = Tempbytehi And 128
If Tempsign = 128 Then
Tempint = Not Tempint
Tempint = Tempint + 1
End If
Shift Tempint , Right , 5 'B0 - B4 contain no valid data
Tempall = Tempint * 125 '11 Bit resolution
Z = Str(tempall) 'String Z contains temperature now
Sub I2c_lm75_read
' Read data from the I2C LM75
I2cstart 'Generate START condition
I2cwbyte Lm75_adress_w 'Transmit The "ADDRESS and WRITE" Byte
I2cwbyte &H00 'Transmit The Pointer Byte
I2cstop 'Generate a STOP condition
I2cstart 'Generate a START condition
I2cwbyte Lm75_adress_r 'Transmit ADDRESS with READ command
I2crbyte Tempbytehi , Ack 'Receive first DATA byte (MSB) and acknowledge
I2crbyte Tempbytelo , Nack 'Receive second DATA byte (LSB) and don't acknowledge
I2cstop 'Generate a STOP condition
End Sub[Bericht gewijzigd door Roland van Leusden op (63%)]
Ja de datasheet had ik al doorgeplozen, maar ik wist me geen oplossing te bedenken.
Ga nu aan de slag met de gegevens.
Roland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
Post de code die je al hebt eens.
[Bericht gewijzigd door Roland van Leusden op (33%)]
Hier is de code waar ik het mee doe .
Er komt dus nu een decimaal getal van ongeveer 4607 uit,loopt op als ik de lm75 warmer maak.
device = 16f628a
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, CP_OFF, LVP_OFF
delayms 200
all_digital = true
declare sda_pin porta.4 ;sda op poort a.4 is pin 3
declare scl_pin porta.3 ;scl op poort a.3 is pin 2
trisa = %00111111
trisb = 0
porta = 0
dim temp as word
delayms 500 ;LCD opstarten
cls
print "Thermometer met LM75"
delayms 3000
temp = 0
lus:
bstart
delayms 10
temp = busin %10010001,0 ; uitlezen LM75
delayms 10
busack
delayms 500
print at 1, 1, "Temperatuur "
print at 2, 1, DEC temp ," C"
bstop
goto lus
end