Simple demo for the Raio RA8875 Based Display with a 4-wire SPI interface.

Dependencies:   mbed RA8875

RA8875 Based Display Controller

This page shows a simple demo program for a graphics library supporting a low cost display from buydisplay.com. While the module can be configured for support via I2C, 3-Wire SPI, 4-Wire SPI, 8-bit Parallel or 16-bit Parallel, the companion library only supports the 4-Wire SPI.

You can also find this display on the Components | RA8875 page.

Library

RA8875 Library

Display Pictures

While this image is sharp, the camera/lighting washed out the colors somewhat. /media/uploads/WiredHome/ra8875display.640x380.png

With careful study of the image below, you can see a number of solder-blob jumpers. These jumpers are described quite well in the manual, and configure the many different options. The specific unit shown here is the "entry point" model, it does not have touchscreen, SD card, extra Font memory, or the key pad interface. As you see in the top left, it is wired with an 8-signal ribbon cable (but note in the schematic that it only needs 6 as the two power and two ground are internally connected together in the module).

/media/uploads/WiredHome/ra8875displaymodulerr.jpg

Also note, that some configuration changes go beyond the jumpers. I decided to switch my configuration to 4-Wire SPI and had to remove R1, R2, and R3 (which were zero-ohm that shorted the SPI input pins to +v!). I also changed some of the solder-blob jumpers, but that was easy. Had I ordered the display with the support for 4-Wire SPI, that would not have been necessary.

Schematic

The library should be able to work with any SPI port, and the Chip Select pin is a simple DigitalOut pin, chosen from the unused pins on my baseboard.

/media/uploads/WiredHome/ra8875_display_schematic.png

Sample Program

#include "mbed.h"
#include "RA8875.h"

Serial pc(USBTX, USBRX);

