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.

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.

Gaat me nog niet lukken.
Is dit ook simpel te vertalen naar PIC Basic ?

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