Fórum témák

» Több friss téma
Fórum » Színes LCD + PIC
 
Témaindító: pici, idő: Feb 19, 2008
Témakörök:
Lapozás: OK   41 / 46
(#) pixels válasza diablo hozzászólására (») Ápr 7, 2016 /
 
Sanszos, hogy az SPI csak az SD kártyához kell. Egyébként elképzelhető, hogy vagy a kijelzőn, vagy a allatta a panelre felírva megtalálod a vezérlő IC, vagy a kijelző üveg típusát. Ha látsz rá módot, megpróbálhatod óvatosan levenni.

Nekem is így történt a vezérlő IC beazonosítás. Utána persze pöccre indult az Arduino lib nyers avr C-re portolás után.
(#) icserny válasza diablo hozzászólására (») Ápr 8, 2016 /
 
Ha a belinkelt helyről vetted, akkor 2015. szeptember óta nagy valószínűséggel ILI9341 vezérlővel van szerelve (a lap alján a beírásokat végig kell böngészni, akiknek a fenti időpont után sikerélményeik voltak, azok ezt a típust emlegetik). Ehhez van Adafruit leírás és programkönyvtár - már csak át kell írni...
(#) diablo válasza pixels hozzászólására (») Ápr 8, 2016 /
 
Meg is találtam a kapcsolását, tényleg az SD kártyához vezetnek a szálak, bár ez a képen is látszik.

Meg lefejtettem a kijelzőt is a panelról. LCM24011-A van ráírva. Én sokra nem mentem ezzel az infóval...
Szerintem maradok az ILI9341 adatlapjánál.
(#) bbalazs_ válasza diablo hozzászólására (») Ápr 8, 2016 /
 
Ha gondolod, elkuldhetem tango2-ban a kiosztasat.
A teljes lefejtesnek tobbek kozott az az elonye, hogy a touchscreen kivezeteseit onalloan kezelheted, nem a vezerlo/adatvonalakkal multiplexelve. Meg a LEDeket magad tudod vezerelni, kapcsolhatod a hattervilagitast, PWM-ezheted, stb.

De komolyan mondod, hogy ez a shield ment az SPFDxxxx meghajtoval?
(#) diablo válasza bbalazs_ hozzászólására (») Ápr 8, 2016 /
 
Szerintem ILI9341-gyel ment. Mert az állítólagos S6D04H0X könyvtár is Arduino-ban megnyitva ILI9341 jelzéssel van ellátva. Úgyhogy elkezdem azt tanulmányozni, gyakoribb vezérlőnek is látom a többinél. De amúgy sem fogom sokáig ezt a kijelzőt használni, majd nézek helyette valami jobbat pl. a buydisplay.com-ról. Csak először ezt akarom "tönkretenni".
(#) teglascs hozzászólása Ápr 8, 2016 /
 
Sziasztok, kezdőtől egy kérdés:
adva van ez a panel a maga 32 két csatlakozójával. A neten találni hozzá bekötéseket (bár nem túl sokat): itt pl. egy STM32-es fejlesztőpanellel megoldva.
A kérdésem az lenne, hogy az itt látható képen (ez egy másik kép) látható shift registernek mi lehet a feladata?
A másik kérdésem az lenne, hogy a mikrokontroller Pic v. Avr lehet?
Köszi!
Sajnos egyáltalán nem értek ehhez dologhoz, viszont rettentően érdekel...
A hozzászólás módosítva: Ápr 8, 2016
(#) Bakman válasza teglascs hozzászólására (») Ápr 8, 2016 / 1
 
Melyik részhez nem értesz? A kijelzőkhöz vagy a mikrokontrollerekhez? Ha egyikhez sem, nem javaslom ezzel kezdeni, sok buktatót tartogat.
(#) diablo válasza teglascs hozzászólására (») Ápr 8, 2016 / 1
 
Szerintem PIC (Microchip logóját vélem felfedezni rajta), a típusát nem látom.
De tényleg ne TFT-vel kezdj. Max Arduino-n kezdheted azzal előregyártott könyvtárakat használva, feltéve ha van már valamilyen programozási nyelv ismeret.
(#) teglascs hozzászólása Ápr 9, 2016 /
 
Köszi a válaszokat!
Arduinoval, karakteres LCD-vel csináltam már dolgokat.
Az is nagyon klassz, és bizonyos célra a legtökéletesebb, de a grafikus érdekesebbnek tűnik.
Mindenképpen a gyári könyvtárakat hívnám segítségül.
(#) Bakman válasza teglascs hozzászólására (») Ápr 9, 2016 / 1
 
Ebben az esetben javaslom kezdésnek az ILI9341-es vezérlővel szerelt kijelzőket, azokat viszonylag egyszerű beüzemelni. Van, amelyiken van SD kártya folgalat és érintőpanel is. Külön-külön mindhárom rész használható, nem feltétlen kell minden részét beüzemelni.
(#) teglascs válasza Bakman hozzászólására (») Ápr 9, 2016 /
 
Értem, köszi.
Akkor szerintem beszerzek egy ilyet.
(Közben most az jutott eszembe, hogy van valahol a fiókomban egy olyan Nokia kijelzőm is, amit én bontottam anno egy 3110-esből: az is tökéletes erre a célra. Megkeresem!)
(#) Attila86 hozzászólása Júl 27, 2016 /
 
Sziasztok!
Próbált itt már valaki egy TFT-ről a képet visszaolvasni? Azaz a képernyőre kirajzolt képet szépen pixelenként beolvasni a mikrovezérlőbe.
Készítek most egy berendezést amelyhez majd fog készülni egy kezelési útmutató, amihez tök jó lenne ha a magyarázó ábrákhoz a képeket nem fényképezőgéppel kellene elkészíteni, hanem egyszerűen csak visszaolvasná a PIC a kész képet a TFT-ről és ráírná az SD-kártyára egy bmp fájlba.
Van egy 480x320 pixeles kijelzőm R61581-es vezérlővel, melynek itt az adatlapja: Bővebben: Link
Elvileg egy 0x2E parancsot kell neki küldeni, aztán lehet visszaolvasgatni a pixeleket csak nem a WR lábat kell billegtetni mint íráskor, hanem az RD lábat (az adatlap 127. oldalán írja). Így próbálkoztam:
  1. u16 k;
  2.     u16 pixelek[100];
  3.     TFTSetAddress(0,0,10,10);
  4.     TFT_RS = 1;
  5.     TFT_DATA = 45081;
  6.     for(k=0;k<100;k++)
  7.     {
  8.         TFTWriteStrobe();
  9.     }
  10.     TFTWriteCmd(0x2E);
  11.     DelayMs(5);
  12.     TFTSetAddress(0,0,10,10);
  13.     TFT_RS=1;
  14.     TFT_DATA_TRIS = 0b1111111111111111;
  15.     for(k=0;k<100;k++)
  16.     {
  17.         TFTReadStrobe();
  18.         pixelek[k]=PORTB;
  19.     }
  20.     while(1) Nop();
  21.  
  22. void TFTWriteStrobe(void)
  23. {
  24.     TFT_WR = 0;
  25.     TFT_WR = 1;
  26. }
  27.  
  28. void TFTReadStrobe(void)
  29. {
  30.     TFT_RD = 0;
  31.     TFT_RD = 1;
  32. }

Szerintem ennek jónak kellene lennie az adatlapban írtak alapján, viszont a PORTB-ről konstans nullát olvas be a PIC.
(#) ktamas66 válasza Attila86 hozzászólására (») Júl 27, 2016 /
 
Amíg írásnál elég a stobe jel, olvasásnál nem emelheted vissza az RD-r, mert akkor letiltja a kimenetet. Tehát RD le -> időt kivárni (tacc) -> adat olvasás -> RD fel.
(#) Attila86 válasza ktamas66 hozzászólására (») Júl 27, 2016 /
 
Az adatlap szerint a tacc 110ns, de betettem 10us késleltetést és a PORTB-t akkor olvasom be amikor az RD láb alacsony szintű:
  1. u16 k;
  2.     u16 pixelek[100];
  3.     TFTSetAddress(0,0,10,10);
  4.     TFT_RS = 1;
  5.     TFT_DATA = 45081;
  6.     for(k=0;k<100;k++)
  7.     {
  8.         TFTWriteStrobe();
  9.     }
  10.     TFTWriteCmd(0x2E);
  11.     DelayMs(5);
  12.     TFTSetAddress(0,0,10,10);
  13.     TFT_RS=1;
  14.     TFT_DATA_TRIS = 0b1111111111111111;
  15.     for(k=0;k<100;k++)
  16.     {
  17.         TFT_RD = 0;
  18.         delayus(10);
  19.         pixelek[k]=PORTB;
  20.         TFT_RD = 1;
  21.     }
  22.     while(1) Nop();

Sajnos azonban így is nulla jön vissza.
(#) ktamas66 válasza Attila86 hozzászólására (») Júl 27, 2016 /
 
Én ránéznék az egyik lábra szkóppal, vagy egy pár kilos ellenállással felhúznám a lábat, ellenőrizni a port beállításai jók-e (analóg, PPS beállítások), persze az LCD-t ilyenkor nem muszáj engedélyezni.
(#) Attila86 válasza ktamas66 hozzászólására (») Júl 28, 2016 /
 
Ránéztem. Átírtam a programot így:
  1. LED_PIROS=0;
  2.     LED_ZOLD=0;
  3.     while(1)
  4.     {
  5.         u16 k;
  6.         u16 pixelek[4];
  7.         TFTWriteCmd(0x2C);  //write memory start
  8.         DelayMs(5);
  9.         TFTSetAddress(0,0,1,1);
  10.         TFT_RS = 1;
  11.         TFT_DATA_TRIS = 0b0000000000000000;
  12.         TFT_DATA = 0xAAAA;
  13.         LED_ZOLD=1;
  14.         for(k=0;k<4;k++)
  15.         {
  16.             TFT_WR = 0;
  17.             delayus(5);
  18.             TFT_WR = 1;
  19.         }
  20.         LED_ZOLD=0;
  21.         TFTWriteCmd(0x2E);  //read memory start
  22.         DelayMs(5);
  23.         TFTSetAddress(0,0,1,1);
  24.         TFT_RS=1;
  25.         TFT_DATA_TRIS = 0b1111111111111111;
  26.         LED_PIROS=1;
  27.         for(k=0;k<4;k++)
  28.         {
  29.             TFT_RD = 0;
  30.             delayus(5);
  31.             pixelek[k]=PORTB;
  32.             TFT_RD = 1;
  33.         }
  34.         LED_PIROS=0;
  35.         delayms(10);
  36.     }

A D0-D7 csatornák a kijelző alsó nyolc bitje (DB0-DB7), aztán RS, WR és RD lábak látszanak a szkópon. A D11 és D12 csatornákat a panelon lévő zöld és piros LED-ekre kötöttem csak azért, hogy könnyebb legyen rátriggerelni a kirajzolási (zold) és visszaolvasási (piro) eseményekre. Így az alábbi jelalakokat kapta el a szkóp:
A hozzászólás módosítva: Júl 28, 2016
(#) ktamas66 válasza Attila86 hozzászólására (») Júl 28, 2016 /
 
És akkor már azért olvas be valamit a PIC. Az ábrán látszik, hogy a bejövő jelek változnak. Nem vagyok nagy szakértő, az adatlapot sem olvastam el teljesen, de nem vagyok biztos benne, hogy ugyanabban a formában kapod vissza az adatot ahogy beírtad.
(#) Attila86 válasza Attila86 hozzászólására (») Júl 28, 2016 /
 
Csináltam egy másik mérést is, itt már kilenc különböző színt toltam ki a kijelzőre:
  1. LED_PIROS=0;
  2.     LED_ZOLD=0;
  3.     u16 k;
  4.     const u16 pixelek[9]={  0b0000000010101010,
  5.                             0b0000000001010101,
  6.                             0b0000000011111111,
  7.                             0b0000000000000000,
  8.                             0b0000000000000001,
  9.                             0b0000000000000010,
  10.                             0b0000000000000100,
  11.                             0b0000000000001000,
  12.                             0b0000000000010000,
  13.                          };
  14.     u16 pixelek2[9];
  15.     while(1)
  16.     {
  17.         TFTWriteCmd(0x2C);  //write memory start
  18.         DelayMs(5);
  19.         TFTSetAddress(0,0,2,2);
  20.         TFT_RS = 1;
  21.         TFT_DATA_TRIS = 0b0000000000000000;
  22.         LED_ZOLD=1;
  23.         for(k=0;k<9;k++)
  24.         {
  25.             TFT_DATA = pixelek[k];
  26.             TFT_WR = 0;
  27.             delayus(5);
  28.             TFT_WR = 1;
  29.         }
  30.         LED_ZOLD=0;
  31.         TFTWriteCmd(0x2E);  //read memory start
  32.         DelayMs(5);
  33.         TFTSetAddress(0,0,2,2);
  34.         TFT_RS=1;
  35.         TFT_DATA_TRIS = 0b1111111111111111;
  36.         LED_PIROS=1;
  37.         for(k=0;k<9;k++)
  38.         {
  39.             TFT_RD = 0;
  40.             delayus(5);
  41.             pixelek2[k]=PORTB;
  42.             TFT_RD = 1;
  43.         }
  44.         LED_PIROS=0;
  45.         delayms(10);
  46.     }

Sajnos a kijelzőről vissza már teljesen más jön:
(#) Bakman válasza Attila86 hozzászólására (») Júl 28, 2016 /
 
Nem lenne gyorsabb valamilyen rajzolóprogramban megcsinálni? Már rég végeztél volna vele.
(#) ktamas66 válasza Attila86 hozzászólására (») Júl 28, 2016 /
 
Nekem első olvasatra az jött le az adatlapból (bár lehet csak rosszul értelmezem), hogy míg írni több formátumban lehet, olvasni adott formátumban lehet csak. Gondolom 16 bites interfészt használsz, akkor az 53. oldal 20. ábrán csak kétféle visszaolvasási lehetőség van, de ezt a szkóp képéről nehéz ellenőrizni.
(#) Attila86 válasza ktamas66 hozzászólására (») Júl 29, 2016 /
 
Itt lehet a megoldás! Most beolvastam a PIC-kel háromszor annyi szót mint amennyit kiküldtem. Egyenlőre próbálom megfejteni, de szerintem egyikre sem stimmel.
A hozzászólás módosítva: Júl 29, 2016
(#) Attila86 válasza Attila86 hozzászólására (») Júl 29, 2016 /
 
Azt hiszem rájöttem!
Először is küld egy dummy szót, aztán három szóban elmondja két pixelnek a színét. Igen ám, de a pirosat, a zöldet és a kéket is 6 biten küldi vissza, hiába küldtem én ki korábban a kijelzőre R5-G6-B5 módban. Így már mindjárt világos!
Már csak egy for ciklus, némi bitttologatás, a bmp fájl felépítése és már kész is van!
A hozzászólás módosítva: Júl 29, 2016
(#) ktamas66 válasza Attila86 hozzászólására (») Júl 29, 2016 /
 
Épp írni akartam.
A régi MPLAB-ból ki lehetett menteni a memóriatartalmat txt állományba, majd beolvasni excelbe. Talán úgy egyszerűbb lett volna hasonlítgatni.
A hozzászólás módosítva: Júl 29, 2016
(#) Attila86 válasza ktamas66 hozzászólására (») Júl 29, 2016 /
 
Az MPLABX-ből is ki lehet exportálni, de most rajzolgattam inkább.
(#) Attila86 válasza Attila86 hozzászólására (») Júl 29, 2016 /
 
Most vettem csak észre, hogy csoda hogy működik a kis próbaprogramom, hiszen előbb küldöm ki a TFTWriteCmd(0x2C) parancsot az írás előtt, minthogy a PIC lábait újra kimenetté állítanám.
(#) Attila86 hozzászólása Aug 1, 2016 /
 
Na végre sikerült egy valamirevaló eredményt elérnem, egészen idáig ezzel szenvedtem...
Sajnos a képernyő egyes részeit sőt, van hogy egész sorokat elront. És úgy tűnik, hogy a beolvasás sikeressége függ a beolvasott képrészlet tartalmától! A kép jobb felső sarkában van pár felirat meg négy téglalap, azokat mindig elrontja. Mutatok pár képet meg egy fotót is hogy milyennek kellene lennie a képnek:
(#) Attila86 válasza Attila86 hozzászólására (») Aug 1, 2016 /
 
Tettem még egy próbát: eltüntettem a bal felső sarokban a szövegeket meg a téglalapokat, aztán eltüntettem a menüt, majd a konzol keretét, végül a konzolt is és csak a háttérkép maradt. Az utóbbi kettő képernyő beolvasása már hibátlan lett! Ez hihetetlen... Hogy a bánatban függhet a képernyő beolvasásnak sikeressége a képernyő tartalmától?!
(#) ktamas66 válasza Attila86 hozzászólására (») Aug 1, 2016 /
 
Lehet valami képfrissítésbe szalad bele. Olvasásnál egy ciklussal le van maradva, mivel a RD jelre teszi át a memóriából az olvasási regiszterbe, majd onnan olvas (ezért van a dummy olvasás).
(#) Attila86 válasza ktamas66 hozzászólására (») Aug 1, 2016 /
 
Valami képfrissítésbe szalad bele? Ezt hogyan érted? A képernyő olvasása közben nem írok a kijelzőre ha esetleg ilyesmire gondolsz. Amíg nem olvasta be a teljes kijelzőt, addig nem rajzol rá semmit, végig olvasási módban van a TFT.

Amúgy kipróbáltam hogy írok is közben a kijelzőre, a konzol legalján egy üzenetben kiírattam vele hogy hány százaléknál tart a képernyőmentés (mert amúgy jó néhány másodperc) és még így is működött, bár pont ugyan olyan hibákkal. Aztán rájöttem hogy nem sok értelme van a képernyő beolvasása közben rajzolni is rá...
(#) ktamas66 válasza Attila86 hozzászólására (») Aug 2, 2016 /
 
De a kijelző frissítgeti magát és olyankor a memóriát olvassa, gondolom a szinkronjeleknek megfelelően. Esetleg próbálj meg kikapcsolt kijelzés mellett menteni.
Következő: »»   41 / 46
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