Sari la conținut
ELFORUM - Forumul electronistilor

Probleme cu ecrane grafice


MifTy

Postări Recomandate

Avand in vedere experienta ta in programare ar trebui sa fie simplu sa modifici libraria ST7775 astfel incat sa incluzi asta:

void Adafruit_GFX::setRotation(uint8_t x) 
{
  rotation = (x & 3);
  switch (x) {
  case 0:
  case 2:
    _width = WIDTH;
    _height = HEIGHT;
    break;
  case 1:
  case 3:
    _width = HEIGHT;
    _height = WIDTH;
    break;
  }
}



// return the size of the display (per current rotation)
int16_t Adafruit_GFX::width(void) 
{ 
  return _width; 
}
 
int16_t Adafruit_GFX::height(void) 
{ 
  return _height; 
}

si sa obtii rotirea imaginii pe display. (sursa: Adafruit GFX.cpp, diponibila in arhiva pe care ai descarcat-o).

Poti incerca si cu libraria asta: https://github.com/Pazaz/TFT_2_ST7775

 

P.S. Am modificat titlul deoarece consider ca ca nu sunt "probleme tampite" cu ecranele grafice, probleme sunt atunci cand cumperi TFT LCD si nu verifici daca exista librarii pentru chip-urile acelor ecrane grafice (am patit-o si eu, stai linistit!)

nimic!

n-a mers, în sensul că nu dă nici o eroare la compilare, dar nici nu are fr'un efect!

dacă nici nu pot accesa registrul de care a spus Valentin (şi după datasheet ăla e responsabil de funcţia asta), am bănuiala că ecranul ăsta e hardwired să stea pe portrait... şi dacă e aşa, cam grele cu modificările... :(

 

până acum am încercat să fac exemplul (şi librăria) lui Pazaz să-mi scrie mumos pe ecran cât timp a luat randarea aia... dar a dat eroare din prima că nu ştie ce e aia "text", m-am uitat şi am vpzut că nu suflă nimic despre asta în sursele lui, şi am început prin a căuta constructorii în Adafruit.cpp şi .h, ca să-mi dau seama ce trebuie copiat, şi în ce ordine, dar la compilare iese cu "exit status 1", şi o ţine gaie că "has no member named "stroke" (e nevoie şi de ăla) şi "has no member named "text", şi cred că am copiat corect şi în ordinea care trebuie toate alea.

 

pentru edificare, .cpp şi .h modificate de mine. o comparaţie cu originalele din arhiva lui (alea din src) ar arăta clar care e faza... cred! :)

plus că mă mir că nu mai zice şi acum de "has multiple definitions"...

 

 

later: ... pfff, draci, am editat vesel un fişier temporar!!!

e clar, e cu mult prea târziu... iar! :))))))))))))

 

Link spre comentariu

In fisierul specificat de mine, acel cpp. gasesti functia void LCD_2000_7775::begin() pe la sfarsitul fisierului. Asta e linia care se ocupa de registrul specificat de mine: this->write_cmd(0x0003, 0x1030); // set GRAM write direction and BGR=1,??16BIT 65K?MDT1=0,MDT0=0

trebuie modificata valoarea 0x1030 conform pdf-ului.

Link spre comentariu

pentru că m-am enervat copios încercând să-mi dau seama cum accesez direct registrul ăla din ST prin intermediul C-ului (parcă vă aud că "nu aşa trebuia să faci!" :) ), am lăsat-o baltă deocamdată, şi m-am mai uitat odată prin librăria lui Pazaz.

aia e şi mai simplistă ca cea de la inhaos, şi e pentru SPI, cum am mai spus... deci am făcut nişte modificări:

Libraria nu este pentru SPI. Este o varianta a librariei de la "inhaos". Am verificat inca odata, crezand ca nu am vazut eu bine ... dar nu este pentru SPI (cel putin nu cea din link-ul postat de mine).

Nu am cum sa verific buna functionare a librariei cu pricina, dar cred ca utilizand sketch-ul de exemplu din libraria Pazaz in care se include comanda "setRotation()" vei putea obtine rotireea imaginii de pe ecran.

Adica asa:

#include <Adafruit_GFX.h>
#include <TFT_2_ST7775.h>

ST7775::Display display(11, 10, 12);

void setup() {
	Serial.begin(9600);
	randomSeed(analogRead(0));
	display.setPins(9, 8, 7, 6, 5, 4, 3, 2);
	display.begin();
        setRotation(x); x va fi inlocuit cu 0, 1, 2 sau 3
}

void loop() {
	static int currentTime = millis(), lastTime = 0;
	display.fillRect(0, 0, ST7775::WIDTH, ST7775::HEIGHT, ST7775::Utility::RGB_565(random(), random(), random()));
	lastTime = currentTime;
	currentTime = millis();
	Serial.print(F("Took ")); Serial.print(currentTime - lastTime); Serial.println(F("ms to render 176x220 pixels"));
}
Link spre comentariu

 

Libraria nu este pentru SPI. Este o varianta a librariei de la "inhaos". Am verificat inca odata, crezand ca nu am vazut eu bine ... dar nu este pentru SPI (cel putin nu cea din link-ul postat de mine).

Nu am cum sa verific buna functionare a librariei cu pricina, dar cred ca utilizand sketch-ul de exemplu din libraria Pazaz in care se include comanda "setRotation()" vei putea obtine rotireea imaginii de pe ecran.

Adica asa:

#include <Adafruit_GFX.h>
#include <TFT_2_ST7775.h>

ST7775::Display display(11, 10, 12);

void setup() {
	Serial.begin(9600);
	randomSeed(analogRead(0));
	display.setPins(9, 8, 7, 6, 5, 4, 3, 2);
	display.begin();
        setRotation(x); x va fi inlocuit cu 0, 1, 2 sau 3
}

void loop() {
	static int currentTime = millis(), lastTime = 0;
	display.fillRect(0, 0, ST7775::WIDTH, ST7775::HEIGHT, ST7775::Utility::RGB_565(random(), random(), random()));
	lastTime = currentTime;
	currentTime = millis();
	Serial.print(F("Took ")); Serial.print(currentTime - lastTime); Serial.println(F("ms to render 176x220 pixels"));
}

s-ar putea să ai dreptate, şi să fie pentru adresare paralelă pe 8 biţi, dar în orice caz definiţia pinilor nu e corectă, cel puţin nu când vrei să-l legi la un Mega... dacă era, îmi apărea fillul ăla pe ecran de prima oară când am încercat sketch-ul, dar n-a apărut până nu am modificat eu definiţiile pinilor.

sau Pazaz a cumpărat versiunea pentru Uno, ceea ce ar explica diferenţa dintre pini... în aia nu m-am uitat cu prea multă atenţie pentru că nu am Uno.

 

presimt că am să am parte de un "multiple definition"... există deja un "#include <Adafruit_GFX.h>" în TFT_2_ST7775.cpp...

 

later: nu merge, nico! :(

dacă scriu setRotation(1) primesc eroare de sintaxă, dacă scriu display.setRotation(1), se compilează fără nici un warning sau eroare gravă, dar nici nu are un efect pe ecran: schimbarea orientării ar schimba şi locaţia coordonatelor 0,0, şi fillul s-ar face la 90 de grade faţă de fillul de acum...

 

 

In fisierul specificat de mine, acel cpp. gasesti functia void LCD_2000_7775::begin() pe la sfarsitul fisierului. Asta e linia care se ocupa de registrul specificat de mine: this->write_cmd(0x0003, 0x1030); // set GRAM write direction and BGR=1,??16BIT 65K?MDT1=0,MDT0=0

trebuie modificata valoarea 0x1030 conform pdf-ului.

 

exact partea aia n-o înţeleg, şi în pdf nu am găsit nimic despre cum pot accesa registrul ăla altfel decât folosind valori binare... şi conform cu ce scrie în datasheet, trebuie să schimb doi biţi din valoarea default (defaultul e portrait) ca să obţin orientarea "landscape"...

Link spre comentariu

In fisierul specificat de mine, acel cpp. gasesti functia void LCD_2000_7775::begin() pe la sfarsitul fisierului. Asta e linia care se ocupa de registrul specificat de mine: this->write_cmd(0x0003, 0x1030); // set GRAM write direction and BGR=1,??16BIT 65K?MDT1=0,MDT0=0

trebuie modificata valoarea 0x1030 conform pdf-ului.

nu are efectul scontat de mine! :)

valoarea e 1028, şi efectul e că ştergerea ecranului se face acum de la dreapta la stânga, nu se mai face de sus în jos, iar ecranul a rămas la fel...

poate ar trebui să umblu la definiţia ferestrei, şi să modific WIDTH şi HEIGHT, dar sunt sătul până peste cap de copy/paste fără sens.

singura chestie reproductibilă (în afara definiţiilor de pini) a fost că mi-am dat seama cum "traduc" cuvântul ăla binar în hexazecimal, ca să-l pot folosi într-un fişier .cpp... chestie pe care o ştiam cândva, inclusiv cu creionul şi hârtia, dar pe care am uitat-o până acum de tot.

 

