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. 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)
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, 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

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.

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. Bit 0 on top
epdcolumn@   ( -- u )           Read a column (8 pixels) from the current position

>epd         ( -- addr1 addr2 ) redirect to EPD *)
>term        ( addr1 addr2 -- ) terminate redirection *)

*) part of redirection.fs

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
;

Driver, Links

SSD1680 Driver

One byte display memory contains 8 pixels. Logical 0 is black, logical 1 is white. Most significant bit is first pixel.

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

Other EPDs with SSD1680

Graphics File Formats

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

ImageMagick

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

Topic attachments
I Attachment History Action Size Date Who Comment
JPEGjpg epd_header.jpg r1 manage 38.7 K 2022-08-14 - 20:58 PeterSchmid  
Edit | Attach | Watch | Print version | History: r14 < r13 < r12 < r11 < r10 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r14 - 2022-09-26 - PeterSchmid
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2022 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback