white lines on a tft display free sample

When I try to print a green horizontal line segment on rows 0 or 1 using either draw line functions I get a white line instead. I tried with the colors red and blue and they seem to work. Also, when drawing a rect to cover the whole screen it does work properly. Is it possible that I received a faulty display?

I tried changing the defitinitions ins user_setup.h, but the problem still persists. The configuration that worked best using other demo codes was #define ST7735_REDTAB.

white lines on a tft display free sample

In this article, you will learn how to use TFT LCDs by Arduino boards. From basic commands to professional designs and technics are all explained here.

In electronic’s projects, creating an interface between user and system is very important. This interface could be created by displaying useful data, a menu, and ease of access. A beautiful design is also very important.

There are several components to achieve this. LEDs,  7-segments, Character and Graphic displays, and full-color TFT LCDs. The right component for your projects depends on the amount of data to be displayed, type of user interaction, and processor capacity.

TFT LCD is a variant of a liquid-crystal display (LCD) that uses thin-film-transistor (TFT) technology to improve image qualities such as addressability and contrast. A TFT LCD is an active matrix LCD, in contrast to passive matrix LCDs or simple, direct-driven LCDs with a few segments.

In Arduino-based projects, the processor frequency is low. So it is not possible to display complex, high definition images and high-speed motions. Therefore, full-color TFT LCDs can only be used to display simple data and commands.

In this article, we have used libraries and advanced technics to display data, charts, menu, etc. with a professional design. This can move your project presentation to a higher level.

In electronic’s projects, creating an interface between user and system is very important. This interface could be created by displaying useful data, a menu, and ease of access. A beautiful design is also very important.

There are several components to achieve this. LEDs,  7-segments, Character and Graphic displays, and full-color TFT LCDs. The right component for your projects depends on the amount of data to be displayed, type of user interaction, and processor capacity.

TFT LCD is a variant of a liquid-crystal display (LCD) that uses thin-film-transistor (TFT) technology to improve image qualities such as addressability and contrast. A TFT LCD is an active matrix LCD, in contrast to passive matrix LCDs or simple, direct-driven LCDs with a few segments.

In Arduino-based projects, the processor frequency is low. So it is not possible to display complex, high definition images and high-speed motions. Therefore, full-color TFT LCDs can only be used to display simple data and commands.

In this article, we have used libraries and advanced technics to display data, charts, menu, etc. with a professional design. This can move your project presentation to a higher level.

Size of displays affects your project parameters. Bigger Display is not always better. if you want to display high-resolution images and signs, you should choose a big size display with higher resolution. But it decreases the speed of your processing, needs more space and also needs more current to run.

After choosing the right display, It’s time to choose the right controller. If you want to display characters, tests, numbers and static images and the speed of display is not important, the Atmega328 Arduino boards (such as Arduino UNO) are a proper choice. If the size of your code is big, The UNO board may not be enough. You can use Arduino Mega2560 instead. And if you want to show high resolution images and motions with high speed, you should use the ARM core Arduino boards such as Arduino DUE.

In electronics/computer hardware a display driver is usually a semiconductor integrated circuit (but may alternatively comprise a state machine made of discrete logic and other components) which provides an interface function between a microprocessor, microcontroller, ASIC or general-purpose peripheral interface and a particular type of display device, e.g. LCD, LED, OLED, ePaper, CRT, Vacuum fluorescent or Nixie.

The display driver will typically accept commands and data using an industry-standard general-purpose serial or parallel interface, such as TTL, CMOS, RS232, SPI, I2C, etc. and generate signals with suitable voltage, current, timing and demultiplexing to make the display show the desired text or image.

The LCDs manufacturers use different drivers in their products. Some of them are more popular and some of them are very unknown. To run your display easily, you should use Arduino LCDs libraries and add them to your code. Otherwise running the display may be very difficult. There are many free libraries you can find on the internet but the important point about the libraries is their compatibility with the LCD’s driver. The driver of your LCD must be known by your library. In this article, we use the Adafruit GFX library and MCUFRIEND KBV library and example codes. You can download them from the following links.

You must add the library and then upload the code. If it is the first time you run an Arduino board, don’t worry. Just follow these steps:Go to www.arduino.cc/en/Main/Software and download the software of your OS. Install the IDE software as instructed.

By these two functions, You can find out the resolution of the display. Just add them to the code and put the outputs in a uint16_t variable. Then read it from the Serial port by Serial.println(); . First add Serial.begin(9600); in setup().

First you should convert your image to hex code. Download the software from the following link. if you don’t want to change the settings of the software, you must invert the color of the image and make the image horizontally mirrored and rotate it 90 degrees counterclockwise. Now add it to the software and convert it. Open the exported file and copy the hex code to Arduino IDE. x and y are locations of the image. sx and sy are sizes of image. you can change the color of the image in the last input.

Upload your image and download the converted file that the UTFT libraries can process. Now copy the hex code to Arduino IDE. x and y are locations of the image. sx and sy are size of the image.

In this template, We just used a string and 8 filled circles that change their colors in order. To draw circles around a static point ,You can use sin();  and cos(); functions. you should define the PI number . To change colors, you can use color565(); function and replace your RGB code.

In this template, We converted a .jpg image to .c file and added to the code, wrote a string and used the fade code to display. Then we used scroll code to move the screen left. Download the .h file and add it to the folder of the Arduino sketch.

In this template, We used sin(); and cos(); functions to draw Arcs with our desired thickness and displayed number by text printing function. Then we converted an image to hex code and added them to the code and displayed the image by bitmap function. Then we used draw lines function to change the style of the image. Download the .h file and add it to the folder of the Arduino sketch.

In this template, We created a function which accepts numbers as input and displays them as a pie chart. We just use draw arc and filled circle functions.

In this template, We added a converted image to code and then used two black and white arcs to create the pointer of volumes.  Download the .h file and add it to the folder of the Arduino sketch.

In this template, We added a converted image and use the arc and print function to create this gauge.  Download the .h file and add it to folder of the Arduino sketch.

while (a < b) { Serial.println(a); j = 80 * (sin(PI * a / 2000)); i = 80 * (cos(PI * a / 2000)); j2 = 50 * (sin(PI * a / 2000)); i2 = 50 * (cos(PI * a / 2000)); tft.drawLine(i2 + 235, j2 + 169, i + 235, j + 169, tft.color565(0, 255, 255)); tft.fillRect(200, 153, 75, 33, 0x0000); tft.setTextSize(3); tft.setTextColor(0xffff); if ((a/20)>99)

while (b < a) { j = 80 * (sin(PI * a / 2000)); i = 80 * (cos(PI * a / 2000)); j2 = 50 * (sin(PI * a / 2000)); i2 = 50 * (cos(PI * a / 2000)); tft.drawLine(i2 + 235, j2 + 169, i + 235, j + 169, tft.color565(0, 0, 0)); tft.fillRect(200, 153, 75, 33, 0x0000); tft.setTextSize(3); tft.setTextColor(0xffff); if ((a/20)>99)

In this template, We display simple images one after each other very fast by bitmap function. So you can make your animation by this trick.  Download the .h file and add it to folder of the Arduino sketch.

In this template, We just display some images by RGBbitmap and bitmap functions. Just make a code for touchscreen and use this template.  Download the .h file and add it to folder of the Arduino sketch.

The speed of playing all the GIF files are edited and we made them faster or slower for better understanding. The speed of motions depends on the speed of your processor or type of code or size and thickness of elements in the code.

white lines on a tft display free sample

This is the final version, I have refurbished the example sketches, and now work fine with Arduino UNO and Arduino MEGA, including the SD card reader.

I include a new version of SD library developed by ADAFRUIT (GitHub - adafruit/SD: fixes & updates to the Arduino SD library - totally in progress. works but in beta).

white lines on a tft display free sample

This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.

white lines on a tft display free sample

In this guide we’re going to show you how you can use the 1.8 TFT display with the Arduino. You’ll learn how to wire the display, write text, draw shapes and display images on the screen.

The 1.8 TFT is a colorful display with 128 x 160 color pixels. The display can load images from an SD card – it has an SD card slot at the back. The following figure shows the screen front and back view.

This module uses SPI communication – see the wiring below . To control the display we’ll use the TFT library, which is already included with Arduino IDE 1.0.5 and later.

The TFT display communicates with the Arduino via SPI communication, so you need to include the SPI library on your code. We also use the TFT library to write and draw on the display.

In which “Hello, World!” is the text you want to display and the (x, y) coordinate is the location where you want to start display text on the screen.

The 1.8 TFT display can load images from the SD card. To read from the SD card you use the SD library, already included in the Arduino IDE software. Follow the next steps to display an image on the display:

Note: some people find issues with this display when trying to read from the SD card. We don’t know why that happens. In fact, we tested a couple of times and it worked well, and then, when we were about to record to show you the final result, the display didn’t recognized the SD card anymore – we’re not sure if it’s a problem with the SD card holder that doesn’t establish a proper connection with the SD card. However, we are sure these instructions work, because we’ve tested them.

In this guide we’ve shown you how to use the 1.8 TFT display with the Arduino: display text, draw shapes and display images. You can easily add a nice visual interface to your projects using this display.

white lines on a tft display free sample

By these two functions, You can find out the resolution of the display. Just add them to the code and put the outputs in a uint16_t variable. Then read it from the Serial port by Serial.println();. First add Serial.begin(9600); in setup().

white lines on a tft display free sample

The ST7789 TFT module contains a display controller with the same name: ST7789. It’s a color display that uses SPI interface protocol and requires 3, 4 or 5 control pins, it’s low cost and easy to use. This display is an IPS display, it comes in different sizes (1.3″, 1.54″ …) but all of them should have the same resolution of 240×240 pixel, this means it has 57600 pixels. This module works with 3.3V only and it doesn’t support 5V (not 5V tolerant).

The ST7789 display module shown in project circuit diagram has 7 pins: (from right to left): GND (ground), VCC, SCL (serial clock), SDA (serial data), RES (reset), DC (or D/C: data/command) and BLK (back light).

As mentioned above, the ST7789 TFT display controller works with 3.3V only (power supply and control lines). The display module is supplied with 3.3V (between VCC and GND) which comes from the Arduino board.

To connect the Arduino to the display module, I used voltage divider for each line which means there are 4 voltage dividers. Each voltage divider consists of 2.2k and 3.3k resistors, this drops the 5V into 3V which is sufficient.

The first library is a driver for the ST7789 TFT display which can be installed from Arduino IDE library manager (Sketch —> Include Library —> Manage Libraries …, in the search box write “st7789” and install the one from Adafruit).

testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE);

testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ",ST77XX_WHITE);

white lines on a tft display free sample

In this Arduino touch screen tutorial we will learn how to use TFT LCD Touch Screen with Arduino. You can watch the following video or read the written tutorial below.

For this tutorial I composed three examples. The first example is distance measurement using ultrasonic sensor. The output from the sensor, or the distance is printed on the screen and using the touch screen we can select the units, either centimeters or inches.

The next example is controlling an RGB LED using these three RGB sliders. For example if we start to slide the blue slider, the LED will light up in blue and increase the light as we would go to the maximum value. So the sliders can move from 0 to 255 and with their combination we can set any color to the RGB LED,  but just keep in mind that the LED cannot represent the colors that much accurate.

The third example is a game. Actually it’s a replica of the popular Flappy Bird game for smartphones. We can play the game using the push button or even using the touch screen itself.

As an example I am using a 3.2” TFT Touch Screen in a combination with a TFT LCD Arduino Mega Shield. We need a shield because the TFT Touch screen works at 3.3V and the Arduino Mega outputs are 5 V. For the first example I have the HC-SR04 ultrasonic sensor, then for the second example an RGB LED with three resistors and a push button for the game example. Also I had to make a custom made pin header like this, by soldering pin headers and bend on of them so I could insert them in between the Arduino Board and the TFT Shield.

Here’s the circuit schematic. We will use the GND pin, the digital pins from 8 to 13, as well as the pin number 14. As the 5V pins are already used by the TFT Screen I will use the pin number 13 as VCC, by setting it right away high in the setup section of code.

As the code is a bit longer and for better understanding I will post the source code of the program in sections with description for each section. And at the end of this article I will post the complete source code.

I will use the UTFT and URTouch libraries made by Henning Karlsen. Here I would like to say thanks to him for the incredible work he has done. The libraries enable really easy use of the TFT Screens, and they work with many different TFT screens sizes, shields and controllers. You can download these libraries from his website, RinkyDinkElectronics.com and also find a lot of demo examples and detailed documentation of how to use them.

After we include the libraries we need to create UTFT and URTouch objects. The parameters of these objects depends on the model of the TFT Screen and Shield and these details can be also found in the documentation of the libraries.

Next we need to define the fonts that are coming with the libraries and also define some variables needed for the program. In the setup section we need to initiate the screen and the touch, define the pin modes for the connected sensor, the led and the button, and initially call the drawHomeSreen() custom function, which will draw the home screen of the program.

So now I will explain how we can make the home screen of the program. With the setBackColor() function we need to set the background color of the text, black one in our case. Then we need to set the color to white, set the big font and using the print() function, we will print the string “Arduino TFT Tutorial” at the center of the screen and 10 pixels  down the Y – Axis of the screen. Next we will set the color to red and draw the red line below the text. After that we need to set the color back to white, and print the two other strings, “by HowToMechatronics.com” using the small font and “Select Example” using the big font.

Next is the distance sensor button. First we need to set the color and then using the fillRoundRect() function we will draw the rounded rectangle. Then we will set the color back to white and using the drawRoundRect() function we will draw another rounded rectangle on top of the previous one, but this one will be without a fill so the overall appearance of the button looks like it has a frame. On top of the button we will print the text using the big font and the same background color as the fill of the button. The same procedure goes for the two other buttons.

Now we need to make the buttons functional so that when we press them they would send us to the appropriate example. In the setup section we set the character ‘0’ to the currentPage variable, which will indicate that we are at the home screen. So if that’s true, and if we press on the screen this if statement would become true and using these lines here we will get the X and Y coordinates where the screen has been pressed. If that’s the area that covers the first button we will call the drawDistanceSensor() custom function which will activate the distance sensor example. Also we will set the character ‘1’ to the variable currentPage which will indicate that we are at the first example. The drawFrame() custom function is used for highlighting the button when it’s pressed. The same procedure goes for the two other buttons.

drawDistanceSensor(); // It is called only once, because in the next iteration of the loop, this above if statement will be false so this funtion won"t be called. This function will draw the graphics of the first example.

getDistance(); // Gets distance from the sensor and this function is repeatedly called while we are at the first example in order to print the lasest results from the distance sensor

So the drawDistanceSensor() custom function needs to be called only once when the button is pressed in order to draw all the graphics of this example in similar way as we described for the home screen. However, the getDistance() custom function needs to be called repeatedly in order to print the latest results of the distance measured by the sensor.

Here’s that function which uses the ultrasonic sensor to calculate the distance and print the values with SevenSegNum font in green color, either in centimeters or inches. If you need more details how the ultrasonic sensor works you can check my particular tutorialfor that. Back in the loop section we can see what happens when we press the select unit buttons as well as the back button.

Ok next is the RGB LED Control example. If we press the second button, the drawLedControl() custom function will be called only once for drawing the graphic of that example and the setLedColor() custom function will be repeatedly called. In this function we use the touch screen to set the values of the 3 sliders from 0 to 255. With the if statements we confine the area of each slider and get the X value of the slider. So the values of the X coordinate of each slider are from 38 to 310 pixels and we need to map these values into values from 0 to 255 which will be used as a PWM signal for lighting up the LED. If you need more details how the RGB LED works you can check my particular tutorialfor that. The rest of the code in this custom function is for drawing the sliders. Back in the loop section we only have the back button which also turns off the LED when pressed.

In order the code to work and compile you will have to include an addition “.c” file in the same directory with the Arduino sketch. This file is for the third game example and it’s a bitmap of the bird. For more details how this part of the code work  you can check my particular tutorial. Here you can download that file:

drawDistanceSensor(); // It is called only once, because in the next iteration of the loop, this above if statement will be false so this funtion won"t be called. This function will draw the graphics of the first example.

getDistance(); // Gets distance from the sensor and this function is repeatedly called while we are at the first example in order to print the lasest results from the distance sensor

white lines on a tft display free sample

This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.

white lines on a tft display free sample

Let us start with the basics first; refresh the knowledge about TN and LCD displays in general, later we will talk about TFTs (Thin Film Transistors), how they differ from regular monochrome LCD displays. Then we will go on to the ghosting effect, so we will not only discuss the technology behind the construction of the TFT, but also some phenomena, like the ghosting effect, or grayscale inversion, that are important to understand when using an LCD TFT display.

Next, we will look at different technologies of the TFT LCD displays like TN, IPS, VA, and of course about transmissive and transflective LCD displays, because TFT displays also can be transmissive and transflective. In the last part we will talk about backlight.

Let us start with a short review of the most basic liquid crystal cell, which is the TN (twisted nematic) display. On the picture above, we can see that the light can be transmit through the cell or blocked by the liquid crystal cell using voltage. If you want to learn more about monochrome LCD displays and the basics of LCD displays, follow this link.

What is a TFT LCD display and how it is different from a monochrome LCD display? TFT is called an active display. Active, means we have one or more transistors in every cell, in every pixel and in every subpixel. TFT stands for Thin Film Transistor, transistors that are very small and very thin and are built into the pixel, so they are not somewhere outside in a controller, but they are in the pixel itself. For example, in a 55-inch TV set, the TFT display contains millions of transistors in the pixels. We do not see them, because they are very small and hidden, if we zoom in, however, we can see them in every corner of each pixel, like on the picture below.

On the picture above we can see subpixels, that are basic RGB (Red, Green, Blue) colors and a black part, with the transistors and electronic circuits. We just need to know that we have pixels, and subpixels, and each subpixel has transistors. This makes the display active, and thus is called  the TFT display. TFT displays are usually color displays, but there are also monochrome TFT displays, that are active, and have transistors, but have no colors. The colors in the TFT LCD display are typically added by color filters on each subpixel. Usually the filters are RGB, but we also have RGBW (Red, Green, Blue, White) LCD displays with added subpixels without the filter (White) to make the display brighter.

What is interesting, the white part of the RGB and RGBW screen will look exactly the same from a distance, because the lights are mixed and generate white light, but when we come closer to the screen, we will not see white light at all.

Going a little bit deeper, into the TFT cell, there is a part inside well known to us from the monochrome LCD display Riverdi University lecture. We have a cell, liquid crystal, polarizers, an ITO (Indium Tin Oxide) layer for the electrodes, and additionally an electronic circuit. Usually, the electronic circuit consists of one transistor and some capacitors to sustain the pixel state when we switch the pixel OFF and ON. In a TFT LCD display the pixels are much more complicated because apart from building the liquid crystal part, we also need to build an electronic part.

That is why TFT LCD display technologies are very expensive to manufacture. If you are familiar with electronics, you know that the transistor is a kind of switch, and it allows us to switch the pixel ON and OFF. Because it is built into the pixel itself, it can be done very quickly and be very well controlled. We can control the exact state of every pixel not only the ON and OFF states, but also all the states in between. We can switch the light of the cells ON and OFF in several steps. Usually for TFT LCD displays it will be 8-bit steps per color, so we have 256 steps of brightness for every color, and every subpixel. Because we have three subpixels, we have a 24-bit color range, that means over 16 million combinations, we can, at least theoretically, show on our TFT LCD display over 16 million distinct colors using RGB pixels.

Now that we know how the TFT LCD display works, we can now learn some practical things one of which is LCD TFT ghosting. We know how the image is created, but what happens when we have the image on the screen for a prolonged time, and how to prevent it. In LCD displays we have something called LCD ghosting. We do not see it very often, but in some displays this phenomenon still exists.

If some elements of the picture i.e., your company logo is in the same place of the screen for a long period of time, for couple of weeks, months or a year, the crystals will memorize the state and later, when we change the image, we may see some ghosting of those elements. It really depends on many conditions like temperature and even the screen image that we display on the screen for longer periods of time. When you build your application, you can use some techniques to avoid it, like very rapid contrast change and of course to avoid the positioning the same image in the same position for a longer time.

You may have seen this phenomenon already as it is common in every display technology, and even companies like Apple put information on their websites, that users may encounter this phenomenon and how to fix it. It is called image ghosting or image persistence, and even Retina displays are not free of it.

Another issue present in TFT displays, especially TN LCD displays, is grayscale inversion. This is a phenomenon that changes the colors of the screen according to the viewing angle, and it is only one-sided. When buying a TFT LCD display, first we need to check what kind of technology it is. If it is an IPS display, like the Riverdi IPS display line, then we do not need to worry about the grayscale inversion because all the viewing angles will be the same and all of them will be very high, like 80, 85, or 89 degrees. But if you buy a more common or older display technology type, like the TN (twisted nematic) display, you need to think where it will be used, because one viewing angle will be out. It may be sometimes confusing, and you need to be careful as most factories define viewing direction of the screen and mistake this with the greyscale inversion side.

On the picture above, you can see further explanation of the grayscale inversion from Wikipedia. It says that some early panels and also nowadays TN displays, have grayscale inversion not necessary up-down, but it can be any angle, you need to check in the datasheet. The reason technologies like IPS (In-Plane Switching), used in the latest Riverdi displays, or VA, were developed, was to avoid this phenomenon. Also, we do not want to brag, but the Wikipedia definition references our website.

We know already that TN (twisted nematic) displays, suffer from grayscale inversion, which means the display has one viewing side, where the image color suddenly changes. It is tricky, and you need to be careful. On the picture above there is a part of the LCD TFT specification of a TN (twisted nematic) display, that has grayscale inversion, and if we go to this table, we can see the viewing angles. They are defined at 70, 70, 60 and 70 degrees, that is the maximum viewing angle, at which the user can see the image. Normally we may think that 70 degrees is better, so we will choose left and right side to be 70 degrees, and then up and down, and if we do not know the grayscale inversion phenomena, we may put our user on the bottom side which is also 70 degrees. The viewing direction will be then like a 6 o’clock direction, so we call it a 6 o’clock display. But you need to be careful! Looking at the specification, we can see that this display was defined as a 12 o’clock display, so it is best for it to be seen from a 12 o’clock direction. But we can find that the 12 o’clock has a lower viewing angle – 60 degrees. What does it mean? It means that on this side there will be no grayscale inversion. If we go to 40, 50, 60 degrees and even a little bit more, probably we will still see the image properly. Maybe with lower contrast, but the colors will not change. If we go from the bottom, from a 6 o’clock direction where we have the grayscale inversion, after 70 degrees or lower we will see a sudden color change, and of course this is something we want to avoid.

To summarize, when you buy older technology like TN and displays, which are still very popular, and Riverdi is selling them as well, you need to be careful where you put your display. If it is a handheld device, you will see the display from the bottom, but if you put it on a wall, you will see the display from the top, so you need to define it during the design phase, because later it is usually impossible or expensive to change the direction.

We will talk now about the other TFT technologies, that allow us to have wider viewing angles and more vivid colors. The most basic technology for monochrome and TFT LCD displays is twisted nematic (TN). As we already know, this kind of displays have a problem with grayscale inversion. On one side we have a higher retardation and will not get a clear image. That is why we have other technologies like VA (Vertical Alignment), where the liquid crystal is differently organized, and another variation of the TFT technology – IPS which is In-Plane Switching. The VA and IPS LCD displays do not have a problem with the viewing angles, you can see a clear image from all sides.

Nowadays all TV sets, tablets and of course mobile phones are IPS or VA. You can turn them around and see the image clear from all sides. But, for monitor applications the TN technology is still widely used, because the monitor usually is in front of you and most of the time you look directly at it, from top, left or right side, but very rarely from the bottom, so the grayscale inversion viewing angle can be placed there. This technology still is very practical because it is affordable and has some advantages for gamers because it is very fast.

Apart from the different organization of the liquid crystals, we also organize subpixels a little bit differently in a VA and IPS LCD displays. When we look closer at the TN display, we will just see the subpixels with color filters. If we look at the VA or IPS display they will have subpixels of subpixels. The subpixels are divided into smaller parts. In this way we can achieve even wider viewing angles and better colors for the user, but of course, it is more complicated and more expensive to do.

The picture above presents the TN display and grayscale inversion. For IPS or VA technology there is no such effect. The picture will be the same from all the sides we look so these technologies are popular where we need wide viewing angles, and TN is popular where we don’t need that, like in monitors. Other advantages of IPS LCD displays are they give accurate colors, and wide viewing angles. What is also important in practice, in our projects, is that the IPS LCD displays are less susceptible to mechanical force. When we apply mechanical force to the screen, and have an optically bonded touch screen, we push the display as well as squeeze the cells. When we have a TN display, every push on the cell changes the image suddenly, with the IPS LCD displays with in-plane switching, different liquid crystals organization, this effect is lesser. It is not completely removed but it is much less distinct. That is another reason IPS displays are very popular for smartphones, tablets, when we have the touchscreens usually optically bonded.

If we wanted to talk about disadvantages, there is a question mark over it, as some of them may be true, some of them do not rely on real cases, what kind of display, what kind of technology is it. Sometimes the IPS displays can have higher power consumption than others, in many cases however, not. They can be more expensive, but not necessarily. The new IPS panels can cost like TN panels, but IPS panels definitely have a longer response time. Again, it is not a rule, you can make IPS panels that are very fast, faster than TN panels, but if you want the fastest possible display, probably the TN panel will be the fastest. That is why the TN technology is still popular on the gaming market. Of course, you can find a lot of discussions on the internet, which technology is better, but it really depends on what you want to achieve.

Now, let us look at the backlight types. As we see here, on the picture above, we have four distinct types of backlight possible. The most common, 95 or 99 per cent of the TFT LCD displays on the market are the transmissive LCD display type, where we need the backlight from the back. If you remember from our Monochrome LCD Displays lecture, for transmissive LCD displays you need the backlight to be always on. If you switch the backlight off, you will not see anything. The same as for monochrome LCD displays, but less popular for TFT displays, we have the transflective LCD display type. They are not popular because usually for transflective TFT displays, the colors lack in brightness, and the displays are not very practical to use. You can see the screen, but the application is limited. Some transflective LCD displays are used by military, in applications where power consumption is paramount; where you can switch the backlight off and you agree to have lower image quality but still see the image. Power consumption and saving energy is most important in some kind of applications and you can use transflective LCD displays there. The reflective type of LCD displays are almost never used in TFT. There is one technology called Low Power Reflective Displays (LPRD) that is used in TFT but it is not popular. Lastly, we have a variation of reflective displays with frontlight, where we add frontlight to the reflective display and have the image even without external light.

Just a few words about Low Power Reflective Displays (LPRD). This kind of display uses environmental light, ambient light to reflect, and produce some colors. The colors are not perfect, not perfectly clear, but this technology is becoming increasingly popular because it allows to have color displays in battery powered applications. For example, a smartwatch would be a case for that technology, or an electrical bike or scooter, where we can not only have a standard monochrome LCD display but also a TFT LCD color display without the backlight; we can see the image even in

You have app. 15% of the article left. That content is exclusive for our Riverdi University members only. Please fill out the Riverdi University Membership form below and join our community!

strong sunlight and not need backlight at all. So, this kind of TFL LCD display technology is getting more and more popular when we have outdoor LCD displays and need a low power consumption.

On the picture above, we have some examples of how transmissive and reflective LCD displays work in the sunlight. If we have a simple image, like a black and white pattern, then on a transmissive LCD display, even with 1000 candela brightness, the image probably will be lower quality than for a reflective LCD display; if we have sunlight, we have very strong light reflections on the surface of the screen. We have talked about contrast in more detail in the lecture Sunlight Readable Displays. So, reflective LCD displays are a better solution for outdoor applications than transmissive LCD displays, where you need a really strong backlight, 1000 candela or more, to be really seen outdoors.

To show you how the backlight of LCD displays is built, we took the picture above. You can see the edge backlight there, where we have LEDs here on the small PCB on the edge, and we have a diffuser that distributes the light to the whole surface of LCD screen.

In addition to the backlight, we have something that is called a frontlight. It is similar to backlight, it also uses the LEDs to put the light into it, but the frontlight needs to be transparent as we have the display behind. On the example on the picture above we can see an e-paper display. The e-paper display is also a TFT display variation, but it is not LCD (liquid crystal), it is a different technology, but the back of the display is the same and it is reflective. The example you see is the Kindle 4 eBook reader. It uses an e-paper display and a frontlight as well, so you can read eBooks even during the night.

Please remember to SUBSCRIBE to our YouTube channel and fill out the MEMBERSHIP FORM, to be informed about our Riverdi University materials and live events!

I agree to the Riverdi Sp. z o.o Terms & Conditions and Privacy Policy. I also agree to receive emails from Riverdi Sp. z o.o and I understand that I may opt out of Riverdi Sp. z o.o subscriptions at any time.

white lines on a tft display free sample

Hi guys, welcome to today’s tutorial. Today, we will look on how to use the 1.8″ ST7735  colored TFT display with Arduino. The past few tutorials have been focused on how to use the Nokia 5110 LCD display extensively but there will be a time when we will need to use a colored display or something bigger with additional features, that’s where the 1.8″ ST7735 TFT display comes in.

The ST7735 TFT display is a 1.8″ display with a resolution of 128×160 pixels and can display a wide range of colors ( full 18-bit color, 262,144 shades!). The display uses the SPI protocol for communication and has its own pixel-addressable frame buffer which means it can be used with all kinds of microcontroller and you only need 4 i/o pins. To complement the display, it also comes with an SD card slot on which colored bitmaps can be loaded and easily displayed on the screen.

The schematics for this project is fairly easy as the only thing we will be connecting to the Arduino is the display. Connect the display to the Arduino as shown in the schematics below.

Due to variation in display pin out from different manufacturers and for clarity, the pin connection between the Arduino and the TFT display is mapped out below:

We will use two libraries from Adafruit to help us easily communicate with the LCD. The libraries include the Adafruit GFX library which can be downloaded here and the Adafruit ST7735 Library which can be downloaded here.

We will use two example sketches to demonstrate the use of the ST7735 TFT display. The first example is the lightweight TFT Display text example sketch from the Adafruit TFT examples. It can be accessed by going to examples -> TFT -> Arduino -> TFTDisplaytext. This example displays the analog value of pin A0 on the display. It is one of the easiest examples that can be used to demonstrate the ability of this display.

The second example is the graphics test example from the more capable and heavier Adafruit ST7735 Arduino library. I will explain this particular example as it features the use of the display for diverse purposes including the display of text and “animated” graphics. With the Adafruit ST7735 library installed, this example can be accessed by going to examples -> Adafruit ST7735 library -> graphics test.

The first thing, as usual, is to include the libraries to be used after which we declare the pins on the Arduino to which our LCD pins are connected to. We also make a slight change to the code setting reset pin as pin 8 and DC pin as pin 9 to match our schematics.

Next, we create an object of the library with the pins to which the LCD is connected on the Arduino as parameters. There are two options for this, feel free to choose the most preferred.

Next, we move to the void setup function where we initialize the screen and call different test functions to display certain texts or images.  These functions can be edited to display what you want based on your project needs.

testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE);

