You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The bit timing is arranged with delayMicroseconds(500);. On a single threaded application this works reasonable stable although rounding errors tend to accumulate.
As soon as multiple threads are used on an ESP32 or ESP8266, this is no longer guaranteed to take 500 us. Depending on the OS scheduling this causes some communication to work, sometimes not to work.
Would it be better to use a timer for the bit timing? This guarantees the bit timing independent of scheduling and does not accumulate timing errors.
A workaround on the ESP32: Ensure all Opentherm communication is on 1 core, ensure the parrallel tasks are running on the other core.
The text was updated successfully, but these errors were encountered:
Thank for the suggestion. vTaskDelay() does not work in this situation as the resolution for vTaskDelay() is either 1 or 10 ms, which prohibits from implementing a 0.5 ms delay.
The bit timing is arranged with delayMicroseconds(500);. On a single threaded application this works reasonable stable although rounding errors tend to accumulate.
As soon as multiple threads are used on an ESP32 or ESP8266, this is no longer guaranteed to take 500 us. Depending on the OS scheduling this causes some communication to work, sometimes not to work.
Would it be better to use a timer for the bit timing? This guarantees the bit timing independent of scheduling and does not accumulate timing errors.
A workaround on the ESP32: Ensure all Opentherm communication is on 1 core, ensure the parrallel tasks are running on the other core.
The text was updated successfully, but these errors were encountered: