Thomas Kolb
2cedcb712a
This change controls a GPIO on the expansion connector depending on the surrounding temperature. If external temperature is too low for charging, the GPIO is set high, else it is set low. In combination with the new LNSC-2420-Addon board this allows to switch on a high-power heater connected directly to the solar panels whenever the temperature is too low to charge the battery. Once the temperature becomes high enough again, the heater is switched off and the battery is charged instead.
36 lines
866 B
C
36 lines
866 B
C
#include <libopencm3/stm32/gpio.h>
|
|
|
|
#include "pinout.h"
|
|
|
|
#include "addon_io.h"
|
|
|
|
static const uint32_t OUTPUT_LIST[2] = {ADDON_ISO_IO_OUT1, ADDON_ISO_IO_OUT2};
|
|
|
|
void addon_io_init(void)
|
|
{
|
|
// Isolated outputs configuration: output, initially low = off
|
|
gpio_clear(ADDON_ISO_IO_PORT, ADDON_ISO_IO_OUT1 | ADDON_ISO_IO_OUT2);
|
|
gpio_mode_setup(ADDON_ISO_IO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, ADDON_ISO_IO_OUT1 | ADDON_ISO_IO_OUT2);
|
|
|
|
// Isolated inputs configuration: input, no pull resistors
|
|
gpio_mode_setup(ADDON_ISO_IO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, ADDON_ISO_IO_IN);
|
|
}
|
|
|
|
|
|
void addon_io_iso_out_on(uint8_t idx)
|
|
{
|
|
gpio_set(ADDON_ISO_IO_PORT, OUTPUT_LIST[idx]);
|
|
}
|
|
|
|
|
|
void addon_io_iso_out_off(uint8_t idx)
|
|
{
|
|
gpio_clear(ADDON_ISO_IO_PORT, OUTPUT_LIST[idx]);
|
|
}
|
|
|
|
|
|
bool addon_io_read_iso_in(void)
|
|
{
|
|
return gpio_get(ADDON_ISO_IO_PORT, ADDON_ISO_IO_IN) != 0;
|
|
}
|