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:
Sun Aug 06 13:40:24 2017 +0000
Revision:
16:231837aa2c37
Parent:
15:ab07c064c952
Child:
17:c8ef96a6e43b
Updates verified with mbed v128, RA8875 v148

Who changed what in which revision?

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