This shows you the differences between two versions of the page.
|
pm:prj2026:ciprian.popescu0411:andrei.nitescu1307 [2026/05/09 23:52] andrei.nitescu1307 [Hardware Design] |
pm:prj2026:ciprian.popescu0411:andrei.nitescu1307 [2026/05/27 03:01] (current) andrei.nitescu1307 demo |
||
|---|---|---|---|
| Line 3: | Line 3: | ||
| Proiectul constă într-un emulator de un model fictiv de procesor RISC (Reduced Instruction Set Computer), extrem de simplificat, programabil prin intermediul unor butoane si al unui display I2C de caractere ASCII. De asemenea, acesta este capabil de afișare customizabilă pe un display SPI adițional cu pixeli editabili. | Proiectul constă într-un emulator de un model fictiv de procesor RISC (Reduced Instruction Set Computer), extrem de simplificat, programabil prin intermediul unor butoane si al unui display I2C de caractere ASCII. De asemenea, acesta este capabil de afișare customizabilă pe un display SPI adițional cu pixeli editabili. | ||
| - | Ideea de la care am pornit conceperea acestui proiect o reprezintă aplicarea procesului de emulare a unei alte tehnologii, cât și crearea unei interfeței prin intermediul căreia tehnologia emulată virtual (în cazul ăsta, un procesor cu regiștri) poate fi programată în timp real. Pe lângă nivelul crescut de interactivitate, această idee schimbă fundamental direcția proiectului, axându-se mai puțin pe rularea de programe codate anterior folosind un anumit set de instrucțiuni și mai mult pe scrierea de astfel de programe și observarea efectului imediat al acestora. | + | Scopul fundamental al proiectului este de a crea o platformă prin intermediul căreia programatorul de rând poate experimenta cu instrucțiuni rudimentare, și totuși care stau la baza oricărui software. |
| + | |||
| + | Ideea de la care am pornit conceperea acestui proiect o reprezintă aplicarea procesului de emulare a unei tehnologii diferite, cât și crearea unei interfețe prin intermediul căreia tehnologia emulată virtual (în cazul ăsta, un procesor cu regiștri) poate fi programată în timp real. Pe lângă nivelul crescut de interactivitate, această idee schimbă fundamental direcția proiectului, axându-se mai puțin pe rularea de programe codate anterior folosind un anumit set de instrucțiuni și mai mult pe scrierea de astfel de programe și observarea efectului imediat al acestora. | ||
| Consider că utilitatea unui asemenea proiect provine, în primul rând, din demonstrarea posibilității de emulare într-un context neortodox (comparativ cu un caz clasic, de exemplu, de emulare al unei console pe calculatorul personal). În al doilea rând, acest emulator poate, de asemenea, fi prezentat drept un prototip pentru un model de "calculator portabil pentru programatori", concept care are potențial de inspirare pentru dezvoltarea altor tehnologii de către persoane interesate în a se juca cu o asemenea idee. | Consider că utilitatea unui asemenea proiect provine, în primul rând, din demonstrarea posibilității de emulare într-un context neortodox (comparativ cu un caz clasic, de exemplu, de emulare al unei console pe calculatorul personal). În al doilea rând, acest emulator poate, de asemenea, fi prezentat drept un prototip pentru un model de "calculator portabil pentru programatori", concept care are potențial de inspirare pentru dezvoltarea altor tehnologii de către persoane interesate în a se juca cu o asemenea idee. | ||
| Line 9: | Line 11: | ||
| Cât despre utilitatea personală, la nivel teoretic consider că proiectul îmi antrenează abilitatea de concepere de sisteme cu interfețe prin intermediul călora alți dezvoltatori pot avea acces simplificat la tehnologia încapsulată în spate. Practic, acest proiect îmi oferă oportunitatea de a mă juca cu instrucțiuni simple pentru a observa posibilitățile oferite de modele de procesoare chiar și atât de simplificate. | Cât despre utilitatea personală, la nivel teoretic consider că proiectul îmi antrenează abilitatea de concepere de sisteme cu interfețe prin intermediul călora alți dezvoltatori pot avea acces simplificat la tehnologia încapsulată în spate. Practic, acest proiect îmi oferă oportunitatea de a mă juca cu instrucțiuni simple pentru a observa posibilitățile oferite de modele de procesoare chiar și atât de simplificate. | ||
| =====Descriere generală===== | =====Descriere generală===== | ||
| - | {{schema_bloc_nitescu_andrei.png}} | + | {{schema_bloc_2_nitescu_andrei.png}} |
| *ATMega328P - microcontroller-ul proiectului, inclus în placa de dezvoltare ATmega328P Xplained Mini | *ATMega328P - microcontroller-ul proiectului, inclus în placa de dezvoltare ATmega328P Xplained Mini | ||
| *Modul LCD cu SPI și Controller ST7735 - display de 1.44'', pe care se pot modifica pixelii folosind instrucțiuni speciale | *Modul LCD cu SPI și Controller ST7735 - display de 1.44'', pe care se pot modifica pixelii folosind instrucțiuni speciale | ||
| - | *Modul LCD 2x16 cu convertitor HD44780 pentru I2C - display de două rânduri de câte 16 caractere ASCII, pentru afișarea elementelor de interfață în faza programabilă și a ieșirii numerice în urma rulării programului | + | *Modul LCD 2x16 cu convertitor HD44780 - display de două rânduri de câte 16 caractere ASCII, pentru afișarea elementelor de interfață în faza programabilă și a ieșirii numerice în urma rulării programului - legat de un modul de interfață pentru comunicare I2C |
| - | *6 butoane - implementate cu întreruperi: 2 butoane pentru scroll printre tipurile de instrucțiuni și printre tipurile de regiștri, 2 butoane pentru trecerea prin liniile de cod și componentele fiecăreia, un buton pentru intrarea în modul de programare și un buton pentru rularea programului codat anterior. | + | *3 butoane - implementate cu întreruperi: un pentru scroll printre tipurile de instrucțiuni și printre tipurile de regiștri, un buton pentru trecerea prin liniile de cod și componentele fiecăreia la dreapta (plus intrarea în modul de rulare la finalul secțiunii de cod) și un buton pentru trecut în stânga și reintrarea în modul programabil. |
| Odată pornit, emulatorul, aflat inițial în prima stare, are la dispoziție două moduri de funcționare distincte: | Odată pornit, emulatorul, aflat inițial în prima stare, are la dispoziție două moduri de funcționare distincte: | ||
| Line 23: | Line 25: | ||
| -ATMega328P Xplained Mini | -ATMega328P Xplained Mini | ||
| -Modul LCD cu SPI și Controller ST7735 | -Modul LCD cu SPI și Controller ST7735 | ||
| - | -Modul LCD 2x16 cu convertitor HD44780 pentru I2C | + | -Modul LCD 2x16 cu convertitor HD44780 |
| - | -Butoane x6 | + | -Modul interfață I2C 1602/2004 |
| + | -Butoane x3 | ||
| -Cablu micro-USB/USB-A | -Cablu micro-USB/USB-A | ||
| - | -Potențiometru de 10k | ||
| -Breadboard | -Breadboard | ||
| - | -Rezistori (10-10k) | + | -Sursă alimentare 3.3/5V pentru breadboard |
| + | -Sursă alimentare 9V cu mufă de DC | ||
| + | -Rezistori (1K, 2K) | ||
| -Cabluri Jumper Male-Female, Male-Male | -Cabluri Jumper Male-Female, Male-Male | ||
| + | |||
| + | ====Schemă electrică==== | ||
| + | {{kicad_schematic_nitescu_andrei.png?800}} | ||
| + | |||
| + | ====Poze proiect asamblat + funcționare de bază==== | ||
| + | {{proj_1_nitescu_andrei.jpeg?800}} | ||
| + | {{proj_2_nitescu_andrei.jpeg?800}} | ||
| + | {{proj_3_nitescu_andrei.jpeg?800}} | ||
| + | {{proj_4_nitescu_andrei.jpeg?800}} | ||
| + | {{proj_5_nitescu_andrei.jpeg?800}} | ||
| + | |||
| + | ====Pinout==== | ||
| + | ^ Pin ^ Funcție ^ | ||
| + | | PB0 | TFT RESET | | ||
| + | | PB1 | TFT DC | | ||
| + | | PB2 | TFT CHIP SELECT | | ||
| + | | PB3 | TFT SDA | | ||
| + | | PB5 | TFT SCL | | ||
| + | | PC4 | I2C SDA | | ||
| + | | PC5 | I2C SCL | | ||
| + | | PD5 | BTN 1 | | ||
| + | | PD6 | BTN 2 | | ||
| + | | PD7 | BTN 3 | | ||
| + | |||
| + | ====Diverse==== | ||
| + | Pentru a adăuga complexitate pe partea de hardware, am utilizat rezistori externi de 1K pentru a realiza pull-down asupra celor trei butoane, nu rezistorii implementați de pull-up din cadrul microcontroller-ului.\\ | ||
| + | Întrucât display-ul TFT funcționează pe bază de tensiune de 3.3V, am alcătuit divizoare de tensiune, utilizând rezistori de 1K și de 2K pentru a genera câte o tensiune asupra pinilor de intrare ai display-ului de 5V*2(=2K)/3(=2K + 1K) ~= 3.3V. | ||
| + | |||
| + | =====Demo===== | ||
| + | https://www.youtube.com/watch?v=7Zzr1YCnx08 | ||
| + | |||
| + | |||
| =====Software Design===== | =====Software Design===== | ||
| + | Github: | ||
| + | https://github.com/Andrei1139/RISC_Processor_Emulator | ||
| + | \\ Biblioteci utilizate:\\ | ||
| + | * hd44780 - duinoWitchery - pentru interacțiunea cu modulul I2C (https://github.com/duinoWitchery/hd44780) | ||
| + | * Adafruit-ST7735-Library - Adafruit - pentru interacțiunea cu display-ul SPI cu modulul din familia ST77* (https://github.com/adafruit/adafruit-st7735-library) | ||
| =====Rezultate Obţinute===== | =====Rezultate Obţinute===== | ||
| =====Concluzii===== | =====Concluzii===== | ||