IoT-MBBR (masterthesis)
Masterthesis upgrading a Moving Bed BioReactor with extra sensors and cloud connectivity.
DS18B20.c File Reference

All code for the DS18B20 temperature sensor. More...

#include <stdint.h>
#include <stdbool.h>
#include "em_cmu.h"
#include "em_gpio.h"
#include "DS18B20.h"
#include "pin_mapping.h"
#include "debug_dbprint.h"
#include "delay.h"
#include "util.h"
#include "ustimer.h"

Go to the source code of this file.

Macros

#define DBPRINT_TIMEOUT   0
 
#define TIMEOUT_INIT   100
 
#define TIMEOUT_CONVERSION   500 /* 12 bit resolution (reset default) = 750 ms max resolving time */
 

Functions

static void powerDS18B20 (uint8_t number, bool enabled)
 Enable or disable the power to the temperature sensor. More...
 
static bool init_DS18B20 (uint8_t number)
 Initialize communication to the DS18B20. More...
 
static void writeByteDS18B20 (uint8_t number, uint8_t data)
 Write a byte (uint8_t) to the DS18B20. More...
 
static uint8_t readByteDS18B20 (uint8_t number)
 Read a byte (uint8_t) from the DS18B20. More...
 
static int32_t convertTempData (uint8_t tempLS, uint8_t tempMS)
 Convert temperature data. More...
 
int32_t readTempDS18B20 (uint8_t number)
 Get a temperature value from the DS18B20. More...
 

Variables

bool TEMP0_VDD_initialized = false
 
bool TEMP1_VDD_initialized = false
 

Detailed Description

All code for the DS18B20 temperature sensor.

Version
4.0
Author
Alec Vanderhaegen & Sarah Goossens
Heavily modified by Brecht Van Eeckhoudt

Versions

  • v1.0: Reformatted existing methods to use pin_mapping.h, changed unsigned char to uint8_t values, added comments and cleaned up includes.
  • v1.1: Added documentation, removed unnecessary GPIO statements regarding DOUT values of VDD pin.
  • v1.2: Removed some unnecessary GPIO lines and added comments about out (DOUT) argument.
  • v1.3: Changed some methods to be static (~hidden).
  • v1.4: Cleaned up includes.
  • v1.5: Made more methods static.
  • v1.6: Updated documentation.
  • v1.7: Started using new delay functionality.
  • v1.8: Added line to disable DATA pin after a measurement, this breaks the code but fixes the sleep current.
  • v1.9: Enabled and disabled timer each time a measurement is taken.
  • v2.0: Updated documentation.
  • v2.1: Changed method to return uint32_t instead of float.
  • v2.2: Changed error numbering, moved definition from header to source file and updated header file include.
  • v2.3: Changed timeout variable and changed types to int32_t.
  • v2.4: Fixed temperature measurement and refined timeout functionality.
  • v2.5: Updated documentation.
  • v2.6: Updated code to don't execute code further if the first initialization failed.
  • v3.0: Disabled initialized functionality before entering an error function, added functionality to exit methods after error call and updated version number.
  • v3.1: Removed static before the local variable (not necessary).
  • v4.0: Fixed timing for reading/writing bytes.

License

Copyright (C) 2020 - Brecht Van Eeckhoudt

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

A copy of the GNU General Public License can be found in the LICENSE file along with this source code.


Some methods also use code obtained from examples from Silicon Labs' GitHub. These sections are licensed under the Silabs License Agreement. See the file "Silabs_License_Agreement.txt" for details. Before using this software for any purpose, you must agree to the terms of that agreement.

Definition in file DS18B20.c.

Macro Definition Documentation

◆ DBPRINT_TIMEOUT

#define DBPRINT_TIMEOUT   0

Enable (1) or disable (0) printing the timeout counter value using DBPRINT

Definition at line 81 of file DS18B20.c.

◆ TIMEOUT_CONVERSION

#define TIMEOUT_CONVERSION   500 /* 12 bit resolution (reset default) = 750 ms max resolving time */

Definition at line 85 of file DS18B20.c.

◆ TIMEOUT_INIT

#define TIMEOUT_INIT   100

Definition at line 84 of file DS18B20.c.

Function Documentation

◆ convertTempData()

static int32_t convertTempData ( uint8_t  tempLS,
uint8_t  tempMS 
)
static

Convert temperature data.

Note
This is a static method because it's only internally used in this file and called by other methods if necessary.
Parameters
[in]tempLSLeast significant byte.
[in]tempMSMost significant byte.
Returns
The converted temperature data.

Definition at line 487 of file DS18B20.c.

488 {
489  uint16_t rawDataMerge;
490  uint16_t reverseRawDataMerge;
491 
492  int32_t finalTemperature;
493 
494  /* Check if it is a negative temperature value
495  * 0xF8 = 0b1111 1000 */
496  if (tempMS & 0xF8)
497  {
498  rawDataMerge = tempMS;
499 
500  /* Left shift 8 times */
501  rawDataMerge <<= 8;
502 
503  /* Add the second part */
504  rawDataMerge += tempLS;
505 
506  /* Invert the value since we have a negative temperature */
507  reverseRawDataMerge = ~rawDataMerge;
508 
509  /* Calculate the final temperature */
510  finalTemperature = -(reverseRawDataMerge + 1) * 62.5;
511  }
512  /* We're dealing with a positive temperature */
513  else
514  {
515  rawDataMerge = tempMS;
516 
517  /* Left shift 8 times */
518  rawDataMerge <<= 8;
519 
520  /* Add the second part */
521  rawDataMerge += tempLS;
522 
523  /* Calculate the final temperature */
524  finalTemperature = rawDataMerge * 62.5;
525  }
526 
527  return (finalTemperature);
528 }
int int32_t
Typedef defining 32 bit int type. The developer should modify this to suit the platform being deploye...
Definition: vl53l1_types.h:83
unsigned short uint16_t
Typedef defining 16 bit unsigned short type. The developer should modify this to suit the platform be...
Definition: vl53l1_types.h:88

◆ init_DS18B20()

static bool init_DS18B20 ( uint8_t  number)
static

Initialize communication to the DS18B20.

Note
This is a static method because it's only internally used in this file and called by other methods if necessary.
Parameters
[in]number
  • 0 - TEMP0 selected.
  • 1 - TEMP1 selected.
Returns
  • true - Presence pulse detected in time.
  • false - No presence pulse detected.

Definition at line 309 of file DS18B20.c.

310 {
311  /* Timeout counter */
312  uint32_t counter = 0;
313 
314  /* MASTER RESET: Pull data line LOW for at least 480 µs (Master TX) */
315  /* gpioModePushPull: Last argument directly sets the pin state */
316  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModePushPull, 0);
317  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModePushPull, 0);
318  USTIMER_DelayIntSafe(480);
319 
320  /* Change pin-mode to input - External pull-up resistor pulls data line back HIGH */
321  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModeInput, 0);
322  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModeInput, 0);
323 
324  /* Check if the line becomes LOW (~ wait while it stays high) during the maximum waiting time
325  * The DS18B20 should detect the data line rising due to the pull-up resistor, waits 15 - 50 µs
326  * and then pulls the line back LOW (for 60 - 240 µs) to indicate it's PRESENCE */
327  if (number == 0) while ((counter < TIMEOUT_INIT) && (GPIO_PinInGet(TEMP0_DATA_PORT, TEMP0_DATA_PIN) == 1)) counter++;
328  else if (number == 1) while ((counter < TIMEOUT_INIT) && (GPIO_PinInGet(TEMP1_DATA_PORT, TEMP1_DATA_PIN) == 1)) counter++;
329 
330  /* Exit the function if the maximum waiting time was reached */
331  if (counter == TIMEOUT_INIT)
332  {
333 
334 #if DEBUG_DBPRINT == 1 /* DEBUG_DBPRINT */
335  dbcrit("No DS18B20 presence pulse detected in time!");
336 #endif /* DEBUG_DBPRINT */
337 
338  error(28);
339 
340  return (false);
341  }
342 #if DBPRINT_TIMEOUT == 1 /* DBPRINT_TIMEOUT */
343  else
344  {
345 
346 #if DEBUG_DBPRINT == 1 /* DEBUG_DBPRINT */
347  dbwarnInt("DS18B20 INIT (", counter, ")");
348 #endif /* DEBUG_DBPRINT */
349 
350  }
351 #endif /* DBPRINT_TIMEOUT */
352 
353  /* Master RX should be at least 480 µs */
354  USTIMER_DelayIntSafe(480);
355 
356  return (true);
357 }
void dbwarnInt(char *message1, int32_t value, char *message2)
Print a warning value surrounded by two strings (char array) to USARTx.
Definition: dbprint.c:600
void error(uint8_t number)
Error method.
Definition: util.c:122
#define TEMP1_DATA_PORT
Definition: pin_mapping.h:103
#define TIMEOUT_INIT
Definition: DS18B20.c:84
#define TEMP0_DATA_PORT
Definition: pin_mapping.h:99
#define TEMP1_DATA_PIN
Definition: pin_mapping.h:104
void dbcrit(char *message)
Print a critical error string (char array) in red to USARTx and go to the next line.
Definition: dbprint.c:541
#define TEMP0_DATA_PIN
Definition: pin_mapping.h:100
unsigned int uint32_t
Typedef defining 32 bit unsigned int type. The developer should modify this to suit the platform bein...
Definition: vl53l1_types.h:78

◆ powerDS18B20()

static void powerDS18B20 ( uint8_t  number,
bool  enabled 
)
static

Enable or disable the power to the temperature sensor.

This method also initializes the pin-mode if necessary.

Note
This is a static method because it's only internally used in this file and called by other methods if necessary.
Parameters
[in]number
  • 0 - TEMP0 selected.
  • 1 - TEMP1 selected.
[in]enabled
  • true - Enable the GPIO pin connected to the VDD pin of the temperature sensor.
  • talse - Disable the GPIO pin connected to the VDD pin of the temperature sensor.

Definition at line 254 of file DS18B20.c.

255 {
256  /* Enable necessary clocks (just in case) */
257  CMU_ClockEnable(cmuClock_HFPER, true); /* GPIO is a High Frequency Peripheral */
258  CMU_ClockEnable(cmuClock_GPIO, true);
259 
260  if (number == 0) {
261  /* Initialize VDD pin if not already the case */
263  {
264  /* In the case of gpioModePushPull", the last argument directly sets the pin state */
265  GPIO_PinModeSet(TEMP0_VDD_PORT, TEMP0_VDD_PIN, gpioModePushPull, enabled);
266 
267  TEMP0_VDD_initialized = true;
268  }
269  else
270  {
271  if (enabled) GPIO_PinOutSet(TEMP0_VDD_PORT, TEMP0_VDD_PIN); /* Enable VDD pin */
272  else GPIO_PinOutClear(TEMP0_VDD_PORT, TEMP0_VDD_PIN); /* Disable VDD pin */
273  }
274  }
275  else if (number == 1) {
276  /* Initialize VDD pin if not already the case */
278  {
279  /* In the case of gpioModePushPull", the last argument directly sets the pin state */
280  GPIO_PinModeSet(TEMP1_VDD_PORT, TEMP1_VDD_PIN, gpioModePushPull, enabled);
281 
282  TEMP1_VDD_initialized = true;
283  }
284  else
285  {
286  if (enabled) GPIO_PinOutSet(TEMP1_VDD_PORT, TEMP1_VDD_PIN); /* Enable VDD pin */
287  else GPIO_PinOutClear(TEMP1_VDD_PORT, TEMP1_VDD_PIN); /* Disable VDD pin */
288  }
289  }
290 }
bool TEMP1_VDD_initialized
Definition: DS18B20.c:90
#define TEMP0_VDD_PIN
Definition: pin_mapping.h:102
bool TEMP0_VDD_initialized
Definition: DS18B20.c:89
#define TEMP1_VDD_PORT
Definition: pin_mapping.h:105
#define TEMP1_VDD_PIN
Definition: pin_mapping.h:106
#define TEMP0_VDD_PORT
Definition: pin_mapping.h:101

