Thursday, October 30, 2014

Interfacing a color TFT display with the PIC32MX250F128B

I have been working on interfacing the PIC32MX250F128B with a small 2.2" TFT display from Adafruit. It's a nice little display that is fairly easy to communicate with, using SPI communication. The display I'm using is:

Adafruit provides nice open-source libraries for their products. However, they are for Arduino and thus cannot be directly reused for the PIC32. I went through the library and ported it over for the PIC32, in C. I have attached my project file as a .zip file and you can download it to go through the library header and source files, as well as the demo code. I've tried heavily commenting the code so that it is self-explanatory.

As far as hardware goes, with the demo code, the pin connections for the display are:

BL (backlight): I left it unconnected, but you can connect it to 3.3V for backlight.
SCK: connected to RB14 on the PIC
MISO: left unconnected, since I'm not reading anything from the screen
MOSI: connected to RB11 on the PIC
CS: connected to RB1 on the PIC
SDCS: left unconnected as I'm not using the microSD card for this
RST: connected to RB2 on the PIC
D/C: connected to RB0 on the PIC
VIN: connected to 3.3V supply
GND: connected to gnd

The pins I used are defined in the code and you can easily change them as required.

I used my custom proto-board for testing on a breadboard. You can find details here:

Here's a video showing the PIC32 running the demo code and doing some simple graphics on the screen. You can see that it runs fairly quickly and quite smoothly.

Project files with all source and header files:

If you have any comments, questions or suggestions, do let me know!


  1. Hi, please can you help me to realize project which is : solid state Marx-Bank generator :
    I have the program of PIC but i found difficulties in linking command circuit with power circuit , you do a great favor please,

  2. I went to buy the 2.2" TFT you used but it was sold out, so I got their 320x480 3.5" display instead. I further modified your code to build a pic32mx250 driver for the bigger display. This blog was super helpful in figuring out how to use the TFT, so thanks!

    TFT purchase link:
    3.5" TFT driver code:

  3. in the video i noticed you have capacitors and such that you don't say about, are they necessary because i what to use this in my project but i what to know what you say in the description is what you did in the video (is it for a 3.3V power supply).

    1. The only required circuitry for the interface are the point-to-point connections from the PIC32 to the LCD. The capacitors are there as bypass/filter caps for the 3.3V supply.

  4. sir, tahmid, can u please guide me to design true r.m.s voltmeter? please send me helping material @

  5. Very nicely done.

    One question though. How did you decide on the SPI frequency of 20MHz? Was it by experimentation?

    The datasheet for the Adafruit display shows an SCL (serial clock cycle write twc) minimum of 100ns which corresponds to a frequency of 10MHz. Did you find by experiment that it works even at 20MHz?