Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ds18b20/DS1Wire.cpp@1:3aec489c7366, 2014-04-11 (annotated)
- Committer:
- redplam
- Date:
- Fri Apr 11 03:35:05 2014 +0000
- Revision:
- 1:3aec489c7366
project_my
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| redplam | 1:3aec489c7366 | 1 | #include "DS1Wire.h" |
| redplam | 1:3aec489c7366 | 2 | #include "mbed.h" |
| redplam | 1:3aec489c7366 | 3 | #include <stdint.h> |
| redplam | 1:3aec489c7366 | 4 | |
| redplam | 1:3aec489c7366 | 5 | // Timing delay for 1-wire serial standard option |
| redplam | 1:3aec489c7366 | 6 | enum DELAY { A = 6, B = 64, C = 60, D = 10, E = 9, F = 55, G = 0, H = 480, I = 70, J = 410 }; |
| redplam | 1:3aec489c7366 | 7 | |
| redplam | 1:3aec489c7366 | 8 | |
| redplam | 1:3aec489c7366 | 9 | int Reset(DigitalInOut& pin) { |
| redplam | 1:3aec489c7366 | 10 | pin.output(); |
| redplam | 1:3aec489c7366 | 11 | pin = 0; // drive bus low |
| redplam | 1:3aec489c7366 | 12 | wait_us(H); |
| redplam | 1:3aec489c7366 | 13 | pin.input(); // release bus |
| redplam | 1:3aec489c7366 | 14 | wait_us(I); |
| redplam | 1:3aec489c7366 | 15 | uint32_t result = pin; // read bus value |
| redplam | 1:3aec489c7366 | 16 | wait_us(J); |
| redplam | 1:3aec489c7366 | 17 | return result; |
| redplam | 1:3aec489c7366 | 18 | } |
| redplam | 1:3aec489c7366 | 19 | |
| redplam | 1:3aec489c7366 | 20 | void WriteBit(DigitalInOut& pin, uint32_t bit) { |
| redplam | 1:3aec489c7366 | 21 | pin.output(); |
| redplam | 1:3aec489c7366 | 22 | if (bit) { |
| redplam | 1:3aec489c7366 | 23 | pin = 0; // drive bus low |
| redplam | 1:3aec489c7366 | 24 | wait_us(A); // delay A |
| redplam | 1:3aec489c7366 | 25 | pin.input(); // release bus |
| redplam | 1:3aec489c7366 | 26 | wait_us(B); // delay B |
| redplam | 1:3aec489c7366 | 27 | } else { |
| redplam | 1:3aec489c7366 | 28 | pin = 0; // drive bus low |
| redplam | 1:3aec489c7366 | 29 | wait_us(C); // delay C |
| redplam | 1:3aec489c7366 | 30 | pin.input(); // release bus |
| redplam | 1:3aec489c7366 | 31 | wait_us(D); // delay D |
| redplam | 1:3aec489c7366 | 32 | } |
| redplam | 1:3aec489c7366 | 33 | } |
| redplam | 1:3aec489c7366 | 34 | |
| redplam | 1:3aec489c7366 | 35 | uint32_t ReadBit(DigitalInOut& pin) { |
| redplam | 1:3aec489c7366 | 36 | uint32_t bit_value; |
| redplam | 1:3aec489c7366 | 37 | pin.output(); |
| redplam | 1:3aec489c7366 | 38 | pin = 0; // drive bus low |
| redplam | 1:3aec489c7366 | 39 | wait_us(A); // delay A |
| redplam | 1:3aec489c7366 | 40 | pin.input(); // release bus |
| redplam | 1:3aec489c7366 | 41 | wait_us(E); // delay E |
| redplam | 1:3aec489c7366 | 42 | bit_value = pin; // master sample bus |
| redplam | 1:3aec489c7366 | 43 | wait_us(F); |
| redplam | 1:3aec489c7366 | 44 | return bit_value; |
| redplam | 1:3aec489c7366 | 45 | } |
| redplam | 1:3aec489c7366 | 46 | |
| redplam | 1:3aec489c7366 | 47 | void WriteByte(DigitalInOut& pin, uint32_t byte) { |
| redplam | 1:3aec489c7366 | 48 | for (uint32_t bit = 0; bit < 8; ++bit) { |
| redplam | 1:3aec489c7366 | 49 | WriteBit(pin, byte & 0x01); // lsb to msb |
| redplam | 1:3aec489c7366 | 50 | byte >>= 1; // right shift by 1-bit |
| redplam | 1:3aec489c7366 | 51 | } |
| redplam | 1:3aec489c7366 | 52 | } |
| redplam | 1:3aec489c7366 | 53 | |
| redplam | 1:3aec489c7366 | 54 | uint32_t ReadByte(DigitalInOut& pin) { |
| redplam | 1:3aec489c7366 | 55 | uint32_t byte = 0; |
| redplam | 1:3aec489c7366 | 56 | for (uint32_t bit = 0; bit < 8; ++bit) { |
| redplam | 1:3aec489c7366 | 57 | byte |= (ReadBit(pin) << bit); // Reads lsb to msb |
| redplam | 1:3aec489c7366 | 58 | } |
| redplam | 1:3aec489c7366 | 59 | return byte; |
| redplam | 1:3aec489c7366 | 60 | } |