◆ readByteDS18B20()

static uint8_t readByteDS18B20 ( uint8_t  number)
static

Read a byte (uint8_t) from the DS18B20.

Note
This is a static method because it's only internally used in this file and called by other methods if necessary.
Parameters
[in]number
  • 0 - TEMP0 selected.
  • 1 - TEMP1 selected.
Returns
The byte read from the DS18B20.

Definition at line 435 of file DS18B20.c.

436 {
437  /* Data to eventually return */
438  uint8_t data = 0x0;
439 
440  /* Read the byte, bit by bit */
441  for (uint8_t i = 0; i < 8; i++)
442  {
443  /* Pull line low */
444  /* In the case of gpioModePushPull", the last argument directly sets the pin state */
445  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModePushPull, 0);
446  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModePushPull, 0);
447 
448  /* 5 µs delay should be called here but this loop works fine too... */
449  for (uint8_t i=0; i<5; i++);
450 
451  /* Let line rise because of the pull-up resistor */
452  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModeInput, 0);
453  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModeInput, 0);
454 
455  /* Right shift bits once */
456  data >>= 1;
457 
458  /* If the line is high, OR the first bit of the data:
459  * 0x80 = 1000 0000 */
460  if ((number == 0) && (GPIO_PinInGet(TEMP0_DATA_PORT, TEMP0_DATA_PIN))) data |= 0x80;
461  else if (number == 1) if (GPIO_PinInGet(TEMP1_DATA_PORT, TEMP1_DATA_PIN)) data |= 0x80;
462 
463  /* Wait some time before going into next loop */
464  USTIMER_DelayIntSafe(70);
465  }
466  return (data);
467 }
MeasurementData_t data
Definition: main.c:86
#define TEMP1_DATA_PORT
Definition: pin_mapping.h:103
#define TEMP0_DATA_PORT
Definition: pin_mapping.h:99
#define TEMP1_DATA_PIN
Definition: pin_mapping.h:104
#define TEMP0_DATA_PIN
Definition: pin_mapping.h:100
unsigned char uint8_t
Typedef defining 8 bit unsigned char type. The developer should modify this to suit the platform bein...
Definition: vl53l1_types.h:98

◆ readTempDS18B20()

int32_t readTempDS18B20 ( uint8_t  number)

Get a temperature value from the DS18B20.

USTimer gets initialized, the sensor gets powered, the data-transmission takes place, the timer gets de-initialized to disable the clocks and interrupts, the data and power pin get disabled and finally the read values are converted to an int32_t value.
Negative temperatures work fine.

Parameters
[in]number
  • 0 - TEMP0 selected.
  • 1 - TEMP1 selected.
Returns
The read temperature data.

Definition at line 119 of file DS18B20.c.

