Conversation
This is the issue of OLED failed to off even at turnOff. Users reported power issues in powersaving on because the extra 26mA is too huge compared to expected 13mA total power consumption in low power mode.
So the last sensor does "claim", even after plus 1, the "claims" number is still negative and the vExt is still off? https://github.com/meshcore-dev/MeshCore/blob/dev/src/helpers/RefCountedDigitalPin.h#L23 |
#ifndef PIN_OLED_RESET
#define PIN_OLED_RESET 21 // Reset pin # (or -1 if sharing Arduino reset pin)
#endif
|
|
@IoTThinks If you have removed the OLED does this still cause more powerdraw? I would think if the oled is removed then it can't draw the additional power. Can this be confirmed? |
@mavericm1 A friend with no-oled heltec v4 has reported no issue. |
|
@Quency-D 1. Why OLED RESET need to pull LOW before release?
|
You don't need to physically remove the OLED to confirm. You can just build with DISPLAY_CLASS flag commented out, and power consumption will go back down to 11mA like in firmware v1.11.0 |
|
@Socalix Yah, true. I will test in free time. Thanks a lot. :) For now, I believe just fix the release() to avoid negative "claims" will fix this on/off issue of OLED. |
|
Yeah, I thought @mavericm1 was trying to confirm that the new OLED/TFT code was causing the extra power consumption. I agree your PR is nice and clean and a generic fix for other use cases. |
|
I was just confirming as I have a v4 deployed without the oled that was upgraded ota and it has a small battery and is not a easily accessible repeater
|
| if (_isOn) { | ||
| if (_peripher_power) _peripher_power->release(); | ||
| if (_peripher_power) { | ||
| if (PIN_OLED_RESET >= 0) digitalWrite(PIN_OLED_RESET, LOW); |
There was a problem hiding this comment.
Would this be better as
#if defined(PIN_OLED_RESET)
digitalWrite(PIN_OLED_RESET, LOW);
#endif
So that the call is only compiled in if PIN_OLED_RESET is actually defined?
There was a problem hiding this comment.
PIN_OLED_RESET is the default definition. So this line actually has no effect.
| if (_peripher_power) _peripher_power->claim(); | ||
| if (_peripher_power) { | ||
| _peripher_power->claim(); | ||
| begin(); |
There was a problem hiding this comment.
Won't this call to begin() cause an additional claim() to occur?
There was a problem hiding this comment.
It will not be executed repeatedly because _isOn controls the process.
oltaco
left a comment
There was a problem hiding this comment.
Thanks for this, if there is PIN_OLED_RESET then we should be using it.
I think there are some issues with it still though, can you check? Thanks
|
In this thread #1569 (comment), I suspect SSD1306Display does not use vExt at all and vExt=LOW means off instead. If correct, then the claim() and release() may not be relevant in SSD1306Display. |



In this commit #1486, some users reported high power consumption during sleep mode. This commit optimizes power consumption during sleep mode.