All the functions called under the void setup function, perform different functions, some draw lines, some, boxes and text with different font, color and size and they can all be edited to do what your project needs.

The complete code for this is available under the libraries example on the Arduino IDE. Don’t forget to change the DC and the RESET pin configuration in the code to match the schematics.

Uploading the code to the Arduino board brings a flash of different shapes and text with different colors on the display. I captured one and its shown in the image below.

That’s it for this tutorial guys, what interesting thing are you going to build with this display? Let’s get the conversation started. Feel free to reach me via the comment section if you have any questions as regards this project.

white lines on a tft display free sample

The wide range of conditions over which LCD monitors are used means that it is desirable to produce displays whose luminance (brightness) can be altered to match both bright and dim environments. This allows a user to set the screen to a comfortable level of brightness depending on their working conditions and ambient lighting. Manufacturers will normally quote a maximum brightness figure in their display specification, but it is also important to consider the lower range of adjustments possible from the screen as you would probably never want to use it at its highest setting. Indeed with specs often ranging up to 500 cd/m2, you will certainly need to use the screen at something a little less harsh on the eyes. As a reminder, we test the full range of backlight adjustments and the corresponding brightness values during each of our reviews. During our calibration process as well we try to adjust the screen to a setting of 120 cd/m2 which is considered the recommended luminance for an LCD monitor in normal lighting conditions. This process helps to give you an idea of what adjustments you need to make to the screen in order to return a luminance which you might actually want to use day to day.