tot scotocind pe net, am dat peste un tip pe forumul Gamebuino, care se chinuia să folosească acelaşi tip de ecran, de la acelaşi seller, dar părea să se fi blocat aiurea în ideea că LCD-ul ăsta e adresat prin SPI, ceea ce NU e adevărat, şi ca rezultat, nu-i apărea nimic pe ecran! :)

a rezolvat problema cumpărând un LCD pe bază de ILI9xxxx (nu mai ştiu ce model, precis), care era suportat bine-mersi în UTFT, şi a terminat balamucul...

 

cred că am să-i urmez exemplul, iar ecranul ăsta am să-l folosesc pentru ceva unde nu mă interesează prea tare că nu pot roti ecranul...

Link spre comentariu

pot sa-ti dau un sfat legat de libraria UTFT. E destul de lenta pentru a realiza un osciloscop. asta am inteles ca vrei sa faci.

Editare ulterioara: "driverul" facut de Bodmer/TFT_HX8357 gasesti pe github, e mai rapid decat UTFT.

Display gasesti si in Romania cu 50-60 lei.

Asta daca vrei sa lucrezi cu ATMEGA, daca vrei viteza mai mare catre display si rate de refresh marite iti recomand microprocesor STM,

Editat de valentin marcarian
Link spre comentariu

ăsta era scopul final, dar se pare că am ales display-ul greşit... chiar şi dacă-l conectez la STM32 (am deja plăcuţa), o să se poarte la fel! :)))
am pe drum display-ul ăla cu ST7735S, despre care se pare că l-am nimerit ok, chit că e de 1.8 inci... toate librăriile îl suportă. deocamdată e "in transit to Romania", mai am de aşteptat.

display-ul ăsta am să-l folosesc la chestii nepretenţioase la orientarea ecranului şi la viteza de fill (am observat că le cam gâfâie la asta, deci nu ar fi prea potrivit...)

pentru moment, am să-l las cucului ST7775-ul câteva zile, pentru că m-am enervat destul cu el, şi am să mă ocup de chestii pe care le stăpânesc ceva mai bine... cum ar fi un frecvenţmetru cu afişare pe un 16x2 clasic :P şi aşa n-am încercat încă chestia, şi tot încercând sketchuri de test toată ziua de azi, m-am obişnuit să mă uit pe serial monitor... dacă nu cer sfaturi, înseamnă că mi-a ieşit... şi mai mult ca sigur n-am să rezist să nu mă laud un pic! :)

Link spre comentariu

păi nu prea am ce arăta! :)

IMG_20170527_032412.jpg

uite poza cu breadboardul cu nano, un 74HC14 în care primul inversor e folosit ca oscilator reglabil (din potenţiometru), şi următorul inversor e "poarta" de intrare în Nano... pin A5, conform codului lui Nawrath, cel pus de nico în topicul cu DS-ul...
de văzut, se poate vedea ceva în monitorul serialei, dar se vede ceva gen:

Frequency Counter
0  Freq: 0
1  Freq: 1280
2  Freq: 1266
3  Freq: 1267
4  Freq: 1266
5  Freq: 1266
6  Freq: 1266
7  Freq: 1268
8  Freq: 1267
9  Freq: 1267
10  Freq: 1267
11  Freq: 1267
12  Freq: 1265
13  Freq: 1266
14  Freq: 1267
15  Freq: 1267
16  Freq: 1266
17  Freq: 1267
18  Freq: 1267
19  Freq: 1268
20  Freq: 1266
21  Freq: 1267
22  Freq: 1266
23  Freq: 1267
24  Freq: 1265
25  Freq: 1265
26  Freq: 1262
27  Freq: 1261
28  Freq: 1259
29  Freq: 1259
30  Freq: 1259
31  Freq: 1260
32  Freq: 1259
33  Freq: 1256
34  Freq: 1252
35  Freq: 1265
36  Freq: 1304
37  Freq: 1396

după cum se vede, nu zice nici ce sunt ăia... hertzi, kilohertzi, megahertzi? mister! :)

condicul are 100 pF, rezistenţa 10 k şi potenţiometrul 1 M, iar schema e clasică pentru un oscilator simplu cu un inversor CMOS.
şi cum merge, aveam ceva de zis?