120 {
121  /* Timeout counter */
122  uint16_t counter = 0;
123 
124  /* Variable to indicate if a conversion has been completed */
125  bool conversionCompleted = false;
126 
127  /* Variable to hold raw data bytes */
128  uint8_t rawDataDS18B20[9] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
129 
130  /* Initialize timer
131  * Initializing and disabling the timer again adds about 40 µs active time but should conserve sleep energy... */
132  USTIMER_Init();
133 
134  /* Initialize and power VDD pin */
135  powerDS18B20(number, true);
136 
137  /* Power-up delay of 5 ms */
138  delay(5);
139 
140  /* Initialize communication and only continue if successful */
141  if (init_DS18B20(number))
142  {
143  writeByteDS18B20(number, 0xCC); /* 0xCC = "Skip Rom" (address all devices on the bus simultaneously without sending out any ROM code information) */
144  writeByteDS18B20(number, 0x44); /* 0x44 = "Convert T" */
145 
146  /* MASTER now generates "read time slots", the DS18B20 will write HIGH to the bus if the conversion is completed
147  * The datasheet gives the following directions for time slots, but reading bytes also seems to work...
148  * - Read time slots have a 60 µs duration and 1 µs recovery between slots
149  * - After the master pulls the line low for 1 µs, the data is valid for up to 15 µs */
150  while ((counter < TIMEOUT_CONVERSION) && !conversionCompleted)
151  {
152  uint8_t testByte = readByteDS18B20(number);
153  if (testByte > 0) conversionCompleted = true;
154 
155  counter++;
156  }
157 
158  /* Exit the function if the maximum waiting time was reached */
159  if (counter == TIMEOUT_CONVERSION)
160  {
161 
162 #if DEBUG_DBPRINT == 1 /* DEBUG_DBPRINT */
163  dbcrit("Waiting time for DS18B20 conversion reached!");
164 #endif /* DEBUG_DBPRINT */
165 
166  /* Disable interrupts and turn off the clock to the underlying hardware timer. */
167  USTIMER_DeInit();
168 
169  /* Disable data pin (otherwise we got a "sleep" current of about 330 µA due to the on-board (10k) pull-up) */
170  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModeDisabled, 0);
171  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModeDisabled, 0);
172 
173  /* Disable the VDD pin */
174  powerDS18B20(number, false);
175 
176  error(29);
177 
178  /* Exit function */
179  return (0);
180 
181  }
182 #if DBPRINT_TIMEOUT == 1 /* DBPRINT_TIMEOUT */
183  else
184  {
185 
186 #if DEBUG_DBPRINT == 1 /* DEBUG_DBPRINT */
187  dbwarnInt("DS18B20 conversion (", counter, ")");
188 #endif /* DEBUG_DBPRINT */
189 
190  }
191 #endif /* DBPRINT_TIMEOUT */
192 
193  init_DS18B20(number); /* Initialize communication */
194  writeByteDS18B20(number, 0xCC); /* 0xCC = "Skip Rom" */
195  writeByteDS18B20(number, 0xBE); /* 0xBE = "Read Scratchpad" */
196 
197  /* Read the bytes */
198  for (uint8_t i = 0; i < 9; i++) rawDataDS18B20[i] = readByteDS18B20(number);
199 
200  /* Disable interrupts and turn off the clock to the underlying hardware timer. */
201  USTIMER_DeInit();
202 
203  /* Disable data pin (otherwise we got a "sleep" current of about 330 µA due to the on-board (10k) pull-up) */
204  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModeDisabled, 0);
205  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModeDisabled, 0);
206 
207  /* Disable the VDD pin */
208  powerDS18B20(number, false);
209 
210  /* Return the converted byte */
211  return (convertTempData(rawDataDS18B20[0], rawDataDS18B20[1]));
212  }
213  else
214  {
215  /* Disable interrupts and turn off the clock to the underlying hardware timer. */
216  USTIMER_DeInit();
217 
218 #if DEBUG_DBPRINT == 1 /* DEBUG_DBPRINT */
219  dbcrit("DS18B20 INIT failed!");
220 #endif /* DEBUG_DBPRINT */
221 
222  /* Disable data pin (otherwise we got a "sleep" current of about 330 µA due to the on-board (10k) pull-up) */
223  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModeDisabled, 0);
224  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModeDisabled, 0);
225 
226  /* Disable the VDD pin */
227  powerDS18B20(number, false);
228 
229  /* Exit function */
230  return (0);
231  }
232 }
void dbwarnInt(char *message1, int32_t value, char *message2)
Print a warning value surrounded by two strings (char array) to USARTx.
Definition: dbprint.c:600
#define TIMEOUT_CONVERSION
Definition: DS18B20.c:85
void error(uint8_t number)
Error method.
Definition: util.c:122
static bool init_DS18B20(uint8_t number)
Initialize communication to the DS18B20.
Definition: DS18B20.c:309
static int32_t convertTempData(uint8_t tempLS, uint8_t tempMS)
Convert temperature data.
Definition: DS18B20.c:487
#define TEMP1_DATA_PORT
Definition: pin_mapping.h:103
void delay(uint32_t msDelay)
Wait for a certain amount of milliseconds in EM2/3.
Definition: delay.c:124
#define TEMP0_DATA_PORT
Definition: pin_mapping.h:99
static void powerDS18B20(uint8_t number, bool enabled)
Enable or disable the power to the temperature sensor.
Definition: DS18B20.c:254
#define TEMP1_DATA_PIN
Definition: pin_mapping.h:104
void dbcrit(char *message)
Print a critical error string (char array) in red to USARTx and go to the next line.
Definition: dbprint.c:541
static uint8_t readByteDS18B20(uint8_t number)
Read a byte (uint8_t) from the DS18B20.
Definition: DS18B20.c:435
unsigned short uint16_t
Typedef defining 16 bit unsigned short type. The developer should modify this to suit the platform be...
Definition: vl53l1_types.h:88
static void writeByteDS18B20(uint8_t number, uint8_t data)
Write a byte (uint8_t) to the DS18B20.
Definition: DS18B20.c:375
#define TEMP0_DATA_PIN
Definition: pin_mapping.h:100
unsigned char uint8_t
Typedef defining 8 bit unsigned char type. The developer should modify this to suit the platform bein...
Definition: vl53l1_types.h:98

