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 Mar 05 19:24:18 2016 +0000
Revision:
13:43cc0a997c53
Parent:
12:e8a127d78000
Child:
14:07b3f223d9ba
Updated libs and tested both 8 and 16-bpp.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 0:037b95a5cc85 1
WiredHome 13:43cc0a997c53 2 #include "mbed.h" // v115
WiredHome 13:43cc0a997c53 3 #include "RA8875.h" // v107
WiredHome 5:bb970d40cd7d 4 #include "MyFont18x32.h"
WiredHome 5:bb970d40cd7d 5 #include "BPG_Arial08x08.h"
WiredHome 5:bb970d40cd7d 6 #include "BPG_Arial10x10.h"
WiredHome 5:bb970d40cd7d 7 #include "BPG_Arial20x20.h"
WiredHome 5:bb970d40cd7d 8 #include "BPG_Arial31x32.h"
WiredHome 5:bb970d40cd7d 9 #include "BPG_Arial63x63.h"
WiredHome 0:037b95a5cc85 10
WiredHome 5:bb970d40cd7d 11 LocalFileSystem local("local"); // Because I want <PrintScreen>
WiredHome 5:bb970d40cd7d 12 Serial pc(USBTX, USBRX); // And a little feedback
WiredHome 13:43cc0a997c53 13 Timer measurement;
WiredHome 0:037b95a5cc85 14
WiredHome 0:037b95a5cc85 15 int main()
WiredHome 0:037b95a5cc85 16 {
WiredHome 5:bb970d40cd7d 17 RA8875 lcd(p5, p6, p7, p12, NC, "tft"); // MOSI, MISO, SCK, /ChipSelect, /reset, name
WiredHome 2:2076d9cc6db9 18
WiredHome 5:bb970d40cd7d 19 pc.baud(460800); // I like a snappy terminal, so crank it up!
WiredHome 5:bb970d40cd7d 20 pc.printf("\r\nRA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 2:2076d9cc6db9 21
WiredHome 13:43cc0a997c53 22 measurement.start();
WiredHome 13:43cc0a997c53 23 lcd.init(480,272,16);
WiredHome 6:8e392d0ff74a 24
WiredHome 6:8e392d0ff74a 25 // **************************
WiredHome 9:02c622fa4969 26 //RunTestSet(lcd, pc); // If the library was compiled for test mode...
WiredHome 6:8e392d0ff74a 27
WiredHome 9:02c622fa4969 28 lcd.foreground(RGB(255,255,0));
WiredHome 5:bb970d40cd7d 29 lcd.puts(0,0, "RA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 0:037b95a5cc85 30
WiredHome 5:bb970d40cd7d 31 lcd.SelectUserFont(Dave_Smart18x32);
WiredHome 5:bb970d40cd7d 32 lcd.puts("**** ! Soft Fonts ! **** 0123456789\r\n");
WiredHome 5:bb970d40cd7d 33 lcd.puts("ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 9:02c622fa4969 34 //lcd.puts("abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 5:bb970d40cd7d 35 lcd.SelectUserFont();
WiredHome 5:bb970d40cd7d 36 lcd.puts("Back to normal\r\n");
WiredHome 5:bb970d40cd7d 37 lcd.SelectUserFont(BPG_Arial08x08);
WiredHome 5:bb970d40cd7d 38 lcd.puts("BPG_Arial08x08 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 9:02c622fa4969 39 //lcd.puts("BPG_Arial08x08 abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 5:bb970d40cd7d 40 lcd.SelectUserFont(BPG_Arial10x10);
WiredHome 5:bb970d40cd7d 41 lcd.puts("BPG_Arial10x10 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 9:02c622fa4969 42 //lcd.puts("BPG_Arial10x10 abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 5:bb970d40cd7d 43 lcd.SelectUserFont(BPG_Arial20x20);
WiredHome 9:02c622fa4969 44 lcd.puts("BPG_Arial20x20 ");
WiredHome 5:bb970d40cd7d 45 lcd.SelectUserFont(BPG_Arial31x32);
WiredHome 9:02c622fa4969 46 lcd.puts("BPG_Arial31x32\r\n");
WiredHome 5:bb970d40cd7d 47 lcd.SelectUserFont(BPG_Arial63x63);
WiredHome 9:02c622fa4969 48 lcd.puts("BPG_Arial63x63");
WiredHome 13:43cc0a997c53 49 pc.printf("Time trial completed in %d uSec\r\n", measurement.read_us());
WiredHome 5:bb970d40cd7d 50
WiredHome 9:02c622fa4969 51 pc.printf("PrintScreen activated ...\r\n");
WiredHome 5:bb970d40cd7d 52 RetCode_t r = lcd.PrintScreen(0,0,480,272,"/local/file.bmp");
WiredHome 5:bb970d40cd7d 53 pc.printf(" PrintScreen returned %d\r\n", r);
WiredHome 3:ca6a1026c28e 54
WiredHome 3:ca6a1026c28e 55 while(1) {
WiredHome 5:bb970d40cd7d 56 ; // end
WiredHome 3:ca6a1026c28e 57 }
WiredHome 0:037b95a5cc85 58 }