Deo koda koji je pisac prikacio mi deluje kao Copy/Paste iz nekog drugog programa ili primera, bez da je sredjen kako bi trebalo.
Normalnom matematikom nije moguce dobiti -1638.2500, to je vise od
12 bitova ukupno, odnosno
7 bitova celobrojne temperature!
Evo jednog kostura programa kako bi to ja odradio (nedostaju komunikacione rutine, i jos svastanesto)
Code:
Device 16F877A
Xtal 4
All_Digital True
PortB_Pullups False
Symbol Dq PORTA.0
' DS 18B20 Commands
Dim ReadROM As $33
Dim MatchRom As $55
Dim SkipROM As $CC
Dim DearchROM As $F0
Dim SearchAlarm As $EC
Dim StartConversion As $44
Dim WriteScratchPad As $4E
Dim ReadScratchPad As $BE
Dim CopyScratchPad As $48
Dim RecallEE As $B8
Dim ReadPowerSupply As $B4
Dim StartData As $1E00
Dim SensorPos As Word
Dim C As Byte
Dim Predznak As Byte
Dim Temperature As Word
Dim Celo As Byte
Dim Deci As Byte
Dim SN[8] As Byte
Dim i As Byte
Clear
GoTo Glavni
'****************************************************************
'* Podprogrami *
'****************************************************************
IscitajSenzor:
OWrite Dq, 1, [MatchRom, SN[0], SN[1], SN[2], SN[3], SN[4], SN[5],SN[6], SN[7], ReadScratchPad]
ORead Dq, 2, [Temperature.LowByte,Temperature.HighByte]
Temperature = Temperature & $0FFF ' Maskiranje 12 potrebnih bitova
If Temperature.11 = 1 Then
Predznak = "-"
Temperature = ~Temperature + 1 ' ukoliko je temperatura negativna, drugi komplement
Else
Predznak = "+"
EndIf
Celo = Temperature >> 4
Deci = (Temperature.LowByte & %00001111) * 100 / 16
Return
StartujMerenje:
OWrite Dq, 1, [SkipROM, StartConversion]
Return
PosaljiPodatak:
Return
'****************************************************************
'* Glavna programska petlja *
'****************************************************************
Glavni:
SensorPos = StartData
GoSub StartujMerenje
DelayMS 1000
For i = 1 To 40
SN[0] = CRead SensorPos
Inc SensorPos
SN[1] = CRead SensorPos
Inc SensorPos
SN[2] = CRead SensorPos
Inc SensorPos
SN[3] = CRead SensorPos
Inc SensorPos
SN[4] = CRead SensorPos
Inc SensorPos
SN[5] = CRead SensorPos
Inc SensorPos
SN[6] = CRead SensorPos
Inc SensorPos
SN[7] = CRead SensorPos
If i < 40 Then
Inc SensorPos
Else
SensorPos = StartData
EndIf
GoSub IscitajSenzor
GoSub PosaljiPodatak
Next i
End
' Blok sa Serijskim brojevima senzora, sa sve CRC bajtom
Org StartData
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
CData 0, 0, 0, 0, 0, 0, 0, 0
Pisano u Proton+
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.