◆ writeByteDS18B20()

static void writeByteDS18B20 ( uint8_t  number,
uint8_t  data 
)
static

Write a byte (uint8_t) to the DS18B20.

Note
This is a static method because it's only internally used in this file and called by other methods if necessary.
Parameters
[in]number
  • 0 - TEMP0 selected.
  • 1 - TEMP1 selected.
[in]dataThe data to write to the DS18B20.

Definition at line 375 of file DS18B20.c.

376 {
377  /* Write the byte, bit by bit */
378  for (uint8_t i = 0; i < 8; i++)
379  {
380  /* Check if we need to write a "1" */
381  if (data & 0x01)
382  {
383  /* Pull line low */
384  /* In the case of gpioModePushPull", the last argument directly sets the pin state */
385  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModePushPull, 0);
386  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModePushPull, 0);
387 
388  /* 5 µs delay should be called here but this loop works fine too... */
389  for (uint8_t i=0; i<5; i++);
390 
391  /* Let line rise because of the pull-up resistor */
392  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModeInput, 0);
393  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModeInput, 0);
394 
395  USTIMER_DelayIntSafe(60);
396  }
397  /* If not, write a "0" */
398  else
399  {
400  /* Pull line low */
401  /* In the case of gpioModePushPull", the last argument directly sets the pin state */
402  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModePushPull, 0);
403  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModePushPull, 0);
404 
405  USTIMER_DelayIntSafe(60);
406 
407  /* Let line rise because of the pull-up resistor */
408  if (number == 0) GPIO_PinModeSet(TEMP0_DATA_PORT, TEMP0_DATA_PIN, gpioModeInput, 0);
409  else if (number == 1) GPIO_PinModeSet(TEMP1_DATA_PORT, TEMP1_DATA_PIN, gpioModeInput, 0);
410 
411  /* 5 µs delay should be called here but this loop works fine too... */
412  for (uint8_t i=0; i<5; i++);
413  }
414  /* Right shift bits once */
415  data >>= 1;
416  }
417 }
MeasurementData_t data
Definition: main.c:86
#define TEMP1_DATA_PORT
Definition: pin_mapping.h:103
#define TEMP0_DATA_PORT
Definition: pin_mapping.h:99
#define TEMP1_DATA_PIN
Definition: pin_mapping.h:104
#define TEMP0_DATA_PIN
Definition: pin_mapping.h:100
unsigned char uint8_t
Typedef defining 8 bit unsigned char type. The developer should modify this to suit the platform bein...
Definition: vl53l1_types.h:98

Variable Documentation

◆ TEMP0_VDD_initialized

bool TEMP0_VDD_initialized = false

Definition at line 89 of file DS18B20.c.

◆ TEMP1_VDD_initialized

bool TEMP1_VDD_initialized = false

Definition at line 90 of file DS18B20.c.