I have done one more experiment with my 3.3 V parasitic powered system. I determined the strongest pullup value I could safely use on my BBB GPIO pin (see below), and used the ten-turn pot with the pyownet program to approach that value. The one of my DS18B20 sensors that has always read closer to accurate reaches a stable and accurate reading with just over 1000 Ohms as a pullup, maintaining the 1-Wire bus voltage at just under 3.0 V during conversion. The other DS18B20 requires a pullup below 600 Ohms and a bus voltage above 3.1 V to reach accuracy - but with sufficient conversion power it converges to the correct reading. Both sensors are happy to report temperature values with bus voltage as low as 2.0 V during conversion, but those values may be up to ten degrees C too high. The impression I'd received from various web sources was that the DS18B20 is a digital device, and if it reports a temperature value at all, that value is precisely accurate. Clearly that is not true!
Since the digital parts of the chips work fine far below the critical voltage, I'm left to suspect that the 3.0 (or 3.1) V supply minimum is required by an ADC reference voltage source. As the reference voltage drops with insufficient bus power, the apparent temperature rises - and the digital circuitry reports what the ADC tells it. >From Maxim DS18B20 Programmable Resolution 1-Wire Digital Thermometer >Datasheet REV: 042208 --- Supply Voltage VDD Local Power +3.0 [to] +5.5 V Active Current IDD VDD = 5V 1 [to] 1.5 mA --- That typical conversion current spec is with a 5V supply: I don't see any mention of an active power conversion circuit inside the DS18B20, so I suspect the current drops proportionately at 3.0V, or worst case remains similar. In my test with the 500 Ohm pullup combination, the bus voltage dropped to 3.1 V during conversion, suggesting my two parallel DS18B20 chips draw 0.4 mA together. Carefully scrolling my scope across the entire pause between the convert command and the following read, I can't see any variation in loading. Apparently the 1.5 mA spec is an instantaneous value, and the internal capacitor (CPP) smooths out the current load of the conversion. Still, with a 3.3 V supply and parasitic power, my conclusion is that it is on the edge of impossible to reliably reach the specified conditions without an active pullup. An interesting note I found during my research: <https://www.maximintegrated.com/en/support/faqs/ds18b20.html> ----- Where physically on the device does the temperature measurement take place? The DS18B20 does not sense temperature directly through the package. For all package types, the DS18B20 senses temperature primarily through the GND pin. Ensuring a good thermal connection between the GND pin of the device and the heat source you wish to measure will provide the best results. ----- Maximum BBB GPIO current: >From am335x Processor Datasheet Rev_H May 2015.pdf: --- Steady state max voltage at all IO pins(8) 0.5 V to IO supply voltage + 0.3 V --- There does not appear to be a maximum defined for GPIO currents. Each individual pin has a "buffer strength" value in Table 4-1 Pin Attributes. There is an index from GPIO number to the ball location order of that Pin Attributes chart: --- 4.3 Signal Descriptions ... General Purpose IOs/GPIO0 Signals Description --- Buffer strength appears to be 6 mA except for these GPIO pins which are 4mA: gpio0_7,12,13,14,15,18,19,20 gpio1_8,9,10,11 gpio3_5,6,13 The internal pullups (if they are enabled)... <https://e2e.ti.com/support/arm/sitara_arm/f/791/t/253870> ----- It's in the datasheet, but you won't find it as resistance. You will find it in Table 3-11 as either "Input leakage current, Receiver disabled, pullup enabled" or "Input leakage current, Receiver disabled, pulldown enabled". 100µA for lets say the VDDSHVx @ 3.3 V is equivalent to a 33k PU. ----- For the 6mA pins, Input leakage current, Receiver disabled, pullup enabled: [min] 243 [typ] 100 [max] 19 µA, so 3.3/0.0001 = 33000, but 3.3/0.000243 = 13580, and 3.3/0.000019 = 173684 --> So assuming we are pulling from 3.30 V, using pin 8_11 = GPIO1_13 which has a 6 mA buffer, and the VOL Low-level output voltage, driver enabled, IOL = 6 mA, is 0.45 V, the lowest safe pullup value is: (3.30-0.45)/0.006 = 475 Ohms. If the internal pullup worst case was enabled, it would limit our external pullup to 492 Ohms. Loren | Loren Amelang | lo...@pacific.net | ------------------------------------------------------------------------------ _______________________________________________ Owfs-developers mailing list Owfs-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/owfs-developers