As you noted, all the USB specific code is on module/owlib/src/c/ow_ds9490.c

Look at function (line 257):
static int DS9490_setup_adapter(const struct parsedname * pn) {

Here is what Willy Robison suggested:
  I pourchased the weather station parts from AAG, and had
a problem with everything under linux recgonizing all of
the chips in the weather station.  AAG indicated that
the latest drivers from Dallas/Maxim addressed the problem.
There was a terse reference to changing the slew rate
to 1.37V/uS.

  Referrinhg to the DS2490 datasheet, the mode commands
to set various parameters are listed.  It seems that the default
values for the 3 settings were not quite optimal...

  I've reworked the code fragment to match the style in
ow_ds9490.c, but I don't have the calls to the routine in
the correct locations at this point...

  I'll try to send some more information as I stumble on to
a solution.

  To complicate things, I suspect that the timing requirements
are dependant on the topology of the 1-wire bus , so a working
solution may require that the parameters be set from the command
line.

--- xxx ---
DS9490_BusParm( int slewrate,
                int low_time,
                int ds0_low,
                const struct parsedname * pn ) {
    int Value;
    int Index;
    int ret[3];
/*
 *      Slew Rate
 */
    Value = MOD_PULLDOWN_SLEWRATE;
    if(slewrate<0)
         Index = PARMSET_Slew1p37Vus;
    else
         Index = slewrate;
    if((ret[0] = usb_control_msg(pn->in->connin.usb.usb,
                                0x40,                           // RequestType
                                MODE_CMD,                       // Request
                                Value,                          // Value
                                Index,                          // Index
                                NULL,                           //
                                0,                              // Length
                                TIMEOUT_USB )) < 0)
         LEVEL_DATA("DS9490_BusParm: Error MOD_PULLDOWN_SLEWRATE\n") ;

/*
 *      LowTime
 */
    Value = MOD_WRITE1_LOWTIME;
    if(low_time<0)
         Index = PARMSET_W1L_10us;
    else
         Index = low_time;
    if((ret[1] = usb_control_msg(pn->in->connin.usb.usb,
                                0x40,                           // RequestType
                                MODE_CMD,                       // Request
                                Value,                          // Value
                                Index,                          // Index
                                NULL,                           //
                                0,                              // Length
                                TIMEOUT_USB )) < 0)
         LEVEL_DATA("DS9490_BusParm: Error MOD_WRITE1_LOWTIME\n") ;

/*
 *      DS0 Low
 */
    Value = MOD_DSOW0_TREC;
    if(ds0_low<0)
         Index = PARMSET_DS0_W0R_8us;
    else
         Index = ds0_low;
    if((ret[2] = usb_control_msg(pn->in->connin.usb.usb,
                                0x40,                           // RequestType
                                MODE_CMD,                       // Request
                                Value,                          // Value
                                Index,                          // Index
                                NULL,                           //
                                0,                              // Length
                                TIMEOUT_USB )) < 0)
         LEVEL_DATA("DS9490_BusParm: Error MOD_DSOW0_TREC\n") ;
    if(ret[0])  return ret[0];
    if(ret[1])  return ret[1];
    if(ret[2])  return ret[2];
    return 0;
    }


On 6/7/06, Michael Weber <[EMAIL PROTECTED]> wrote:
On Wed, 7 Jun 2006, Jan Kandziora wrote:

> Am Mittwoch, 7. Juni 2006 21:44 schrieb Paul Alfille:
>> Actually, I have some alternative timing settings suggested by William
>> Robison that we could try.
>>
>> It's been hard to justify changing anything until we had test networks that
>> could be compared.
>>
>> I'll add it in, at least temporarily, add a command line flag, and package
>> it up.
>>
>> In the long run there are 3 cases:
>> 1. Old time best
>> 2. New timking best
>> 3. Varies by network.
>>
> Oh, there's actually another tweak Michael could try: Maxim supposes to add an
> RC circuit for medium length busses. Michael, see App. D of
>
> http://pdfserv.maxim-ic.com/en/an/AN148.pdf
>
> The whole document would be interesting to you, I think.
>
> Kind regards
>
>       Jan

Thanks for the suggestions.

We are actually implementing the filter, but since the network is in a
slightly remote location (an observatory on Tenrife, where I only go to
fix problems) I was looking for a solution I could try remotely.

The network is indeed a mixed topology, it consists of 2 Hubs, about 5-10m
apart from each other (and the master). We splitted it up (it was a bit
more complicated before) but that did not improve matters. Nor did using
USB instead of rs232.

I will try the filter (I also take an oscilloscope to measure timings and
voltages) next week, but I would still like to play around with timings
(Maxim says something about 5us pulldown time for the 5Volts, which should
be tuned by the timing setting.

Any suggestions to where I could insert some timing related changes in the
source code? Preferably changeable at runtime, but thats not really
important.

Thanks again,

Michael



_______________________________________________
Owfs-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/owfs-developers

_______________________________________________
Owfs-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to