Display-uri grafice LCD

24 MAI 2007

Figura 1

Mulţi dintre dumneavoastră sunteţi acum familiarizaţi cu ecranele LCD uzuale, alfanumerice ce au două rânduri şi 16 caractere. Acestea sunt minunate, dar nu înseamnă că sunt singurele ce pot fi utilizate.
În cele ce urmează va fi aruncată o privire asupra display-urilor grafice avansate, care, datorită telefoanelor mobile, sunt astăzi rapid disponibile.

Descriere
Ecranul prezentat în figura 1 este caracterizat de 132 x 132 pixeli totalizând 17424 pixeli individual adresabili. Pentru fiecare pixel există disponibil un maxim de 65536 culori individuale şi o iluminare albă pentru a oferi o vizibilitate maximă a ecranului chiar şi în întuneric. Interfaţa este una serială cu 4 fire care operează cu protocolul de magistrală SPI. Display-ul este bazat pe ecranul LCD color de la telefonul Nokia 6100 şi utilizează controlerul Epson S1D15G14. Acesta este disponibil pe piaţă la un preţ de sub 30 Euro.

Probleme
Din această scurtă descriere se pare că este un succesor ideal pentru ecranele LCD simple pe care le utilizăm cu toţii – însă există câteva probleme:
deoarece aceste ecrane sunt utilizate în telefoane mobile, interfaţa necesită semnale la 3,3V – o problemă dacă folosiţi componente de 5V.
iluminarea de fond operează la 14V – aceasta înseamnă că telefoanele care utilizează aceste ecrane necesită circuite de inversare, care să convertească tensiunea normală de alimentare de 5V la 14V.
aceste dispozitive sunt pur grafice: faţă de ecranele LCD simple în acest caz nu există set de caractere integrat – trebuie să vi-l construiţi
ecranele sunt proiectate pentru producţie de masă şi utilizează un conector cu montare pe suprafaţă impropriu, greu de utilizat în cazul unui prototip.
Din fericire, după cum veţi vedea am rezolvat aceste probleme. Pentru început să vedem cum lucrează acest ecran.

Scrierea datelor
Pentru a trimite un pachet de date către ecran, datele trebuie aşezate în formă serială. Din fericire cipul din interiorul display-ului lucrează serial cerând numai 4 pini. Diagrama de temporizare din Figura 2 arată modul de serializare. Primul bit al datelor de trimis este notat cu “A” şi spune ecranului când este trimisă o comandă sau un parametru. Comenzile sunt trimise pentru logică 0 şi parametrii pentru logică 1. După bitul de instrucţiune urmează byte-ul de date. Acesta este transmis bit cu bit începând cu bitul cel mai semnificativ şi terminând cu bitul cel mai puţin semnificativ. Fiecare bit este citit în LCD-ul grafic la schimbarea intrării de ceas din nivel logic 0 în nivel logic 1.

Figura 2 Diagrama de timp

Listă de comenzi
Pentru a vă ajuta în controlul display-ului, sunt disponibile comenzi pentru controlerul integrat Epson. Comenzile principale sunt prezentate în tabelul 1. Acesta vă furnizează câteva indicii despre cum se utilizează ecranul.
De exemplu, o secvenţă de pornire pentru ecran poate fi, după cum urmează:

1 Trimite comanda 0x01 pentru resetarea hardware-ului grafic.
2 Aşteaptă 10 milisecunde.
3 Trimite comanda 0x11 pentru a scoate ecranul din modul Sleep.
4 Aşteaptă 40 milisecunde.
5 Trimite comanda 0x29 pentru comutarea ON a ecranului.
6 Aşteaptă 40 milisecunde
… şi tot aşa.

Culorile
Display-ul are două moduri principale de culoare – 65536 culori şi 4096 culori. O problemă de rezolvat încă de la început este ce mod de lucru veţi folosi: pentru majoritatea aplicaţiilor 65536 de culori sunt prea multe şi adaugă şi dezavantajul că o culoare pentru un pixel este necesar să fie reprezentată de doi byte de informaţie. 4096 de culori este mai avantajos în termeni de utilizare a memoriei şi de viteză, este bine pentru poze, dar insuficient pentru grafică. Mai mult, ecranul permite realizarea unei sub-selecţii de numai 256 de culori din paleta de 4096 de culori. Aceasta ne permite să reprezentăm informaţia de culoare cu numai un byte de date, ceea ce face comunicaţia cu ecranul un pic mai simplă şi mai rapidă. Dar cum să selectaţi 256 de culori din paleta de 4096? În paleta de 4096 există 4 biţi pentru fiecare roşu, verde şi albastru (2^12 = 4096). Aceasta înseamnă 12 biţi de informaţie pe pixel sau 1,5 byte. Cumva trebuie să reducem aceasta la 1 byte.

Tabel 1 Comenzi şi parametri

Deci cum se face? Să analizăm o posibilă soluţie. Ceea ce ar trebui să facem este de a împărţi fiecare byte astfel încât 3 biţi reprezintă componenta de roşu a culorii, 3 componenta verde a culorii şi 2 pentru albastru. Această tehnică, numită uzual ‘3-3-2’ a fost utilizată un timp în tehnologia video digitală.

Tabel 2 Cum este utilizat un byte pentru a reprezenta o culoare.

Tabel 3 Tabel de corespondenta pentru rosu si verde

Tabel 4 Tabel de corespondenta pentru albastru

Dacă acest sistem este posibil, trebuie obţinută apoi culoarea dorită prin simpla aproximare a acesteia în termeni de conţinut RGB. Această operaţie este posibilă prin utilizarea unei alte tabele de căutare. Această a doua tabelă de căutare vă permite potrivirea culorilor în sistem 3-3-2 cu nuanţe în sistemul pe 12 biţi 4-4-4. Fie tabelul 3 pentru stabilirea corespondenţei dintre 8 culori roşii din sistemul 3-3-2 în sistemul 4-4-4:
Aici sunt prezentate 8 nuanţe disponibile de roşu în sistemul 3-3-2 cu corespondenţele lor, adică 8 nuanţe de roşu în sistemul 4-4-4, formând un amestec de nuanţe pentru 3-3-2. Acest mecanism este utilizat pentru corespondenţe pe Roşu şi Verde. Pentru albastru trebuie redus numărul de selecţii la numai 4 din 16 nuanţe posibile, după cum se poate observa în tabelul 4.
Din fericire nu este nevoie să scrieţi codul sau să căutaţi în tabele pentru a implementa toate acestea – LCD-ul este astfel proiectat încât are implementată această facilitate şi tot ce trebuie făcut este, ca la pornire, display-ul să primească selecţia de culoare dorită pentru 3-3-2. Acest lucru se realizează prin utilizarea comenzii 0x2D. Astfel, după iniţializare trebuie să se trimită următoarele comenzi:

7 Trimite comanda 0x3A pentru a stabili modul de interfaţă în format pixel.
8 Trimite parametrul 0x02 pentru a stabili 8 biţi pe pixel.
9 Trimite comanda 0x20 pentru a nu exista inversiuni de culoare.
10 Trimite comanda 0x2D pentru a construi o tabelă de căutare pe 8 biţi.
11 Trimite constante de culoare de 20 de byte ca parametrii de construcţie a tabelei de căutare:

0x00,0x02,0x04,0x06,0x09,0x0B,0x0D,0x0F,0x00,0x02,0x04,0x06,0x09,0x0B,0x0D,0x0F,0x00,0x04,0x0B,0x0F

După aceasta sunteţi gata să începeţi scrierea datelor pe display. Iată câteva noi concepte:

Ferestre cu microcontrolere!!

Display-ul grafic se bazează pe un dispozitiv de memorare din interiorul său. Atunci când scrieţi pe ecran aveţi prin urmare nevoie să spuneţi acestuia unde să arate datele trimise. Practic se defineşte o parte a ecranului ca ‘fereastră’. Fereastra poate fi o secţiune la fel de mică precum un pixel sau poate fi întreaga suprafaţă a ecranului. Atunci când se scrie informaţia pe zonele dorite trebuie urmaţi câţiva paşi.

