This shows you the differences between two versions of the page.
pm:prj2023:apredescu:minigpu [2023/05/21 21:55] alex_andrei.cioc [Hardware Design] |
pm:prj2023:apredescu:minigpu [2023/05/28 23:43] (current) alex_andrei.cioc [Software Design] |
||
---|---|---|---|
Line 44: | Line 44: | ||
DAC-ul are 3 registri de 10 biti pentru memorarea datelor pentru RGB. Deoarece modulul de dezvoltare nu are destui pini GPIO disponibili pentru a face interfatarea direct pe 24 biti, am folosit 3 registri externi cu rol de buffer. Astfel, ESP32 are interfata de date pe doar 8 biti, la care se adauga celelalte semnale pentru controlul sincronizarilor si altele. | DAC-ul are 3 registri de 10 biti pentru memorarea datelor pentru RGB. Deoarece modulul de dezvoltare nu are destui pini GPIO disponibili pentru a face interfatarea direct pe 24 biti, am folosit 3 registri externi cu rol de buffer. Astfel, ESP32 are interfata de date pe doar 8 biti, la care se adauga celelalte semnale pentru controlul sincronizarilor si altele. | ||
- | Pentru alimentare, se poate utiliza un alimentator de 5V, aplicat pe conectorul micro USB. Placa de dezvoltare un stabilizator la 3.3V, care alimenteaza modulul de ESP32. Afisajul KMR este alimentat cu 3.3V direct din placa. DAC-ul si registrii functioneaza la 1.8V pentru partea digitala; de aceea, am avut nevoie de stabilizator de la 3.3V la 1.8V. Partea analogica se alimenteaza de la 3.3V din placa. | + | Pentru alimentare, se poate utiliza un alimentator de 5V, aplicat pe conectorul micro USB. Placa de dezvoltare are un stabilizator la 3.3V, care alimenteaza modulul de ESP32. Afisajul KMR este alimentat cu 3.3V direct din placa. DAC-ul si registrii functioneaza la 1.8V pentru partea digitala; de aceea, am avut nevoie de stabilizator de la 3.3V la 1.8V. Partea analogica se alimenteaza de la 3.3V din placa. |
Level shifter-ul dual integrat este unidirectional si este folosit pentru semnalele de sincronizare HSYNC si VSYNC. | Level shifter-ul dual integrat este unidirectional si este folosit pentru semnalele de sincronizare HSYNC si VSYNC. | ||
Line 50: | Line 50: | ||
Pentru comunicatia pe protocolul DDC2 (intre ESP32 si monitor), am folosit doua level shiftere bidirectionale, pentru SDA si SCL, realizate cu tranzistoarele NMOS. | Pentru comunicatia pe protocolul DDC2 (intre ESP32 si monitor), am folosit doua level shiftere bidirectionale, pentru SDA si SCL, realizate cu tranzistoarele NMOS. | ||
+ | Schema electrica de mai jos am realizat-o in Autodesk Eagle. | ||
+ | Pentru realizare fizica, mai e putin de asteptat: mai exact, pana mi se livreaza PCB-ul:)) | ||
+ | {{ :pm:prj2023:apredescu:schema_mini_gpu.png?700 |}} | ||
+ | {{ :pm:prj2023:apredescu:fizic_wip_mini_gpu.jpeg?500 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Am dezvoltat proiectul in mediul PlatformIO. | ||
+ | Pentru acest proiect am avut nevoie de mai multe componente la nivel software. Mai exact, pe langa logica efectiva de a genera semnale VGA, am avut nevoie si de o modalitate de a incarca poze pentru a le putea citi pentru afisare pe ecran. | ||
- | ===== Rezultate Obţinute ===== | + | Astfel, am impartit munca pe cele doua core-uri ale ESP32. Un core ruleaza un server HTTP si serveste o pagina Web cu o interfata de unde se poate naviga prin filesystem-ul de pe cardul SD si face operatii precum: |
+ | * Creare de directoare | ||
+ | * Redenumire fisiere/directoare | ||
+ | * Descarcare fisiere | ||
+ | * Incarcare fisiere. | ||
+ | Intre timp, s-a defectat (sau, probabil, nu a functionat niciodata) slot-ul de card SD de pe display, asa ca a trebuit sa adaug un breaker adapter separat, si am schimbat putin conexiunile electrice. | ||
+ | |||
+ | Functionalitatea de generare de semnale VGA foloseste intreruperi precise, pentru a avea o fidelitate cat mai buna a imaginii si a respecta constrangerile de sincronizare VGA. Nu e prea mult de explicat aici, in afara de faptul ca a trebuit sa fiu foarte atent la eficienta si am folosit functiile low-level pentru lucru cu GPIO. | ||
+ | |||
+ | Repository-ul unde se afla codul se gaseste [[https://github.com/nurof3n/mini-gpu|aici]]. | ||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | Cand ies imaginile perfect anunt aici ;) | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | Am aflat pe viu ce inseamna sa stii ce vrei sa faci, sa stii cum sa faci, sa faci, si sa NU mearga :< |
+ | Cand e nevoie si de lucru cu hardware-ul, apar foarte des lucruri neprevazute; si e cu atat mai greu cu cat folosesti piese care nici nu au numele firmei inscriptionat pe ele. De exemplu, display-ul mi-a dat foarte multe batai de cap, caci m-am bazat pe faptul ca slotul integrat de card SD o sa imi fie util. S-a dovedit ca e destul de greu de configurat, si, probabil, trebuie sudate niste jumpere pe acolo ca sa primeasca destul curent pentru a functiona, insa faptul ca nu se gaseste nicaieri documentatie despre circuit m-a facut sa renunt la el si sa folosesc un slot extern. | ||
+ | |||
+ | Batai mari de cap mi-a dat si placuta de dezvoltare cu ESP32, mai ales alegerea pinilor. Proiectul meu necesita o latime de banda mare pentru output, si am ajuns sa folosesc toti pinii GPIO care nu sunt rezervati pentru alte lucruri importante; adica, daca mai aveam nevoie de inca un pin, probabil nu mai aveam de unde sa fac rost:)) M-am incadrat la fix numai dupa ce am facut sacrificiul de a avea un throughput de 3 ori mai mic, folosind registri pentru scrierea pe rand a bitilor de culoare RGB; astfel, in loc de 24 de biti pentru culoare, folosesc doar 8 biti, insa scriu de 3 ori. In viata nu le poti avea pe toate ;) | ||
+ | |||
+ | De asemenea, a fost o experienta (si de bonding, de altfel) sa stau cu tata sa printam un PCB de "mana"... | ||
+ | ===== Download ===== | ||
+ | Repository [[https://github.com/nurof3n/mini-gpu|aici]]. | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 73: | Line 98: | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
+ | Resurse (foarte) utile: | ||
+ | * Documentatia oficiala pentru placuta mea: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html | ||
+ | * Laburile de PM | ||
+ | Biblioteci folosite: | ||
+ | * https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/Arduino.h | ||
+ | * https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFi | ||
+ | * https://github.com/espressif/arduino-esp32/tree/master/libraries/WebServer | ||
+ | * https://github.com/espressif/arduino-esp32/tree/master/libraries/SD | ||
+ | * https://github.com/Bodmer/TFT_eSPI | ||
+ | * https://github.com/Bodmer/TJpg_Decoder | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||