Do you want to try this patch and see if it helps? Essentially we are
filtering for 85C and retrying unpowered.
Index: module/owlib/src/c/ow_1820.c
===================================================================
RCS file: /cvsroot/owfs/owfs/module/owlib/src/c/ow_1820.c,v
retrieving revision 1.101
diff -B -b -w -i -U3 -r1.101 ow_1820.c
--- module/owlib/src/c/ow_1820.c 18 Jun 2008 15:05:44 -0000 1.101
+++ module/owlib/src/c/ow_1820.c 30 Aug 2008 18:41:15 -0000
@@ -578,6 +578,7 @@
BYTE pow;
int res = Resolutions[resolution - 9].config;
UINT delay = Resolutions[resolution - 9].delay;
+ UINT longdelay = delay * 1.5 ; // failsafe
BYTE mask = Resolutions[resolution - 9].mask;
int oldres;
struct transaction_log tunpowered[] = {
@@ -590,6 +591,12 @@
TRXN_WRITE1(convert),
TRXN_END,
};
+ // failsafe
+ struct transaction_log tunpowered_long[] = {
+ TRXN_START,
+ {convert, convert, longdelay, trxn_power},
+ TRXN_END,
+ };
//LEVEL_DATA("OW_22temp\n");
/* powered? */
if (OW_power(&pow, pn)) {
@@ -614,6 +621,7 @@
}
/* Conversion */
+ // first time
if (!pow) { // unpowered, deliver power, no
communication allowed
LEVEL_DEBUG("Unpowered temperature conversion -- %d msec\n",
delay);
if (BUS_transaction(tunpowered, pn)) {
@@ -634,12 +642,35 @@
if (OW_r_scratchpad(data, pn)) {
return 1;
}
- //printf("Temperature Got bytes %.2X %.2X\n",data[0],data[1]) ;
+ if ( data[1]!=0x05 && data[0]!=0x50 ) { // not 85C
+ temp[0] = (_FLOAT) ((int16_t) ((data[1] << 8) | (data[0] & mask)))
* .0625;
+ return 0;
+ }
+
+ // second time
+ LEVEL_DEBUG("Temp error. Try unpowered temperature conversion -- %d
msec\n", delay);
+ if (BUS_transaction(tunpowered, pn)) {
+ return 1;
+ }
+ if (OW_r_scratchpad(data, pn)) {
+ return 1;
+ }
+ if ( data[1]!=0x05 && data[0]!=0x50 ) { // not 85C
+ temp[0] = (_FLOAT) ((int16_t) ((data[1] << 8) | (data[0] & mask)))
* .0625;
+ return 0;
+ }
- //*temp = .0625*(((char)data[1])<<8|data[0]) ;
- // Torsten Godau <[EMAIL PROTECTED]> found a problem with 9-bit
resolution
+ // third and last time
+ LEVEL_DEBUG("Temp error. Try unpowered long temperature conversion --
%d msec\n", longdelay);
+ if (BUS_transaction(tunpowered_long, pn)) {
+ return 1;
+ }
+ if (OW_r_scratchpad(data, pn)) {
+ return 1;
+ }
temp[0] = (_FLOAT) ((int16_t) ((data[1] << 8) | (data[0] & mask))) *
.0625;
return 0;
+
}
/* Limits Tindex=0 high 1=low */
On Sat, Aug 30, 2008 at 12:55 PM, Christof Egner <[EMAIL PROTECTED]> wrote:
> Hello,
>
> I'm using several DS18B20 in powered mode connected to a DS9490R USB
> adapter. OWFS version is 2.7p4 (I have tried today's CVS version, too).
>
> The temperature is always showing 85C, which seems to be some kind of
> error code. But reading the sensors with digitemp works.
>
> I saw some older post regarding this topic, but I couldn't find a
> general solution.
>
> Is there a patch available? Any hints?
>
>
> Regards,
> Christof
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's
> challenge
> Build the coolest Linux based applications with Moblin SDK & win great
> prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Owfs-developers mailing list
> Owfs-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/owfs-developers
>
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers