Difference between revisions of "EBC Exercise 31 Dallas 1-Wire"
(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
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.
Embedded Linux Class by Mark A. Yoder