Comments (7)
Hi,
yes, 97k may be a bit high for some applications...
Moving the lookup table to PSRAM however will incur a large performance hit, because it is larger than the PSRAM cache and interferes with reading the framebuffer from PSRAM.
But I could implement the option to reduce the size of the LUT: 64k allows to look up 4 pixels with one load, which is also a full cycle of parallel data to the display. But I could split that up in two loads + shift + or, which will not be as fast but reduce the LUT size to 256 bytes.
I'll have a look if the changes needed are small enough to implement it in #61.
from epdiy.
Beating a somewhat dead horse here - I'm trying to minimize energy consumption of a run cycle in between deep sleep, and I found that enabling PSRAM adds ~800ms to the boot time, which is about 1/3 of the entire runtime.
If I only need black & white (I'm experimenting with Lilygo FWIW), and MODE_GC16
(which gives me the crisp image I'm looking for), can I reduce the size of the framebuffer from EPD_WIDTH / 2 * EPD_HEIGHT
somehow, so that I could fit it into the main memory?
Thanks!
from epdiy.
You can, using the low-level api: https://github.com/vroland/epdiy/blob/master/src/epd_driver/include/epd_driver.h#L136 as a starting point. This packs 8 pixels in one bye. I don't have an example for this mode though, and haven't used it in a long time...
from epdiy.
@vroland thanks for a quick reply! I had high hopes ever since I noticed that flag, but couldn't figure out how to use it on all mentions I could find https://github.com/vroland/epdiy/search?q=MODE_PACKING_8PPB.
Does it mean I'd have to re-implement all the primitive drawing functions, so that I can flip proper bits in the framebuffer?
from epdiy.
@ashald if you check the codebase a bit more you will realize that epd_hl_update_area uses MODE_PACKING_2PPB as default (exactly coherent with the slow mode you are using that is MODE_GC16). In order to use that 8PPB mode you will have to make your own function if I see that correctly and call epd_draw_base using that mode (There is no example so far I think).
Anyways will all due respect this question is a bit off topic for this issue considering that is about the initial memory footprint on the initialization of the library and not about the drawing modes of EPDiy.
update: Will be nice to leave an example about 8PPB mode to understand better how to use and also add it in the documentation. As I understand even if you call an hl_update using MODE_PACKING_8PPB it adds it to the | (OR) mode concatenation, but if you try to use it "as is" you get a white screen.
Updating this line in epd_hl_update_area:
err = epd_draw_base(epd_full_screen(), state->front_fb, diff_area, MODE_PACKING_2PPB | PREVIOUSLY_WHITE | mode, temperature, state->dirty_lines, state->waveform);
to the MODE_PACKING_8PPB you can experiment how it is. You can use the Slack epdiy.slack.com channel to ask questions in different channels.
from epdiy.
@martinberlin thanks! Would appreciate if you could suggest a better place to ask such questions.
One thing that I'm confused about is that it seems that the base drawing function for a single pixel is explicitly using 2-pixels-per-byte approach
epdiy/src/epd_driver/epd_driver.c
Line 87 in f3feb5a
from epdiy.
Closing here, since there is no more feedback since mid-February, and does not seem a bug that can be solved with EPDiy.
from epdiy.
Related Issues (20)
- Deinit function issue HOT 13
- ED133UT3 Screen Suport HOT 6
- Having issue while compiling the example code for Lilygo T5-4.7 HOT 1
- v7 firmware and the switch to a ESP32-S3 module HOT 4
- > there any underlying firmware changes in the v7 firmware that wouldn't work on a WROVER chip with the same memory specs? HOT 1
- ED060SCP screens seems rendering is unclear? HOT 11
- Connect lvgl and epdiy directly, any suggestion? HOT 13
- Can I use it with rust? If so, are there any examples? HOT 6
- epdiy v7 - no border connection? HOT 8
- Cutting Legacy Features for Maintainability - Do you use any of them? HOT 6
- Out-of-date documents HOT 2
- Support for ED060KG1 screen HOT 4
- MODE_PACKING_2PPB renders "stripes" HOT 9
- Prepare v7 lcd_driver.c to be ready for IDF 5.3 HOT 5
- is lower psram usage possible? HOT 3
- Why epd_hl_update_area always redraw fullscreen in s3_lcd branch? HOT 9
- Epdiyv7 with ED060SC7
- Slack link is dead HOT 1
- Areas of the screen not in the rendering area will become lighter in color. HOT 30
- epd_renderer_init failing on v7 board HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from epdiy.