Not sure, if you already found out, but nowadays you can also get screens with a size of 4,3", 5" or even 7" that are even available with a capacitive touch panel on top. These screens are not always connected via SPI, but some are available with a parallel connection instead. Those screens have a resolution of up to 800x480 pixels. I've also seen some with higher resolutions, but i think that is too much for the average microcontroller). Some of these screens are not TFTs but have an IPS panel instead. In many cases they have a built in esp32 module on them (some with an esp32-s2 or esp32-s3). Last time I checked the screen drivers are still very similar, either some variant of ILIxxxx or STxxxxy. The capacitive touch panels are GT911 drivers in all cases, that I came across. It's easy to implement. Quite a lot of options to choose from nowadays, which make it quite hard to find just the right one - unless one doesn't have any specific needs or doesn't really care about the options.
@bluewat
8 ай бұрын
Oh, you are right! Lot of devices available and lot possibilities. I certainly would not use SPI to drive an 800x480 display. FMSC (for parallel connections) or up to Octo-SPI (for serial ones) for data transfer are available. Chrom-ART would help a lot, directly handling graphics operation without involving uC. I'm just not sure about using esp32 handling the display, but I never tested that kind of solutions. Well. Not so hard to find out the right display: the right choice just depends on the project needs.
@amarobarbosa8483
3 ай бұрын
friend, to get likes and subscribers you need to enable subtitles. I don't understand your language, but thanks for the initiative!
@bluewat
3 ай бұрын
Thank you for your contribution, Amarobarbosa.
@charumathim9534
3 ай бұрын
Sir actually I have ILI9846 driver could please tell can I Used this font library for that
@bluewat
3 ай бұрын
Hi Charumathi, I do not have an ILI9846 display, neither I'm able to find its datasheets herearound, online. Maybe you are referring to ILI9486? If so, I do not have even displays driven by ILI9486 but, after a quick look to its datasheet, if I'm not mistaken, differences mainly are in the parallel interface. On the SPI port ILI9486 should work as an ILI9488 on RGB565. Try to set library to ILI9488_V2. Let me know.
@truongthong7513
7 ай бұрын
Can i use this library with stm32f103c8t6 ?, I guess it's not enough memory
@bluewat
7 ай бұрын
Why not? 64kB of flash is far larger than library needs and 20 kB of RAM also (appropriately setting BUFLEVEL)
@EmbeddedEnigma
Жыл бұрын
hi sorry if sound dumb, I have not used many touch displays. my questions is if I call Touch_GotATouch() in main loop, from Library I know in background it is calling interrupt but if I call that function in main loop does not it become polling as if my main loop is running other delay based routines and user touches the display the response will still be slow as I am still checking touchs in main loop and reacting to user input?
@bluewat
Жыл бұрын
Hi, interrupt detects touch and (callback) sets a flag. Then, in the main loop, or anywhere in the program, you can check if user touched display, using GotATouch(), just testing that flag. Polling in main loop the touch sensor, you would start an SPI communication (and an ADC) in any loop cycle. That would have a heavy impact over the overall performances: using GotATouch, you are able to start SPI communication (reading touch position) only when you are sure that user is touching. About the time to react to the user input: that is linked to the main loop organization. Normally (in normal programs) human touch is an extremely slow event, but anytime you have the time to react problem developing the main loop. A good method is to develop a well balanced finite-state machine. And if you still have a hard need to react events within deterministic times, you have to move to RTOS systems.
@EmbeddedEnigma
Жыл бұрын
@@bluewat thanks nicely explained.
@nohokum1944
Жыл бұрын
I'm confused about how the Displ_FillArea function works,. In your previous video it looked like you were filling one buffer while the other was transmitting. But in the code it looks like you send ALL the color data at one time and then swap buffers. What do I not understand? PS- I thnk you need a #endif in z_displ_ILI9XXX.h. In Device Parameters section after #define ILI9488
@bluewat
Жыл бұрын
about Displ_FillArea: there are 2 buffers (dispBuffer1 and dispBuffer2) and a pointer (dispBuffer) (lines #31-#33). dispBuffer is already pointing to the free buffer (not currently used in SPI transmission) Function fill the (free) buffer with needed color (in RGB565 mode lines #372-386, RGB666 lines #387-#406), and request to transmit (Displ_Transmit (called by Displ_WriteCommand and Displ_WriteData) will hang until the previous SPI transmission completes (line #254)). When Displ_Transmit returns, current buffer is on transmission and "the other" buffer is free (transmission completed). The same buffer (the same color) can be transferred many times untill the whole area si filled So, at the end fo the function DispBuffer switches pointing to the (new) free buffer while current one is on transmission. about #endif: right. Fixed. Thank you, Nohokum
@nohokum1944
Жыл бұрын
@@bluewat So when Hal_SPI_Transmit_DMA() is called the DMA transfer starts and the processor immediately continues execution ? I think this is what I don't understand. Does it work like this: 1. Fill dispBuffer with color data 2.Determine number of times we need to transfer dispBuffer. 3.Call Displ_WriteData() in for loop, 4.In Displ_Transmit() check SpiAvailable flag; wait until it's set by call back. 5.Call HAL_SPI_Transmit_DMA ( Starts DMA transfer and immediately returns to Displ_WriteData() ). 6.Displ_WriteData() sends us right back to Displ_Transmit() and we wait for the SpiAvailable flag to be set and we start another DMA transfer. 7.Continue until all data has been transferred. We have already filled the buffer so we just send the same buffer every time. ( Sorry for all the questions, but it's the only way to learn things )
@bluewat
Жыл бұрын
That's the purpose of DMA: handling data transfer and let uC free to proceed in program. uC program and data transmission proceed in parallel. uC just stops if it need to transmit a new set of data and the old set is stil on transmission. en.wikipedia.org/wiki/Direct_memory_access
@nohokum1944
Жыл бұрын
@@bluewat OK I understand. Thank you.
@IvanEng747
Жыл бұрын
Sorry, how you connecting display into stm32? Please pinout 🙏
@bluewat
Жыл бұрын
Hi Ivan, there is a schematic here: github.com/maudeve-it/ILI9XXX-XPT2046-STM32/blob/main/1-HOWTO/wiring.png Is this what you need? It is in the GitHub page mentionned in the video description.
@aronvasquez7667
Жыл бұрын
Can it be used without a pencil?
@bluewat
Жыл бұрын
I never use pencils
@Noxoreos
8 ай бұрын
Resistive touch panels, like the ones shown in the video can be used with anything that has a blunt tip. Using a sharp pencil would probably damage the touch panel. It won't work on a capacitive touch screen (like the one on a smartphone)
Пікірлер: 22