Fórum témák

» Több friss téma
Fórum » LCD kijelző vezérlése, életre keltése
Lapozás: OK   72 / 72
(#) bbatka válasza Laslie hozzászólására (») Jan 17, 2025 /
 
Ugyanezt (MRB3206) kijelzőt próbálom ESP32-höz illeszteni, de csak a MRB3205-ről található információ. Adatlapja még az LCD Wiki-n sincs fent. Egyébként a Hestorból vettem. Innen Találtam hozzá arduino forrást, de még a láb bekötés bizonytalanságával küzdök. RS vagy REST ?
Példa itt. Igaz collban kisebb méretű.
Fordításkor vissza kell állni a 2-es Espressif modul csomagra ! Egyébként jön a fordítási hiba. Lásd.kép
A hozzászólás módosítva: Jan 17, 2025
(#) lalca válasza bbatka hozzászólására (») Jan 17, 2025 /
 
Bővebben: Link Bővebben: Link
A hozzászólás módosítva: Jan 17, 2025
(#) bbatka válasza lalca hozzászólására (») Jan 17, 2025 /
 
Ezt ismerem. Miért linkelted be? Az információ az ESP32S alkalmazására irányul és kizárólag MRB3206 LCD használatával. Az interneten nincs részletes adatlapja. pl. Az MRB3205 ránézésre azonos. Figyelmesebb vizsgálat után viszont látható hogy jelentős az eltérés az MRB3206-hoz képest. pl.A 8 bites támogatás ? Vajon a MRB3205 re írt szoftverrel üzemelni fog? Ezen kísérletezek.
(#) bbatka válasza bbatka hozzászólására (») Jan 17, 2025 /
 
Megtaláltam a TFT_320QVT kapcsolási rajzát , ami valószínűleg egy plusz memória IC kivételével azonos a TFT_320QDT kapcsolási rajzával. 8 bites hardveres átalakításnak így nem nagyon látom lehetőségét, de nyomozok tovább.
A kínai leírásból az alábbiakat fordítottam ki:
A képernyő tápellátása 2,8-3,3 V; ne használjon 5 V-ot.
(A PCB-vel ellátott modul örökölte a 3V-os szabályozó IC-t, 5V-os bemenetre képes).
Háttérvilágítás tápellátása (LED_A pin): Háttérvilágítás tápellátása legfeljebb 3,2V-ig (a modul 3,9 ohmos áramkorlátozó ellenállással rendelkezik sorban.
(A modul 3,9 ohmos áramkorlátozó ellenállással van sorba kötve, a LED_A pin 3,3V-ra csatlakoztatható, ha 5V-ra csatlakozik, akkor az áramkorlátozó ellenállást 25 ohmra kell módosítani.
Módosítsa az áramkorlátozó ellenállást 25 ohmra, különben a háttérvilágítás megég).
● Adatport szint: elméletileg nem engedheti meg, hogy az adatport szintje meghaladja a 3,3V-ot, ha kell.



Nem értem hogy tápellátásnak miért nem lehet 5V-t használni, amikor a J1 jumperrel az 5V/3,3V szabályzót tudom áthidalni?
A hozzászólás módosítva: Jan 17, 2025
(#) bbatka válasza bbatka hozzászólására (») Sze, 19:45 /
 
Tud valaki nekem abban segíteni, hogy az LCD-n megjelenő kép miért sávos csíkozású vízszintes irányba? Sajnos a mobil telefon nem adja vissza rendesen. A csíkok egyike a narancssárga körben látható, amelynek egyébkén pirosnak kellene lennie.
Eszközök:
PIC32MX320F064H (40MHz de 20MHz-en is ez van)
LCD D32-TFT+TP (10035532 Hestore) vagy más néven TFT_320QDT ILI9341
MikroBasic, VisualTFT
A hozzászólás módosítva: Sze, 19:49
(#) bbalazs_ válasza bbatka hozzászólására (») Sze, 21:50 /
 
A beállításoknál szerintem a szín formátuma nem megfelelő. Más szavakkal máshogy értelmezi a biteket, máshogy vannak a színek tömörítve a 16 biten belül.
(#) bbatka válasza bbalazs_ hozzászólására (») Csü, 7:33 /
 
Lehet. Köszi! Sajnos ennek a fajta LCD-nek a használatára csak Arduino-s példákat találtam eddig. Majd ha rájövök a problémára akkor leírom hogy mi volt a probléma.
(#) bbb válasza bbatka hozzászólására (») Csü, 8:36 /
 
Nincs kedved megosztani a kódot, amit használtál hozzá? Illetve a mit kellene látni is érdekelne, mert nem tudom mit értesz "sávos csíkozás" alatt...
(#) bbatka válasza bbb hozzászólására (») Csü, 10:19 /
 
A kód az meglehetősen komplikált és sok fájlból áll. A mikroBasic fejlesztő környezeten kívül nem is használható.
Az a zöld sávot értem, de nem csak ez az egy van hanem a teljes képernyőt végig borítja, csak a képen éppenhogy csak látszódik.

Csatolom a PIC32 modul és az illesztő alaplap sémáját, hátha valaki használni akarja.
A hozzászólás módosítva: Csü, 10:28
(#) tki válasza bbatka hozzászólására (») Csü, 10:44 /
 
Szerintem a "hozzáadott" zöld, ami egy sávban különösen erős, de amúgy a pirosból is következetesen narancssárgát csinál, csak piros jelenlétében van és észlelhető, mert a kék, az kék a fotó alapján, vagyis azon egyáltalán nem látni hibát.

Tehát szoftveres/hardveres módon vagy valahogyan az LCD hibájából a kettő közt van egy összefüggés, egyszerű szóval: áthallás, mert amikor piros szín jelenik meg, akkor valamennyire a zöld is. Valamint még az a jelenség is fontos lehet, de talán csak másodjára, hogy középen, egy csíkban még annál is erősebb a jelenség. Ez kifejezetten analóg problémának tűnik, nem szoftveresnek, de bármi és akármi is lehet. Még az is, hogy ha tapogatod a kapcsolást és a vezetékeket, az a sáv csúszkálni fog fel-le.

Szóval ez az egész csak tipp, még azt sem néztem meg, hogyan van hajtva az az LCD - először azt hittem, egy notebook kijelzője... Azért eleve jobb beállítóábra kellene, nem kék, ha már egyszer a zölddel van gondod. Mindenesetre szerintem a fentieket kellene vizsgálni.
A hozzászólás módosítva: Csü, 10:48
(#) bbatka válasza tki hozzászólására (») Csü, 11:17 / 1
 
Van egy olyan érzésem hogy alapvetően szoftveres a hiba. Ránéztem logikai analizátorral a 16db. adat bitre. Nem egyszerre indul minden bit időnként. A zöld csíkozásban is látszik, mert ez is változó kinézetű.
(#) benjami válasza bbatka hozzászólására (») Csü, 13:14 /
 
A beírás WR láb felfutó élénél történik meg, teljesen mindegy, hogy az adatlábakra milyen időzítéssel kerülnek rá az adatok (nyilván a minimális időzítést azért figyelembe véve). Célszerű amúgy egy színátmenetes tesztábrát készíteni, úgy jobban kijönnek a színhibák, és jobban látszik mi az ami nem stimmel. Pl:
  1. #define LCD_COLOR(r, g, b)  ((r & 0xF8) << 8 | (g & 0xFC) << 3 | (b & 0xF8) >> 3))
  2.  
  3. uint32_t ColorTest(void)
  4. {
  5.   uint16_t xs, ys;
  6.   uint8_t  cy;
  7.  
  8.   xs = BSP_LCD_GetXSize();
  9.   ys = BSP_LCD_GetYSize();
  10.   for(uint16_t x = 0; x < xs; x++)
  11.   {
  12.     cy = (uint32_t)(x << 8) / xs;
  13.     BSP_LCD_SetTextColor(LCD_COLOR(cy, cy, cy));
  14.     BSP_LCD_DrawVLine(x, 0, ys >> 2);
  15.  
  16.     BSP_LCD_SetTextColor(LCD_COLOR(cy, 0, 0));
  17.     BSP_LCD_DrawVLine(x, ys >> 2, ys >> 2);
  18.  
  19.     BSP_LCD_SetTextColor(LCD_COLOR(0, cy, 0));
  20.     BSP_LCD_DrawVLine(x, ys >> 1, ys >> 2);
  21.  
  22.     BSP_LCD_SetTextColor(LCD_COLOR(0, 0, cy));
  23.     BSP_LCD_DrawVLine(x, (ys >> 1) + (ys >> 2), ys >> 2);
  24.   }
  25. }
(#) bbatka válasza benjami hozzászólására (») Csü, 15:47 /
 
A LEDA vezérlés nálad programból történik vagy csak ráadod a tápfeszültséget? Milyen mikrovezérlőt használsz?
A hozzászólás módosítva: Csü, 15:48
(#) benjami válasza bbatka hozzászólására (») Csü, 16:47 /
 
A képen levő cuccban egy kimeneti láb vezérel egy PNP tranzisztort, arra van kötve a háttérvilágítás. Stm32-vel van működtetve. Ebben SPI ILI9341 kijelző van, de az LCD driver tud működtetni párhuzamos 8 és 16 bites kijelzőt is.
(#) bbatka válasza benjami hozzászólására (») Csü, 17:18 /
 
Én sajnos ezt a kijelzőt benéztem. 16 bites párhuzamos portos.
(#) bbatka válasza bbatka hozzászólására (») Csü, 19:52 /
 
Ránéztem oszcilloszkóppal néhány jelre. Felülről a harmadik RS. Legalsó WR. Kurzor 1,78us.
(#) benjami válasza bbatka hozzászólására (») Csü, 20:32 /
 
Jó az a párhuzamos kijelző is, csak nyilván több láb kell a működtetéséhez. Nekem is van egy ilyen kijelzőm, FSC/FSMC perifériát is tartalmazó stm32-vel nagyon gyors rajzolási sebesség érhető el rajta (ekkor hardverból kezeli a vezérlőjeleket, a kijelzőre egyszerű memória írással lehet rajzolni).
Ha a szkópjel 2usec/osztásos akkor ezt a kijelzőnek röhögve tudnia kellene (a sokszorosát is). Ha mindig ugyanúgy hibázik akkor nagy eséllyel a programodban van a hiba, ha változik a kapott képhiba akkor a hardvernek is érdemes a körmére nézni.
(#) bbatka válasza benjami hozzászólására (») Pé, 8:20 /
 
Még mindig nem jöttem rá, hogy mi lehet a probléma. Készítettem egy új képet. Ezen jobban látszik a hiba. Egyenletes csíkozás, ami átüt az egyes objektumokon. Ezt a hibát már láttam valahol a neten, de esélytelen hogy megtaláljam azt a fórumot.
(#) proli007 válasza bbatka hozzászólására (») Pé, 8:42 /
 
Hello! Nem tudom, hány soros ez a kijelző (megszámolni sem tudom a csíkokat), de olyan mint ha minden második sor nem lenne vezérelve. Nem lehet ez valami címzési hiba? Vagy a memóriában máshogy vannak eltárolva a páros/páratlan sorok?
Mert a meghajtók sokszor univerzálisak, több felbontásra és néha értelmetlennek tűnnek a címzések. De nem azok, csak a kisebb felbontásnál, máshova esnek a sorok. De ez csak egy fikció ami eszembe jutott, anélkül hogy ismerném a dolgot..
(#) bbb válasza bbatka hozzászólására (») Pé, 8:45 /
 
Ezt a példányt arduinoval is kipróbáltad, amihez a példaprogramok vannak? Én elképzelhetőnek tartom akár a hardverhibát is.
(#) bbatka válasza bbb hozzászólására (») Pé, 8:51 /
 
Csak Arduino UNO-m van. Esetleg Rasberry PICO használatán gondolkodok. Az van itthon csak egyáltalán nem ismerem a használatát.
(#) bbatka válasza proli007 hozzászólására (») Pé, 9:02 /
 
Egyelőre csak ismerkedek ezzel az LCD-vel és komolyabban nem ismerem a vezérlését. A VisualTFT szoftver generálja a kódot. Én csak annyira nyúltam bele a forrásba hogy töröltem a Touch panel utasításai. Továbbá az inicializáló részbe tettem késleltetéseket. A háttér világítás ráadása az közvetlenül a tápfeszültség ráadásával történik. Esetleg ez okozhatja a problémát?
A VisualTFT-ben az objektumokhoz tartozik egy áttetszőség állítás. Ezt azonban letiltottam. Az azonban érdekes, hogy alapvetően az elsődleges háttérből jön a probléma. A színétől függetlenül sötét-világos csíkok váltakoznak.
(#) benjami válasza bbatka hozzászólására (») Pé, 9:24 /
 
Belenéztem a programodba, de a "TFT_Init_ILI9341_16bit" függvényt magát nem találtam meg benne, csak a meghívását (vagy csak én nem találtam meg?). Hogy néz ki a kijelző inicializálása?
(#) bbatka válasza benjami hozzászólására (») Pé, 10:10 /
 
Becsatolom az ASM forrást. Én sajnos semennyire nem foglalkoztam még PIC32 asm proramozással. Nézegettem, de nekem egyelőre semmit nem mond.
(#) bbatka válasza bbatka hozzászólására (») Pé, 10:25 /
 
Azért csak találtam valamit.
  1. sub procedure TFT_Init_ILI9341_16bit(dim display_width as word display_height as word)
  2.   __controller = _16BIT_CONTROLLER
  3.   if(Is_TFT_Set() <> 1) then
  4.     TFT_Set_Index_Ptr = @TFT_Set_Index
  5.     TFT_Write_Command_Ptr = @TFT_Write_Command
  6.     TFT_Write_Data_Ptr = @TFT_16bit_Write_Data
  7.   end if
  8.  
  9.   TFT_DISP_WIDTH = display_width
  10.   TFT_DISP_HEIGHT = display_height
  11.   if (display_width >= display_height) then
  12.     TFT_Disp_Rotation = 0
  13.   else
  14.     TFT_Disp_Rotation = 90
  15.   end if
  16.  
  17.   TFT_Set_Pen(CL_BLACK, 1)
  18.   TFT_Set_Brush(0, 0, 0, 0, 0, 0)
  19.  
  20.   TFT_Move_Cursor(0, 0)
  21.   TFT_Clear_Fonts()
  22.   TFT_Set_DataPort_Direction()
  23.   #ifdef TFT_ILI9341_OR_ST7789V
  24.     if (TFT_ReadId_ST7789V_or_ILI9341() = TFT_ST7789_HW_ID) then
  25.       ' Reset device
  26.      TFT_Reset_ST7789V()
  27.      TFT_Set_Address_Ptr = @TFT_Set_Address_SST7715R
  28.    else
  29.  ' Reset device
  30.   TFT_Reset_ILI9341()
  31.       TFT_Set_Address_Ptr = @TFT_Set_Address_ILI9340
  32.     end if
  33.   #else
  34.   ' Reset device
  35.  TFT_Reset_ILI9341()
  36.  TFT_Set_Address_Ptr = @TFT_Set_Address_ILI9340
  37.  #endif
  38. end sub
  39.  
  40. '**
  41. ' * @brief  Complete initializing procedure for TFT controller (ILI9341)
  42. ' * without setting TFT_DataPort direction.
  43. ' * This procedure should be used when calls to custom TFT routines are used.
  44. ' * Must be used with TFT_Set_Active.
  45. ' * @param  display_width  : Width of display (in pixels).
  46. ' * @param  display_height : Height of display (in pixels).
  47. ' *
A hozzászólás módosítva: Pé, 10:28
(#) bbatka válasza bbatka hozzászólására (») Pé, 10:38 /
 
A fv. leírása asm-ben:
  1. _TFT_Init_ILI9341_16bit:
  2. ;__Lib_TFT_Defs.mbas,2291 ::            sub procedure TFT_Init_ILI9341_16bit(dim display_width as word display_height as word)
  3. ADDIU   SP, SP, -20
  4. SW      RA, 0(SP)
  5. ;__Lib_TFT_Defs.mbas,2292 ::            __controller = _16BIT_CONTROLLER
  6. SW      R25, 4(SP)
  7. SW      R26, 8(SP)
  8. SW      R27, 12(SP)
  9. SW      R28, 16(SP)
  10. ORI     R2, R0, 65535
  11. SH      R2, Offset(__Lib_TFT_Defs___controller+0)(GP)
  12. ;__Lib_TFT_Defs.mbas,2293 ::            if(Is_TFT_Set() <> 1) then
  13. JAL     _Is_TFT_Set+0
  14. NOP    
  15. ANDI    R3, R2, 255
  16. ORI     R2, R0, 1
  17. BNE     R3, R2, L__TFT_Init_ILI9341_16bit590
  18. NOP    
  19. J       L__TFT_Init_ILI9341_16bit243
  20. NOP    
  21. L__TFT_Init_ILI9341_16bit590:
  22. ;__Lib_TFT_Defs.mbas,2294 ::            TFT_Set_Index_Ptr = @TFT_Set_Index
  23. LUI     R2, hi_addr(_TFT_Set_Index+0)
  24. ORI     R2, R2, lo_addr(_TFT_Set_Index+0)
  25. SW      R2, Offset(_TFT_Set_Index_Ptr+0)(GP)
  26. ;__Lib_TFT_Defs.mbas,2295 ::            TFT_Write_Command_Ptr = @TFT_Write_Command
  27. LUI     R2, hi_addr(_TFT_Write_Command+0)
  28. ORI     R2, R2, lo_addr(_TFT_Write_Command+0)
  29. SW      R2, Offset(_TFT_Write_Command_Ptr+0)(GP)
  30. ;__Lib_TFT_Defs.mbas,2296 ::            TFT_Write_Data_Ptr = @TFT_16bit_Write_Data
  31. LUI     R2, hi_addr(_TFT_16bit_Write_Data+0)
  32. ORI     R2, R2, lo_addr(_TFT_16bit_Write_Data+0)
  33. SW      R2, Offset(_TFT_Write_Data_Ptr+0)(GP)
  34. L__TFT_Init_ILI9341_16bit243:
  35. ;__Lib_TFT_Defs.mbas,2299 ::            TFT_DISP_WIDTH = display_width
  36. SH      R25, Offset(_TFT_DISP_WIDTH+0)(GP)
  37. ;__Lib_TFT_Defs.mbas,2300 ::            TFT_DISP_HEIGHT = display_height
  38. SH      R26, Offset(_TFT_DISP_HEIGHT+0)(GP)
  39. ;__Lib_TFT_Defs.mbas,2301 ::            if (display_width >= display_height) then
  40. ANDI    R3, R25, 65535
  41. ANDI    R2, R26, 65535
  42. SLTU    R2, R3, R2
  43. BEQ     R2, R0, L__TFT_Init_ILI9341_16bit591
  44. NOP    
  45. J       L__TFT_Init_ILI9341_16bit246
  46. NOP    
  47. L__TFT_Init_ILI9341_16bit591:
  48. ;__Lib_TFT_Defs.mbas,2302 ::            TFT_Disp_Rotation = 0
  49. SB      R0, Offset(__Lib_TFT_Defs_TFT_Disp_Rotation+0)(GP)
  50. J       L__TFT_Init_ILI9341_16bit247
  51. NOP    
  52. ;__Lib_TFT_Defs.mbas,2303 ::            else
  53. L__TFT_Init_ILI9341_16bit246:
  54. ;__Lib_TFT_Defs.mbas,2304 ::            TFT_Disp_Rotation = 90
  55. ORI     R2, R0, 90
  56. SB      R2, Offset(__Lib_TFT_Defs_TFT_Disp_Rotation+0)(GP)
  57. ;__Lib_TFT_Defs.mbas,2305 ::            end if
  58. L__TFT_Init_ILI9341_16bit247:
  59. ;__Lib_TFT_Defs.mbas,2307 ::            TFT_Set_Pen(CL_BLACK, 1)
  60. ORI     R26, R0, 1
  61. MOVZ    R25, R0, R0
  62. JAL     _TFT_Set_Pen+0
  63. NOP    
  64. ;__Lib_TFT_Defs.mbas,2308 ::            TFT_Set_Brush(0, 0, 0, 0, 0, 0)
  65. MOVZ    R28, R0, R0
  66. MOVZ    R27, R0, R0
  67. MOVZ    R26, R0, R0
  68. MOVZ    R25, R0, R0
  69. ADDIU   SP, SP, -4
  70. SH      R0, 2(SP)
  71. SH      R0, 0(SP)
  72. JAL     _TFT_Set_Brush+0
  73. NOP    
  74. ADDIU   SP, SP, 4
  75. ;__Lib_TFT_Defs.mbas,2310 ::            TFT_Move_Cursor(0, 0)
  76. MOVZ    R26, R0, R0
  77. MOVZ    R25, R0, R0
  78. JAL     _TFT_Move_Cursor+0
  79. NOP    
  80. ;__Lib_TFT_Defs.mbas,2311 ::            TFT_Clear_Fonts()
  81. JAL     _TFT_Clear_Fonts+0
  82. NOP    
  83. ;__Lib_TFT_Defs.mbas,2312 ::            TFT_Set_DataPort_Direction()
  84. JAL     __Lib_TFT_Defs_TFT_Set_DataPort_Direction+0
  85. NOP    
  86. ;__Lib_TFT_Defs.mbas,2314 ::            if (TFT_ReadId_ST7789V_or_ILI9341() = TFT_ST7789_HW_ID) then
  87. JAL     __Lib_TFT_Defs_TFT_ReadId_ST7789V_or_ILI9341+0
  88. NOP    
  89. LUI     R3, 21125
  90. ORI     R3, R3, 34048
  91. BEQ     R2, R3, L__TFT_Init_ILI9341_16bit592
  92. NOP    
  93. J       L__TFT_Init_ILI9341_16bit249
  94. NOP    
  95. L__TFT_Init_ILI9341_16bit592:
  96. ;__Lib_TFT_Defs.mbas,2316 ::            TFT_Reset_ST7789V()
  97. JAL     __Lib_TFT_Defs_TFT_Reset_ST7789V+0
  98. NOP    
  99. ;__Lib_TFT_Defs.mbas,2317 ::            TFT_Set_Address_Ptr = @TFT_Set_Address_SST7715R
  100. LUI     R2, hi_addr(_TFT_Set_Address_SST7715R+0)
  101. ORI     R2, R2, lo_addr(_TFT_Set_Address_SST7715R+0)
  102. SW      R2, Offset(_TFT_Set_Address_Ptr+0)(GP)
  103. J       L__TFT_Init_ILI9341_16bit250
  104. NOP    
  105. ;__Lib_TFT_Defs.mbas,2318 ::            else
  106. L__TFT_Init_ILI9341_16bit249:
  107. ;__Lib_TFT_Defs.mbas,2320 ::            TFT_Reset_ILI9341()
  108. JAL     __Lib_TFT_Defs_TFT_Reset_ILI9341+0
  109. NOP    
  110. ;__Lib_TFT_Defs.mbas,2321 ::            TFT_Set_Address_Ptr = @TFT_Set_Address_ILI9340
  111. LUI     R2, hi_addr(_TFT_Set_Address_ILI9340+0)
  112. ORI     R2, R2, lo_addr(_TFT_Set_Address_ILI9340+0)
  113. SW      R2, Offset(_TFT_Set_Address_Ptr+0)(GP)
  114. ;__Lib_TFT_Defs.mbas,2322 ::            end if
  115. L__TFT_Init_ILI9341_16bit250:
  116. ;__Lib_TFT_Defs.mbas,2328 ::            end sub
  117. L_end_TFT_Init_ILI9341_16bit:
  118. LW      R28, 16(SP)
  119. LW      R27, 12(SP)
  120. LW      R26, 8(SP)
  121. LW      R25, 4(SP)
  122. LW      RA, 0(SP)
  123. ADDIU   SP, SP, 20
  124. JR      RA
  125. NOP    
  126. ; end of _TFT_Init_ILI9341_16bit
(#) benjami válasza bbatka hozzászólására (») Pé, 11:44 /
 
PIC32-t én meg semmilyen nyelven nem programoztam. Nálam így néz ki az inicializálás: ebben a 328. sortól kezdődően. Látszik, hogy elég sok parancsot küld elég sok paraméterrel. Minden parancsot és a paramétereit is 8 bites adatként kell küldeni a kijelzőnek, 16 bitesen kizárólag a pixel adatokat kell kiküldeni (részletesen ezt az ILI9341 pdf adatlapján lehet megnézni).
Következő: »»   72 / 72
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem