Skip to content

Files

Latest commit

 

History

History
 
 

spi03

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
See the top level README for information on where to find the
schematic and programmers reference manual for the ARM processor
on the raspberry pi.  Also find information on how to load and run
these programs.

See the top level README for information on how to connect the raspi
uart to your host computer.

This example uses the spi interface with a Nokia 5110 display, these
are probably all recycled from old phones, who knows.  There seems
to be a large quantity of the out there.

https://www.sparkfun.com/products/10168
http://www.adafruit.com/products/338

I got 5 of them on ebay for $13 with pins.

Perhaps some soldering is required, in some way you need to hook up
the signals.  Note both above and below the display you might have a
row of pins on your board.  They are probably the same and you probably
only need to hook up to one of the two.  Also note that the metal frame
has a thick side and the rest are thin, that thick side is normally the
TOP of the display or at least for this example it is.  You will note
in the sparkfun and adafruit photos their examples also have the thick
side up.

I use these, but bought the 100 pack

https://www.sparkfun.com/products/10898

F/F means Female/Female both ends are female which is what you want
if you have a row of pins on yours.

Raspberry Pi signals of interest, all on the P1 connector

alt function 0 for these
GPIO8  SPI0_CE0_N  P1-24
GPIO10 SPI0_MOSI   P1-19
GPIO11 SPI0_SCLK   P1-23

these are set gpio outputs
GPIO7  SPI0_CE1_N  P1-26
GPIO25 GPIO_GEN6   P1-22

power and ground
+3V3               P1-1
GND                P1-25

Now the sparkfun and adafruit and ebay special dont have the same
pinout, the same signals are there but not necessarily in the same
order.  So this chart is not necessarily in the same pin order as your
display.  The names may not exactly match either...

Nokia 5110 to raspi

GND                P1-25    ground
VCC                P1-1     power
DIN (MOSI)         P1-19    data in, spi mosi
SCK/CLK            P1-23    spi clock
D/C                P1-22    data/command
RST                P1-26    reset
CS/CE              P1-24    spi chip select

Your board may have a row of pins above and below the display, they
are the same you only need one row.

The various examples out there use the same init routine.

    spi_command(0x21); //extended commands/horiz addressing/chip active
    spi_command(0xB0); //vop
    spi_command(0x04); //temp coef
    spi_command(0x14); //bias mode 1:48
    spi_command(0x20); //extended off/horizontal addressing, chip active
    spi_command(0x0C); //display on

So that set for horizontal addressing.  The display I bought on ebay
said 84x84 but it is really 84x48 pixels, obviously a typo or maybe
trying to sucker me in.  Doesnt matter wasnt holding my breath for a
bigger display.  First lets set the address pointer to the top left

    spi_command(0x80); //column left
    spi_command(0x40); //row    top

then if we just blast some bytes out start with a smaller number

    for(ra=0;ra<32;ra++) spi_data(ra);

you will see they swipe across the top left to right.  Each 8 bits
draws a column with those 8 bits with the lsbit being on the top, this
is also shown in the PCD8544 controller document that describes how
to program this thing.

and if you say write 100 bytes then after the 84th byte it
drops down and writes the next 8 rows of pixels and so on.
so 84*48 = 4032 pixels  4032 / 8 = 504 so if we write 504
bytes in theory we cover the screen.

    for(ra=0;ra<504;ra++) spi_data(ra);

and that does work.

so call it dumb luck or divine intervention or whatever the font
data orientation from my prior spi02 example happens to already be
lined up just right for this example...Didnt have to flip or rotate
or anything.  A little experimenting here:

    spi_command(0x80); //column
    spi_command(0x40); //row
    for(ra=0;ra<10;ra++)
    {
        for(rb=0;rb<8;rb++) spi_data(fontdata[ra][rb]);
    }
    show_string(1,"Hello");
    show_string(2,"World");

and that all works the characters are drawn in rows...