cursada_mc2
Base de control de temperatura para EDU-CIAA-NXP
Loading...
Searching...
No Matches
ds18b20_driver.h File Reference

Interfaz del driver para sensor de temperatura DS18B20. More...

#include "onewire_driver.h"
#include <stdbool.h>
#include <stdint.h>
+ Include dependency graph for ds18b20_driver.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ds18b20_driver_t
 Estado del driver DS18B20 para un sensor individual. More...
 
struct  ds18b20_device_t
 Datos cacheados de un sensor DS18B20 descubierto en un bus compartido. More...
 
struct  ds18b20_bus_driver_t
 Estado del driver para multiples sensores DS18B20 sobre un mismo bus. More...
 

Macros

#define DS18B20_SCRATCHPAD_SIZE   9U
 Tamano del scratchpad del DS18B20.
 
#define DS18B20_CONVERSION_TIME_MS   750U
 Tiempo maximo de conversion del DS18B20 a 12 bits.
 
#define DS18B20_FAMILY_CODE   0x28U
 Codigo de familia 1-Wire del DS18B20.
 
#define DS18B20_MAX_DEVICES   8U
 Cantidad maxima de sensores DS18B20 por bus en esta implementacion.
 

Enumerations

enum  ds18b20_state_t {
  DS18B20_STATE_IDLE = 0 ,
  DS18B20_STATE_CONVERTING ,
  DS18B20_STATE_DATA_READY ,
  DS18B20_STATE_ERROR
}
 Estado interno de la conversion no bloqueante del sensor. More...
 
enum  ds18b20_bus_state_t {
  DS18B20_BUS_STATE_IDLE = 0 ,
  DS18B20_BUS_STATE_CONVERTING ,
  DS18B20_BUS_STATE_READING ,
  DS18B20_BUS_STATE_ERROR
}
 Estado del gestor multi-sensor para un bus 1-Wire compartido. More...
 

Functions

bool ds18b20_init (ds18b20_driver_t *driver, const onewire_pin_config_t *pin_config)
 Inicializa el driver DS18B20 sobre el pin indicado.
 
bool ds18b20_init_with_rom (ds18b20_driver_t *driver, const onewire_pin_config_t *pin_config, const uint8_t rom_code[ONEWIRE_ROM_CODE_SIZE])
 Inicializa un sensor DS18B20 concreto identificado por su ROM.
 
uint8_t ds18b20_discover (const onewire_pin_config_t *pin_config, uint8_t rom_codes[][ONEWIRE_ROM_CODE_SIZE], uint8_t max_devices)
 Busca sensores DS18B20 presentes en el bus indicado.
 
bool ds18b20_is_present (ds18b20_driver_t *driver)
 Verifica si hay un dispositivo presente en el bus del sensor.
 
bool ds18b20_start_conversion (ds18b20_driver_t *driver)
 Inicia una conversion de temperatura.
 
void ds18b20_process (ds18b20_driver_t *driver, uint16_t elapsed_ms)
 Avanza la maquina de estados no bloqueante del sensor.
 
bool ds18b20_is_busy (const ds18b20_driver_t *driver)
 Indica si hay una conversion en curso.
 
bool ds18b20_has_valid_sample (const ds18b20_driver_t *driver)
 Indica si el driver dispone de una ultima muestra valida.
 
bool ds18b20_get_latest_raw (const ds18b20_driver_t *driver, int16_t *raw_temperature)
 Obtiene la ultima temperatura cruda ya convertida.
 
bool ds18b20_get_latest_temperature_celsius (const ds18b20_driver_t *driver, float *temperature_celsius)
 Obtiene la ultima temperatura valida en grados Celsius.
 
bool ds18b20_read_scratchpad (ds18b20_driver_t *driver, uint8_t scratchpad[DS18B20_SCRATCHPAD_SIZE])
 Lee el scratchpad completo del sensor.
 
bool ds18b20_read_temperature_celsius (ds18b20_driver_t *driver, float *temperature_celsius)
 Lee la temperatura del sensor en grados Celsius en forma bloqueante.
 
bool ds18b20_read_raw (ds18b20_driver_t *driver, int16_t *raw_temperature)
 Lee la temperatura cruda del sensor en forma bloqueante.
 
bool ds18b20_bus_init (ds18b20_bus_driver_t *driver, const onewire_pin_config_t *pin_config)
 Inicializa un bus compartido para varios sensores DS18B20.
 
uint8_t ds18b20_bus_discover (ds18b20_bus_driver_t *driver)
 Descubre sensores DS18B20 y actualiza la tabla interna del bus.
 
bool ds18b20_bus_start_conversion (ds18b20_bus_driver_t *driver)
 Inicia una conversion global para todos los sensores del bus.
 
void ds18b20_bus_process (ds18b20_bus_driver_t *driver, uint16_t elapsed_ms)
 Avanza la maquina de estados multi-sensor del bus.
 
bool ds18b20_bus_is_busy (const ds18b20_bus_driver_t *driver)
 Indica si el bus esta ocupado convirtiendo o leyendo sensores.
 
