temp.c: refactor MCP3008 to similar structure.
This commit is contained in:
parent
05565a0aec
commit
b52a1217a9
60
temp.c
60
temp.c
|
|
@ -140,36 +140,6 @@ void temp_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Read a measurement from the MCP3008 analog-digital-converter (ADC).
|
|
||||||
|
|
||||||
\param channel The ADC channel to read.
|
|
||||||
|
|
||||||
\return The raw ADC reading.
|
|
||||||
|
|
||||||
Documentation for this ADC see
|
|
||||||
|
|
||||||
https://www.adafruit.com/datasheets/MCP3008.pdf.
|
|
||||||
*/
|
|
||||||
#ifdef TEMP_MCP3008
|
|
||||||
static uint16_t mcp3008_read(uint8_t channel) {
|
|
||||||
uint8_t temp_h, temp_l;
|
|
||||||
|
|
||||||
spi_select_mcp3008();
|
|
||||||
|
|
||||||
// Start bit.
|
|
||||||
spi_rw(0x01);
|
|
||||||
|
|
||||||
// Send read address and get MSB, then LSB byte.
|
|
||||||
temp_h = spi_rw((0b1000 | channel) << 4) & 0b11;
|
|
||||||
temp_l = spi_rw(0);
|
|
||||||
|
|
||||||
spi_deselect_mcp3008();
|
|
||||||
|
|
||||||
return temp_h << 8 | temp_l;
|
|
||||||
}
|
|
||||||
#endif /* TEMP_MCP3008 */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Look up a degree Celsius value from a raw ADC reading.
|
Look up a degree Celsius value from a raw ADC reading.
|
||||||
|
|
||||||
|
|
@ -315,10 +285,38 @@ static uint16_t temp_read_thermistor(temp_sensor_t i) {
|
||||||
#endif /* TEMP_THERMISTOR */
|
#endif /* TEMP_THERMISTOR */
|
||||||
|
|
||||||
#ifdef TEMP_MCP3008
|
#ifdef TEMP_MCP3008
|
||||||
|
/**
|
||||||
|
Read a measurement from the MCP3008 analog-digital-converter (ADC).
|
||||||
|
|
||||||
|
\param channel The ADC channel to read.
|
||||||
|
|
||||||
|
\return The raw ADC reading.
|
||||||
|
|
||||||
|
Documentation for this ADC see
|
||||||
|
|
||||||
|
https://www.adafruit.com/datasheets/MCP3008.pdf.
|
||||||
|
*/
|
||||||
|
static uint16_t temp_mcp3008_read(uint8_t channel) {
|
||||||
|
uint8_t temp_h, temp_l;
|
||||||
|
|
||||||
|
spi_select_mcp3008();
|
||||||
|
|
||||||
|
// Start bit.
|
||||||
|
spi_rw(0x01);
|
||||||
|
|
||||||
|
// Send read address and get MSB, then LSB byte.
|
||||||
|
temp_h = spi_rw((0b1000 | channel) << 4) & 0b11;
|
||||||
|
temp_l = spi_rw(0);
|
||||||
|
|
||||||
|
spi_deselect_mcp3008();
|
||||||
|
|
||||||
|
return temp_h << 8 | temp_l;
|
||||||
|
}
|
||||||
|
|
||||||
static uint16_t temp_read_mcp3008(temp_sensor_t i) {
|
static uint16_t temp_read_mcp3008(temp_sensor_t i) {
|
||||||
switch (temp_sensors_runtime[i].active++) {
|
switch (temp_sensors_runtime[i].active++) {
|
||||||
case 1:
|
case 1:
|
||||||
return temp_table_lookup(mcp3008_read(temp_sensors[i].temp_pin), i);
|
return temp_table_lookup(temp_mcp3008_read(temp_sensors[i].temp_pin), i);
|
||||||
case 10: // Idle for 100ms.
|
case 10: // Idle for 100ms.
|
||||||
temp_sensors_runtime[i].active = 0;
|
temp_sensors_runtime[i].active = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue