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

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

#include "ds18b20_driver.h"
#include "delay_driver.h"
#include <string.h>
+ Include dependency graph for ds18b20_driver.c:

Go to the source code of this file.

Macros

#define DS18B20_CMD_CONVERT_T   0x44U
 
#define DS18B20_CMD_READ_SCRATCHPAD   0xBEU
 

Functions

static uint8_t ds18b20_crc8 (const uint8_t *data, uint8_t length)
 
static bool ds18b20_crc8_is_valid (const uint8_t *data, uint8_t length)
 
static void ds18b20_reset_state (ds18b20_driver_t *driver)
 
static bool ds18b20_begin_command (ds18b20_driver_t *driver, uint8_t command)
 
static bool ds18b20_bus_begin_command (const onewire_driver_t *bus, const uint8_t rom_code[ONEWIRE_ROM_CODE_SIZE], uint8_t command)
 
static bool ds18b20_finish_conversion (ds18b20_driver_t *driver)
 
static bool ds18b20_bus_read_raw (const onewire_driver_t *bus, const uint8_t rom_code[ONEWIRE_ROM_CODE_SIZE], int16_t *raw_temperature)
 
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_raw (ds18b20_driver_t *driver, int16_t *raw_temperature)
 Lee la temperatura cruda del sensor en forma bloqueante.
 
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_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_CMD_CONVERT_T

#define DS18B20_CMD_CONVERT_T   0x44U

Definition at line 12 of file ds18b20_driver.c.

◆ DS18B20_CMD_READ_SCRATCHPAD

#define DS18B20_CMD_READ_SCRATCHPAD   0xBEU

Definition at line 13 of file ds18b20_driver.c.

Function Documentation

◆ ds18b20_begin_command()

◆ ds18b20_bus_begin_command()

static bool ds18b20_bus_begin_command ( const onewire_driver_t bus,
const uint8_t  rom_code[ONEWIRE_ROM_CODE_SIZE],
uint8_t  command 
)
static

◆ 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_read_raw()

static bool ds18b20_bus_read_raw ( const onewire_driver_t bus,
const uint8_t  rom_code[ONEWIRE_ROM_CODE_SIZE],
int16_t *  raw_temperature 
)
static

◆ ds18b20_bus_start_conversion()

◆ ds18b20_crc8()

static uint8_t ds18b20_crc8 ( const uint8_t *  data,
uint8_t  length 
)
static

Definition at line 15 of file ds18b20_driver.c.

Referenced by ds18b20_crc8_is_valid().

◆ ds18b20_crc8_is_valid()

static bool ds18b20_crc8_is_valid ( const uint8_t *  data,
uint8_t  length 
)
static

◆ 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_finish_conversion()

◆ 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_reset_state()

◆ 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().