Omdat er al vaker een discussie is geweest over het uitlezen van een DS18B20, let op de B, hierbij een werkende code.
pic basic code:
' **************************************
' ******** DS18B20 uitlezen !!! ********
' **************************************
Device 16F628A ;Gebruik een 16F628A type
Config HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
XTAL = 20
ALL_DIGITAL TRUE
Dim Temperatuur As Word
Dim Decimalen As Byte
DelayMS 500 ;LCD stabilisering
Cls ;Wis scherm en zet cursor links bovenaan
Print "Hello world!" ;Plaats tekst op het display
DelayMS 1000
Cls ;Wis scherm en zet cursor links bovenaan
OPNIEUW:
OWrite PORTA.4, 1, [$CC, $44] ' Zend 'Convert' opdracht (temperatuur meten)
While ORead PORTA.4,4 = 0 : Wend ' Wacht tot conversie is voltooid...
OWrite PORTA.4, 1, [$CC, $BE] ' Zend 'Read ScratchPad' opdracht
ORead PORTA.4, 2, [Temperatuur.LowByte, Temperatuur.HighByte] ;Lees temperatuur en plaats dit in de variabele
Decimalen = 0 ' Op 0 voor de zekerheid..
Decimalen = Temperatuur.LowByte << 4 ' Alleen de laatste 4 bits van Temperatuur zijn nodig.
Decimalen = Decimalen >> 4 ' Bits weer op de originele plaats zetten
Decimalen = Decimalen * 6.25 ' Resolutie van de DS18B20 is 0.0625 graden celcius.
Print At 1, 1, Dec (Temperatuur >> 4) , ".", DEC1 Decimalen / 10, 223, "C "
' Door de laatste 4 bits van Temperatuur weg te gooien krijg je de graden Celcius.
GoTo OPNIEUW
End ;Einde programma
Doe er je voordeel mee..