int main()
{
    pc.baud(460800);    // I like a snappy terminal, so crank it up!
    pc.printf("\r\nRA8875 Test - Build " __DATE__ " " __TIME__ "\r\n");

    RA8875 lcd(p5, p6, p7, p12, NC, "tft");    // MOSI, MISO, SCK, /ChipSelect, /reset, name

    lcd.puts(0,0,
        "RA8875 lcd(p5, p6, p7, p12, NC, \"tft\");\r\n\r\n"
        "lcd.circle(       400,25,  25,  BrightRed);\r\n"
        "lcd.fillcircle(   400,25,  15,  RGB(128,255,128));\r\n"
        "lcd.ellipse(      440,75,  35,20, BrightBlue);\r\n"
        "lcd.fillellipse(  440,75,  25,10, Blue);\r\n"
        "lcd.triangle(     440,100, 475,110, 450,125, Magenta);\r\n"
        "lcd.filltriangle( 445,105, 467,111, 452,120, Cyan);\r\n"
        "lcd.rect(         400,130, 475,155,    Brown);\r\n"
        "lcd.fillrect(     405,135, 470,150,    Pink);\r\n"
        "lcd.roundrect(    410,160, 475,190, 10,8, Yellow);\r\n"
        "lcd.fillroundrect(415,165, 470,185,  5,3, Orange);\r\n"
        "lcd.line(         430,200, 460,230, RGB(0,255,0));\r\n"
        "for (i=0; i<=30; i+=5)\r\n"
        "    lcd.pixel(435+i,200+i, White);");

    lcd.circle(       400,25,  25,               BrightRed);
    lcd.fillcircle(   400,25,  15,               RGB(128,255,128));
    lcd.ellipse(      440,75,  35,20,            BrightBlue);
    lcd.fillellipse(  440,75,  25,10,            Blue);
    lcd.triangle(     440,100, 475,110, 450,125, Magenta);
    lcd.filltriangle( 445,105, 467,111, 452,120, Cyan);
    lcd.rect(         400,130, 475,155,          Brown);
    lcd.fillrect(     405,135, 470,150,          Pink);
    lcd.roundrect(    410,160, 475,190, 10,8,    Yellow);
    lcd.fillroundrect(415,165, 470,185,  5,3,    Orange);
    lcd.line(         430,200, 460,230,          RGB(0,255,0));
    for (i=0; i<=30; i+=5) 
        lcd.pixel(435+i,200+i, White);
    while (1)
        ;
}
Committer:
WiredHome
Date:
Sat Jan 23 17:48:06 2016 +0000
Revision:
11:2fcc3ee75ebd
Parent:
6:8e392d0ff74a
update libs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 11:2fcc3ee75ebd 1 #include "mbed.h" // v112
WiredHome 11:2fcc3ee75ebd 2 #include "RA8875.h" // v102
WiredHome 5:bb970d40cd7d 3 #include "MyFont18x32.h"
WiredHome 5:bb970d40cd7d 4 #include "BPG_Arial08x08.h"
WiredHome 5:bb970d40cd7d 5 #include "BPG_Arial10x10.h"
WiredHome 5:bb970d40cd7d 6 #include "BPG_Arial20x20.h"
WiredHome 5:bb970d40cd7d 7 #include "BPG_Arial31x32.h"
WiredHome 5:bb970d40cd7d 8 #include "BPG_Arial63x63.h"
WiredHome 0:037b95a5cc85 9
WiredHome 5:bb970d40cd7d 10 LocalFileSystem local("local"); // Because I want <PrintScreen>
WiredHome 5:bb970d40cd7d 11 Serial pc(USBTX, USBRX); // And a little feedback
WiredHome 0:037b95a5cc85 12
WiredHome 0:037b95a5cc85 13 int main()
WiredHome 0:037b95a5cc85 14 {
WiredHome 5:bb970d40cd7d 15 RA8875 lcd(p5, p6, p7, p12, NC, "tft"); // MOSI, MISO, SCK, /ChipSelect, /reset, name
WiredHome 2:2076d9cc6db9 16
WiredHome 5:bb970d40cd7d 17 pc.baud(460800); // I like a snappy terminal, so crank it up!
WiredHome 5:bb970d40cd7d 18 pc.printf("\r\nRA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 2:2076d9cc6db9 19
WiredHome 3:ca6a1026c28e 20 lcd.init();
WiredHome 6:8e392d0ff74a 21
WiredHome 6:8e392d0ff74a 22
WiredHome 6:8e392d0ff74a 23 // **************************
WiredHome 6:8e392d0ff74a 24 //RunTestSet(lcd, pc);
WiredHome 6:8e392d0ff74a 25
WiredHome 6:8e392d0ff74a 26
WiredHome 5:bb970d40cd7d 27 lcd.foreground(BrightBlue);
WiredHome 5:bb970d40cd7d 28 lcd.puts(0,0, "RA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 0:037b95a5cc85 29
WiredHome 5:bb970d40cd7d 30 lcd.SelectUserFont(Dave_Smart18x32);
WiredHome 5:bb970d40cd7d 31 lcd.puts("**** ! Soft Fonts ! **** 0123456789\r\n");
WiredHome 5:bb970d40cd7d 32 lcd.puts("ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 5:bb970d40cd7d 33 lcd.puts("abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 5:bb970d40cd7d 34 lcd.SelectUserFont();
WiredHome 5:bb970d40cd7d 35 lcd.puts("Back to normal\r\n");
WiredHome 5:bb970d40cd7d 36 lcd.SelectUserFont(BPG_Arial08x08);
WiredHome 5:bb970d40cd7d 37 lcd.puts("BPG_Arial08x08 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 11:2fcc3ee75ebd 38 lcd.puts("BPG_Arial08x08 abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 11:2fcc3ee75ebd 39 wait(3);
WiredHome 11:2fcc3ee75ebd 40
WiredHome 5:bb970d40cd7d 41 lcd.SelectUserFont(BPG_Arial10x10);
WiredHome 5:bb970d40cd7d 42 lcd.puts("BPG_Arial10x10 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 5:bb970d40cd7d 43 lcd.puts("BPG_Arial10x10 abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 11:2fcc3ee75ebd 44 wait(3);
WiredHome 11:2fcc3ee75ebd 45
WiredHome 5:bb970d40cd7d 46 lcd.SelectUserFont(BPG_Arial20x20);
WiredHome 11:2fcc3ee75ebd 47 lcd.puts("BPG_Arial20x20 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 11:2fcc3ee75ebd 48
WiredHome 11:2fcc3ee75ebd 49 wait(3);
WiredHome 5:bb970d40cd7d 50 lcd.SelectUserFont(BPG_Arial31x32);
WiredHome 11:2fcc3ee75ebd 51 lcd.puts("BPG_Arial31x32 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 11:2fcc3ee75ebd 52
WiredHome 11:2fcc3ee75ebd 53 wait(3);
WiredHome 5:bb970d40cd7d 54 lcd.SelectUserFont(BPG_Arial63x63);
WiredHome 11:2fcc3ee75ebd 55 lcd.puts("BPG_Arial63x63 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 5:bb970d40cd7d 56
WiredHome 11:2fcc3ee75ebd 57 wait(6);
WiredHome 11:2fcc3ee75ebd 58 lcd.cls();
WiredHome 11:2fcc3ee75ebd 59 lcd.SelectUserFont(BPG_Arial31x32);
WiredHome 11:2fcc3ee75ebd 60 lcd.puts("BPG_Arial31x32 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789\r\n");
WiredHome 11:2fcc3ee75ebd 61 lcd.puts("BPG_Arial31x32 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 11:2fcc3ee75ebd 62
WiredHome 11:2fcc3ee75ebd 63 //RetCode_t r = lcd.PrintScreen(0,0,480,272,"/local/file.bmp");
WiredHome 11:2fcc3ee75ebd 64 //pc.printf(" PrintScreen returned %d\r\n", r);
WiredHome 3:ca6a1026c28e 65
WiredHome 3:ca6a1026c28e 66 while(1) {
WiredHome 5:bb970d40cd7d 67 ; // end
WiredHome 3:ca6a1026c28e 68 }
WiredHome 0:037b95a5cc85 69 }