12 Trimite comanda 0x2A pentru a asocia o adresă de ‘coloană’
13 Trimite parametrul coordonata x stânga sus a ferestrei (0 – 131)
14 Trimite parametrul coordonata y stânga sus a ferestrei (0 – 131)
15 Trimite comanda 0x2B pentru a asocia o adresă de ‘pagină’
16 Trimite parametrul coordonata x dreapta jos a ferestrei (X1 – 131)
17 Trimite parametrul coordonata y dreapta jos a ferestrei (Y1 – 131)
18 Trimite comanda 0x2C pentru a stabili fereastra ca zonă editabilă.
19 Trimite parametrul valoare culoare pentru a fi asociat pixelului sus stânga.
20 Continuă trimiterea parametrilor de valoare de culoare până când fiecare pixel din acea linie a primit o culoare.
21 Se repetă paşii 18 şi 19 pentru toţi pixelii din fereastra specificată.
Conceptul de adresă de ‘coloană’ şi adresă de ‘pagină’ necesită câteva explicaţii: spre deosebire de un display convenţional LCD unde trebuie specificată locaţia caracterului în termeni de X şi Y, în cazul display-ului grafic trebuie specificată o zonă a ecranului ce se doreşte utilizată. Aceasta corespunde unui bloc de memorie din interiorul dispozitivului. Odată ce a fost specificată o locaţie de memorie / zonă ecran, trebuie transcrise secvenţial culorile asociate fiecărui pixel. Nu este nevoie să specificaţi locaţiile x şi y pentru fiecare pixel din fereastră – display-ul are grijă de acest lucru. Aceasta poate părea o tehnică ciudată, dar dispozitivul este gestionat în acest fel dintr-un bun motiv: el permite o scriere foarte rapidă a imaginilor pe ecran, ceea ce reprezintă un mare avantaj pentru afişarea de fotografii şi chiar video.

Gestionarea textului
Dacă aţi înţeles cum se scrie pe o zonă a ecranului, atunci deja bănuiţi cum se scrie un caracter într-o locaţie particulară pe ecran.
După cum am văzut mai devreme nu există set de caractere integrat pe acest tip de display: trebuie să vă construiţi singuri unul. Pentru afişarea unui text pe ecran, primul pas este crearea unei ferestre de dimensiune 5 x 8 pentru a găzdui informaţia de pixeli. Fiecare caracter va lua 5 byte de memorie pentru a umple fereastra de 5 x 8. Este apoi simplu de trecut de la byte-ul 1 la 5, verificând cei mai puţin semnificativi biţi. Dacă bitul este 0 atunci trimite o culoare de fond, iar dacă este 1 atunci trimite culoare de prim-plan.

Figura 4

După completarea acestei operaţii pentru toţi aceşti 5 byte trebuie să vă mutaţi pe următorii cei mai puţin semnificativi biţi şi tot aşa până când suprafaţa ferestrei este complet definită ca pixeli. De exemplu pentru litera ‘M’ secvenţa va fi:

0x7F , 0x02 , 0x04 , 0x02 , 0x7F

Pentru litera mică ‘m’ va fi:

0x7C , 0x04 , 0x18 , 0x04 , 0x78

Etc. (vedeţi figura 4.)
Desigur că operaţiunea de construire a şirurilor de date pentru fiecare caracter este o operaţiune laborioasă. În practică aveţi nevoie de un tabel de căutare care specifică imaginea bitmap a fiecărui caracter.

Gestionarea graficii
Gestionarea graficii este un pic mai dificilă. De exemplu pentru trasarea unei linii aveţi nevoie fie să declaraţi o secvenţă de ferestre de 1 pixel fiecare şi apoi să trimiteţi parametrii acestor pixeli, sau să declaraţi o fereastră mai largă şi să calculaţi într-un fel datele de trimis ferestrei pentru a obţine grafica dorită.

Treabă mai uşoară pentru dvs.
Dacă aţi înţeles modul de lucru, dar vi se pare că este o muncă grea, nu intraţi în panică: ceea ce am făcut noi este să pregătim pentru dvs. un kit standard de hardware şi software care face ca munca dvs. să fie mai uşoară. Software-ul constă dintr-un număr de rutine C şi tabele, dintre care unele le vedeţi, ca exemplu, în cele ce urmează.

Lcd_init();
Lcd_clear();
Lcd_box (0, 0, 131, 131, BLUE);
Lcd_box(25,20,106,65,WHITE);
Lcd_print(„E”, 3, 2, 2, BLACK, WHITE, 1);
Lcd_print(„-BLOCKS”, 8, 2, 1, BLACK, WHITE, 7);
Lcd_print(„Graphic LCD”, 5, 6, 0, BLACK, WHITE, 11);
Lcd_drawline (25, 67, 106, 67, BLACK);
Lcd_drawline (20, 69, 111, 69, BLACK);
Lcd_drawline (15, 71, 116, 71, BLACK);
Lcd_box (15, 90, 35, 110, RED);
Lcd_box (35, 90, 55, 110, YELLOW);
Lcd_box (55, 90, 75, 110, GREEN);
Lcd_box (75, 90, 95, 110, ORANGE);
Lcd_box (95, 90, 115, 110, BRIGHTBLUE);

Listare 1 Programul complet C pentru display-ul color
(programul Flowcode echivalent este prezentat în Figura 6).

Dacă C-ul nu vă este la îndemână nu vă faceţi griji: aceste biblioteci se potrivesc fără probleme în Flowcode 3 şi fac LCD-ul accesibil programatorilor de toate nivelele. Am oferit de asemenea un program demonstrativ în Flowcode 3 care realizează imaginea pe care o puteţi vedea în figura 5. Puteţi utiliza fişierul prezentat ca punct de plecare pentru toate programele dvs.
Fişierul Flowcode este numit Example_file.fcf. Biblioteca C este numită GFX_LCD_Functions.c. Dacă utilizaţi Flowcode atunci trebuie să aveţi fişierul C în acelaşi director ca şi fişierul Flowcode, deoarece acesta din urmă îl foloseşte ca bibliotecă externă în timpul procesului de compilare.

Reprezentarea caracterelor de text
Pentru început am construit un set standard de tabele de caractere care vă permit să utilizaţi ecranul ca display LCD de 22 cu 15 caractere. Fiecare caracter este realizat din coloane de 5 pixeli cu rânduri de 8 pixeli şi este bazat pe tabel ASCII. Aşa că pentru a scrie un caracter, dvs. trebuie doar să scrieţi echivalentul său ASCII. Până acum am alocat doar caracterele principale – acelea ce necesită diacritice şi accente vor trebui adăugate acestui tabel. Tabelul este prezentat în listarea 2. Caracterele sunt împărţite în matrici.

Funcţii standard
Pe de altă parte am pregătit un set standard de funcţii care conduc la un comportament similar cu ecranele LCD convenţionale cu următoarele comenzi:
Lcd_init();
Lcd_clear();
Lcd_drawline (X1, Y1, X2,Y2, Colour);
Lcd_print(String, X, Y,Size(0-2), FontColour, BackColour, StringLength);
Lcd_box(X1, Y1, X2, Y2, Colour);
Lcd_init iniţializează display-ul.
Lcd_clear curăţare display.
Lcd_drawline trage o linie de culoare potrivită între pixelii X1, Y1 şi X2, Y2.
Lcd_print imprimă un şir de caractere cu locaţia X, Y, dimensiunea 0, 1, sau 2 (dimensiunea 0 este implicită, dimensiunea 1 utilizează 4 pixeli pe pixel normal, dimensiunea 2 utilizează 9 pixeli pe pixel) cu culori de font şi fond. Cu această comandă trebuie să specificaţi şi lungimea şirului de caractere.
Lcd_box desenează o fereastră de pixeli dată de locaţia X1, Y1 şi X2, Y2 cu culoarea dorită.

Concluzie

Figura 6 Programul echivalent

Display-urile monocrome pe 2 rânduri şi 16 caractere au servit aplicaţiilor noastre pentru o perioadă de timp îndelungată, dar acum preţurile afişajelor grafice LCD a scăzut şi a venit timpul pentru aplicaţii noi, moderne. Noile display-uri de la Nokia au un preţ relativ scăzut şi – pentru microcontrolerele moderne de astăzi – utilizarea lor este facilă. Acestea oferă multe oportunităţi de realizare a unor sisteme mai funcţionale şi mai interesante.

Link-uri
Puteţi găsi foia de catalog a display-ului S1D15G14 la adresa web: www.epsonelectronics.de
Setul de caractere scris în cod C (Listing 2) îl găsiţi în pagina noastră de internet la adresa: www.electronica-azi.ro/articol.php?id_ar=4272

