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 Aug 06 14:50:48 2016 +0000
Revision:
15:ab07c064c952
Parent:
14:07b3f223d9ba
Child:
16:231837aa2c37
Update to latest libraries and test with both 480x272 and 800x480 screens.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 0:037b95a5cc85 1
WiredHome 15:ab07c064c952 2 #include "mbed.h" // v122
WiredHome 15:ab07c064c952 3 #include "RA8875.h" // v125
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 15:ab07c064c952 11 // These two defines can be enabled, or commented out
WiredHome 15:ab07c064c952 12 //#define BIG_SCREEN
WiredHome 15:ab07c064c952 13 //#define CAP_TOUCH
WiredHome 15:ab07c064c952 14 #define LCD_C 16 // color - bits per pixel
WiredHome 15:ab07c064c952 15
WiredHome 15:ab07c064c952 16 #ifdef CAP_TOUCH
WiredHome 15:ab07c064c952 17 RA8875 lcd(p5, p6, p7, p12, NC, p9,p10,p13, "tft"); // MOSI,MISO,SCK,/ChipSelect,/reset, SDA,SCL,/IRQ, name
WiredHome 15:ab07c064c952 18 #else
WiredHome 15:ab07c064c952 19 RA8875 lcd(p5, p6, p7, p12, NC, "tft"); //MOSI, MISO, SCK, /ChipSelect, /reset, name
WiredHome 15:ab07c064c952 20 LocalFileSystem local("local"); // access to calibration file for resistive touch.
WiredHome 15:ab07c064c952 21 #endif
WiredHome 15:ab07c064c952 22
WiredHome 15:ab07c064c952 23 #ifdef BIG_SCREEN
WiredHome 15:ab07c064c952 24 #define LCD_W 800
WiredHome 15:ab07c064c952 25 #define LCD_H 480
WiredHome 15:ab07c064c952 26 #else
WiredHome 15:ab07c064c952 27 #define LCD_W 480
WiredHome 15:ab07c064c952 28 #define LCD_H 272
WiredHome 15:ab07c064c952 29 #endif
WiredHome 15:ab07c064c952 30
WiredHome 5:bb970d40cd7d 31 Serial pc(USBTX, USBRX); // And a little feedback
WiredHome 13:43cc0a997c53 32 Timer measurement;
WiredHome 0:037b95a5cc85 33
WiredHome 0:037b95a5cc85 34 int main()
WiredHome 0:037b95a5cc85 35 {
WiredHome 5:bb970d40cd7d 36 pc.baud(460800); // I like a snappy terminal, so crank it up!
WiredHome 5:bb970d40cd7d 37 pc.printf("\r\nRA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 2:2076d9cc6db9 38
WiredHome 13:43cc0a997c53 39 measurement.start();
WiredHome 15:ab07c064c952 40 lcd.init(LCD_W, LCD_H, LCD_C);
WiredHome 15:ab07c064c952 41 lcd.Backlight(0.5f);
WiredHome 15:ab07c064c952 42
WiredHome 6:8e392d0ff74a 43 // **************************
WiredHome 9:02c622fa4969 44 //RunTestSet(lcd, pc); // If the library was compiled for test mode...
WiredHome 6:8e392d0ff74a 45
WiredHome 9:02c622fa4969 46 lcd.foreground(RGB(255,255,0));
WiredHome 5:bb970d40cd7d 47 lcd.puts(0,0, "RA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 0:037b95a5cc85 48
WiredHome 5:bb970d40cd7d 49 lcd.SelectUserFont(Dave_Smart18x32);
WiredHome 5:bb970d40cd7d 50 lcd.puts("**** ! Soft Fonts ! **** 0123456789\r\n");
WiredHome 5:bb970d40cd7d 51 lcd.puts("ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 9:02c622fa4969 52 //lcd.puts("abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 5:bb970d40cd7d 53 lcd.SelectUserFont();
WiredHome 5:bb970d40cd7d 54 lcd.puts("Back to normal\r\n");
WiredHome 5:bb970d40cd7d 55 lcd.SelectUserFont(BPG_Arial08x08);
WiredHome 5:bb970d40cd7d 56 lcd.puts("BPG_Arial08x08 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 9:02c622fa4969 57 //lcd.puts("BPG_Arial08x08 abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 5:bb970d40cd7d 58 lcd.SelectUserFont(BPG_Arial10x10);
WiredHome 5:bb970d40cd7d 59 lcd.puts("BPG_Arial10x10 ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n");
WiredHome 9:02c622fa4969 60 //lcd.puts("BPG_Arial10x10 abcdefghijklmnopqrstuvwxyz\r\n");
WiredHome 5:bb970d40cd7d 61 lcd.SelectUserFont(BPG_Arial20x20);
WiredHome 9:02c622fa4969 62 lcd.puts("BPG_Arial20x20 ");
WiredHome 5:bb970d40cd7d 63 lcd.SelectUserFont(BPG_Arial31x32);
WiredHome 9:02c622fa4969 64 lcd.puts("BPG_Arial31x32\r\n");
WiredHome 5:bb970d40cd7d 65 lcd.SelectUserFont(BPG_Arial63x63);
WiredHome 9:02c622fa4969 66 lcd.puts("BPG_Arial63x63");
WiredHome 13:43cc0a997c53 67 pc.printf("Time trial completed in %d uSec\r\n", measurement.read_us());
WiredHome 5:bb970d40cd7d 68
WiredHome 9:02c622fa4969 69 pc.printf("PrintScreen activated ...\r\n");
WiredHome 5:bb970d40cd7d 70 RetCode_t r = lcd.PrintScreen(0,0,480,272,"/local/file.bmp");
WiredHome 5:bb970d40cd7d 71 pc.printf(" PrintScreen returned %d\r\n", r);
WiredHome 3:ca6a1026c28e 72
WiredHome 3:ca6a1026c28e 73 while(1) {
WiredHome 5:bb970d40cd7d 74 ; // end
WiredHome 3:ca6a1026c28e 75 }
WiredHome 0:037b95a5cc85 76 }