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

From eLinux.org
Jump to: navigation, search
(Using a Different GPIO Pin: Added)
m (Unconfiguring P9_12: Typo)
Line 41: Line 41:
  bone$ '''cd /opt/source/bb.org-overlays'''
  bone$ '''cd /opt/source/bb.org-overlays'''
  bone$ '''ls arm/src'''
  bone$ '''ls src/arm'''
Look for the file that begins with the name you found above and ends in '''.dts'''.  
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.
It's '''univ-emmc-00A0.dts''' in my case.  Now edit it.

Revision as of 07:05, 27 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 src/arm

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