Difference between revisions of "EBC Exercise 31 Dallas 1-Wire"
m (→Reading the DS18B20: Fixed 1000 errors.) |
m (→Software Setup: Updated for 4.19 kernel) |
||
Line 23: | Line 23: | ||
=== Software Setup === | === Software Setup === | ||
− | The DS18B20 can be attached to any GPIO pin, but | + | The DS18B20 can be attached to any GPIO pin, but there's a device tree already created to attach it to P9_12. |
− | + | ==== Finding the device tree ==== | |
− | + | <code>/lib/firmware</code> contains many device trees. Let's see which ones work with one-wire interface | |
− | ==== | + | bone$ '''ls /lib/firmware/*W1*''' |
− | + | /lib/firmware/BB-W1-P9.12-00A0.dtbo | |
− | + | Looks like there is one setup for P9_12. Let's check the source code. The Bone should already have the source files | |
− | + | loaded. | |
− | |||
− | bone$ ''' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
bone$ '''cd /opt/source/bb.org-overlays''' | bone$ '''cd /opt/source/bb.org-overlays''' | ||
− | bone$ '''ls | + | bone$ '''ls''' |
− | + | COPYING dtc-overlay.sh include jenkins_build.sh Makefile readme.md src | |
− | + | debian examples install.sh Jenkinsfile readme-legacy.md scripts tools | |
− | bone$ ''' | + | If the <code>cd</code> fails you will have to clone the repository. |
− | + | bone$ '''git clone https://github.com/beagleboard/bb.org-overlays''' | |
− | bone$ ''' | + | bone$ '''cd bb.org-overlays''' |
− | bone$ ''' | + | Either way |
− | bone$ ''' | + | bone$ '''cd src/arm''' |
− | bone$ ''' | + | bone$ '''ls *W1*''' |
− | + | BB-W1-P9.12-00A0.dts | |
− | + | bone$ '''less *W1*''' | |
− | + | Page down a ways to see | |
+ | fragment@3 { | ||
+ | target-path="/"; | ||
+ | __overlay__ { | ||
+ | |||
+ | onewire { | ||
+ | status = "okay"; | ||
+ | pinctrl-names = "default"; | ||
+ | pinctrl-0 = <&dallas_w1_pins>; | ||
+ | |||
+ | compatible = "w1-gpio"; | ||
+ | gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>; | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
− | + | gpio3, pin 28 is P9_12. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Reading the DS18B20 === | === Reading the DS18B20 === |
Revision as of 11:48, 24 October 2019
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.
Contents
Software Setup
The DS18B20 can be attached to any GPIO pin, but there's a device tree already created to attach it to P9_12.
Finding the device tree
/lib/firmware
contains many device trees. Let's see which ones work with one-wire interface
bone$ ls /lib/firmware/*W1* /lib/firmware/BB-W1-P9.12-00A0.dtbo
Looks like there is one setup for P9_12. Let's check the source code. The Bone should already have the source files loaded.
bone$ cd /opt/source/bb.org-overlays bone$ ls COPYING dtc-overlay.sh include jenkins_build.sh Makefile readme.md src debian examples install.sh Jenkinsfile readme-legacy.md scripts tools
If the cd
fails you will have to clone the repository.
bone$ git clone https://github.com/beagleboard/bb.org-overlays bone$ cd bb.org-overlays
Either way
bone$ cd src/arm bone$ ls *W1* BB-W1-P9.12-00A0.dts bone$ less *W1*
Page down a ways to see
fragment@3 { target-path="/"; __overlay__ { onewire { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&dallas_w1_pins>; compatible = "w1-gpio"; gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>; }; }; }; };
gpio3, pin 28 is P9_12.
Reading the DS18B20
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, that is, divide this number by 1000 to get the temp in C.
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.
Embedded Linux Class by Mark A. Yoder