uint8_t ds18b20_bus_get_device_count (const ds18b20_bus_driver_t *driver)
 Devuelve la cantidad de sensores actualmente descubiertos.
 
bool ds18b20_bus_has_valid_sample (const ds18b20_bus_driver_t *driver, uint8_t index)
 Indica si un sensor del bus tiene una muestra valida disponible.
 
bool ds18b20_bus_get_latest_raw (const ds18b20_bus_driver_t *driver, uint8_t index, int16_t *raw_temperature)
 Obtiene la ultima temperatura cruda cacheada de un sensor del bus.
 
bool ds18b20_bus_get_latest_temperature_celsius (const ds18b20_bus_driver_t *driver, uint8_t index, float *temperature_celsius)
 Obtiene la ultima temperatura cacheada de un sensor del bus en Celsius.
 
bool ds18b20_bus_get_rom_code (const ds18b20_bus_driver_t *driver, uint8_t index, uint8_t rom_code[ONEWIRE_ROM_CODE_SIZE])
 Copia el codigo ROM de un sensor descubierto en el bus.
 

Macro Definition Documentation

◆ DS18B20_CONVERSION_TIME_MS

#define DS18B20_CONVERSION_TIME_MS   750U

Definition at line 17 of file ds18b20_driver.h.

◆ DS18B20_FAMILY_CODE

#define DS18B20_FAMILY_CODE   0x28U

Definition at line 19 of file ds18b20_driver.h.

◆ DS18B20_MAX_DEVICES

#define DS18B20_MAX_DEVICES   8U

Definition at line 21 of file ds18b20_driver.h.

◆ DS18B20_SCRATCHPAD_SIZE

#define DS18B20_SCRATCHPAD_SIZE   9U

Definition at line 15 of file ds18b20_driver.h.

Enumeration Type Documentation

◆ ds18b20_bus_state_t

Enumerator
DS18B20_BUS_STATE_IDLE 
DS18B20_BUS_STATE_CONVERTING 
DS18B20_BUS_STATE_READING 
DS18B20_BUS_STATE_ERROR 

Definition at line 35 of file ds18b20_driver.h.

◆ ds18b20_state_t

Enumerator
DS18B20_STATE_IDLE 
DS18B20_STATE_CONVERTING 
DS18B20_STATE_DATA_READY 
DS18B20_STATE_ERROR 

Definition at line 25 of file ds18b20_driver.h.

Function Documentation

◆ ds18b20_bus_discover()

◆ ds18b20_bus_get_device_count()

uint8_t ds18b20_bus_get_device_count ( const ds18b20_bus_driver_t driver)

Esta variante no se usa en el firmware actual.

Definition at line 467 of file ds18b20_driver.c.

References ds18b20_bus_driver_t::device_count, and ds18b20_bus_driver_t::initialized.

◆ ds18b20_bus_get_latest_raw()

bool ds18b20_bus_get_latest_raw ( const ds18b20_bus_driver_t driver,
uint8_t  index,
int16_t *  raw_temperature 
)

◆ ds18b20_bus_get_latest_temperature_celsius()

bool ds18b20_bus_get_latest_temperature_celsius ( const ds18b20_bus_driver_t driver,
uint8_t  index,
float *  temperature_celsius 
)

Esta variante no se usa en el firmware actual.

Definition at line 498 of file ds18b20_driver.c.

References ds18b20_bus_driver_t::devices, ds18b20_bus_has_valid_sample(), and ds18b20_device_t::last_raw_temperature.

◆ ds18b20_bus_get_rom_code()

bool ds18b20_bus_get_rom_code ( const ds18b20_bus_driver_t driver,
uint8_t  index,
uint8_t  rom_code[ONEWIRE_ROM_CODE_SIZE] 
)

◆ ds18b20_bus_has_valid_sample()

bool ds18b20_bus_has_valid_sample ( const ds18b20_bus_driver_t driver,
uint8_t  index 
)

◆ ds18b20_bus_init()

◆ ds18b20_bus_is_busy()

bool ds18b20_bus_is_busy ( const ds18b20_bus_driver_t driver)

Esta variante no se usa en el firmware actual.

Definition at line 457 of file ds18b20_driver.c.

References DS18B20_BUS_STATE_CONVERTING, DS18B20_BUS_STATE_READING, ds18b20_bus_driver_t::initialized, and ds18b20_bus_driver_t::state.

◆ ds18b20_bus_process()

◆ ds18b20_bus_start_conversion()

◆ ds18b20_discover()

uint8_t ds18b20_discover ( const onewire_pin_config_t pin_config,
uint8_t  rom_codes[][ONEWIRE_ROM_CODE_SIZE],
uint8_t  max_devices 
)

Esta variante no se usa en el firmware actual, pero se conserva como parte de la API del driver.

Definition at line 173 of file ds18b20_driver.c.

References ds18b20_crc8_is_valid(), DS18B20_FAMILY_CODE, onewire_init(), ONEWIRE_ROM_CODE_SIZE, and onewire_search_roms().

◆ ds18b20_get_latest_raw()

