Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 264 to 264 | ||||||||
$ convert image.png -separate -monochrome -rotate 90 -flop -negate image.xbm | ||||||||
Added: | ||||||||
> > | convert image36 -shave 2x2 image32 | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 260 to 260 | ||||||||
$ convert image -colorspace gray -threshold 10% -type bilevel result | ||||||||
Added: | ||||||||
> > | $ convert image -separate -monochrome result $ convert image.png -separate -monochrome -rotate 90 -flop -negate image.xbm | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 118 to 118 | ||||||||
| ||||||||
Added: | ||||||||
> > | The partial and fast update for the Adafruit #4195 is not working for me. But the very similar EPD YMS122250-0213AAAMFGN from DISPLAY LC![]() ![]() ![]() | |||||||
Schematics![]()
|
Line: 1 to 1 | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||||||||||||||||||||||||||||||||||
Line: 110 to 110 | ||||||||||||||||||||||||||||||||||||||||
; | ||||||||||||||||||||||||||||||||||||||||
Added: | ||||||||||||||||||||||||||||||||||||||||
> > |
Adafruit EInk Feather Board
![]()
| |||||||||||||||||||||||||||||||||||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 42 to 42 | ||||||||
epdupdatepart ( -- ) Update part of the EPD display epdcmd ( a -- ) Send command to the EPD controller SSD1680. First byte contains the length of the command. | ||||||||
Added: | ||||||||
> > | epdsleep ( -- ) enter deep sleep mode epdwakeup ( -- ) wake up EPD | |||||||
epdpixel! ( ? x y -- ) not implemented yet epdpixel@ ( x y -- ? ) not implemented yet epdcolumn! ( u -- ) Write a column (8 pixels) to the current position. Increment position. Bit 0 on top | ||||||||
Line: 90 to 93 | ||||||||
show date and time on EPD (see CmsisRtos#How_to_use_Tasks for a background task).
: clock ( -- ) | ||||||||
Changed: | ||||||||
< < | epdclr epdupdate >epd .time >term 2000 osdelay drop | |||||||
> > | epdclr | |||||||
3 epdfont | ||||||||
Added: | ||||||||
> > | >epd .time >term epdupdate \ 2000 osdelay drop | |||||||
-1 -1 -1 alarm! \ set an alarm every second begin wait-alarm \ wait a second |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 24 to 24 | ||||||||
epd-emit works like the standard word emit . It blocks the calling thread, as long as the character is not written to the EPD display. Horizontal (x) position is in pixel (0 to 249), vertical position (y) is in lines, a line consists of 8 pixels. 0, 0 is upper left corner. Larger fonts takes more than one line.
| ||||||||
Changed: | ||||||||
< < | epd-emit ( Char -- ) Emits a character (writes a character to the EPD framebuffer) epd-emit? ( -- Flag ) EPD ready to get a character (SPI not busy) | |||||||
> > | epd-emit ( c -- ) Emits a character (writes a character to the EPD framebuffer) epd-emit? ( -- ? ) EPD ready to get a character (SPI not busy) | |||||||
Changed: | ||||||||
< < | hook-emit ( -- a-addr ) Hooks for redirecting terminal IO on the fly hook-emit? ( -- a-addr ) | |||||||
> > | hook-emit ( -- a ) Hooks for redirecting terminal IO on the fly hook-emit? ( -- a ) | |||||||
epdpos! ( x y -- ) Set EPD cursor position, x horizontal position, pixel resolution, e.g. 0 to 249 for 250x122 displays. | ||||||||
Line: 38 to 38 | ||||||||
epdfont ( u -- ) Select the font, u: 0 6x8, 1 8x8, 2 8X16 , 3 12X16 epdupdate ( -- ) Update the display (copy the framebuffer to the display) | ||||||||
Changed: | ||||||||
< < | epdpartial ( x1 y1 x2 y2 -- ) Partial update the display epdcmd ( c-addr -- ) Send command to the EPD controller SSD1680. First byte contains the length of the command. | |||||||
> > | epdstartpart ( -- ) Start the partial update for the EPD display epdupdatepart ( -- ) Update part of the EPD display epdcmd ( a -- ) Send command to the EPD controller SSD1680. First byte contains the length of the command. | |||||||
Changed: | ||||||||
< < | epdpixel! ( Flag x y -- ) not implemented yet epdpixel@ ( x y -- Flag ) not implemented yet | |||||||
> > | epdpixel! ( ? x y -- ) not implemented yet epdpixel@ ( x y -- ? ) not implemented yet | |||||||
epdcolumn! ( u -- ) Write a column (8 pixels) to the current position. Increment position. Bit 0 on top epdcolumn@ ( -- u ) Read a column (8 pixels) from the current position | ||||||||
Changed: | ||||||||
< < | >epd ( -- addr1 addr2 ) redirect to EPD *) >term ( addr1 addr2 -- ) terminate redirection *) | |||||||
> > | >epd ( -- a1 a2 ) redirect to EPD *) >term ( a1 a2 -- ) terminate redirection *) | |||||||
*) part of redirection.fs | ||||||||
Line: 64 to 65 | ||||||||
['] epd-emit hook-emit ! \ redirect terminal to epd-emit ." Hallo Velo! " cr ." ciao" | ||||||||
Deleted: | ||||||||
< < | epdupdate | |||||||
hook-emit ! \ restore old hook | ||||||||
Added: | ||||||||
> > | epdupdate | |||||||
; | ||||||||
Line: 75 to 76 | ||||||||
>epd \ redirect terminal to epd-emit ." Hallo Velo! " cr ." ciao" | ||||||||
Deleted: | ||||||||
< < | epdupdate | |||||||
>term \ terminate redirection | ||||||||
Added: | ||||||||
> > | epdupdate | |||||||
;
or on a command line
| ||||||||
Changed: | ||||||||
< < | >epd .( Hallo Velo!) epdupdate >term | |||||||
> > | >epd .( Hallo Velo!) >term epdupdate | |||||||
show date and time on EPD (see CmsisRtos#How_to_use_Tasks for a background task).
: clock ( -- ) | ||||||||
Changed: | ||||||||
< < | epdclr | |||||||
> > | epdclr epdupdate >epd .time >term 2000 osdelay drop | |||||||
3 epdfont -1 -1 -1 alarm! \ set an alarm every second begin wait-alarm \ wait a second 0 0 epdpos! | ||||||||
Changed: | ||||||||
< < | >epd epdpos@ .time epdpos@ epdpart >term | |||||||
> > | epdstartpart >epd .time >term epdupdatepart | |||||||
key? until key drop ; |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 215 to 215 | ||||||||
ImageMagick![]() | ||||||||
Changed: | ||||||||
< < | $ magick image.png -rotate -90 -flip image.pbm | |||||||
> > | $ convert image.png -rotate -90 -flip image.pbm | |||||||
Changed: | ||||||||
< < | $ magick image.png -rotate 90 -flop image.xbm | |||||||
> > | $ convert image.png -rotate 90 -flop image.xbm | |||||||
Added: | ||||||||
> > | $ convert image -colorspace gray -threshold 10% -type bilevel result | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 215 to 215 | ||||||||
ImageMagick![]() | ||||||||
Changed: | ||||||||
< < | $ magick -rotate 90 -flip image.png image.pbm | |||||||
> > | $ magick image.png -rotate -90 -flip image.pbm $ magick image.png -rotate 90 -flop image.xbm | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 215 to 215 | ||||||||
ImageMagick![]() | ||||||||
Changed: | ||||||||
< < | $ magick -rotate 90 image.png image.pbm | |||||||
> > | $ magick -rotate 90 -flip image.png image.pbm | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 209 to 209 | ||||||||
08080808080888700000 | ||||||||
Changed: | ||||||||
< < | ImageMagick | |||||||
> > |
ImageMagickImageMagick![]() $ magick -rotate 90 image.png image.pbm | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 21 to 21 | ||||||||
Changed: | ||||||||
< < | epd-emit works like the standard word emit . It blocks the calling thread, as long as the character is not written to the EPD display. Horizontal (x) position is in pixel (0 to 249), vertical position (y) is in lines, a line consists of 8 pixels. Larger fonts takes more than one line. | |||||||
> > | epd-emit works like the standard word emit . It blocks the calling thread, as long as the character is not written to the EPD display. Horizontal (x) position is in pixel (0 to 249), vertical position (y) is in lines, a line consists of 8 pixels. 0, 0 is upper left corner. Larger fonts takes more than one line. | |||||||
epd-emit ( Char -- ) Emits a character (writes a character to the EPD framebuffer) |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 160 to 160 | ||||||||
Added: | ||||||||
> > |
| |||||||
Other EPDs with SSD1680
| ||||||||
Line: 207 to 209 | ||||||||
08080808080888700000 | ||||||||
Changed: | ||||||||
< < | pngtopam | |||||||
> > | ImageMagick | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 207 to 207 | ||||||||
08080808080888700000 | ||||||||
Added: | ||||||||
> > | pngtopam | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 31 to 31 | ||||||||
hook-emit? ( -- a-addr ) epdpos! ( x y -- ) Set EPD cursor position, | ||||||||
Changed: | ||||||||
< < | x horizontal position, for 6x8 font max. (250 / 6) -1, depends on the font's x size y vertical position (a line consists of 8 pixels), max. 14 for 255x122. | |||||||
> > | x horizontal position, pixel resolution, e.g. 0 to 249 for 250x122 displays. y vertical position (line), max. 15 for 250x122 displays. | |||||||
epdpos@ ( -- x y ) Get the current EPD cursor position epdclr ( -- ) Clears the EPD display, sets the cursor to 0, 0 epdfont ( u -- ) Select the font, u: 0 6x8, 1 8x8, 2 8X16 , 3 12X16 | ||||||||
Line: 43 to 43 | ||||||||
epdpixel! ( Flag x y -- ) not implemented yet epdpixel@ ( x y -- Flag ) not implemented yet | ||||||||
Changed: | ||||||||
< < | epdcolumn! ( u -- ) Write a column (8 pixels) to the current position. Increment position | |||||||
> > | epdcolumn! ( u -- ) Write a column (8 pixels) to the current position. Increment position. Bit 0 on top | |||||||
epdcolumn@ ( -- u ) Read a column (8 pixels) from the current position | ||||||||
Changed: | ||||||||
< < | >epd ( -- addr1 addr2 ) redirect to EPD >term ( addr1 addr2 -- ) terminate redirection | |||||||
> > | >epd ( -- addr1 addr2 ) redirect to EPD *) >term ( addr1 addr2 -- ) terminate redirection *) *) part of redirection.fs | |||||||
Line: 165 to 167 | ||||||||
Graphics File Formats | ||||||||
Changed: | ||||||||
< < |
| |||||||
> > |
| |||||||
Changed: | ||||||||
< < |
| |||||||
> > |
| |||||||
Changed: | ||||||||
< < |
| |||||||
> > |
| |||||||
| ||||||||
Added: | ||||||||
> > | Portable BitMap, binary P4.pbm
P1 # This is an example bitmap of the letter "J" 6 10 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 P4 # This is an example bitmap of the letter "J" 6 10 08080808080888700000 | |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 41 to 41 | ||||||||
epdpartial ( x1 y1 x2 y2 -- ) Partial update the display epdcmd ( c-addr -- ) Send command to the EPD controller SSD1680. First byte contains the length of the command. | ||||||||
Changed: | ||||||||
< < | epdpixel! ( Flag x y -- ) epdpixel@ ( x y -- Flag ) epdcolumn! ( u x y -- ) epdcolumn@ ( x y -- u ) | |||||||
> > | epdpixel! ( Flag x y -- ) not implemented yet epdpixel@ ( x y -- Flag ) not implemented yet epdcolumn! ( u -- ) Write a column (8 pixels) to the current position. Increment position epdcolumn@ ( -- u ) Read a column (8 pixels) from the current position | |||||||
>epd ( -- addr1 addr2 ) redirect to EPD >term ( addr1 addr2 -- ) terminate redirection |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 34 to 34 | ||||||||
x horizontal position, for 6x8 font max. (250 / 6) -1, depends on the font's x size y vertical position (a line consists of 8 pixels), max. 14 for 255x122. epdpos@ ( -- x y ) Get the current EPD cursor position | ||||||||
Added: | ||||||||
> > | epdclr ( -- ) Clears the EPD display, sets the cursor to 0, 0 epdfont ( u -- ) Select the font, u: 0 6x8, 1 8x8, 2 8X16 , 3 12X16 | |||||||
epdupdate ( -- ) Update the display (copy the framebuffer to the display) epdpartial ( x1 y1 x2 y2 -- ) Partial update the display epdcmd ( c-addr -- ) Send command to the EPD controller SSD1680. First byte contains the length of the command. | ||||||||
Changed: | ||||||||
< < | epdclr ( -- ) Clears the EPD display, sets the cursor to 0, 0 epdfont ( u -- ) Select the font, u: 0 6x8, 1 8x8, 2 8X16 , 3 12X16 | |||||||
> > | epdpixel! ( Flag x y -- ) epdpixel@ ( x y -- Flag ) epdcolumn! ( u x y -- ) epdcolumn@ ( x y -- u ) | |||||||
>epd ( -- addr1 addr2 ) redirect to EPD >term ( addr1 addr2 -- ) terminate redirection |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Changed: | ||||||||
< < | image="/twiki/pub/MecrispCube/OledDisplay/oled-mecrisp-cube-header.jpg" | |||||||
> > | image="/twiki/pub/MecrispCube/EInkFeather/epd_header.jpg" | |||||||
title="E-Ink FeatherWing, E-Paper Display EPD" titlestyle="color:#F00000;" }% | ||||||||
Line: 13 to 13 | ||||||||
Code page 850![]() | ||||||||
Changed: | ||||||||
< < | ![]() | |||||||
> > | ![]() | |||||||
Line: 95 to 95 | ||||||||
Changed: | ||||||||
< < | ||||||||
> > | ||||||||
SSD1680 Driver | ||||||||
Changed: | ||||||||
< < | One byte display memory contains 8 pixels. Logical 0 is black, logical 1 is white. Least significant bit is first pixel. | |||||||
> > | One byte display memory contains 8 pixels. Logical 0 is black, logical 1 is white. Most significant bit is first pixel. | |||||||
250 x 122 | ||||||||
Line: 175 to 175 | ||||||||
-- ![]() ![]() This work by Peter Schmid is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. \ No newline at end of file | ||||||||
Added: | ||||||||
> > |
|
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
%DASHBOARD{ section="banner" | ||||||||
Line: 100 to 100 | ||||||||
SSD1680 Driver | ||||||||
Changed: | ||||||||
< < | One byte display memory contains 8 pixels. Logical 0 is black, logical 1 is white. | |||||||
> > | One byte display memory contains 8 pixels. Logical 0 is black, logical 1 is white. Least significant bit is first pixel. | |||||||
250 x 122 | ||||||||
Line: 157 to 157 | ||||||||
| ||||||||
Added: | ||||||||
> > | Graphics File Formats
| |||||||
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
Changed: | ||||||||
< < | E-Ink FeatherWing, E-Paper Display EPD | |||||||
> > |
E-Ink FeatherWing, E-Paper Display EPD
Intro
The Adafruit 2.13" EPD display #4195 has a 250x122 resolution (there are others e.g. 1.54" 200x200, 2.9" 296x128), that's enough for about 15 lines and 40 characters.
Driver epd.c
![]() ![]() ![]() ![]() EPD and SPI Wordsepd-emit works like the standard word emit . It blocks the calling thread, as long as the character is not written to the EPD display. Horizontal (x) position is in pixel (0 to 249), vertical position (y) is in lines, a line consists of 8 pixels. Larger fonts takes more than one line.
epd-emit ( Char -- ) Emits a character (writes a character to the EPD framebuffer) epd-emit? ( -- Flag ) EPD ready to get a character (SPI not busy) hook-emit ( -- a-addr ) Hooks for redirecting terminal IO on the fly hook-emit? ( -- a-addr ) epdpos! ( x y -- ) Set EPD cursor position, x horizontal position, for 6x8 font max. (250 / 6) -1, depends on the font's x size y vertical position (a line consists of 8 pixels), max. 14 for 255x122. epdpos@ ( -- x y ) Get the current EPD cursor position epdupdate ( -- ) Update the display (copy the framebuffer to the display) epdpartial ( x1 y1 x2 y2 -- ) Partial update the display epdcmd ( c-addr -- ) Send command to the EPD controller SSD1680. First byte contains the length of the command. epdclr ( -- ) Clears the EPD display, sets the cursor to 0, 0 epdfont ( u -- ) Select the font, u: 0 6x8, 1 8x8, 2 8X16 , 3 12X16 >epd ( -- addr1 addr2 ) redirect to EPD >term ( addr1 addr2 -- ) terminate redirection UsageIt is easy to redirect the terminal output to the EPD display, to use the string formatting words.: epd-hallo ( -- ) hook-emit @ \ save emit hook ['] epd-emit hook-emit ! \ redirect terminal to epd-emit ." Hallo Velo! " cr ." ciao" epdupdate hook-emit ! \ restore old hook ;or even simpler : epd-hallo ( -- ) >epd \ redirect terminal to epd-emit ." Hallo Velo! " cr ." ciao" epdupdate >term \ terminate redirection ;or on a command line >epd .( Hallo Velo!) epdupdate >termshow date and time on EPD (see CmsisRtos#How_to_use_Tasks for a background task). : clock ( -- ) epdclr 3 epdfont -1 -1 -1 alarm! \ set an alarm every second begin wait-alarm \ wait a second 0 0 epdpos! >epd epdpos@ .time epdpos@ epdpart >term key? until key drop ; | |||||||
Changed: | ||||||||
< < |
DriverSSD1675 | |||||||
> > | SSD1680 Driver | |||||||
Changed: | ||||||||
< < | SSD1680 | |||||||
> > | Driver SW | |||||||
Changed: | ||||||||
< < | -- ![]() | |||||||
> > | Other EPDs with SSD1680
| |||||||
Changed: | ||||||||
< < | Comments | |||||||
> > | -- ![]() | |||||||
Deleted: | ||||||||
< < | ||||||||
\ No newline at end of file | ||||||||
Added: | ||||||||
> > | ![]() This work by Peter Schmid is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
Changed: | ||||||||
< < | E-Ink FeatherWing | |||||||
> > | E-Ink FeatherWing, E-Paper Display EPD | |||||||
|
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
E-Ink FeatherWing | ||||||||
Line: 13 to 13 | ||||||||
SSD1680 | ||||||||
Added: | ||||||||
> > | ||||||||
-- ![]() |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
E-Ink FeatherWing | ||||||||
Line: 8 to 8 | ||||||||
Driver | ||||||||
Changed: | ||||||||
< < | SSD1675 | |||||||
> > | SSD1675 | |||||||
Changed: | ||||||||
< < | SSD1680 | |||||||
> > | SSD1680 | |||||||
-- ![]() |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Added: | ||||||||
> > |
E-Ink FeatherWing
DriverSSD1675 SSD1680 --![]() Comments |