Firmware for the Sinara 8451 Thermostat
Go to file
2020-10-11 01:59:39 +02:00
.cargo use NixOS 19.03 multiarch gdb instead of custom build 2019-04-12 17:14:38 +08:00
pytec pytec: doc set_param 2020-10-01 00:35:16 +02:00
src pid: move ki coefficient inside integration 2020-10-11 01:59:39 +02:00
.gitignore create nix build infrastructure 2019-03-07 16:27:33 +01:00
build.rs create nix build infrastructure 2019-03-07 16:27:33 +01:00
Cargo.lock main: switch reports to json serialization 2020-09-27 23:58:03 +02:00
Cargo.toml main: switch reports to json serialization 2020-09-27 23:58:03 +02:00
cargosha256.nix update cargosha256 2020-10-08 14:43:10 +08:00
LICENSE LICENSE: add GPL-3 2019-03-18 21:47:18 +01:00
memory.x memory.x: fix RAM2 region, place stack in CCMRAM 2019-03-12 22:52:52 +01:00
openocd.gdb gdb with cargo run 2019-03-19 17:16:45 +01:00
README.md README: doc usb 2020-10-11 01:59:39 +02:00

Firmware for the Sinara 8451 Thermostat

Building

Debian-based systems (tested on Ubuntu 19.10)

  • install git, clone this repository
  • install rustup
rustup toolchain install nightly
rustup update
rustup target add thumbv7em-none-eabihf --toolchain nightly
rustup default nightly
cargo build --release

The resulting ELF file will be located under target/thumbv7em-none-eabihf/release/thermostat

Network

Connecting

Ethernet, IP: 192.168.1.26/24

Use netcat to connect to port 23/tcp (telnet)

nc -vv 192.168.1.26 23

telnet clients send binary data after connect. Enter \n once to invalidate the first line of input.

Reading ADC input

Set report mode to on for a continuous stream of input data.

The scope of this setting is per TCP session.

Commands

Syntax Function
report Show current input
report mode Show current report mode
report mode <off/on> Set report mode
pwm Show current PWM settings
pwm <0/1> max_i_pos <ratio> Set PWM duty cycle for max_i_pos to ampere
pwm <0/1> max_i_neg <ratio> Set PWM duty cycle for max_i_neg to ampere
pwm <0/1> max_v <ratio> Set PWM duty cycle for max_v to volt
pwm <0/1> <volts> Disengage PID, set i_set DAC to ampere
pwm <0/1> pid Set PWM to be controlled by PID
center <0/1> <volts> Set the MAX1968 0A-centerpoint to volts
center <0/1> vref Set the MAX1968 0A-centerpoint to measure from VREF
pid Show PID configuration
pid <0/1> target <value> Set the PID controller target
pid <0/1> kp <value> Set proportional gain
pid <0/1> ki <value> Set integral gain
pid <0/1> kd <value> Set differential gain
pid <0/1> output_min <value> Set mininum output
pid <0/1> output_max <value> Set maximum output
pid <0/1> integral_min <value> Set integral lower bound
pid <0/1> integral_max <value> Set integral upper bound
s-h Show Steinhart-Hart equation parameters
s-h <0/1> <t0/b/r0> <value> Set Steinhart-Hart parameter for a channel
postfilter Show postfilter settings
postfilter <0/1> off Disable postfilter
postfilter <0/1> rate <rate> Set postfilter output data rate
load Restore configuration from EEPROM
save Save configuration to EEPROM
reset Reset the device
ipv4 <X.X.X.X> Configure IPv4 address

USB

The firmware includes experimental support for acting as a USB-Serial peripheral. Debug logging will be sent there by default (unless build with logging via semihosting.)

Caveat: This logging does not flush its output. Doing so would hang indefinitely if the output is not read by the USB host. Therefore output will be truncated once buffers are full.