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

From eLinux.org
Jump to: navigation, search
(Initial Page)
 
(Filled in details.)
Line 4: Line 4:
 
The DS18B20 is an interesting temperature sensor that uses Dallas Semiconductor's 1-wire based interface.
 
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.)
 
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.
+
You can wire it to any GPIO port
 +
 
 +
[https://www.sparkfun.com/products/11050 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.
 +
{| class="wikitable"
 +
|-
 +
! 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 configure as a GPIO.
 +
We need to remove that configuration so it can be used with the DS18B20.
 +
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
 +
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.
 +
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.
  
 
{{YoderFoot}}
 
{{YoderFoot}}

Revision as of 07:19, 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 configure as a GPIO. We need to remove that configuration so it can be used with the DS18B20. 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

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.

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.




thumb‎ Embedded Linux Class by Mark A. Yoder