- Fixed typo in macros
- NOTE: currently the dimmer firmware is running on the ZC interrupt, not the predicted signal until it is more stable
- Added Dimmer::delay() function that can read and execute I2C over UART commands while waiting
- Option to set/face all channels with one command (DIMMER_HAVE_SET_ALL_CHANNELS_AT_ONCE; breaking change: disabled by default)
- Refactored some old code, more C++ style
- Added a delay function that processes incoming UART events during calling the Dimmer::delay() function (replacement for ::delay())
- Changed the prediction timer to uint32_t
- Increased serial RX buffer to 128 byte to avoid loosing data (UART mode only)
- Option to set and fade levels in main loop to speed up _dimmer_i2c_on_receive()
- Fixed reading/writing cubic interpolation for multiple channels
- 2.2.3 breaks binary compatibility with previous versions due to changes in some structures
- Fixed rare flickering when turning a channel off by adding double buffering to the channel levels
- Option to disable the ADC interrupt, to avoid blocking interrupts during the calculation
- Auto restart if the dimmer was shut down due to invalid zero crossing signals
- Improved ZC filtering and prediction
- Added custom_copy_hex_file to platformio.ini. Multiple locations can be specified
- Creating dimmer_version.h from library.json
- More options to configure the frequency measurement
- library.json to include the library directly for headers only without being compiled
- Added example of 16 channels
16ch_dimmer_p
(requires to update structures and the master needs to be compiled with the same headers, seedimmer.h
)
- Min. pulse width for frequency measurement
- Browser based tool to create cubic interpolation curves
- Added cubic interpolation to create linear brightness levels
- Changed default offset/gain for ATMega328PB temperature sensor
- Info displayed invalid voltage during frequency calibration
- Stop/freeze fading command
- Fixed missing fading completed events
- Removed linear correction
- Removed ZC_MAX_TIMINGS
- Level range can be configured
- Minimum on-time can be adjusted dynamically for devices that need a certain voltage level to start-up
- Configurable trailing/leading edge mode
- Frequency auto detection (50/60Hz)
- Increased ZC delay to 16bit / 500ns resolution
- Support for asynchronous ZC signals
- Filter invalid ZC signals and continue to run up to several seconds without being synchronized
- Python tool to configure/monitor the dimmer over the serial port (for version 2.1.x and 2.2.x only)
- EEPROM wear leveling improved and fail-safe added
- Tool to generate inline assembler for toggling MOSFET pins
- Support for TRIACs (leading edge only) added - tested with MOSFETs, BJTs and TRIACs
- Improved performance and reduced code size using the ADC interrupt
- Reboot notification event after the frequency measurement has been completed
- Patch for Arduino library
- Structure updates
- Fix issue in serial protocol of the python config tool
- Fixed issues with millis overflow
- Replaced frequency and misfire error with single type of error
- SerialTwoWire updated
- Replaced crc16.cpp with a library
- Changed default max. temperature to 75°C and metrics update interval to 5 seconds
- Added environments for flashing the boot loader to ATMega328P and ATMega328PB @ 8MHz and BOD disabled
- Improved reading VCC and internal temperature
- Added DIMMER_ZC_INTERRUPT to specify rising or falling interrupt triggering
- Removed DIMMER_COMMAND_RESET since it was not working with several versions of the boot loader
- Fixed bug in EEPROM wear leveling and invalid CRC after cycling
- Added output of EEPROM read/write status to serial port
- Fixed 32bit overflow in timer that caused the zero crossing detection to malfunction
- Added +REM=BOOT message in setup()
- Changed max. temperature to 90°C which is the maximum operation temperature allowed for dimmers (195F)
- Added filter to skip all ZC interrupts above 90Hz (@60Hz mains)
- Added error counter for high/low frequency and zero crossing misfire
- Added debugging code to send zero crossing interrupt timings to serial port (ZC_MAX_TIMINGS)
- Fixed wrong NTC PIN at dimmer info
- Added version to register memory (DIMMER_REGISTER_VERSION)
- Added print dimmer info command (DIMMER_COMMAND_PRINT_INFO)
- Added command force temperature check (DIMMER_COMMAND_FORCE_TEMP_CHECK)
- Added structure dimmer_metrics_t for DIMMER_METRICS_REPORT
- Added CRC16 to EEPROM configuration
- Added event that indicates that the EEPROM has been written (DIMMER_EEPROM_WRITTEN)
- Added print metrics on serial port (DIMMER_COMMAND_PRINT_METRICS)
- Added offset for internal temperature sensor and ntc (DIMMER_REGISTER_xxx_TEMP_OFS, int8 * 0.25 °C, ~ +-32°C)
- Added warning if the AC frequency is below 75% or above 120% (DIMMER_FREQUENCY_WARNING)
- Added undocumented commands for testing and calibration (0x80-0x91, i2c_slave.cpp)
- Added MCU detection for adjusting internal temperature sensor
- DIMMER_COMMAND_READ_NTC, DIMMER_COMMAND_READ_INT_TEMP and DIMMER_COMMAND_READ_AC_FREQUENCY return NaN if not available, DIMMER_COMMAND_READ_VCC 0
- Fixed outdated debug code
- Fixed issue with reading ADC values and delay() inside the I2C interrupt callback
- Fixed empty configuration structure after reset without calling _write_config()
- Fixed int overflow for temp_check_interval > 32
- Fixed pin mode for NTC
- Fixed fading with short time intervals and float not having enough precision for a single step
- Changed default values for ZC crossing delay and other timings to match my dimmer design
- Changed DIMMER_TEMPERATURE_REPORT to DIMMER_METRICS_REPORT
- Configurable timing parameters for the MOSFET
- Added documentation for timings to dimmer.h
- Display compile settings and values during start up (HIDE_DIMMER_INFO)
- Added AC frequency measurement (FREQUENCY_TEST_DURATION)
- Enabled printf float formatting and removed PrintEx library
- Added event to indicate when a fading operation has been completed (HAVE_FADE_COMPLETION_EVENT)
- Fixed an issue with floats and rounding when using fading
- Changed default I2C address to 0x17/0x18
- Increased delay when reading internal temperature and VCC
- Added macros for thermistor temperature calculation
- Changed macro names to match pattern, additional macros to enable/disable reading VCC, NTC, internal temp. sensor
- Added I2C slave protocol
- The serial protocol was replaced by I2C over UART emulation
- Added example how to control the dimmer via I2C and UART
- Removed SLIM version
- Auto select prescaler bits for DIMMER_TIMER2_PRESCALER
- Changes for Platform IO 4.0
- Added some extra ticks if timer interrupts are close to avoid skipping one
- Improved the timing of the zero crossing interrupt using timer2
- Added min. "on" time
- Added VCC to dimmer info and temperature report (INTERNAL_VREF_1_1V might need some adjustments to be precise)
- Added CPU Frequency to dimmer info
- Support for ATMEGA Mini Pro 3.3V @ 8MHz
- Set default prescaler to 8 increasing dimming levels to 16666 for 16MHz and 8333 for 8MHz
- Respond to invalid commands with error
- Changed part of the fade response from "to=" to "lvl="
- Support for the internal temperature sensor of the ATMEGA
- EEPROM wear leveling to increase writes ((EEPROM size - 8 byte) / size of configuration) = 50, which should be ~5 million writes
- EEPROM write delay to reduce writes
- Added prefix "~$" for commands
- Slim version with less than 7.5kb for ATMEGA88. No EEPROM support and different serial protocol
- Serial command to change configuration
- Store configuration in EEPROM
- NTC with configurable over temperature shutdown
- Store last levels in EEPROM and restore when power is turned on
- Added support for multiple channels to the dimmer library
- Added debug code
- Increased dimming levels to 32767 (DIMMER_MAX_LEVEL)
- Initial version