atmega328p arduino spi problems tft display made in china

And last, but not least - modules were quite nice packed, UNO and display in separate packs, with air bubbles. I got two and both of them show the same thing. USB connector is isolated (not shorting power coming to regulator on LCD board). Backlight is on... I don"t know...

atmega328p arduino spi problems tft display made in china

I have to depend upon SPI due to pin count constrains on the uC chip. The project I have can work with 2.8" screen, which so far I have tried upon. I had a feeling that if I could manage to get a slightly bigger screen without adding up too much cost, would be perfect. But could not find a ready 3.2 or bigger LCD with SPI. Therefore I had floated my buying request to alibaba.com.

I got many offers for 3.2" LCDs but all of them were with 8/16/18 bit parallel interface. One manufacturer offered me this LCD. Which they have customized tooled to be used for SPI. They had some samples so they have sent me few samples to test it with.

atmega328p arduino spi problems tft display made in china

No, I do not understand why the module does not link all the SPI bus signals on the pcb. It would save 6 external pins. On the other hand, libraries like UTFT and URTouch have no concept of hardware SPI or bus.

atmega328p arduino spi problems tft display made in china

I would like to share the list of tips from this forum for using these cheap touch screens from China with 40 pin connector. (I apologise to experienced users - this is for users without any experience with display troubleshooting, like me :D.)

a) First of all, I recommend you using the UTFT library with the URTouch add-on, because it supports a lot of display models, even that generic ones from China - Download here

b) Find your display"s controller model - it is on the manufacturer"s website or it is printed on your display. Be careful, if your display don"t work with this model selected, you have to use the trial and error method. I only have 16 bit displays - so far I know, there are two of these wrong labelled 16 bit displays:

You have to connect display"s VCC pin to 3.3 V - a lot of manufacturers says that their display have on board regulator and the display should be compatible with 5 V logic, but it fact it is not.

Don"t forget to set touch orientation according to URTouch_Supported_display_modules.pdf (this file is included with the library) with InitTouch(orientation);.

Calibrate display with URTouch_Calibration (URTouch/examples/Arduino/): Run sketch, calibrate it, copy values that you see on the screen to UTouchCD.h (URTouch/)

atmega328p arduino spi problems tft display made in china

The SERCOM on the Zero is limited to 12MHz for SPI. SPI is 8MHz on a Uno. Although the SPI on an AVR is fairly primitive, the Arduino Uno core optimises fairly well.

The LCDWIKI"s basic demo file that doesn"t use any libraries works, but all other files fail to compile for a zero. They compile fine for a UNO, but for a zero, the LCDWIKI_SPI file throws so many errors...

I have not tried LCDWIKI on a Zero. I suspect that it would use the crap Zero core SPI library. It will probably be slower than Adafruit. And definitely inconvenient to use badly-spelled methods.

One thing I noticed is that in all the examples I looked at, the touchscreen and LCD display use different SPI connections. Why? I thought SPI was to be shared MOSI, MISO, SCK, and each device needs a CS pin.

atmega328p arduino spi problems tft display made in china

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 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.

atmega328p arduino spi problems tft display made in china

Here"s a working driver for ILI9163C 1.44" 128x128 (but can works with other resolution"s TFT) SPI TFT, prolly the most cheap display available. I got several on ebay for about less than 4 Euro (free expedition) but I"ve seen even cheaper.

Just search in ebay for "1.44" Red Serial 128X128 SPI Color TFT". This display use the ILI9163C chip that has no know library for Arduino and Teensy and this probably the reason why it"s so cheap. Thanks to Paul"s fast SPI routines I build up this library that drive really fast this display and it"s fully compatible with Adafruit ones (I"m using Adafruit_GFX) so it can be easily used in different projects without learn from scratch commands.

The maker of those display"s (a chinese for sure) forgot to set the hardware addressing for fix the memory map to a certain resolution (in this case 128 x 128) and leaved at 128 * 160 so this display showed big pixel addressing problems that fortunatly I fixed after a couple of days over the damn clumsy datasheet.

Can be really good for experimenting without spend a lot of money for prototypes, also I like the square resolution, useful for gauges. Remember that it"s extremely cheap display!

This can be because the data is sent so fast that display react it"s slower than data processed by controller. I got the same problem with the 3d cube example that require a complete screen refresh every frame, it flickers at the bottom.

As it sits right now, I"ve got the ILI9163C and Adafruit_GFX libraries and have the screen connected to an arduino uno through a level converter as follows

Anyway unfortunately that didn"t solve my issue, however I found that if I run the logic at 5v the display works, but im a little hesitant to run it like this,

http://www.ebay.co.uk/itm/New-1-44-Serial... (http://www.ebay.co.uk/itm/New-1-44-Serial-LCD-Display-128-128-SPI-TFT-Color-Screen-With-PCB-Adapter-5110-/121311368002?pt=UK_BOI_Electrical_Components_Suppl ies_ET&hash=item1c3eb89342)

Here"s a working driver for ILI9163C 1.44" 128x128 (but can works with other resolution"s TFT) SPI TFT, prolly the most cheap display available. I got several on ebay for about less than 4 Euro (free expedition) but I"ve seen even cheaper.

Just search in ebay for "1.44" Red Serial 128X128 SPI Color TFT". This display use the ILI9163C chip that has no know library for Arduino and Teensy and this probably the reason why it"s so cheap. Thanks to Paul"s fast SPI routines I build up this library that drive really fast this display and it"s fully compatible with Adafruit ones (I"m using Adafruit_GFX) so it can be easily used in different projects without learn from scratch commands.

The maker of those display"s (a chinese for sure) forgot to set the hardware addressing for fix the memory map to a certain resolution (in this case 128 x 128) and leaved at 128 * 160 so this display showed big pixel addressing problems that fortunatly I fixed after a couple of days over the damn clumsy datasheet.

Can be really good for experimenting without spend a lot of money for prototypes, also I like the square resolution, useful for gauges. Remember that it"s extremely cheap display!

I"m using this library to display images from an SPI flash chip and it is working well with an Arduino Mini. Now I want to move to a Teensy 3.1, but the Teensy SPI code is quite different and I can"t seem to figure out how to use an additional SPI device. The display works on the Teensy, and with a separate upload I can read from the flash chip, but I don"t know how to put them together. Can anyone give me any hints?

Good question, even the tons of libraries for Flash chips for Arduino are not reliable at all, for example, I have several 512/1024 chip from Microchip and still now I cannot get working on my UNO. Some chip uses paged memory handle, some use direct addressing, so basically every chip needs it"s own library. Are you using this library with Arduino Mini and witch SPI flash chip?

I"m using this library to display images from an SPI flash chip and it is working well with an Arduino Mini. Now I want to move to a Teensy 3.1, but the Teensy SPI code is quite different and I can"t seem to figure out how to use an additional SPI device.

Good question, even the tons of libraries for Flash chips for Arduino are not reliable at all, for example, I have several 512/1024 chip from Microchip and still now I cannot get working on my UNO. Some chip uses paged memory handle, some use direct addressing, so basically every chip needs it"s own library. Are you using this library with Arduino Mini and witch SPI flash chip?

I am using this TFT library with the Mini and the flash chip is a WinBond W25Q80BV 1MB flash. I got the code for accessing the flash chip from this article http://www.instructables.com/id/How-to-Design-with-Discrete-SPI-Flash-Memory/. Here"s the code that works on the Mini:

But I can"t use the same code to access the flash chip when using the Teensy 3.1 - it looks like this TFT library uses advanced SPI features and the code is very different. What I want to know is how to write the equivalent code for the flash chip on the Teensy.

I have been playing with a 1.44" 128x128 TFT ILI9163 (Black PCB) display for a week. I have it working under a couple of different graphics libraries and drivers but I have a strange issue with one of them.

Hardware: 1.44 128x128 TFT ILI9163 display screen *ebay link (http://www.ebay.co.uk/itm/221676935630?_trksid=p2059210.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT)

In Sumotoys first comment about this display he says . . "The maker of those display"s (a chinese for sure) forgot to set the hardware addressing for fix the memory map to a certain resolution (in this case 128 x 128) and leaved at 128 * 160 so this display showed big pixel addressing problems that fortunatly I fixed after a couple of days over the damn clumsy datasheet"

If this is relevent or not I do not know as he says he has sorted it. I have also checked that the library is setup for the black display and not the red one.

Sumotoy"s library uses the highly optimized SPI code, which requires both CS and DC using the hardware-controlled CS pins. Teensy 3.1"s hardware can only generate 5 of those special fast CS signals. The possible pins are 9, 10, 15, 20 and 21. You"ve already connected DC to pin 9, but CS also needs to be on one of those 5 pins. Using pin 7 won"t work (or if it does sometimes work, that"s only because the pin happens to "float" to a logic low voltage sometimes). Sumotoy"s library won"t do anything at all with pin 7, so it"s signal will be just random noise.

Regular (not highly optimized) SPI code using the SPI library uses digitalWrite() to control the CS signal. Peter Torelli"s SPI Flash code works that way. Because it"s using digitalWrite, you can use any digital pin. You"re not limited to the 5 special hardware-controlled SPI signals.

Of course it"s possible something else is wrong, but I"d start by moving the display"s CS line from pin 7 to one of those 5 special chip select pins which Sumotoy"s library requires.

I was using your SPI optimizations for Teensy so I have commented the pin to use with teensy in the GitHub, btw I will update all set with the new optimized code you have done recently that it"s safer,faster and thanks to your SPI Transaction suggestion (that really worked in several other projects I was playing recently) it will be more compatible.

This little displays are really cheap but have some small nasty problems, for example they can handle fast SPI communications but if you refresh screen very fast I always got a white flash in one of the screen side and unfortunatly looks like an hardware problem of the ILI chip, only visible on very fast MCU btw.

Another hardware problem is the SPI lookups (correct logic states of the SPI lines) that Paul observed recently and looks like very popular on cheap cina/taiwan chip (RA8875, ILI9340 are affected), I will try the Paul suggestion but in this case I don"t use MISO here but seems like display designer used some kind of pull-up,pull-down load on SPI lines that can affect other devices connected, that"s it"s the price to pay for some made-in-china poorly designed stuff!

Castingflame, I suggest to move the conversation on GitHub (https://github.com/sumotoy/TFT_ILI9163C)if it"s a problem related to Arduino"s since this is a Teensy board, I don"t want to use site resources and confuse the other users here so I promise you to help resolving issues on GitHub.

A note about library"s SPI, to get the speed it uses (almost) optimized-for-speed routines for sam/arm and avr so this can be the problem with the SPI flash chi that can be solved (and I will because I will like to play with SPI FLASH chip).

Every time I see something cool done on this forum using a Teensy 3.1 I"m inclined to try it myself and in the process have to spend more money and buy more stuff. Luckily this time the stuff was an inexpensive 1.4" Red Serial 128X128 SPI Color TFT LCD display bought on eBay. After reading about somotoy"s speedy driver for this display I just had to try it myself.

Because of the compact size of the display and the Teensy, I decided to build a necklace for a friend. A 3.7 V 500mAh LiPo battery and switch completed the build. I haven"t yet built a case for the necklace but I will when the snow melts and the weather warms up so I can work in the garage.

When the Necklace is powered up it displays a series of six dynamic and colorful patterns over and over. Each pattern is displayed for a set length of time which can be changed in the code.

Every time I see something cool done on this forum using a Teensy 3.1 I"m inclined to try it myself and in the process have to spend more money and buy more stuff. Luckily this time the stuff was an inexpensive 1.4" Red Serial 128X128 SPI Color TFT LCD display bought on eBay. After reading about somotoy"s speedy driver for this display I just had to try it myself.

Because of the compact size of the display and the Teensy, I decided to build a necklace for a friend. A 3.7 V 500mAh LiPo battery and switch completed the build. I haven"t yet built a case for the necklace but I will when the snow melts and the weather warms up so I can work in the garage.

When the Necklace is powered up it displays a series of six dynamic and colorful patterns over and over. Each pattern is displayed for a set length of time which can be changed in the code.

I needed to change your "printf" statements to just "print" in your Mandala.h & Watercolour.h files but it runs ok. However I still have the same display issue as before with it only using 3/4 of the screen.

I will comment no longer on here as asked and will move over to the github link kindly provided here (https://github.com/sumotoy/TFT_ILI9163C/issues/1) by sumotoy.

I will wait you here https://github.com/sumotoy/TFT_ILI9163C/issues/1 , already have some feedbacks maybe useful for you but planning to update all to be SPI Transaction capable and more compatible AVR code.

I don"t have any flash chip around, if you want to test it... But read the great SPI transaction page of Paul Stoffregen, maybe you need to some more info or modify a bit the flash chip library.

castingflame, try to comment #define __144_RED_PCB__ and enable #define __144_BLACK_PCB__ in the TFT_ILI9163C.h file, I discovered that the actual black tag display laying around ebay has the same pcb of the red one but different display that needs different setting, I"ve updated the library to support it (for all mcu"s, Teensy included).

I"ve reworked SPI for Teensy using the great work that Paul done recently but still using Adafruit_GFX since for some reason it"s more fast, again, check bubbles.ino example to see how fast is.

If you run the last version of TFT_ILI9163C from github you can delete display.setBitrate(24000000); since it"s not used anymore, the SPI now initialize always at 30Mhz. ILI chip it"s surprisely capable to run at more than 40Mhz

More info. I tried running your cube example and it fails as well. I"m running my Teensy3.1 at 96 MHz and am using Arduino 1.0.6 and Teensyduino 1.20. Everything worked fine until this new release.

I don"t have any flash chip around, if you want to test it... But read the great SPI transaction page of Paul Stoffregen, maybe you need to some more info or modify a bit the flash chip library.

castingflame, try to comment #define __144_RED_PCB__ and enable #define __144_BLACK_PCB__ in the TFT_ILI9163C.h file, I discovered that the actual black tag display laying around ebay has the same pcb of the red one but different display that needs different setting, I"ve updated the library to support it (for all mcu"s, Teensy included).

I"ve reworked SPI for Teensy using the great work that Paul done recently but still using Adafruit_GFX since for some reason it"s more fast, again, check bubbles.ino example to see how fast is.

This display is great! The least expensive LCD I can find out there. And the code everyone on this thread has provided ... Well thank you to everyone.

I have updated library to use alternative SPI pin for Teensy 3.1 and added compatibility to Teensy LC (uses native SPI). Teensy LC can use SPI1 as well, also, fixed some small bug.

Hey guys! after messing around with the library and the code quite a bit I got the TFT working with an Arduino Nano. I have a eBay $4 knockoff Arduino Nano and the red version of the TFT.

I hope this helps anyone who is having issues getting it working! This setup should apply exactly the same for any Arduino with the ATmega328 chips (Nano, Uno, Pro Mini etc).

Starting and stopping SPI transactions for each piece of data is probably much less efficient than starting before an entire command and ending afterwards.

It"s possible, you have to modify all SPI functions to parallel. Did you consider buy an SPI version from china market? Have seen as low as 3US time ago! Probably it cost 1 US more than a shift register...

I"m definitely going to purchase an SPI version, it seems there"s loads available from aliexpress as well: aliexpress.com/wholesale?catId=0&initiative_id=SB_20151126093518&SearchText=ILI9163C

I am planning to get the TFT LCD and links it with a temperature sensor using an Arduino UNO. Can the LCD reads and displays the reading collected from the temperature sensor? I am not familiar with SPI screen, thanks lot if you could help.

Ok, looks like a new strain of the Red PCB display it"s spreading all over, it looks exact like the old Red PCB one, same text on the back but display has no text around border, it"s a bit smaller than common one and it uses yellow pins (but this can change in future). It works in rotation 0,1 but NOT in 2,3 and I even not sure it uses ILI9163C!!! I got one of this display just today but many users complain not working well with current library in rotation 2,3, this is what I want discover in these days.

I solved the problem with thes new RED PCB Yellow Pin display, tomorrow (sunday 17,4,2016) I will post 1.0r6 that include this display and has an updated structure to support easily any type of incoming chinese strain.

It"s already done, it"s a quite large update, there"s still some minor tuning on color parameters (different between display"s) but today I definetively release it.

Paul, can you use the latest 1.0r6 for future Teensyduino releases? It works much better and has support for the new yellow pin display, impossible with old version.

The problem it"s caused by the damn offset introduced in every new display that it"s always different and forced chinese vendor to setup displays with different memory map even if size it"s 128*128, figure out what I have to do inside library to fit every configuration without slow down code and take care of every configuration, sigh.

I just ordered a couple of these LCD 1.44" Red Serial 128X128 SPI (http://www.ebay.com/itm/162002347148) - shown with yellow pins and smaller PCB. Delivery ePacket CN to US May 3-17.

#include "../_display/TFT_ILI9163C_RED_PCB_YPIN.h"//the infamous 2016 yellow pin/red pcb one (https://github.com/sumotoy/TFT_ILI9163C/blob/Pre-Release-1.0r6/_settings/TFT_ILI9163C_settings.h#L14)

BTW - it updates smoothly at 20 FPS - but without delay it hit 100 FPS - it doesn"t have problems at 100 FPS - but it is too fast have the bars stabilize

is it easy to use the multifont library? I am considering that one form my Diy Smartwatch project because the sumotoy library uses only 1 fontbut with several sizes, so how is it going with spi flash? is there a way to reconfigure the spi speed? I am usng sumotoy library right now, and i"ve read somewhere that the default is at 20Mhz is it pissible to make it 36Mhz or use the teensy -lc 40Mhz?

About the SPI speed, I"m using 30Mhz (that fall down automatically in relation CPU speed) but since all library uses SPI Transactions it"s easy change speed and new 1.0p7 has a constant for that.

Using the 1.0p6 version on my system there were some compile problems (edit included below). I got around those and get a similar image to what you get, except at 0,0 the bitmap overwrites the text.

elricho - your screen is shifted down from mine according to the picture - the text should be at the top. Look at my post #78 in the _settings file to make sure you have the right display selected.

That"s the display and _settings I have - what is displayed looks like mine now. We"ll see if the 1.0p7 update changes anything - or other sumotoy feedback.

I"m currently fixing the last issues with the damn scroll that is memory mapped and I have to deal with all chinese display variations (aka, offset) without create a mess in code, this issue it"s really time-consuming, I never used scroll but it will be nice to have this damn thing fixed.

The purpose is use the entire library skeleton for many other display library I have on github and since I"m using an custom optimized font rendering, fonts and images can be shared between libraries.

The font rendering has a nice decent speed for small fonts but really fast on big ones and if display chip has hardware accellerated primitives it will shine because it analize glyph and try to draw by using primitives, this is not the case of ILI9163C but on RA8875 and some SSD chip will make the difference, last test shows that even without hardware accelleration it makes the difference.

Thanks to test it! I have included all the necessary to build GUY easy and with new library scheme user can choose many different display"s (even OLED) and use same code, fonts, images, at list this is what I"m try to do!

Added the ability to have multiple instances even with display of different type, sharing same fonts and images, probably (have to test in a bit) using just one more wire per display.

I can drive 2 or more display by just add one wire each, for slow update display I experimented 16 display by using just 1 more wire upgradeable to 64 or more (I will send a video of 15) and MCP23s17 plus a couple of buffers.

https://forum.pjrc.com/threads/34406-Teensy-3-2-SPI-Clock-over-30-MHz (https://forum.pjrc.com/threads/34406-Teensy-3-2-SPI-Clock-over-30-MHz?p=104104&viewfull=1#post104104)

About the SPI speed, I"m using 30Mhz (that fall down automatically in relation CPU speed) but since all library uses SPI Transactions it"s easy change speed and new 1.0p7 has a constant for that.

UPDATE - sumotoy - I just dropped in the SPI speedup noted in POST #99 It runs well and 50% faster - at 96 and 120 MHz. Here is the code above modified for that change - just one line in setup() and I set MAXVAL to 1 as at 120MHz it went all white after a minute. The screen update goes to 90 and 111 FPS at 96 and 120 MHz - up from 52 FPS! And the flicker is greatly reduced because the update takes so much less time!

My modified SomeBars works. All seems to be as fast as before, the SPI speed up works up through 120 MHz - but total fail on 140 Mhz - maybe the display.

The screen refresh uses 128*128=16384 + 7 - > 16391 SPI calls (and 99% are 16 bit transfer!), using Defragster trick will result in almost 2Mbytes sec!. Refreshing data by clearing screen is not the best way to go!

Some controller has hardware accelleration for that (RA8875 as an example), results in much less SPI calls, but ILI9163c uses brute force and thanks god it has an internal ram, there"s other controllers out there that doesn"t have ram (like SSD1306) or even worst the Sharp display that needs constant refresh as well!

Highly-optimized-ILI9341-(320x240-TFT-color-display)-library (https://forum.pjrc.com/threads/26305-Highly-optimized-ILI9341-(320x240-TFT-color-display)-library?p=91624&viewfull=1#post91624)

> Glad I saw the SPI clock speedup trick and related it to this! It is faster. Is the ILI9163C not able to process 72 MHz SPI clocked data? Not that anyone should run the Teensy at 144MHz - something else will likely fail if not the display.

Update speed was originally just over 50 and went to 111 with the "SIM_CLKDIV1" SPI speedup. Now as edited below it seems there is so little SPI each loop - it is updating the screen with no screen pulsing (or the gray bleed through on the bottom) at 199 times per second without the SPI speedup and 200 times per second WITH the speedup! ( with MAXVAL =0 )

The yellowPin RED pcb display probably need some init fine tuning, I just discovered that it simply ignore any setting of VCOM output of non display area in partial mode, however colors are better than old ones. It" flickers a bit so must be some more tuning to do!

I also just got 2 old REDpcb display that looks almost cyan, no matter settings, looks like they use a colored plastic as glue between backlight and TFT, sigh...

Since ILI9163c is mounted on the flexible pcb that connect to real PCB, chinese vendor reuse the mounting PCB but display change quality continuosly...

sumotoy - it was MY code that was BAD !!!! Causing both "glitches" Here it is right running at 470 screen updates/second with SPI OC and only 343 updates/sec without the SPI OC:

It shows a character type "progress" style spinner too. Slowed to 82 updates per sec with MAXVAL=10, still hits 470/sec with MAXVAL=0. Very ugly code - that works fast and clean - and in a convoluted way. It begs for a "struct" per output item to hold the related info. The small screen is great, if only it were bigger :-)

What can really help is something I"ve asked one post before, write a sequence of bytes instead of bytes and words or the repeat command on ESP8266 (that actually not work if SPI is 80Mhz!).

sumotoy - my desktop github finally caught up and shows 1.0p7. Using that my SomeBars and audio tutorial mod "Part_3_02_Fourier_Transform_128TFT" both work as before.

I did find in my FFT example when I hacked the data between the actual FFT updates - that I was getting only 200 fps with changed data - and it was blowing out the display - tearing and then it went wacky. I"m not sure if that is something of concern? There were 31 bars and I was taking the last FFT value and adding .02 to ALL the floats each call (until the next sample was ready) where I picked a multiplier that gave good bars - in that case the values were low and got "torn" getting really weird. Problem is the example includes in this case specific audio hardware and right now include 200KB of wav in RAM. I could save off some FFT data and probably repro with static data and no SD or other - and I suppose take the audio board out of the system if you thought there was a chance it would show you ( like the TFT-LCD-800x480 (https://forum.pjrc.com/threads/34034-5-quot-TFT-LCD-800x480-choice?p=104979&viewfull=1#post104979) that maybe there is some other register or something needing attention? Maybe I should try with an alternate means of simulating the FFT with prior valid data first.

...I did find in my FFT example when I hacked the data between the actual FFT updates - that I was getting only 200 fps with changed data - and it was blowing out the display - tearing and then it went wacky

UPDATE:: I clipped some data and it is going out fine on a non-audio system at 1100+ updates /second. The Audio system was reading the data off SD card on SPI and I think perhaps that was behind the display noise I saw?

This preview of a place-able version (#define"s) colors within the lines is doing 2500 fps in the smaller window - only 530 fps with RANDOM DATA. Way too fast - oh wait that is with the SPI CLOCK speedup ... only 280 fps on RANDOM data and 1440 on canned FFT data (and standard SPI speed) - too fast for casual viewing, but suggests low CPU loading.

I duplicated the code and made twin VU meters - with standard SPI update rate for both is 370 fps - one random data the other clipped FFT data. On a white screen to show they stay in their boxes - only issue is the bottom line from the original code. The video shows it running full speed at 370fps then goes to a still too fast 72 fps. Speed with SPI speed up is 660 fps and runs fine.

Though it is working very well! - (never tried the old code and not much fancy with the new). I have a working display of the FFT data from Audio_Tutorial\Part_3_02_Fourier_Transform on this 128x128. As noted the provided VU was only hitting 60 FPS of the 86+ FPS FFT data - with my mod above I was upwards of 200!

ALSO - I ported this to the ILI9341 240x320 display and have that working [ #ifdef in the same code ] with FFT in TOP half and "Summed FFT Bins" (the commented code in Audio_Tutorial\Part_3_02_Fourier_Transform) on the lower half.

On ILI9341 I cheated and put the TEXT in clear space. On the top I used single line bars and on the bottom I added space to limit the change area to have it work. Since it is playing from SD I can"t use the OC speed SPI trick.

Any one with the Audio Tutorial Kit and the ILI9341 wired can see this sketch - 7235 - Commenting line 8 #define out reverts to the ILI9163C display [plug in at G_8 shifted one left as it has no MOSI on G_1] And careful mods to the line 42 _BARS & _BARS2 could reduce the drawing to allow it to keep both sections in sync more often - SerMon shows the respective update rates - except it still calls the bottom SUM as RAND.

the current 1.0p7 (https://github.com/sumotoy/TFT_ILI9163C/tree/Pre-Release-1.0p7) it"s pretty stable and fast with all teensy"s, is full SPI Transaction compatible and can use alternative SPI pins, I"ve tested extensively almost with all Teensy"s.

it"s pretty stable and fast with all teensy"s, is full SPI Transaction compatible and can use alternative SPI pins, I"ve tested extensively almost with all Teensy"s.

:cool: Glad I was in a place to use it with the Audio Tutorial breadboard sample"s Alternate SPI and the standard PJRC Purple board SPI - except for no MOSI it dropped right in and worked on those two sets of pins!

I would like to add the CENTER I saw to TEXT and will need to edit tft.grandient to tft.gradient, and remove my bogus hack to the "ReadSum" where I waste time and RAM trying to allow the Summed FFT to run when FFT data stops, and clean up the one4one lock of FFT to that SUM FFT. I can restore the PJRC FFT data spew to USB as well.

Edited bar params spacing on lower BUSY display - tied in sync with incoming FFT usually gets all 86-87 fps updates when available compiled OC 96 MHz.

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\libraries\SPI -ID:\Arduino\arduino-1.6.3\libraries\TFT_ILI9163C C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\icon_simple.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\icon_simple.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\libraries\SPI -ID:\Arduino\arduino-1.6.3\libraries\TFT_ILI9163C -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\libraries\SPI\utility D:\Arduino\arduino-1.6.3\hardware\arduino\avr\libraries\SPI\SPI.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\SPI\SPI.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\libraries\SPI -ID:\Arduino\arduino-1.6.3\libraries\TFT_ILI9163C -ID:\Arduino\arduino-1.6.3\libraries\TFT_ILI9163C\utility D:\Arduino\arduino-1.6.3\libraries\TFT_ILI9163C\TFT_ILI9163C.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\TFT_ILI9163C\TFT_ILI9163C.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\hooks.c -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\hooks.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\WInterrup ts.c -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\WInterrupts.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\wiring.c -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\wiring_an alog.c -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring_analog.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\wiring_di gital.c -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring_digital.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\wiring_pu lse.c -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring_pulse.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\wiring_sh ift.c -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring_shift.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\abi.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\abi.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\CDC.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\CDC.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\HardwareS erial.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\HardwareS erial0.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial0.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\HardwareS erial1.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial1.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\HardwareS erial2.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial2.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\HardwareS erial3.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial3.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\HID.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HID.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\IPAddress .cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\IPAddress.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\main.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\main.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\new.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\new.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\Print.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\Print.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\Stream.cp p -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\Stream.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\Tone.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\Tone.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\USBCore.c pp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\USBCore.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\WMath.cpp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\WMath.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_ATMEGA328O -DARDUINO_ARCH_AVR -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino -ID:\Arduino\arduino-1.6.3\hardware\arduino\avr\variants\standard D:\Arduino\arduino-1.6.3\hardware\arduino\avr\cores\arduino\WString.c pp -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\WString.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\hooks.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\WInterrupts.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring_analog.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring_digital.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring_pulse.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\wiring_shift.c.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\abi.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\CDC.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial0.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial1.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial2.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HardwareSerial3.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\HID.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\IPAddress.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\main.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\new.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\Print.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\Stream.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\Tone.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\USBCore.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\WMath.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-ar rcs C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\WString.cpp.o

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-gcc -w -Os -Wl,--gc-sections -mmcu=atmega328p -o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/icon_simple.cpp.elf C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\icon_simple.cpp.o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\SPI\SPI.cpp.o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp\TFT_ILI9163C\TFT_ILI9163C.cpp.o C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/core.a -LC:\Users\CRISTIAN\AppData\Local\Temp\build1398581 243779015877.tmp -lm

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/icon_simple.cpp.elf C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/icon_simple.cpp.eep

D:\Arduino\arduino-1.6.3\hardware\tools\avr/bin/avr-objcopy -O ihex -R .eeprom C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/icon_simple.cpp.elf C:\Users\CRISTIAN\AppData\Local\Temp\build13985812 43779015877.tmp/icon_simple.cpp.hex

You are using an Arduino, it"s 5V logic level CPU. The display has 3v3 logic level, internally it has a 5V to 3V3 regulator but logic level remains at 3v3!

Accordly datasheet, ILI9163C doesn"t support 5V logic levels, this mean you need a logic converter, such as CD4050 IC, powered at 3v3 between arduino and display.

I found a line in SD .begin that sets the SPI speed - when I init that with SPI_QUARTER_SPEED instead of SPI_HALF_SPEED I can change/DOUBLE ( at 96 MHz) the system clock ratio as provided before and BOTH displays work faster with no impact on the AUDIO board playing from the SD card! It should be a super simple edit - a second optional param on SD.begin should make it work, and when not used no change - I"ll try to make a PULL request and have that for Paul"s review and possible inclusion in 1.29. I have the couple lines coded - I have no idea if it can be used as it may break other generic SD usage?

I tested to good general effect - Audio hardware and Reading SD works and the Display is updated faster. I posted a PULL request (https://github.com/PaulStoffregen/SD/pull/3).

Also - transported 10 seconds of FFT data from the Audio Board Example into an Array that feeds the twin VU meters in that sample. I"ll see if a variant of SomeBars showing the two graphs is clean enough to share. It runs 237-275 FPS with SPI OC and text label over-write on each update. Sketch ZIP is 127KB (RAW is 435KB)

You are using an Arduino, it"s 5V logic level CPU. The display has 3v3 logic level, internally it has a 5V to 3V3 regulator but logic level remains at 3v3!

Accordly datasheet, ILI9163C doesn"t support 5V logic levels, this mean you need a logic converter, such as CD4050 IC, powered at 3v3 between arduino and display.

sumotoy - Pull request with Updated TFT example to the faster VU code. I didn"t merge the two units to a common library type, though I added a rectangle Clear...() function that includes bar spacing area and all bars, since the one speed up was to not redraw same height bars that might be needed.

You have to use LCD Image Converter! There"s a step-by-step wiki for that, it"s really easy and follow wiki you cannot get wrong. (https://github.com/sumotoy/TFT_ILI9163C/wiki/Convert-Icons)

To test display I made up an universal board (https://github.com/sumotoy/testBoard_forDisplayLibraries) to test several display"s with different type of MCU"s

I finally found the image wiki from that link (https://github.com/sumotoy/TFT_ILI9163C/wiki/Convert-Icons) - it looks like the steps explain what I was missing before!

You have to use LCD Image Converter! There"s a step-by-step wiki for that, it"s really easy and follow wiki you cannot get wrong. (https://github.com/sumotoy/TFT_ILI9163C/wiki/Convert-Icons)

Anyway, library has been updated and now pretty stable. I have ported the whole library (same exact features) to ST7735 (https://github.com/sumotoy/TFT_ST7735/tree/1.0p1)and in this week some other display controllers.

I bought