cred că mai stau un pic, să fac şi circuitul pentru LCD de aici: https://www.instructables.com/id/Arduino-Frequency-Counter/ şi cum nu prevăd probleme, mă culc! :)
(tinypic face pe idiotul, am uploadat poza aia de 5 ori, şi o ţinea pe-a lui că e "moved or deleted"... nu e prima oară când face pe tâmpitul, o să caut alt serviciu de hosting pentru poze... şi aşa mă căpiază în draci cu reclamele şi cu "lupta împotriva spamului" punându-mă să completez 1000 de captcha, chit că am cont acolo!...)

Link spre comentariu
  • 1 lună mai târziu...
Vizitator Scriptery

Vad ca topicul e cam vechi, dar mi se pare o pocnitoare de lcd, mai bine folositi un display lcd si tactil, care nici nu "mananca" atati pini.

 

Ma gandesc sa fac un proiect ceva cu un ecran tactil.

 

 

Cel mai enervant lucru la aceste module, shielduri e ca dupa ce vezi ca nu gasesti ce trebuie pe Google, te ia nervii si uiti de el, il arunci sau ii dai foc de nervi, iar dupa putin timp, te necajesti cu o alta chinazarie si in loc sa gasesti ceva pentru cea actuala, gasesti pentru chinazaria precedenta care a fost deja topita si aruncata la gunoi.

 

Pentru cei ce nu mi-au inteles vorbele de la 3 dimineata :tryre vreau sa ajung la chestia ca atunci cand cauti ceva nu gasesti, dar cand nu ai nevoie de acel ceva il gasesti :nerv

 

P.S.: Daca doriti un serviciu de upload de imagini de calitate, folositi imgur.com

Editat de Scriptery
Link spre comentariu

atunci cand cauti ceva nu gasesti, dar cand nu ai nevoie de acel ceva il gasesti :nerv

Arduino e un proiect open source, ai la dispozitie tot ce-ti trebuie ca sa-ti scrii singur bucatile lipsa.
Link spre comentariu
Vizitator Scriptery

Arduino e un proiect open source, ai la dispozitie tot ce-ti trebuie ca sa-ti scrii singur bucatile lipsa.

O da... bucati de cod e ok, dar sa scrii cateva sute sau chiar mii de linii, nu e tocmai ok, si spun asta pentru ca lucrez si cu programe mai mari.

 

Ma rog, nu cred ca poate fi inteleasa asa usor logica unui programator chinez, deci..... In plus, trebuie sa cunosti foarte bine controlerul lcd-ului ca sa faci o librarie pentru el.

 

Ma apropii mult de off topic, deci cred ca o sa o las moarta aici. Numai bine.

Link spre comentariu

Vad ca topicul e cam vechi, dar mi se pare o pocnitoare de lcd, mai bine folositi un display lcd si tactil, care nici nu "mananca" atati pini.

 

Ma gandesc sa fac un proiect ceva cu un ecran tactil.

 

 

Cel mai enervant lucru la aceste module, shielduri e ca dupa ce vezi ca nu gasesti ce trebuie pe Google, te ia nervii si uiti de el, il arunci sau ii dai foc de nervi, iar dupa putin timp, te necajesti cu o alta chinazarie si in loc sa gasesti ceva pentru cea actuala, gasesti pentru chinazaria precedenta care a fost deja topita si aruncata la gunoi.

 

Pentru cei ce nu mi-au inteles vorbele de la 3 dimineata :tryre vreau sa ajung la chestia ca atunci cand cauti ceva nu gasesti, dar cand nu ai nevoie de acel ceva il gasesti :nerv

 

P.S.: Daca doriti un serviciu de upload de imagini de calitate, folositi imgur.com

asta am găsit atunci, în banii pe care-i aveam...

între timp am comandat altul cu 7735S, care e suportat sigur de toate librăriile pentru LCD-uri de Arduino, dar l-am comandat la începutul lui martie, a intrat în ţară în aprilie, dar la poştă n-a apărut... la fel ca ălalalt: am aşteptat 6 luni să apară, chit că după siturile de tracking intrase în ţară la 3 săptămâni de la expedierea de câtre inhaos (de la ei l-am cumpărat, direct!)...

 

chinezu' a scris şi el o librărie cu ce-a avut la dispoziţie, şi nu cred c-a avut mai mult decât am găsit şi noi... la urma urmei, avea tot interesul să scrie o librărie funcţională capabilă de mai mult decât să deseneze nişte prostioare în 16 culori...

eu cred că, de fapt 7775 e 7735 cu probleme hardware... controllerul "nu poate" executa anumite comenzi, aşa că se folosesc doar cele funcţionale... s-au mai văzut cazuri...

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări