A demo program for the uVGAII board using the mbed cookbook 4DGL library in 640 by 480 VGA mode

Dependencies:   4DGL mbed

/media/uploads/4180_1/uvgaii.jpg
The uVGA II board from 4D Systems

The uVGA II from 4D Systems is a low-cost VGA controller on a breakout board. The existing mbed cookbook 4D SGC library can be used with a couple minor patches for 640 by 480 resolution. They are also available from Sparkfun. They were recently updated/replaced with the newer uVGA III board.

Here is a uVGA II demo program to try:

Import programuVGAII_demo

A demo program for the uVGAII board using the mbed cookbook 4DGL library in 640 by 480 VGA mode


Here is the wiring for the demo program:

mbeduVGA II
5V=VU5V
GndGnd
TX=P9RX
RX=P10TX
P11Reset

uVGAIIpins

In the drawing above, the pins are labeled from the mbed's perspective with TX and RX pins already swapped. So mbed TX goes to the middle pin on the connector which is the uVGA II RX pin.

Just plug in any VGA monitor to the DB15 connector and watch the display.

/media/uploads/4180_1/uvgaii_demo.jpg
mbed uVGA II demo program output on a VGA monitor in 640 by 480 mode.


Use the demo code as an initial starting point to develop your own display code. The module starts in 320 by 240 graphics mode and a special display command in main.cpp, “ecran.display_control(0x0c, 0x01);” is sent to switch to 640 by 480 mode in the demo code before sending any text and graphics data to the display. The 4DGL library *.h file, TFT_4GL.h, has a SIZE_X and SIZE_Y #define that should be edited and set to the number of pixels in the display, after you have a copy of the library in your local directory. The demo code segment for the text and graphics calls is shown below:

Demo_Graphics_Calls

    ecran.background_color(DGREY);
    ecran.circle(120, 160, 80, 0xFF00FF);
    ecran.triangle(120, 100, 40, 300, 200, 270, 0x0000FF);
    ecran.line(0, 0, 239, 319, 0xFF0000);
    ecran.rectangle(50, 50, 200, 90, 0x00FF00);
    ecran.ellipse(100, 250, 80, 30, 0xFFFF00);
    ecran.pixel(120, 160, BLACK);
    ecran.read_pixel(120, 170);
    ecran.screen_copy(50, 50, 200, 200, 100, 100);
    ecran.pen_size(WIREFRAME);
    ecran.circle(120, 160, 60, BLACK);
    ecran.set_font(FONT_8X8);
    ecran.text_mode(TRANSPARENT);
    ecran.text_char('B', 9, 8, BLACK);
    ecran.text_char('I',10, 8, BLACK);
    ecran.text_char('G',11, 8, BLACK);
    ecran.graphic_char('G', 120, 120, BLACK, 4, 4);
    ecran.text_string("This is a test of string", 2, 12, FONT_8X8, WHITE);
    ecran.graphic_string("This is a test of graphic string", 20, 200, FONT_8X8, WHITE, 2, 2);
    ecran.text_button("OK", UP, 40, 260, 0xFF0000, FONT_8X8, BLACK, 2, 2);



Just about any VGA monitor will work. If you don't have a second monitor, you might have another input source on your PC monitor that you could use. If you plan to buy a monitor, there are a number of nice small VGA monitors (7 to 12 inch) with a touch screen that are sold in the car aftermarket for use in in-car PCs that should work well with this VGA board on mbed projects.

Xenarc
A 7 inch VGA monitor with USB touch input and speakers.

mp3Car has a large assortment of small touch screen LCDs such as this 7 inch LED LCD model 705TSV from Xenarc seen above. A number of them have standard VGA inputs and even internal speakers. This Xenarc monitor runs around $225. Touch input still costs a bit extra, but it is nice to have. The touch screen data typically is sent out over a USB port, so that would take some additional work to use with mbed. At least they seem to have some info on it in this manual. These monitors are so small that they probably need to be attached to something to use the touch input or they move. The uVGA II module does not include code to read a touch screen input, so an mbed interface and driver software would be needed to support touch