bool ds18b20_get_latest_raw ( const ds18b20_driver_t driver,
int16_t *  raw_temperature 
)

◆ ds18b20_get_latest_temperature_celsius()

bool ds18b20_get_latest_temperature_celsius ( const ds18b20_driver_t driver,
float *  temperature_celsius 
)

Esta variante no se usa en el firmware actual.

Definition at line 275 of file ds18b20_driver.c.

References ds18b20_has_valid_sample(), and ds18b20_driver_t::last_raw_temperature.

◆ ds18b20_has_valid_sample()

bool ds18b20_has_valid_sample ( const ds18b20_driver_t driver)

◆ ds18b20_init()

bool ds18b20_init ( ds18b20_driver_t driver,
const onewire_pin_config_t pin_config 
)
Parameters
driverInstancia del driver a inicializar.
pin_configConfiguracion fisica del pin del bus 1-Wire.
Return values
trueSi la inicializacion fue correcta y el sensor respondio.
falseSi hubo un error de parametros o no se detecto presencia.

Definition at line 132 of file ds18b20_driver.c.

References ds18b20_driver_t::bus, ds18b20_is_present(), ds18b20_reset_state(), ds18b20_driver_t::initialized, onewire_init(), ds18b20_driver_t::rom_code, and ds18b20_driver_t::use_match_rom.

Referenced by app_init(), and app_step_20ms().

◆ ds18b20_init_with_rom()

bool ds18b20_init_with_rom ( ds18b20_driver_t driver,
const onewire_pin_config_t pin_config,
const uint8_t  rom_code[ONEWIRE_ROM_CODE_SIZE] 
)

Esta variante no se usa en el firmware actual, pero se conserva como parte de la API del driver.

Definition at line 149 of file ds18b20_driver.c.

References ds18b20_driver_t::bus, ds18b20_crc8_is_valid(), DS18B20_FAMILY_CODE, ds18b20_is_present(), ds18b20_reset_state(), ds18b20_driver_t::initialized, onewire_init(), ONEWIRE_ROM_CODE_SIZE, ds18b20_driver_t::rom_code, and ds18b20_driver_t::use_match_rom.

◆ ds18b20_is_busy()

bool ds18b20_is_busy ( const ds18b20_driver_t driver)
Parameters
driverInstancia del driver.
Return values
trueSi el sensor esta convirtiendo temperatura.
falseSi no hay conversion pendiente o el driver es invalido.

Definition at line 247 of file ds18b20_driver.c.

References DS18B20_STATE_CONVERTING, ds18b20_driver_t::initialized, and ds18b20_driver_t::state.

Referenced by app_step_20ms().

◆ ds18b20_is_present()

bool ds18b20_is_present ( ds18b20_driver_t driver)

◆ ds18b20_process()

void ds18b20_process ( ds18b20_driver_t driver,
uint16_t  elapsed_ms 
)

Debe llamarse periodicamente desde el lazo principal o desde una tarea cooperativa. Cuando la conversion termina, el driver lee el scratchpad y actualiza la ultima muestra valida disponible.

Parameters
driverInstancia del driver.
elapsed_msTiempo transcurrido desde la ultima llamada, en ms.

Definition at line 229 of file ds18b20_driver.c.

References ds18b20_driver_t::conversion_elapsed_ms, DS18B20_CONVERSION_TIME_MS, ds18b20_finish_conversion(), DS18B20_STATE_CONVERTING, ds18b20_driver_t::initialized, and ds18b20_driver_t::state.

Referenced by app_step_20ms().

◆ ds18b20_read_raw()

bool ds18b20_read_raw ( ds18b20_driver_t driver,
int16_t *  raw_temperature 
)

Esta variante no se usa en el firmware actual.

Definition at line 305 of file ds18b20_driver.c.

References driver_delay_ms(), DS18B20_CONVERSION_TIME_MS, ds18b20_finish_conversion(), ds18b20_get_latest_raw(), and ds18b20_start_conversion().

Referenced by ds18b20_read_temperature_celsius().

◆ ds18b20_read_scratchpad()

bool ds18b20_read_scratchpad ( ds18b20_driver_t driver,
uint8_t  scratchpad[DS18B20_SCRATCHPAD_SIZE] 
)

◆ ds18b20_read_temperature_celsius()

bool ds18b20_read_temperature_celsius ( ds18b20_driver_t driver,
float *  temperature_celsius 
)

Esta variante no se usa en el firmware actual.

Definition at line 324 of file ds18b20_driver.c.

References ds18b20_read_raw().

◆ ds18b20_start_conversion()

bool ds18b20_start_conversion ( ds18b20_driver_t driver)
Parameters
driverInstancia del driver.
Return values
trueSi el comando pudo enviarse.
falseSi el sensor no respondio.

Definition at line 217 of file ds18b20_driver.c.

References ds18b20_driver_t::conversion_elapsed_ms, ds18b20_begin_command(), DS18B20_CMD_CONVERT_T, DS18B20_STATE_CONVERTING, DS18B20_STATE_ERROR, and ds18b20_driver_t::state.

Referenced by app_init(), app_step_20ms(), and ds18b20_read_raw().