UCTronics 3.2″ TFT LCD Arduino Shield with Touchscreen

I’ve been looking for a way to add a touchscreen UI to my projects.  To this end, I purchased a UCTronics 3.2″ TFT LCD Arduino Shield.  Most of the cheap TFT touchscreens that I found need about 38 pins, and therefore, need to interface with an Arduino Mega.  What makes this UCTronics shield unique is that it uses an onboard latch to convert the onboard SSD1289 TFT driver data bus from 16-bits to 8-bits.  This allows it to connect to an Arduino Duemilanove or UNO.  The board I received is a RevB board, and it looks somewhat different from the board pictured in the UCTronics product description.  The resistive touch panel on top of the TFT very similar to the touch panel used in the Nintendo DS.  Below is the board running UTFT’s demo:

front

Here is a bottom view of the shield:

shield

At right is the integrated micro SD card reader, which is handy for storing bitmap data to load into the screen.

Below is the UTouch button demo sketch:

btndemo

I was able to operate the buttons by pressing firmly with my fingers.

At first, I was disappointed by the bitmap display.  This is the output of the UTFT_Read_BMP demo sketch supplied by UCTronics:

bmp

I modified UCTronic’s modified UTFT library to display .raw files generated by UTFT’s ImageConverter 565, and got this output:

ade

It actually looks a lot better than the photo above.  The photo contains screening and moire patterns that you don’t see with the naked eye.  To create a RAW file, first create a 240×320 pixel jpg,png, or GIF file.  Run in through either imageconverter565.exe or the online ImageConverter 565 make sure to select Convert to .raw file and Target Platform Arduino (AVR).

Below is my dispRaw() function for displaying .raw files:

void UTFT::dispRaw(File inFile)
{
char VH,VL;
int i,j = 0;
cbi(P_CS, B_CS);
for(i = 0; i < 320; i++)
for(j = 0; j < 240; j++)
{
VL = inFile.read();
VH = inFile.read();
LCD_Write_DATA(VL,VH);
}
sbi(P_CS, B_CS);
clrXY();
}

It takes about 6 seconds to load a fullscreen RAW file. I’m not sure if the bottleneck is the SD or the display itself. Clearing the screen takes almost 1 second. The speed is acceptable when running UTFT_Demo_240x320.  This is board is no speed demon, but the speed seems adequate for implementing a graphic touchscreen control panel. If you need a fast display, look elsewhere.

There are 9 Comments to "UCTronics 3.2″ TFT LCD Arduino Shield with Touchscreen"

  • Nick says:

    Hello!

    I got used to working with the TFT LCD shield v.1 and now i just received a REV. B shield. Do you happen to have a user guide for it? I see that the pin definitions have changed and i am very frustrated with this. I can’t find any info on the net.

    If you happen to know the pin defs please share

    Thanks

  • Bitflops says:

    Good’day lincomatic,

    Thank you for posting your experience with the 3.2 TFT Display around here. I’m sort of passing by and am very temted to ask a question about displaying a bmp on the display. The libraries seem to work wto some extend with this revision B and I also got the utouch library working and the calibration sketch. All in all it seems to work. Did you have strait foreward sucess with the bmp displaying? I used a 320×240 bitmap but don’t get anything properly. I’m using the arduino uno and have set the controller to SSD1289 in the sketch which doesn’t make things better. Trying with different resolutions…hmm still nothing but random unclear pixels. I tried to include the dispRaw() function in the .h and .ccp files and to great pain I still get fuzzy pixels that don’t represetn much of the original image. Have you made any adaptations to the library for the UTFT_Read_bmp sketch to work out fine?

    Greetings,
    Rob

    • Bitflops says:

      The problem is solved by trying and loads of time, the key is just to now that the image on the SD card has to be in portrait orientation and if a Bitmap is used it needs to be in 16-bit color depth. How to know.:-).

      Kind regards,

      • lincomatic says:

        Sorry it took me so long to reply! I just answered your original question! For some strange reason, WordPress stopped notifying me of pending comments.

    • lincomatic says:

      If you want to display BMP’s they need to be 320×240 16-bit format. However, they will look horrible. If you want to use my dispRaw() function, you need to run a 320×240 BMP through the imageconverter565

  • JESUS says:

    Hello,
    Hello,

    Recently, I bought a 3.2″ TFT LCD with card shield for Arduino and , but this shield is rev. B ,and this revision is different that the other versions, so I had to download the UTFT library for the graphic library, and the ArduCam Touch for the Touch library. The LCD is working fine with the UTFT library, I´m able to draw, write, etc, but the touch library is not working correctly,the LCD detects when I touch the screen, but I´m not able to get the (x,y) coordinates, also I checked and the ArduCAm Touch library only uses 2 pins for the touch feature. Can you please help me to get the (x,y) coordinates? Can I use the UTouch library for this shield rev.B(this library uses 5 pins for touch feature)?
    Comment:I’m using Arduino Mega 2560 for programming the LCD with Shield
    Best Regards

    • lincomatic says:

      Yes, I used UTouch. Just use these lines

      UTFT myGLCD(ITDB32S,A1,A2,A0,A3); // Remember to change the model parameter to suit your display module!
      UTouch myTouch(13,10,11,12,9);

      to initialize it in UTouch_ButtonTest.pde (Warning, I tested with a Deumilanove/UNO.. not sure if the pins change on the Mega .. they shouldn’t).
      Why are you using this shield with a Mega? It’s modified to work with the lower pin count of the Deumilanove/UNO … you could get better performance
      by using a 16-bit shield instead.

Write a Comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>