Changing the display luminance is achieved by reducing the total light output for both CCFL- and LED-based backlights. By far the most prevalent technique for dimming the backlight is called Pulse Width Modulation (PWM), which has been in use for many years in desktop and laptop displays. However, this technique is not without some issues and the introduction of displays with high brightness levels and the popularisation of LED backlights has made the side-effects of PWM more visible than before, and in some cases may be a source of visible flicker, eyestrain, eye fatigue, headaches and other associated issues for people sensitive to it. This article is not intended to alarm, but is intended to show how PWM works and why it is used, as well as how to test a display to see its effects more clearly. We will also take a look at the methods some manufacturers are now adopting to address these concerns and provide flicker-free backlights instead. As awareness grows, more and more manufacturers are focusing on eye health with their monitor ranges.

Pulse Width Modulation (PWM) is one method of reducing the perceived luminance in displays, which it achieves by cycling the backlight on and off very rapidly, at a frequency you can’t necessary detect with the naked eye, but which could lead to eye issues, headaches etc. This method generally means that at 100% brightness a constant voltage is applied to the backlight and it is continuously lit. As you lower the brightness control the perceived luminance for the user reduces due to a number of possible controlling factors:

1) Frequency –The backlight is cycled on and off very rapidly, and this cycling typically occurs at a fixed frequency (in Hz). How fast this cycling occurs can impact whether flicker is visible or perceivable to the user, with higher frequencies being potentially less problematic. PWM has been known to operate at low frequencies of 180 – 240Hz for example which are likely to be more problematic than higher frequencies ranging up in to the Kilohertz range (e.g. 18,000Hz).

