Difference between revisions of "EBC Exercise 31 Dallas 1-Wire"

From eLinux.org
Jump to: navigation, search
(Filled in details.)
(Using a Different GPIO Pin: Added)
Line 24: Line 24:
 
=== Software Setup ===
 
=== Software Setup ===
 
The DS18B20 can be attached to any GPIO pin, but we're attaching it to P9_12.  
 
The DS18B20 can be attached to any GPIO pin, but we're attaching it to P9_12.  
The default device tree has P9_12 configure as a GPIO.
+
The default device tree has P9_12 configured as a GPIO.
 
We need to remove that configuration so it can be used with the DS18B20.
 
We need to remove that configuration so it can be used with the DS18B20.
 +
==== Unconfiguring P9_12 ====
 
First see if it is configured.
 
First see if it is configured.
 
  bone$ '''config-pin -q P9_12'''
 
  bone$ '''config-pin -q P9_12'''
Line 52: Line 53:
 
  cape-universala overlay not found
 
  cape-universala overlay not found
 
  run "config-pin overlay cape-universala" to load the cape
 
  run "config-pin overlay cape-universala" to load the cape
 +
 +
==== Configuring P9_12 ====
 
Good, the P9_12 pin is not configured. Let's configure it.
 
Good, the P9_12 pin is not configured. Let's configure it.
 
  bone$ '''export SLOTS=/sys/devices/platform/bone_capemgr/slots'''
 
  bone$ '''export SLOTS=/sys/devices/platform/bone_capemgr/slots'''
Line 63: Line 66:
 
  [  +0.039562] Driver for 1-wire Dallas network protocol.
 
  [  +0.039562] Driver for 1-wire Dallas network protocol.
 
Good, it looks like it's configured.
 
Good, it looks like it's configured.
 +
 +
=== Reading the DS12B20 ===
 
  bone$ '''cd /sys/bus/w1/devices'''
 
  bone$ '''cd /sys/bus/w1/devices'''
 
  bone$ '''ls'''
 
  bone$ '''ls'''
Line 77: Line 82:
 
Warm up the probe and see what happens to the temp.
 
Warm up the probe and see what happens to the temp.
  
 +
=== Using a Different GPIO Pin ===
 +
You can use pins other than the P9_12. Follow the unconfiguring instructions for the GPIO pin of your choice.
 +
Then
 +
bone$ '''cd /opt/source/bb.org-overlays/sr/arm'''
 +
bone$ '''cp BB-W1-P9.12-00A0.dts BB-W1-''P9.14''-00A0.dts'''
 +
Substitute your pin number for '''P9.14'''. 
 +
Then edit your newly created file and switch all the occurrences of P9_12 and P9.12 to the new pin number.
 +
bone$ '''cd /opt/source/bb.org-overlays'''
 +
bone$ '''make install'''
 +
bone$ '''echo BB-W1-P9.14 > $SLOTS'''
 +
Wire your DS18B20 to the new pin and test it.
 
{{YoderFoot}}
 
{{YoderFoot}}

Revision as of 06:33, 26 October 2016

thumb‎ Embedded Linux Class by Mark A. Yoder


The DS18B20 is an interesting temperature sensor that uses Dallas Semiconductor's 1-wire based interface. The data communication requires only one wire! (However you still need wires for ground and 3.3V.) You can wire it to any GPIO port.

SparkFun sells a DS18B20 that's in a waterproof probe. You'll need it and maybe a 4.7kΩ pull up resistor.

Attach the leads a follows.

DS18B20 Lead Attach to
Red 3.3V
Black ground
White P9_12

You may also need to attach the 4.7kΩ resistor between P9_12 and 3.3V.

Software Setup

The DS18B20 can be attached to any GPIO pin, but we're attaching it to P9_12. The default device tree has P9_12 configured as a GPIO. We need to remove that configuration so it can be used with the DS18B20.

Unconfiguring P9_12

First see if it is configured.

bone$ config-pin -q P9_12
P9_12 Mode: default Direction: in Value: 1

If you get the response above, you need to unconfigure it. First find which device tree you are using.

bone$ export SLOTS=/sys/devices/platform/bone_capemgr/slots
bone$ cat $SLOTS
 0: PF----  -1 
 1: PF----  -1 
 2: PF----  -1 
 3: PF----  -1 
 4: P-O-L-   0 Override Board Name,00A0,Override Manuf,univ-emmc

The last part of the last line tells you which device tree you are using. In my case it univ-emmc. Next:

bone$ cd /opt/source/bb.org-overlays
bone$ ls arm/src

Look for the file that begins with the name you found above and ends in .dts. It's univ-emmc-00A0.dts in my case. Now edit it.

bone$ vi src/arm/univ-emmc-00A0.dts

Comment out all the lines containing P9.12 (1) and P9_12 (16).

bone$ make
bone$ make install
bone$ reboot
bone$ config-pin -q P9_12
P9_12 pinmux file not found!
cape-universala overlay not found
run "config-pin overlay cape-universala" to load the cape

Configuring P9_12

Good, the P9_12 pin is not configured. Let's configure it.

bone$ export SLOTS=/sys/devices/platform/bone_capemgr/slots
bone$ echo BB-W1-P9.12 > $SLOTS
bone$ dmesg -H | tail
[Oct26 10:04] bone_capemgr bone_capemgr: part_number 'BB-W1-P9.12', version 'N/A'
[  +0.000046] bone_capemgr bone_capemgr: slot #5: override
[  +0.000024] bone_capemgr bone_capemgr: Using override eeprom data at slot 5
[  +0.000024] bone_capemgr bone_capemgr: slot #5: 'Override Board Name,00A0,Override Manuf,BB-W1-P9.12'
[  +0.020178] bone_capemgr bone_capemgr: slot #5: dtbo 'BB-W1-P9.12-00A0.dtbo' loaded; overlay id #1
[  +0.039562] Driver for 1-wire Dallas network protocol.

Good, it looks like it's configured.

Reading the DS12B20

bone$ cd /sys/bus/w1/devices
bone$ ls
28-00000829ed85  w1_bus_master1

You should see two directories, the first will have a different number than mine. The number is the serial number of your DS18B20, which is unique to each device.

bone$ cd 28-00000829ed85
bone$ ls
driver  id  name  power  subsystem  uevent  w1_slave
bone$ cat w1_slave 
87 01 4b 46 7f ff 09 10 48 : crc=48 YES
87 01 4b 46 7f ff 09 10 48 t=24437

The t=24437 is the temperature in C times 1000. Warm up the probe and see what happens to the temp.

Using a Different GPIO Pin

You can use pins other than the P9_12. Follow the unconfiguring instructions for the GPIO pin of your choice. Then

bone$ cd /opt/source/bb.org-overlays/sr/arm
bone$ cp BB-W1-P9.12-00A0.dts BB-W1-P9.14-00A0.dts

Substitute your pin number for P9.14. Then edit your newly created file and switch all the occurrences of P9_12 and P9.12 to the new pin number.

bone$ cd /opt/source/bb.org-overlays
bone$ make install
bone$ echo BB-W1-P9.14 > $SLOTS

Wire your DS18B20 to the new pin and test it.



thumb‎ Embedded Linux Class by Mark A. Yoder