Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino ILI9341 TFT Display Pitanja
#1
Evo nakon duzeg vremena, vidio sam odlican SignalWave generator ovdje na forumu a pošto sam imao vec od prije doma arduino pro mini i 2.2" TFT 320x160px ILI9341 display uspio sam danas to sve spojiti kako treba i napisati prvi program u c-u za arduino, i pomocu libraryja kojeg sam skinuo sa: https://github.com/Bodmer/TFT_ILI9341 i spajanjem pinova po ovoj shemi: https://www.instructables.com/id/Cheap-T...340C-or-I/ display je proradio i radi jako dobro..zacudilo me kada sam stavio par primjera clocka, pa animacije kako to brzo radi...za 8-bitnog mališana jako je brzi.

U prilogu stavljam sliku i primjer koda koji sam dosad isprobao, i cilj mi je napraviti GUI za generator funkcija samo da to bude izgledalo malo ljepse nego je author za AD9850 zamislio pa sam u potrazi na netu za gui da onda skopiram gui aplikacije za generator i napisem kod, jer sad je lako kad se ima biblioteka gotovih funkcija za crtanje linija, kvadrata, krugova....

Evo slike i mogu reci da je arduino bas super kako su ga sa library ispolirali...cekam jos enkodere da mi stignu za kojih mjesec dana i moram da narucim nekvi generator sinusoide i square pa me zanima koji preporucate modul? Htio bi si izgraditi generator funkcija za ispitivanje audio pojacala pa koji je dobar? Citao sam da je AD9833 ide do 1MHz ok dalje raste THD i da mu je max cca 1Vpp ili ti 0,7VRMS...pa sad neznam dali da uzmem AD9850 i dali ce da odradi posao i koliko RMS izlaznog napona mi treba iz tog cipa i do koje granice...pa ako moze pomoc.

Reply
#2
Ja sam bas razmisljao o slicnoj ideji da na onaj waveform generator sa ad9833 sto sam uradio ugradim veci displej, hteo sam da pisem o tome dali je moguce promeniti u programu postavke samo za veci displej a ostalo da ostane isto naravno i da se unese i library za veci displej koji bi se koristio.
Reply
#3
Koliko sam vidio na ebayu najbitnije ti je da gledas da ti ima isti chip koji i ti sad imas, i onda samo u postavka library headeru izmjenis rezoluciju:

#define ILI9341_TFTWIDTH 240
#define ILI9341_TFTHEIGHT 320

Moj je 320x240px i tako je definirano u headeru...a velicina ekrana ti nema veze ako koristis isti TFT driver, samo promjenis rezoluciju i to je to.

U temi o waveform generatoru si pitao kako da se rotira ekran, mozes ga rotirat sa ovom naredbom:

tft.setRotation(3);

Gdje broj u zagradi ti oznacava rotaciju, pa malo experimentiras dok ne dobijes rotaciju kakvu zelis, kod mene je broj 3 rotacija jer tako kasnije mislim staviti na PCB display.

Jesi mozda sada kada sve imas poslozeno da narucis AD9850/51 i usporedis do koje razine ti daje Vpp max sinusoidu i kvadratni signal? Da malo usporede se ta dva chipa.

Nakon malo gledanja i razmisljanja u softwerima za simulaciju function generatora dosao sam do ideje da implementiram ove funkcije koje ce biti dodane na graficko sucelje:

TFT LCD:
--------------------------
Frequency: 1,000kHz
Amplitude: 1,000V
DC Offset: 0,000V
Duty: 0%
Phase: 0°
--------------------------

WAVEFORM:
--------------------------
Sinusodial Triangle Square
--------------------------

OUTPUTS:
--------------------------
OUT1
OUT2
--------------------------

SWEEP:
--------------------------
ROTARY ENCODER LEFT/RIGHT => DECREASE/INCREASE FREQUENCY
ROTARY ENCODER SHORT PUSH => DECREASE/INCREASE STEP FREQUENCY
ROTARY ENCODER LONG PUSH => DECREASE/INCREASE DUTY/PHASE
ROTARY ENCODER PUSH => RETURN TO FREQUENCY
--------------------------

Dakle u priču će ići AD9851 modul za arduino pošto on ide kak sam vidio na netu do nekvih 20MHz da ima čisti signal i mali THD..pa što mislite jeli su dovoljne ove funkcije ili sam nesto izostavio? Ovo mi nekako logički izgleda da generator mora da ima.
Reply
#4
Nije isti kontroler kolko ja videh u podacima, na mom displeju je ST7735 kontroler, najverovatnije bi trebao da se menja deo programa koji je namenjen upravljanju displeja, kad mi dozvoli vreme uradicu drugu plocicu za eksperimentisanje posto sam na onom generatoru definitivno zatvorio kutiju i tu nediram nista vise, stigao mi je pre neki dan jos jedan AD9833 tako da sad imam dva komada u rezervi a imam i jos jedan diplej isti kao onaj 1,8'' , sto se tice AD9850 njega sam video kod par ljudi samo u DSS varijanti za radioamaterske potrebe i po njihovom iskustvu bolji je od AD9833 zato ga svi i koriste , ja sam hteo da narucim par komada ali sam odustao posto je u zadnjih godinu dana njegova cena skocila duplo ali cu ga sigurno kad tad uzeti za razne probe i testove naravno razmisljam i o vecem displeju.

