Issue getting DS18B20 temperature sensor working

1,215 views
Skip to first unread message

Michaël Vaes

unread,
Aug 30, 2014, 7:01:18 AM8/30/14
to beagl...@googlegroups.com
Hi -

I'm stuck getting my DS18B20 temperature sensor working on my Beaglebone Black.  I installed and loaded the DTC overlay but Im not getting the '28-*'
files in my '/sys/devices/w1_bus_master1/' directory.

Wiring

Software
Debian 7.6
Kernel: 3.8.13-bone50



Install
root@bbb:~# cat one-wire-temp-sensor_p8-11.sh
#!/bin/bash
#
# BBB One Wire Temperature sensor (DS18B20)
#

sName
='w1';
sInput
=$sName'.dts';
sOutput
=${sName:0:16}'-00A0.dtbo';


# Build
/usr/local/bin/dtc -O dtb -o "$sOutput" -b 0 -@ "$sInput";
cp $sOutput
/lib/firmware/;
echo
"$sName" > /sys/devices/bone_capemgr.9/slots;

GPIO's
Pin P8.11 gets high, when I test the voltage it's 3.3VDC.
root@bbb:~# cat /sys/kernel/debug/gpio
GPIOs 0-31, gpio:
 gpio
-6   (mmc_cd              ) in  lo

GPIOs 32-63, gpio:
 gpio
-45  (w1                  ) in  hi
 gpio
-52  (eMMC_RSTn           ) out lo
 gpio
-53  (beaglebone:green:usr) out lo
 gpio
-54  (beaglebone:green:usr) out lo
 gpio
-55  (beaglebone:green:usr) out hi
 gpio
-56  (beaglebone:green:usr) out lo

GPIOs 64-95, gpio:

GPIOs 96-127, gpio:

Overlays
HDMI disabled, w1 overlay loaded
root@bbb:~# cat /sys/devices/bone_capemgr.9/slots
 
0: 54:PF---
 
1: 55:PF---
 
2: 56:PF---
 
3: 57:PF---
 
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
 
5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
 
6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
 
7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-UART1
 
8: ff:P-O-L Override Board Name,00A0,Override Manuf,w1

dmesg
root@bbb:~# dmesg | tail -n11
[  167.078501] bone-capemgr bone_capemgr.9: part_number 'w1', version 'N/A'
[  167.078681] bone-capemgr bone_capemgr.9: slot #8: generic override
[  167.078726] bone-capemgr bone_capemgr.9: bone: Using override eeprom data at slot 8
[  167.078775] bone-capemgr bone_capemgr.9: slot #8: 'Override Board Name,00A0,Override Manuf,w1'
[  167.079020] bone-capemgr bone_capemgr.9: slot #8: Requesting part number/version based 'w1-00A0.dtbo
[  167.079067] bone-capemgr bone_capemgr.9: slot #8: Requesting firmware 'w1-00A0.dtbo' for board-name 'Override Board Name', version '00A0'
[  167.082029] bone-capemgr bone_capemgr.9: slot #8: dtbo 'w1-00A0.dtbo' loaded; converting to live tree
[  167.082504] bone-capemgr bone_capemgr.9: slot #8: #2 overlays
[  167.089775] of_get_named_gpio_flags exited with status 45
[  167.089820] of_get_named_gpio_flags: can't parse gpios property
[  167.097793] bone-capemgr bone_capemgr.9: slot #8: Applied #2 overlays.

Tryouts without success
What concerns me and where I cannot seem to get rid of in dmesg
[  167.089775] of_get_named_gpio_flags exited with status 45
[  167.089820] of_get_named_gpio_flags: can't parse gpios property

Any help is appreciated, at the moment quite stuck and will try to down-/upgrade the kernel to see if that helps.

Thanks,
Michaël

Michaël Vaes

unread,
Aug 31, 2014, 5:00:54 PM8/31/14
to beagl...@googlegroups.com
Upgraded the kernel from '3.8.13-bone50' to '3.8.13-bone64' did not resolve my issue.  Continuing debug.
What concerns me and where I cannot seem to get rid of in dmesg</b
...

michae...@netmining.com

unread,
Sep 6, 2014, 7:35:50 AM9/6/14
to beagl...@googlegroups.com
Also testing this on Ubuntu 14.04.1 LTS did not work.  Any help is appreciated!

Thanks,
Michael


On Saturday, August 30, 2014 1:01:18 PM UTC+2, Michaël Vaes wrote:
What concerns me and where I cannot seem to get rid of in dmesg</b
...

Michaël Vaes

unread,
Sep 6, 2014, 9:10:48 AM9/6/14
to beagl...@googlegroups.com
Changing the OS to Ubuntu did not change the behaviour.
Any help is appreciated on debugging this.

Thanks!
Michael


On Saturday, August 30, 2014 1:01:18 PM UTC+2, Michaël Vaes wrote:
What concerns me and where I cannot seem to get rid of in dmesg</b
...

Josenivaldo Benito Junior

unread,
Sep 6, 2014, 11:25:03 AM9/6/14
to beagl...@googlegroups.com

Hi Michaël,

Are you using 18ohm pull up resistor as your wiring diagram states? If so this resistor is too low for pull up; both bone and sensor will have to sink a lot of current to drive the line down.

See this discussion here:


Gerald told a beaglebone pin can sink around 6mA, but using Ohm's Law to find current over a 18ohms resistor while driven by 3.3V voltage source we find 0.183A or 183mA. The discussion pointed above talk  about 1K resistor, this would result in 3.3/1000 = 0.0033 or 3.3mA.

Your beaglebone and sensor might have not enough strength to hold the Data line down (GND) and because of this there is no communication. This also can damage the bone pin, so for test try another pin with 1k resistor pull up.

Regards,
Benito

On Sat, Sep 6, 2014 at 10:10 AM, Michaël Vaes <vaesm...@gmail.com> wrote:
Changing the OS to Ubuntu did not change the behaviour.
Any help is appreciated on debugging this.

Thanks!
Michael


On Saturday, August 30, 2014 1:01:18 PM UTC+2, Michaël Vaes wrote:
Hi -

I'm stuck getting my DS18B20 temperature sensor working on my Beaglebone Black.  I installed and loaded the DTC overlay but Im not getting the '28-*'
files in my '/sys/devices/w1_bus_master1/' directory.

Wiring




--
Josenivaldo Benito Jr.

PU2LBD

*Por Aurélio Buarque de Hollanda,  elite, do francês élite, significa “o que há de melhor em uma sociedade, minoria prestigiada, constituída pelos indivíduos mais aptos”.

Michaël Vaes

unread,
Sep 7, 2014, 3:14:44 PM9/7/14
to beagl...@googlegroups.com
Hi JrBenito -

Looks like something went wrong with my schematic, I'm actually using a 4.7k resistor as described in the Maxim datasheet.  However I tried with a 1k one but with the same result.  Is there any way to see the RAW inputs/outputs on a pin?

Thanks!
Michael

Michaël Vaes

unread,
Sep 7, 2014, 3:33:57 PM9/7/14
to beagl...@googlegroups.com
Output when overlay enabled but no devices found.

                   /sys/devices/w1_bus_master1/w1_master_add: write device id xx-xxxxxxxxxxxx to add slave
             
/sys/devices/w1_bus_master1/w1_master_attempts: 61
       
/sys/devices/w1_bus_master1/w1_master_max_slave_count: 10
                 
/sys/devices/w1_bus_master1/w1_master_name: w1_bus_master1
               
/sys/devices/w1_bus_master1/w1_master_pointer: 0xdf1eda70
               
/sys/devices/w1_bus_master1/w1_master_pullup: 1
               
/sys/devices/w1_bus_master1/w1_master_remove: write device id xx-xxxxxxxxxxxx to remove slave
               
/sys/devices/w1_bus_master1/w1_master_search: -1
           
/sys/devices/w1_bus_master1/w1_master_slave_count: 0
               
/sys/devices/w1_bus_master1/w1_master_slaves: not found.
               
/sys/devices/w1_bus_master1/w1_master_timeout: 10


On Saturday, August 30, 2014 1:01:18 PM UTC+2, Michaël Vaes wrote:
What concerns me and where I cannot seem to get rid of in dmesg</b
...

Josenivaldo Benito Junior

unread,
Sep 9, 2014, 5:39:27 PM9/9/14
to beagl...@googlegroups.com
On Sun, Sep 7, 2014 at 4:14 PM, Michaël Vaes <vaesm...@gmail.com> wrote:
> Is there any way to see the RAW inputs/outputs on a pin?

I would use a logic analyzer to see if the communication is going
well. I have one of this: https://www.saleae.com/ but of an old model
(maybe you still can get clones from eBay), it is very useful to debug
I2C, 1-wire and and other protocols or simple input/output.

If there is 1-wire comm going on the Pin you will be able to catch or
if not you will be able to see were it is failing.

A oscilloscope can also help to see if pin is swinging during transmissions.

BR

cwrse...@gmail.com

unread,
Sep 11, 2014, 10:01:37 AM9/11/14
to beagl...@googlegroups.com


On Saturday, August 30, 2014 12:01:18 PM UTC+1, Michaël Vaes wrote:
Hi -

I'm stuck getting my DS18B20 temperature sensor working on my Beaglebone Black.  I installed and loaded the DTC overlay but Im not getting the '28-*'
files in my '/sys/devices/w1_bus_master1/' directory.

 The dts file I used (on a 3.8 kernel) was:

/*
** Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License version 2 as
** published by the Free Software Foundation.
*/

/dts-v1/;
/plugin/;

/ {
    compatible = "ti,beaglebone", "ti,beaglebone-black";
    part-number = "BB-W1";
    version = "00A0";

    /* Resources used */
    exclusive-use =
        /* the pin header */
        "P8.11",
        /* The first pin is the data pin.  The second
        ** (optional) pin enables an external pull-up.
        */
        "gpio1_13";

    fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
             w1_pins: pinmux_w1_pins {
                 pinctrl-single,pins = <
                     0x34 0x37     /* gpmc_ad13.gpio1_13 P8_11, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE7 */
                 >;
             };
        };
    };

    fragment@1 {
        target = <&ocp>;
        __overlay__ {
            onewire@0 {
                compatible      = "w1-gpio";
                pinctrl-names   = "default";
                pinctrl-0       = <&w1_pins>;
                status          = "okay";
                /* nb. gpio index is (resources index + 1) */

                gpios = <&gpio2 13 0>;
            };
        };
    };
};

/*
** eof
*/

I built the dtbo file with:

#!/bin/bash
dtc -O dtb -o BB-W1-00A0.dtbo -b 0 -@ w1.dts
# Copy the dtbo file into /lib/firmware

and then loaded it with:

#!/bin/bash
echo BB-W1 >/sys/devices/bone_capemgr.8/slots

I could then read the DS18B20 with:

#!/bin/bash
cat /sys/devices/w1_bus_master1/28-000003e6b937/w1_slave

Good luck - Will

Message has been deleted

Michaël Vaes

unread,
Sep 28, 2014, 5:48:11 AM9/28/14
to beagl...@googlegroups.com
I was able to get the sensor showing up (switched + and -... Yeah to quick), however I'm not able to get correct temperature readings with a new sensor.
I need to mention that I have the Parasitic version DS18B20+, does that work with 3.3VDC or do I need to connect it to 5VDC (which the BBB does not support I believe, 5VDC inputs..)

root@bbb:~# for i in `find /sys/devices/w1_bus_master1/ -type d -iname "28-*"`; do echo -n $i' '; grep -oE "t=[0-9]+$" "$i/w1_slave"; done;
/sys/devices/w1_bus_master1/28-0000057ee219 t=85000
/sys/devices/w1_bus_master1/28-0000057efe1e t=85000

Thanks,
Michaël


On Saturday, August 30, 2014 1:01:18 PM UTC+2, Michaël Vaes wrote:
What concerns me and where I cannot seem to get rid of in dmesg</b
...

Tim Cole

unread,
Sep 28, 2014, 3:30:29 PM9/28/14
to beagl...@googlegroups.com
You can use either powered or parasitic modes for One-Wire devices -- there isn't a distinct device for one mode or the other. The data sheet shows the DS18B20 can operate down to 3V.

I'm not greatly versed in embedded Linux, nor in the BBB, but I've used One-Wire devices (including DS18S20s) a fair bit. I avoid parasitic mode whenever I can. Running a power line makes One-Wire systems much easier to debug, and multi-wire cables aren't all that expensive.

Cheers, Tim

bigir...@gmail.com

unread,
Nov 25, 2014, 9:14:48 PM11/25/14
to beagl...@googlegroups.com

Check out my website "tunapiano.info" where I spell out in detail the ina and outs of getting the BBB to read the ds18b20's. Run the "SetupPins.sh" scriprt I wrote. That may just make it work or it will at least show you everything you have set up and what you may be missing. I didn't analyze these post in detail but I think the part you are missing is the the:

BBB2_revC ro...@192.168.1.118 Tue Nov 25 20:09:42 /sys/class/gpio > ls -al
total 0
drwxr-xr-x  2 root root    0 Dec 31  1999 .
drwxr-xr-x 59 root root    0 Dec 31  1999 ..
--w-------  1 root root 4096 Apr 23  2014 export
lrwxrwxrwx  1 root root    0 Apr 23  2014 gpio44 -> ../../devices/virtual/gpio/gpio44
lrwxrwxrwx  1 root root    0 Apr 23  2014 gpio60 -> ../../devices/virtual/gpio/gpio60
lrwxrwxrwx  1 root root    0 Dec 31  1999 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
lrwxrwxrwx  1 root root    0 Dec 31  1999 gpiochip32 -> ../../devices/virtual/gpio/gpiochip32
lrwxrwxrwx  1 root root    0 Dec 31  1999 gpiochip64 -> ../../devices/virtual/gpio/gpiochip64
lrwxrwxrwx  1 root root    0 Dec 31  1999 gpiochip96 -> ../../devices/virtual/gpio/gpiochip96
--w-------  1 root root 4096 Dec 31  1999 unexport
BBB2_revC ro...@192.168.1.118 Tue Nov 25 20:09:44 /sys/class/gpio >

And in the new directory you create by exporBBB2_revC ro...@192.168.1.118 Tue Nov 25 20:11:16 /sys/class/gpio/gpio44 > ls -al
total 0
drwxr-xr-x 3 root root    0 Apr 23  2014 .
drwxr-xr-x 8 root root    0 Dec 31  1999 ..
-rw-r--r-- 1 root root 4096 Nov 25 20:11 active_low
-rw-r--r-- 1 root root 4096 Nov 21 09:47 direction
-rw-r--r-- 1 root root 4096 Nov 25 20:11 edge
drwxr-xr-x 2 root root    0 Nov 25 20:11 power
lrwxrwxrwx 1 root root    0 Apr 23  2014 subsystem -> ../../../../class/gpio
-rw-r--r-- 1 root root 4096 Apr 23  2014 uevent
-rw-r--r-- 1 root root 4096 Nov 25 20:10 value
BBB2_revC ro...@192.168.1.118 Tue Nov 25 20:11:19 /sys/class/gpio/gpio44 >ting the pin you get subdirs like this:

Look carefully at the SetupPins.sh where you see how the value and dicection virtual file system members are set up. Derek Molloy has many great youtube videos for get the BBB to work with DTO.

Michaël Vaes

unread,
Dec 7, 2014, 4:25:45 PM12/7/14
to beagl...@googlegroups.com
Managed to get it all working with my DS18B20 in parasite mode, instead of applying 3.3VDC I applied 5VDC though pin P9.7 and using a 1.5k resistor instead of a 4.7k one. 
If I applied the following resistors instead of the 1.5k ones I got the following readings:
  • 4.7k -> t=85000
  • 10k -> t=127937
Michaël 


On Saturday, August 30, 2014 1:01:18 PM UTC+2, Michaël Vaes wrote:
...
Reply all
Reply to author
Forward
0 new messages