2) Modulation –The modulation of the cycling has an impact on the perceived brightness, and this describes the difference between the luminance in an “on” and in an “off” state. In some examples the backlight is completely turned off during the cycle so it is literally being turned on/off rapidly across the full brightness adjustment range. In those examples the luminance output is controlled really by the duty cycle only (see point 3). In other examples the backlight is not always being completely turned off but rather the voltage applied to the backlight is being rapidly alternated, resulting in less extreme differences between the on and off states. Often this modulation will be narrow in the high brightness range of the display, but as you reduce further, the modulation becomes wider until it reaches a point where the backlight is being switched completely off. From there, the change in the duty cycle (point 3) controls the further changes in the luminance output.

3) Duty Cycle – The fraction of each cycle for which the backlight is in an “on” state is called the duty cycle. By altering this duty cycle the total light output of the backlight can be changed. As you reduce the brightness to reach a lower luminance, the duty cycle becomes progressively shorter, and the time for which the backlight is on becomes shorter, while the time for which it is off is longer. This technique works visually since cycling the backlight on and off sufficiently fast means the user cannot see this flickering, because it lies above their flicker-fusion threshold (more on this later).

Above we can see graphs of a backlight’s output using “ideal” PWM for several cycles. The maximum output of this backlight in the example is 100 cd/m2, and the perceived luminance for the 90%, 50% and 10% cases are: 90, 50 and 10 cd/m2 respectively. The modulation percentage is the ratio between the minimum and maximum luminance during the cycle, and is 100% here, so it is being completely turned on and off. Note that during the duty cycle the backlight is at its maximum luminance.