Ovih dana sam testirao generator koji sam uradio sa AD9833 i po meni bolji je od svih spravica koje sam dosad koristio sa raznim kolima ICL8038, XR2206 itd, postavio sam par slika kako to izgleda na skopu tamo u temi ali kad dozvoli vreme uradicu malo detaljnije testove sa podacima i priloziti u temi, skoro sam testirao taze naviklovane zvucnike pa opet kad dozvoli vreme uradicu neki video i postaviti na forumu.
Reply
#5
Mislim da će ti biti dovoljno samo da upotrebiš drugu biblioteku.
https://github.cokeeping bananas freskeeping bananas freshhm/adafruit/Adafruit-ST7735-Library
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
Reply
#6
Evo počeo sam da radim GUI (dok mi ne stignu enkoderi), pa sam naisao na problem, a to je da bih htio da dobim simbol sinusoide, triangle i square kao na slici dolje...a i prilazem sliku kako sam dosad zamislio GUI...sad mi fali gore desno da dodam simbol signala koji ce da bude na izlazu pa me zanima kako da najbolje nacrtam sto blize izgledu sa slike ta tri simbola..probao sam sa drawCircle ali mi radi puni krug nikako polakruga....


Reply
#7
Ustvari meni za testove netreba drugi pcb zaboravio sam da imam arudino nano Smile
Reply
#8
[Image: attachment.php?aid=29591]

Spojio sam gore display sa logic level shifterom i to radi kad je RST sa TFT spojen na pin 9. Koristim ADAfruit TFT ILI9341 library.

Sad me zanima dali je moguće spojiti RST sa displaya na nekvi drugi pin a da display proradi? Probao sam RST TFT spojiti na RST Arduina i ništa bijeli ekran, takodjer koristim za initializaciju sljedeci kod:

#define TFT_DC 12
#define TFT_CS 10

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

I nakon restarta arduina TFT je bijeli, kada u kod ubacim TFT_RST onda proradi, ali onda trebam logic shiftera sa 5 portova a ja imam sa 4 porta zato bi bilo super ako se to moze rjesiti nekako da se poveze na RST Arduina pa da se TFT sam resetira kad se Arduino uključi na napajanje.

Dakle razlog je da zelim iskorisiti 4-portni shifer koji imam sa ebaya da nemoram samo zbog tog reseta tft-a dodavati još jedan 4-portni shifter zbog tog jednog pina...a i sačuvao bih jedan pin na arduinu pošto RST tft-a se koristi samo kod inicijalizacije displaya.

Dakle kako rjesiti tj spojiti RST TFT da cim se upali arduino da RST se odradi automatski sa Arduinom i da ekran proradi (da nebude bijeli ekran)?


Attached Files Thumbnail(s)

Reply
#9
AKo tvoja biblioteka ima init() funkciju (a treba da ima) ond će ona softverski da ga resetuje. Potrebno je da pin preko pull up ili pull down otpora okačiš na 3V3 ili GND. Ovo pronadji u dokumentaciji za displej.
Reply
#10
Spojio sam 3V3 <-> 10k <-> TFT RESET

i ništa ekran je i dalje bijeli...
Reply
#11
Umesto TFT_RST unesi -1 u ovu funkciju koju zoves na pocetku.

Pogledaj kako izgleda to u biblioteci:


/*!

@brief Instantiate Adafruit ILI9341 driver with hardware SPI using the

default SPI peripheral.

@param cs Chip select pin # (OK to pass -1 if CS tied to GND).

@param dc Data/Command pin # (required).

@param rst Reset pin # (optional, pass -1 if unused).

*/

/**************************************************************************/

Adafruit_ILI9341::Adafruit_ILI9341(int8_t cs, int8_t dc, int8_t rst) :

Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, cs, dc, rst) {

}

/**************************************************************************/


Dakle:

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, -1);
Reply
#12
Probao i tako i neće, ekran bijeli...zanimljivo je kad dodam TFT_RST onda radi bez problema....
Reply
#13
Ide li ovako:

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST = -1);

Na displeju RST mora da ti je preko pull-up na 3V3.
Reply
#14
Da tako sam i spojio i nece da radi preko pullupa, samo softwerski kada mu stavim TFT_RST.

