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.
My sensor: http://www.mouser.com/ds/2/256/DS18B20-28978.pdf
My DTS file: http://pastebin.com/ma7qd6HK
Latest version of dtc: https://raw.githubusercontent.com/RobertCNelson/tools/master/pkgs/dtc.sh
root@bbb:~# cat one-wire-temp-sensor_p8-11.sh
Upgraded the kernel from ‘3.8.13-bone50’ to ‘3.8.13-bone64’ did not resolve my issue. Continuing debug.
Also testing this on Ubuntu 14.04.1 LTS did not work. Any help is appreciated!
Changing the OS to Ubuntu did not change the behaviour.
Any help is appreciated on debugging this.
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
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?
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
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.
The dts file I used (on a 3.8 kernel) was:
** Copyright © 2012 Texas Instruments Incorporated - http://www.ti.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;
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.
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 firstname.lastname@example.org Tue Nov 25 20:09:42 /sys/class/gpio > ls -al
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 email@example.com Tue Nov 25 20:09:44 /sys/class/gpio >
And in the new directory you create by exporBBB2_revC firstname.lastname@example.org Tue Nov 25 20:11:16 /sys/class/gpio/gpio44 > ls -al
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 email@example.com 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.
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