The analogue (non-PWM) graphs corresponding to these perceived luminance levels would appear as shown below. In this case there is no modulation. This is the method used for flicker-free backlights which we will discuss more a little later.

The main reasons for the use of PWM is that it is simple to implement, requiring only that the backlight can be switched on and off rapidly, and also gives a large range of possible luminance.

CCFL backlights can be dimmed by reducing the current through the bulb, but only by about a factor of 2 because of their strict current and voltage requirements. This leaves PWM as the only simple method of achieving a large range of luminance. A CCFL bulb is in fact normally driven by the inverter to cycle on and off at a rate in the 10’s of kilohertz and well outside the range of flicker visible to humans. However, the PWM cycling typically occurs at a much lower frequency, around 175Hz, which can produce artefacts visible to humans.

The luminance of LED backlights can be adjusted greatly by altering the current passing through them, though this has the effect of altering the colour temperature slightly. This analogue approach to LED luminance is also undesirable since the accompanying circuits must take into account the heat generated by the LED’s. LED’s heat up when on, which reduces their resistance and further increases the current flowing through them. This can quickly lead to runaway current use in very high-brightness LED’s and cause them to burn out. Using PWM the current can be forced to hold a constant value during the duty cycle, meaning the colour temperature is always the same and current overloads are not a problem.

