Difference: EInkFeather (1 vs. 24)

Revision 242023-01-18 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 264 to 264
  $ convert image.png -separate -monochrome -rotate 90 -flop -negate image.xbm
Added:
>
>
convert image36 -shave 2x2 image32
 

Revision 232023-01-17 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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

 

Revision 222022-11-26 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 118 to 118
 
  • Adafruit 2.13" Monochrome eInk / ePaper Display FeatherWing - 250x122 Monochrome with SSD1680 4195
  • Adafruit eInk Feather Friend with 32KB SRAM 4446
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 or YES Optolectronics use the red color memory for the partial update, about 300 ms and no flickering at all. Is Adafruit using the GDEY0213B74 (or GDEY0213B72, GDEY0213B73) https://www.good-display.com/product/391.html for its display?
 Schematics

SDCS microSD CS D10

Revision 212022-11-25 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 110 to 110
 ;
Added:
>
>

Adafruit EInk Feather Board

  • Adafruit 2.13" Monochrome eInk / ePaper Display FeatherWing - 250x122 Monochrome with SSD1680 4195
  • Adafruit eInk Feather Friend with 32KB SRAM 4446

Schematics

SDCS microSD CS D10
SRCS RAM CS NC
ECS EPD CS D9
RESET EPD Reset D13
DC EPD Data/Command D11
BUSY EPD Busy D12 -> A4

MOSI SPI Master Out D4
MISO SPI Master In D3
CLK SPI Clock D2

A Button SW1 D9
B Button SW2 D6
C Button SW3 D5

LED1 LED1 D12
 

Revision 202022-11-10 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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

Revision 192022-11-10 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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 ;

Revision 182022-10-14 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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
 

Revision 172022-10-13 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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

 

Revision 162022-10-13 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 215 to 215
 ImageMagick


Changed:
<
<
$ magick -rotate 90 image.png image.pbm
>
>
$ magick -rotate 90 -flip image.png image.pbm
 

Revision 152022-10-12 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 209 to 209
 08080808080888700000
Changed:
<
<
ImageMagick
>
>

ImageMagick

ImageMagick

$ magick -rotate 90 image.png image.pbm
 

Revision 142022-09-26 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 21 to 21
 

EPD and SPI Words

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)

Revision 132022-09-25 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 160 to 160
 
Added:
>
>
 

Other EPDs with SSD1680

Line: 207 to 209
 08080808080888700000
Changed:
<
<
pngtopam
>
>
ImageMagick
 

Revision 122022-09-15 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 207 to 207
 08080808080888700000
Added:
>
>
pngtopam
 

Revision 112022-09-15 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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:
<
<
  • Portable BitMap, binary P4 and ASCII P1 variant
>
>
  • Portable BitMap, binary P4 and ASCII P1 variant
 
Changed:
<
<
  • X PixMap (XPM), usable in C-Files
>
>
  • X PixMap (XPM), usable in C-Files
 
Changed:
<
<
  • X BitMap (XBM), plain text binary in C .h
>
>
  • X BitMap (XBM), plain text binary in C .h
 
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
 

Revision 102022-08-21 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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

Revision 92022-08-15 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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

Revision 82022-08-14 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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:
<
<
Code page 850, 9x14
>
>
Code page 850, 9x14
 
Line: 95 to 95
 

Changed:
<
<

Links

>
>

Driver, Links

 

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
 -- Peter Schmid - 2022-08-02

Creative Commons License
This work by Peter Schmid is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. \ No newline at end of file

Added:
>
>
META FILEATTACHMENT attachment="epd_header.jpg" attr="" comment="" date="1660510689" name="epd_header.jpg" path="epd_header.jpg" size="39660" user="PeterSchmid" version="1"

Revision 72022-08-14 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%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

 

Revision 62022-08-14 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
%DASHBOARD{ section="banner"
Line: 100 to 100
 

SSD1680 Driver

Added:
>
>
One byte display memory contains 8 pixels. Logical 0 is black, logical 1 is white.

250 x 122

  Gate Y                                
Source X 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15                         112 113 114 115 116 117 118 119 120 121
Byte 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1 ..
  2 ..
    ..
  249 ..

Portrait

  • 122 columns * 31 1/4 rows
  • resolution 122 * 250
  • 20 * 31 chars (8*6 chars)

  Row Gate Y++          
Column     0 1 2 ... 121
Source X++     0 0 0 ... 121
Source Byte     0.0 0.1 0.2 ... 15.1
  0 0..7          
  1 8..15          
  2 16..23          
  .. ..          
  31 249..250          

Landscape

  • 250 columns * 15 1/4 rows
  • resolution 250 * 122
  • 41 * 15 chars (8*6 chars)

  Row Source X++          
Column     0 1 2 ... 249
Gate Y--     249 248 247 ... 0
  0 0..7          
  1 8..15          
  2 16..23          
  .. ..          
  15 120..121          
 

Driver SW

Revision 52022-08-02 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
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, fonts from https://www.mikrocontroller.net/topic/54860.

Code page 850

Code page 850, 9x14

EPD and SPI Words

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     ( 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

Usage

It 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 >term 

show 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
;

Links

 
Changed:
<
<

Driver

SSD1675

>
>

SSD1680 Driver

 
Changed:
<
<

SSD1680

>
>

Driver SW

 
Changed:
<
<
-- Peter Schmid - 2021-12-25
>
>

Other EPDs with SSD1680

 
Changed:
<
<

Comments

>
>
-- Peter Schmid - 2022-08-02
 
Deleted:
<
<
<--/commentPlugin-->
 \ No newline at end of file
Added:
>
>
Creative Commons License
This work by Peter Schmid is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Revision 42022-08-02 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"
Changed:
<
<

E-Ink FeatherWing

>
>

E-Ink FeatherWing, E-Paper Display EPD

 

Revision 32022-04-30 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"

E-Ink FeatherWing

Line: 13 to 13
 

SSD1680

Added:
>
>
  -- Peter Schmid - 2021-12-25

Revision 22022-04-30 - PeterSchmid

Line: 1 to 1
 
META TOPICPARENT name="WebHome"

E-Ink FeatherWing

Line: 8 to 8
 

Driver

Changed:
<
<
SSD1675
>
>

SSD1675

 
Changed:
<
<
SSD1680
>
>

SSD1680

  -- Peter Schmid - 2021-12-25

Revision 12021-12-25 - PeterSchmid

Line: 1 to 1
Added:
>
>
META TOPICPARENT name="WebHome"

E-Ink FeatherWing

Driver

SSD1675

SSD1680

-- Peter Schmid - 2021-12-25

Comments

<--/commentPlugin-->
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback