Each device has it's unique serial number, you could try read it or write something in the scratch pad (just once) and try read it back.
Each device has it's unique serial number, you could try read it or write something in the scratch pad (just once) and try read it back.
From the manual, the OWIN command...
You should be able to just use the Label function of the OWIN command to have your program jump to a routine that displays "N/C"If a device is not present, OWIN can jump to an optional Label.
Code:'Get and display the temperature GIE = 0 OWOUT DQ, 1, [$CC, $44] ' Start temperature conversion OWOUT DQ, 1, [$CC, $BE] ' Read the temperature OWIN DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE], NoDevice GIE = 1 temperature = temperature */ 1600 lcdout $FE,$D4+0,"TEMP ",dec(temperature / 100),$DF,"C" NoDevice: lcdout $FE,$D4+0,"No One Wire Device Detected" GOTO main
Last edited by Heckler; - 28th January 2015 at 18:02.
Dwight
These PIC's are like intricate puzzles just waiting for one to discover their secrets and MASTER their capabilities.
Thanks for the replies.
Dwight, I tried your example, but all that happened was a mixture of the text on line 4 of the LCD. I'll keep experimenting maybe taking the NoDevice a gosub rather than goto... But thanks for putting me on the right track
I'm sure you would get a better result if you actually waited for the ds18b20 to perform the measurement
Code:'Get and display the temperature GIE = 0 OWOUT DQ, 1, [$CC, $44] ' Start temperature conversion pause 800 OWOUT DQ, 1, [$CC, $BE] ' Read the temperature OWIN DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE] GIE = 1 temperature = temperature */ 1600 lcdout $FE,$D4+0,"TEMP ",dec(temperature / 100),$DF,"C"
Cheers Richard,
I stumbled across a PDF on one wire devices from Microchip, and it suggested the following
But this uses ASM, so I'll do some further reading on PBP to see if this can be done in basic rather than ASMCode:OW_reset_pulse Describes 1-Wire protocol to generate Reset pulse to detect the presence of the 1-Wire slave device. Syntax unsigned char OW_reset_pulse(void) Parameters None Return Values Return ‘ 0 ’ if the slave device presence pulse is detected, return ‘ 1 ’ otherwise. Precondition None Side Effects None Example // OW_reset_pulse function return the presence pulse from the slave device if (!OW_reset_pulse()) return HIGH; // Slave Device is detected else return LOW; // Slave Device is not detected
I've been reading through the PBP manual and it really peaves me when manuals state
But doesn't give you a working example !!If a device is not present, OWIN can jump to an optional Label.
So it would suggest the reset command would be the best option to ping the device and if it's not present it won't get an answer back
Not sure if the logic is correct but this works
[code]
'Get and display the temperature
GIE = 0
owin DQ, 1, [],NoDevice
OWOUT DQ, 1, [$CC, $44] ' Start temperature conversion
OWOUT DQ, 1, [$CC, $BE] ' Read the temperature
OWIN DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE]
GIE = 1
temperature = temperature */ 1600
lcdout $FE,$D4+0,"TEMP ",dec(temperature / 100),$DF,"C"
'************************************************* ****************************** '
fan:'check to see if fan is needed
fantrigger=fanset
if (temperature / 100)> fantrigger then
high portA.4
endif
**********************************************
NoDevice:
lcdout $FE,$D4+0,"TEMP N/C "
GIE = 1
goto fan
**********************************************
[code]
The NoDevice section is outside of the main part of the program. The logic being that the PIC sends a reset pulse and if it's not received back then jumps out to the NoDevice section, and then goes to the next part of the code but skips the temperature reading section. Seems to work when I pull out the DS18B20 and then plug it back in![]()
Bookmarks