Committer:
4180_1
Date:
Fri Feb 25 01:59:37 2011 +0000
Revision:
1:38ef731c7bdf
Parent:
0:cfcf73272647

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 0:cfcf73272647 1 //
4180_1 0:cfcf73272647 2 // TFT_4DGL is a class to drive 4D Systems TFT touch screens
4180_1 0:cfcf73272647 3 //
4180_1 0:cfcf73272647 4 // Copyright (C) <2010> Stephane ROCHON <stephane.rochon at free.fr>
4180_1 0:cfcf73272647 5 //
4180_1 0:cfcf73272647 6 // TFT_4DGL is free software: you can redistribute it and/or modify
4180_1 0:cfcf73272647 7 // it under the terms of the GNU General Public License as published by
4180_1 0:cfcf73272647 8 // the Free Software Foundation, either version 3 of the License, or
4180_1 0:cfcf73272647 9 // (at your option) any later version.
4180_1 0:cfcf73272647 10 //
4180_1 0:cfcf73272647 11 // TFT_4DGL is distributed in the hope that it will be useful,
4180_1 0:cfcf73272647 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
4180_1 0:cfcf73272647 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4180_1 0:cfcf73272647 14 // GNU General Public License for more details.
4180_1 0:cfcf73272647 15 //
4180_1 0:cfcf73272647 16 // You should have received a copy of the GNU General Public License
4180_1 0:cfcf73272647 17 // along with TFT_4DGL. If not, see <http://www.gnu.org/licenses/>.
4180_1 0:cfcf73272647 18
4180_1 0:cfcf73272647 19 #include "mbed.h"
4180_1 0:cfcf73272647 20 #include "TFT_4DGL.h"
4180_1 0:cfcf73272647 21
4180_1 1:38ef731c7bdf 22 // overwrite 4DGL library screen size settings in TFT_4DGL.h
4180_1 1:38ef731c7bdf 23 #define SIZE_X 479
4180_1 1:38ef731c7bdf 24 #define SIZE_Y 639
4180_1 1:38ef731c7bdf 25 //
4180_1 1:38ef731c7bdf 26
4180_1 0:cfcf73272647 27 TFT_4DGL ecran(p9,p10,p11); // serial tx, serial rx, reset pin;
4180_1 0:cfcf73272647 28
4180_1 0:cfcf73272647 29 int main() {
4180_1 1:38ef731c7bdf 30 // char s[500];
4180_1 1:38ef731c7bdf 31 // int x = 0, y = 0, status, xc = 0, yc = 0;
4180_1 1:38ef731c7bdf 32
4180_1 0:cfcf73272647 33 ecran.baudrate(115200);
4180_1 1:38ef731c7bdf 34 // added - Set Display to 640 by 480 mode
4180_1 1:38ef731c7bdf 35 ecran.display_control(0x0c, 0x01);
4180_1 1:38ef731c7bdf 36 //
4180_1 0:cfcf73272647 37 ecran.background_color(DGREY);
4180_1 0:cfcf73272647 38 ecran.circle(120, 160, 80, 0xFF00FF);
4180_1 0:cfcf73272647 39 ecran.triangle(120, 100, 40, 300, 200, 270, 0x0000FF);
4180_1 0:cfcf73272647 40 ecran.line(0, 0, 239, 319, 0xFF0000);
4180_1 0:cfcf73272647 41 ecran.rectangle(50, 50, 200, 90, 0x00FF00);
4180_1 0:cfcf73272647 42 ecran.ellipse(100, 250, 80, 30, 0xFFFF00);
4180_1 0:cfcf73272647 43 ecran.pixel(120, 160, BLACK);
4180_1 0:cfcf73272647 44 ecran.read_pixel(120, 170);
4180_1 0:cfcf73272647 45 ecran.screen_copy(50, 50, 200, 200, 100, 100);
4180_1 0:cfcf73272647 46 ecran.pen_size(WIREFRAME);
4180_1 0:cfcf73272647 47 ecran.circle(120, 160, 60, BLACK);
4180_1 0:cfcf73272647 48 ecran.set_font(FONT_8X8);
4180_1 0:cfcf73272647 49 ecran.text_mode(TRANSPARENT);
4180_1 0:cfcf73272647 50 ecran.text_char('B', 9, 8, BLACK);
4180_1 0:cfcf73272647 51 ecran.text_char('I',10, 8, BLACK);
4180_1 0:cfcf73272647 52 ecran.text_char('G',11, 8, BLACK);
4180_1 0:cfcf73272647 53 ecran.graphic_char('G', 120, 120, BLACK, 4, 4);
4180_1 0:cfcf73272647 54 ecran.text_string("This is a test of string", 2, 12, FONT_8X8, WHITE);
4180_1 0:cfcf73272647 55 ecran.graphic_string("This is a test of graphic string", 20, 200, FONT_8X8, WHITE, 2, 2);
4180_1 0:cfcf73272647 56 ecran.text_button("OK", UP, 40, 260, 0xFF0000, FONT_8X8, BLACK, 2, 2);
4180_1 0:cfcf73272647 57
4180_1 1:38ef731c7bdf 58 // delete touch screen demo - no touch on uVGA II
4180_1 1:38ef731c7bdf 59
4180_1 0:cfcf73272647 60 }