While PWM is attractive to hardware makers for the reasons outlined above, it can also introduce distracting visual effects if not used carefully. Flicker from LED backlights is typically much more visible than for older CCFL backlights at the same duty cycle because the LED’s are able to switch on and off much faster, and do not continue to “glow” after the power is cut off. This means that where the CCFL backlight showed rather smooth luminance variation, the LED version shows sharper transitions between on and off states. This is why more recently the subject of PWM has cropped up online and in reviews, since more and more displays are moving to W-LED backlighting units now.

Where the effect of flicker can really come into play is any time the user’s eyes are moving. Under constant illumination with no flickering (e.g. sunlight) the image is smoothly blurred and is how we normally perceive motion. However, when combined with a light source using PWM several discrete afterimages of the screen may be perceived simultaneously and reduce readability and the ability of the eyes to lock onto objects. From the earlier analysis of the CCFL backlighting we know that false colour may be introduced as well, even when the original image is monochromatic. Below are shown examples of how text might appear while the eyes are moving horizontally under different backlights.

It is important to remember that this is entirely due to the backlight, and the display itself is showing a static image. Often it is said that humans cannot see more than 24 frames per second (fps), which is not true and actually corresponds to the approximate frame rate needed to perceive continuous motion. In fact, while the eyes are moving (such as when reading) it is possible to see the effects of flicker at several hundred hertz. The ability to observe flicker varies greatly between individuals, and even depends on where a user is looking since peripheral vision is most sensitive.

So how fast is PWM cycling backlights on and off? This seems to depend on the backlight type used, with CCFL-based backlights nearly all cycling at 175Hz or 175 times per second. LED backlights have been reported typically running from 180 – 420Hz, with those at the lower end flickering much more visibly. Some have even faster frequencies of >2000Hz so it really can vary. While this might seem too fast to be visible, keep in mind that 175Hz is not much faster than the 100-120Hz flicker observed in lights connected directly to the mains power.

100-120Hz flickering of fluorescent lights has in fact been linked to symptoms such as severe eye strain and headaches in a portion of the population, which is why high-frequency ballast circuits were developed that provide almost continuous output. Using PWM at low frequencies negates the advantages of using these better ballasts in backlights because it turns an almost constant light source back into one that flickers. An additional consideration is that poor quality or defective ballasts in fluorescent backlights can produce audible noise. In many cases this is exacerbated when PWM is introduced since the electronics are now dealing with an additional frequency at which power usage is changing.

It is also important to distinguish the difference between flicker in CRT displays and CCFL and LED backlit TFT displays. While a CRT may flicker as low as 60Hz, only a small strip is illuminated at any time as the electron gun scans from top to bottom. With CCFL and LED backlit TFT displays the entire screen surface illuminates at once, meaning much more light is emitted over a short time. This can be more distracting than in CRTs in some cases, especially if short duty cycles are used.

The flicker itself in display backlights may be subtle and not easily perceptible for some people, but the natural variation in human vision seems to make it clearly visible to others. With the use of high-brightness LED’s on the rise it is becoming increasingly necessary to use short PWM duty cycles to control brightness, making flicker more of a problem. With users spending many hours every day looking at their monitors, shouldn’t we consider the long term effects of both perceptible and imperceptible flicker?

If you find PWM backlight flickering distracting or just want to see if reducing it makes reading on a monitor easier, I’d encourage you to try the following: Turn the brightness of your monitor up to maximum and disable any automatic brightness adjustments. Now use the colour correction available in your video card drivers or calibration device to reduce the brightness to normal levels (usually by adjusting the contrast slider). This will reduce the luminance and contrast of your monitor while leaving the backlight on as much as possible during PWM cycles. While not a long-term solution for most due to the decreased contrast, this technique can help to discover if a reduction in PWM usage is helpful.

A much better method of course would be to purchase a display not relying on PWM for dimming, or at least one which uses a much higher cycling frequency. Few manufacturers seem to have implemented PWM at frequencies that would limit visible artefacts (well above 500Hz for CCFL and above 2000 Hz for LED). Additionally, some displays using PWM do not use a 100% duty cycle even at full brightness, meaning they will always produce flicker. Several LED-based displays may in fact be currently available which do not use PWM, but until backlight frequency and modulation become listed in specifications it will be necessary to see the display in person. Some manufacturers promote “flicker free” monitors in their range (BenQ, Acer for example) which are designed to not use PWM at all and instead use a Direct Current (DC) method of backlight dimming. Other manufacturers such as Eizo talk about flicker free backlights but also list a hybrid solution for their backlight dimming, where PWM is used for some of the brightness adjustment range at the lower end. In fact it seems an increasingly common practice for a screen to be PWM free down to a certain point, and then fro PWM to be used to really drive down the minimum luminance from there.

An easy method of measuring the PWM frequency of a backlight would be ideal, and luckily it can be done using only a camera which allows manual control of the shutter speed. This can quickly and easily identify PWM frequencies in the lower range, but may not be suitable for high frequency PWM. It should be able to detect PWM up to at least 500Hz though, but anything above that may look like a solid block, suggesting no use of PWM, when in fact it might be just using a higher frequency. Further more complex methods such as our oscilloscope setup would be needed to validate flicker-free status for definite.

(Optional) Set the camera white balance by getting a reading off the screen while displaying only white. If not possible, then manually set the white balance to about 6000K.

Display a single vertical thin white line on a black background on the monitor (1-3 pixels wide should be fine). The image should be the only thing visible. Here is an example you may wish to save and use, show it full screen on your monitor.

Set the camera to use a shutter speed of 1/2 to 1/25 of a second. You may need to set the ISO sensitivity and aperture in order to capture enough light. Make sure the line is in focus at the distance you are holding it (lock the focus if needed).

Hold the camera about 2 feet in front of the monitor and perpendicular to (looking straight at) the front. Press the shutter button as you slowly move it horizontally across the screen (remaining perpendicular). You may need to experiment with moving the camera at different speeds.

Multiply this count by the inverse of the shutter speed. For example, if using a shutter speed of 1/25 of a second and 7 cycles are counted, then the number of cycles per second is 25 * 7 = 175Hz. This is the backlight cycle frequency.

What we are doing with this technique is turning a temporal effect into a spatial one by moving the camera during capture. The only significant source of light during the image capture is the thin line on the display, which is exposed onto consecutive columns on the sensor. If the backlight is flickering, different columns will have different brightness or colour values determined by the backlight at the time it was exposed.

A common problem when first attempting this technique is that the image is too dark. This can be mitigated by using a larger camera aperture (lower f/number) or increasing the ISO value. The shutter speed is not a factor in the exposure since we are using it only to control the total exposure time. The brightness of the image can also be adjusted by changing the speed at which the camera is moved, with a fast speed giving a darker image and more temporal resolution and a slow speed a brighter image with lower resolution. Another problem encountered is unevenly-spaced cycles in the final image, which is caused by the camera changing speed during exposure. Continuing to move the camera before and after the exposure helps to steady this. An image which looks particularly smooth may be due to it being out of focus. This can sometimes be helped by pressing the shutter button halfway to focus on the line target, then proceeding as normal.

Depending on the monitor several additional effects may be visible. CCFL-based backlights often show different colours at the start and end of each cycle, which means the phosphors used respond at different rates. LED-based backlights often use a higher cycling frequency than CCFL-based, and more rapid camera movement may be needed to easily see them. Dark stripes between cycles mean that the PWM duty cycle has been reduced to such an extent that no light is emitted for part of the cycles.

Using our oscilloscope and photosensor equipment it is possible to measure the PWM frequency and patterns far more accurately. While the above photo method is certainly suitable for a casual user, an oscilloscope can reveal more detail about the PWM operation and will be featured in all our reviews moving forward. We measure the luminance output of the screen at brightness settings of 100, 50 and 0%. This allows us to easily identify the backlight dimming technique, and if PWM is being used we can work out its frequency and comment on modulation, duty cycle etc.

Asus PA248Q – W-LED backlight. At 100% brightness we see a constant luminance output and a straight line, as there is no need for the backlight to be cycled. At 50% you can see PWM controls the backlight on and off. The modulation is always 100%, but the luminance reduction is controlled by the duty cycle which becomes progressively shorter. You can see much shorter “on” peaks in the 0% brightness graphs. We measure the frequency at 180Hz which is fairly typical.

BenQ GW2760HS – W-LED backlight. At all brightness settings the luminance output is a flat line, showing no PWM is being used. This is part of BenQ’s flicker free range.

The oscilloscope graphs can also allow us to examine the behaviour of the luminance output. Above is a typical W-LED backlight dimmed to 0% where PWM is used. You can see the changes between on and off are very steep and sudden, as the LED backlight is able to turn on and off very rapidly. As we’ve already discussed this can lead to potentially more noticeable flicker and associated issues as the changes are more pronounced.

The oscillographs for a typical CCFL display using PWM at 0% looks like the above. You can see the transitions from on to off are less sudden as the phosphors don’t go dark as quickly as with LED backlight units. As a result, the use of PWM may be less problematic to users.

As we said at the beginning, this article is not designed to scare people away from modern LCD displays, rather to help inform people of this potential issue. With the growing popularity in W-LED backlit monitors it does seem to be causing more user complaints than older displays, and this is related to the PWM technique used and ultimately the type of backlight selected. Of course the problems which can potentially be caused by the