Er zijn al diverse topics over, maar vrijwel allemaal redelijk gedateerd.
Ik ben daarom zo vrij er hier eentje te maken.
Ik heb een DS18B20 'one wire' temperatuur sensor waarmee ik de temperatuur uitlees. Dat doe ik met onderstaande MikroBasic routine
'====================================================================================================
Sub procedure Read_Temp() 'Read Temperature from DB18B20
'====================================================================================================
Ow_Reset(PORTB, 0) 'Onewire reset signal
Ow_Write(PORTB, 0, 0xCC) 'Issue command SKIP_ROM
Ow_Write(PORTB, 0, 0x44) 'Issue command CONVERT_T
Delay_us(120)
Ow_Reset(PORTB, 0) 'Onewire reset signal
Ow_Write(PORTB, 0, 0xCC) 'Issue command SKIP_ROM
Ow_Write(PORTB, 0, 0xBE) 'Read ScratchPad
TempL1 = Ow_Read(PORTB, 0)
TempH1 = Ow_Read(PORTB, 0)
Temp = TempH1 <<4 + TempL1 >>4
TempDec = TempL1 and 0x0F
If TempDec > 4 Then Inc(Temp) End If 'From .5 and above add 1 Degree
End Sub
Nu werkt het wel, maar het vreemde is dat er af en toe op willekeurige tijdstippen een heel rare waarde wordt gemeten (Temp is een word).
Die waarden zijn dan bv 8614 of 2647..Volkomen random.
Omdat mijn projectje met die temperatuur dingen doet, schiet het dus in de stress.
Ik heb het 'opgelost' door deze rare waarden uit te sluiten. Maar het liefst zou ik natuurlijk zien waarom deze rare waarden verschijnen.
De sensor is voorzien van een pull up van 4K7, de voeding is +5V.
Kent iemand dit verschijnsel, of doe ik wellicht iets verkeerd in de routine?