Mislim da ovaj display nemoze da se odradi reset preko pullupa jer sad je spojeni 3V3 - 10k - TFT_RST pin

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST = -1);
Reply
#15
(04-12-2019, 08:42 AM)ronovar Wrote: Da tako sam i spojio i nece da radi preko pullupa, samo softwerski kada mu stavim TFT_RST.

Mislim da ovaj display nemoze da se odradi reset preko pullupa jer sad je spojeni 3V3 - 10k - TFT_RST pin

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST = -1);

A da probas neko kondezatorce izmedju RST i mase, stim sto ostaje pullup R.
Novac je sredstvo a ne cilj.
Reply
#16
(04-12-2019, 08:59 AM)Gosha Wrote:
(04-12-2019, 08:42 AM)ronovar Wrote: Da tako sam i spojio i nece da radi preko pullupa, samo softwerski kada mu stavim TFT_RST.

Mislim da ovaj display nemoze da se odradi reset preko pullupa jer sad je spojeni 3V3 - 10k - TFT_RST pin

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST = -1);

A da probas neko kondezatorce izmedju RST i mase, stim sto ostaje pullup R.

Generalno nije preporucljivo nista da se stavlja od kondezatora na izlazne nozice iz MCU prema GND.
To je kapacitivno opterecenje, moze da strada izlaz na MCU zbog toga.
Reply
#17
(04-12-2019, 08:59 AM)Gosha Wrote:
(04-12-2019, 08:42 AM)ronovar Wrote: Da tako sam i spojio i nece da radi preko pullupa, samo softwerski kada mu stavim TFT_RST.

Mislim da ovaj display nemoze da se odradi reset preko pullupa jer sad je spojeni 3V3 - 10k - TFT_RST pin

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST = -1);

A da probas neko kondezatorce izmedju RST i mase, stim sto ostaje pullup R.

Moze ovo sto Gosha predlaze. Ja sam tako radio  sa SSD1308 0.96inch

Ovo sto ti ja predlazem je softverski reset koji se radi odmah na pocetku tft.begin();
Evo ovaj deo koda na pocetku begin() u biblioteci:


    if(_rst < 0) {                     // If no hardware reset pin...
        writeCommand(ILI9341_SWRESET); // Engage software reset
        delay(150);
}

Dakle salje komandu za soft reset (to treba da je 0x01) ako je TFT_RST = -1


Pa tvoj kod treba da izgleda:

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST = -1);

void setup() {

tft.begin();
......

}


I dodaj neko kasnjenje pre begin();
Reply
#18
Sa kondenzatorima je "budzevina", to nije dobro iz vise razloga, tu je problem sa tajmingom dogadjaja, sta se kad desava, da li se prvo "probudi" MCU pa TFT ili obrnuto.
Neki delay mora da se uvede u programu da bi se to sinhronizovalo kako treba a pocetno stanje RST pina proverite, da li pre nego sto se probudi MCU taj pin treba da bude sa nekim otpornikom pull-up ili pull-down pa ga posle kada se i MCU probudi da to stavi na potrebno stanje.
Reply
#19
(04-12-2019, 09:14 AM)mikikg Wrote:
(04-12-2019, 08:59 AM)Gosha Wrote:
(04-12-2019, 08:42 AM)ronovar Wrote: Da tako sam i spojio i nece da radi preko pullupa, samo softwerski kada mu stavim TFT_RST.

Mislim da ovaj display nemoze da se odradi reset preko pullupa jer sad je spojeni 3V3 - 10k - TFT_RST pin

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST = -1);

A da probas neko kondezatorce izmedju RST i mase, stim sto ostaje pullup R.

Generalno nije preporucljivo nista da se stavlja od kondezatora na izlazne nozice iz MCU prema GND.
To je kapacitivno opterecenje, moze da strada izlaz na MCU zbog toga.

Nisam shvatio da se hardverski reset radi iz MCU-a, mislio sam da je taj pin displeja vezan samo pullup-om na plus 3.3V.
Novac je sredstvo a ne cilj.
Reply
#20
Samo ovo da dodam jer sam imao grdne probleme zbog toga na jednom drugom 7'' displeju.
Naime upravo je vezano sa Power-up proceduru, sta se kad desava ...

Imao sam problem da mi je deo code-a za Power-up (kada treba da se sve inicializuje) brljavio i ja to kao popravio u SW i nastavio dalje da pisem program, ne vodeci racuna o tom Power-up dogadjaju, i sve mi kao super radi, ja usnimim program on radi ali posle kada sam iskljuciop ceo MCU/TFT i krenuo to sto je do malopre radilo da ponovo testiram ono nece! I nece, i sta je i sta je ... Ja poceo da debagiram ove zadnje stvari koji sam dodavao, silno vremen izgubio oko toga dok nisam skontao da Power-up nije dobar ...

Dakle kad god testirate nesto oko tif TFT, obavezno uradite kompletan Power-OFF pa ON i vidite da li radi.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)