Setul de caractere scris în cod C (Listing 2):
rom char* ASCII1 = {0x00 , 0x00 , 0x00 , 0x00 , 0x00, // space // 32 – 43
0x00 , 0x06 , 0x5F , 0x06 , 0x00, // !
0x07 , 0x03 , 0x00 , 0x07 , 0x03, // ”
0x24 , 0x7E , 0x24 , 0x7E , 0x24, // #
0x24 , 0x2B , 0x6A , 0x12 , 0x00, // $
0x63 , 0x13 , 0x08 , 0x64 , 0x63, // %
0x36 , 0x49 , 0x56 , 0x20 , 0x50, // &
0x00 , 0x07 , 0x03 , 0x00 , 0x00, // ‘
0x00 , 0x3E , 0x41 , 0x00 , 0x00, // (
0x00 , 0x41 , 0x3E , 0x00 , 0x00, // )
0x08 , 0x3E , 0x1C , 0x3E , 0x08, // *
0x08 , 0x08 , 0x3E , 0x08 , 0x08}; // +
rom char* ASCII2 = {0x00 , 0xE0 , 0x60 , 0x00 , 0x00, // , // 44 – 55
0x08 , 0x08 , 0x08 , 0x08 , 0x08, // –
0x00 , 0x60 , 0x60 , 0x00 , 0x00, // .
0x20 , 0x10 , 0x08 , 0x04 , 0x02, // /
0x3E , 0x51 , 0x49 , 0x45 , 0x3E, // 0
0x00 , 0x42 , 0x7F , 0x40 , 0x00, // 1
0x62 , 0x51 , 0x49 , 0x49 , 0x46, // 2
0x22 , 0x49 , 0x49 , 0x49 , 0x36, // 3
0x18 , 0x14 , 0x12 , 0x7F , 0x10, // 4
0x2F , 0x49 , 0x49 , 0x49 , 0x31, // 5
0x3C , 0x4A , 0x49 , 0x49 , 0x30, // 6
0x01 , 0x71 , 0x09 , 0x05 , 0x03}; // 7
rom char* ASCII3 = {0x36 , 0x49 , 0x49 , 0x49 , 0x36, // 8 // 56 – 67
0x06 , 0x49 , 0x49 , 0x29 , 0x1E, // 9
0x00 , 0x6C , 0x6C , 0x00 , 0x00, // :
0x00 , 0xEC , 0x6C , 0x00 , 0x00, // ;
0x08 , 0x14 , 0x22 , 0x41 , 0x00, // < 0x24 , 0x24 , 0x24 , 0x24 , 0x24, // = 0x00 , 0x41 , 0x22 , 0x14 , 0x08, // >
0x02 , 0x01 , 0x59 , 0x09 , 0x06, // ?
0x3E , 0x41 , 0x5D , 0x55 , 0x1E, // @
0x7E , 0x09 , 0x09 , 0x09 , 0x7E, // A
0x7F , 0x49 , 0x49 , 0x49 , 0x36, // B
0x3E , 0x41 , 0x41 , 0x41 , 0x22}; // C
rom char* ASCII4 = {0x7F , 0x41 , 0x41 , 0x41 , 0x3E, // D // 68 – 79
0x7F , 0x49 , 0x49 , 0x49 , 0x41, // E
0x7F , 0x09 , 0x09 , 0x09 , 0x01, // F
0x3E , 0x41 , 0x49 , 0x49 , 0x7A, // G
0x7F , 0x08 , 0x08 , 0x08 , 0x7F, // H
0x00 , 0x41 , 0x7F , 0x41 , 0x00, // I
0x30 , 0x40 , 0x40 , 0x40 , 0x3F, // J
0x7F , 0x08 , 0x14 , 0x22 , 0x41, // K
0x7F , 0x40 , 0x40 , 0x40 , 0x40, // L
0x7F , 0x02 , 0x04 , 0x02 , 0x7F, // M
0x7F , 0x02 , 0x04 , 0x08 , 0x7F, // N
0x3E , 0x41 , 0x41 , 0x41 , 0x3E}; // O
rom char* ASCII5 = {0x7F , 0x09 , 0x09 , 0x09 , 0x06, // P // 80 – 91
0x3E , 0x41 , 0x51 , 0x21 , 0x5E, // Q
0x7F , 0x09 , 0x09 , 0x19 , 0x66, // R
0x26 , 0x49 , 0x49 , 0x49 , 0x32, // S
0x01 , 0x01 , 0x7F , 0x01 , 0x01, // T
0x3F , 0x40 , 0x40 , 0x40 , 0x3F, // U
0x1F , 0x20 , 0x40 , 0x20 , 0x1F, // V
0x3F , 0x40 , 0x3C , 0x40 , 0x3F, // W
0x63 , 0x14 , 0x08 , 0x14 , 0x63, // X
0x07 , 0x08 , 0x70 , 0x08 , 0x07, // Y
0x71 , 0x49 , 0x45 , 0x43 , 0x00, // Z
0x00 , 0x7F , 0x41 , 0x41 , 0x00}; // [
rom char* ASCII6 = {0x02 , 0x04 , 0x08 , 0x10 , 0x20, // // 92 – 103
0x00 , 0x41 , 0x41 , 0x7F , 0x00, // ]
0x04 , 0x02 , 0x01 , 0x02 , 0x04, // ^
0x80 , 0x80 , 0x80 , 0x80 , 0x80, // _
0x00 , 0x03 , 0x07 , 0x00 , 0x00, // `
0x20 , 0x54 , 0x54 , 0x54 , 0x78, // a
0x7F , 0x44 , 0x44 , 0x44 , 0x38, // b
0x38 , 0x44 , 0x44 , 0x44 , 0x28, // c
0x38 , 0x44 , 0x44 , 0x44 , 0x7F, // d
0x38 , 0x54 , 0x54 , 0x54 , 0x18, // e
0x08 , 0x7E , 0x09 , 0x09 , 0x00, // f
0x18 , 0xA4 , 0xA4 , 0xA4 , 0x7C}; // g
rom char* ASCII7 = {0x7F , 0x04 , 0x04 , 0x78 , 0x00, // h // 104 – 115
0x00 , 0x00 , 0x7D , 0x00 , 0x00, // i
0x40 , 0x80 , 0x84 , 0x7D , 0x00, // j
0x7F , 0x10 , 0x28 , 0x44 , 0x00, // k
0x00 , 0x00 , 0x7F , 0x40 , 0x00, // l
0x7C , 0x04 , 0x18 , 0x04 , 0x78, // m
0x7C , 0x04 , 0x04 , 0x78 , 0x00, // n
0x38 , 0x44 , 0x44 , 0x44 , 0x38, // o
0xFC , 0x44 , 0x44 , 0x44 , 0x38, // p
0x38 , 0x44 , 0x44 , 0x44 , 0xFC, // q
0x44 , 0x78 , 0x44 , 0x04 , 0x08, // r
0x08 , 0x54 , 0x54 , 0x54 , 0x20}; // s
rom char* ASCII8 = {0x04 , 0x3E , 0x44 , 0x24 , 0x00, // t // 116 – 126
0x3C , 0x40 , 0x20 , 0x7C , 0x00, // u
0x1C , 0x20 , 0x40 , 0x20 , 0x1C, // v
0x3C , 0x60 , 0x30 , 0x60 , 0x3C, // w
0x6C , 0x10 , 0x10 , 0x6C , 0x00, // x
0x9C , 0xA0 , 0x60 , 0x3C , 0x00, // y
0x64 , 0x54 , 0x54 , 0x4C , 0x00, // z
0x08 , 0x3E , 0x41 , 0x41 , 0x00, // {
0x00 , 0x00 , 0x7F , 0x00 , 0x00, // |
0x00 , 0x41 , 0x41 , 0x3E , 0x08, // }
0x02 , 0x01 , 0x02 , 0x01 , 0x00}; // ~

Preţul unui display graphic LCD este de
aproximativ £50 + taxe.

Mai multe informaţii de preţ, exemple de programare şi un document care descrie strategia de codare în C puteţi găsi la adresa redacţiei:
Tel: 031 805 9955, 031 805 9887
Mobil: 0722 707254
office@electronica-azi.ro

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *

  • Folosim datele dumneavoastră cu caracter personal NUMAI pentru a răspunde comentariilor/solicitărilor dumneavoastră.
  • Pentru a primi raspunsuri adecvate solicitărilor dumneavoastră, este posibil să transferăm adresa de email și numele dumneavoastră către autorul articolului.
  • Pentru mai multe informații privind politica noastră de confidențialitate și de prelucrare a datelor cu caracter personal, accesați link-ul Politica de prelucrare a datelor (GDPR) si Cookie-uri.
  • Dacă aveți întrebări sau nelămuriri cu privire la modul în care noi prelucrăm datele dumneavoastră cu caracter personal, puteți contacta responsabilul nostru cu protecția datelor la adresa de email: gdpr@esp2000.ro
  • Abonați-vă la newsletter-ul revistei noastre