Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:victor.stoica0203:degeratu_razvan [2026/05/19 12:10]
razvan.degeratu
pm:prj2026:victor.stoica0203:degeratu_razvan [2026/05/24 22:55] (current)
razvan.degeratu [Download]
Line 1: Line 1:
-====== Statie Meteo cu Navigatie ​prin Intreruperi ​======+====== Statie Meteo cu Navigatie ​- Degeratu Razvan-Andrei ​======
  
 ===== Introducere ===== ===== Introducere =====
Line 6: Line 6:
 Sistemul utilizeaza un potentiometru analogic pentru navigarea fluida intre ecrane. Schimbarea paginilor este gestionata in fundal prin intreruperi hardware. Codul este scris integral in C pentru microcontrolerul ATmega328P, lucrand direct la nivel de registri hardware, fara a apela la biblioteci high-level din ecosistemul Arduino. Sistemul utilizeaza un potentiometru analogic pentru navigarea fluida intre ecrane. Schimbarea paginilor este gestionata in fundal prin intreruperi hardware. Codul este scris integral in C pentru microcontrolerul ATmega328P, lucrand direct la nivel de registri hardware, fara a apela la biblioteci high-level din ecosistemul Arduino.
  
-**Ideea de pornire:** Dorinta de a dezvolta un sistem de telemetrie compact si independent,​ care nu doar afiseaza valori instantanee,​ ci construiește un istoric vizual direct pe un ecran de rezolutie mica. Prin eliminarea comunicatiei UART, statia devine un dispozitiv portabil prin conectarea la o baterie de 9V, capabil sa retina ​recordurile climatice ​chiar si dupa intreruperea alimentarii.+**Ideea de pornire:** Dorinta de a dezvolta un sistem de telemetrie compact si independent,​ care nu doar afiseaza valori instantanee,​ ci construiește un istoric vizual direct pe un ecran de rezolutie mica. Prin eliminarea comunicatiei UART, statia devine un dispozitiv portabil prin conectarea la o baterie de 9V, capabil sa retina ​istoricul climatic ​chiar si dupa intreruperea alimentarii.
  
 **Utilitate:​** Monitorizarea microclimatului ambiental cu un grad ridicat de precizie si analizarea tendintelor meteorologice pe termen scurt prin intermediul graficelor cu axe si grid renderizate bitwise. **Utilitate:​** Monitorizarea microclimatului ambiental cu un grad ridicat de precizie si analizarea tendintelor meteorologice pe termen scurt prin intermediul graficelor cu axe si grid renderizate bitwise.
 +
 +===== Ipoteza =====
 +Cred că scrierea codului exclusiv la nivel de regiștri, fără utilizarea bibliotecilor de nivel înalt, va îmbunătăți semnificativ performanța,​ va reduce dramatic amprenta de memorie SRAM și va asigura fluiditatea afișării pe ecranul OLED (refresh rate stabil), deoarece elimină overhead-ul funcțiilor din biblioteci și permite actualizarea asincronă a ecranului și citirea senzorilor direct în bucla principală,​ cu temporizare hardware.
  
 ===== Descriere generala ===== ===== Descriere generala =====
Line 31: Line 34:
   * **BME280 & OLED:** Pinii VCC se alimenteaza corespunzator,​ GND merge la masa comuna, SDA se conecteaza la pinul A4 (PC4 / TWI Data), iar SCL la pinul A5 (PC5 / TWI Clock).   * **BME280 & OLED:** Pinii VCC se alimenteaza corespunzator,​ GND merge la masa comuna, SDA se conecteaza la pinul A4 (PC4 / TWI Data), iar SCL la pinul A5 (PC5 / TWI Clock).
   * **Potentiometru (Navigatie):​** Pinii de margine sunt conectati la 5V si GND pentru a crea divizorul de tensiune, iar pinul central (Wiper) este conectat la intrarea analogica A0 (PC0 / ADC Channel 0).   * **Potentiometru (Navigatie):​** Pinii de margine sunt conectati la 5V si GND pentru a crea divizorul de tensiune, iar pinul central (Wiper) este conectat la intrarea analogica A0 (PC0 / ADC Channel 0).
 +
 +//Schema electrica
 +{{ :​pm:​prj2026:​victor.stoica0203:​degeraturazvanproiectpm.png | }}
 +
 +// Videoclip demonstrativ ​
 +https://​www.youtube.com/​watch?​v=PE-LNIbtaL8
  
 ===== Software Design ===== ===== Software Design =====
  
   * **Mediu de dezvoltare:​** VS Code cu extensia PlatformIO (compilator avr-gcc).   * **Mediu de dezvoltare:​** VS Code cu extensia PlatformIO (compilator avr-gcc).
-  * **Abordare "​Bare-Metal":​** Nu se folosesc biblioteci externe ​(ex: Wire.h sau Adafruit_SSD1306). Toate protocoalele si driverele de periferic sunt scrise prin manipulare de registri.+  * **Abordare "​Bare-Metal":​** Nu se folosesc biblioteci externe. Toate protocoalele si driverele de periferic sunt scrise prin manipulare de registri.
   * **Concepte si algoritmi din laboratoare:​**   * **Concepte si algoritmi din laboratoare:​**
-    * **Laboratorul 2 (Intreruperi):​** Implementarea unei rutine de serviciu a intreruperii (ISR) atasata Timer-ului 1. Navigatia sistemului nu ruleaza secvential, ci este asincronaintrerupand executia buclei principale pentru a asigura ​fluiditatea tranzitiei ecranelor. +    * **Laboratorul 2 (Intreruperi):​** Implementarea unei rutine de serviciu a intreruperii (ISR) atasata Timer-ului 1. Navigatia sistemului nu ruleaza secvential, ci asincronasigurand ​fluiditatea tranzitiei ecranelor. 
-    * **Laboratorul 3 (Timere):** Configurarea Timer1 in modul CTC (Clear Timer on Compare Match) ​cu un prescaler de 1024 si prag setat in OCR1A. ​Acesta asigura ​ticaitul hardware precis la fiecare 100ms pentru esantionarea interfetei. +    * **Laboratorul 3 (Timere):** Configurarea Timer1 in modul CTC cu un prescaler de 1024 si prag setat in OCR1A. ​Asigura ​ticaitul hardware precis la fiecare 100ms pentru esantionarea interfetei, decuplat de restul codului
-    * **Laboratorul 4 (ADC):** Configurarea registrului ADMUX (referinta AVCC) si ADCSRA ​(prescaler 128 pentru rezolutie maxima de 10 biți). Conversia este declansata ​in interiorul ISR-ului ​pentru a citi pozitia potentiometrului. +    * **Laboratorul 4 (ADC):** Configurarea registrului ADMUX (referinta AVCC) si ADCSRA. Conversia este declansata ​regulat ​pentru a citi pozitia potentiometrului ​de navigare
-    * **Laboratorul 6 (I2C):** Initializarea modulului TWI din registrele TWBR si TWSR la o frecventa de 100kHz, gestionand secventele de START, STOP, Write si Read cu ACK/NACK pentru ​ecran si senzor+    * **Laboratorul 6 (I2C):** Initializarea modulului TWI la o frecventa de 100kHz, gestionand secventele de START, STOP, Write si Read cu ACK/NACK pentru ​display ​si senzorul BME280
-    * **Stocare Persistenta (EEPROM):** Utilizarea registrelor EEAR, EEDR si EECR pentru a salva si citi persistent ​recordurile istorice ​absolute de Max/Min ale statiei, implementand un algoritm de auto-recalibrare la prima pornire dintr-o stare virgina (0xFF). +    * **Memoria ​EEPROM:** Utilizarea registrelor EEAR, EEDR si EECR pentru a salva persistent ​istoricele ​absolute de Max/Min ale statiei.
-    * **Algoritmul de Grafica:** Shiftarea in timp real a array-urilor de istoric (scrolling efect) si utilizarea operatiilor pe biti (bitwise shifting) pentru a randa barele verticale ale graficului peste un grid punctat pre-calculat.+
  
-===== Rezultate Obţinute ​===== +===== Elemente de Noutate ​===== 
-S-a obtinut ​un sistem embedded complet si stabil. Potentiometrul permite selectarea a 5 ecrane distincte ​(Intro, Date Live, Grafic Temp, Grafic Presiune, Grafic Umiditate). Ecranele de grafica randeaza corect evolutia pe 128 de puncteiar pe randul secundar afiseaza ​din EEPROM extremele inregistrate ​(Max si Mincu precizie stabila ​de doua zecimale, fara artefacte vizuale sau pâlpâiri ​(flicker), datorita managementului corect al functiei ​de clear selectiv.+  * **Randare Grafica fara Framebuffer:​** In mod normal, ecranele OLED folosesc ​un buffer de 1024 bytes in RAM (jumatate din SRAM-ul ATmega328P). Proiectul implementeaza calcularea si afisarea grid-ului grafic strict matematictrimitand octetii direct ​pe I2C fara stocare intermediara,​ optimizand memoria RAM. 
 +  * **Resetare Hardware ​din Software ​(EEPROM Wipe):** Am implementat ​functie ascunsa ​de curatare a istoricului vechi. Daca utilizatorul tine potentiometrul rotit complet la dreapta ​(valoare ADC > 1010continuu timp de 10 secundese declanseaza automat o rutina ce suprascrie zona de memorie EEPROM alocata cu valoarea `0xFF` si reseteaza statisticile,​ cu un mesaj de feedback vizual ("​RECORDS RESET!"​).
  
-===== Concluzii ​===== +===== Metrici si Evaluare ​===== 
-Scrierea codului la nivel de registru a evidentiat avantajele optimizarii ​de spatiu si viteza specifice programarii low levelIntegrarea timerelor si a intreruperilor a permis decuplarea logicii de afisare ​de cea de achizitieSistemul rezultat este robustretine datele critic-istorice ​in mod nevolatil si reprezinta o aplicatie practica completa a conceptelor ​de interactiune hardware-software studiate.+**Metrici ​de performanță stabilite și îndeplinite:​** 
 +  1**Amprenta ​de memorie:** Obiectiv: sub 20% ocupare RAMPrin scrierea la nivel de registre și renunțarea la framebufferutilizarea SRAM a scăzut drastic, lăsând spațiu liber pentru array-urile istorice
 +  2. **Timpul ​de răspuns al interfeței:​** Obiectiv: <100ms lag. Măsurat prin setarea Timer1 să eșantioneze potențiometrul la 10Hz. Sistemul reacționează instant la rotirea potențiometrului. 
 +  3. **Refresh Rate Stabil:** Menținerea unei bucle principale care redesenează ecranele grafice la ~20 FPS (asigurat prin `_delay_ms(50)`).
  
-===== Download =====+**Profilarea Codului:**  
 +Evaluarea codului s-a realizat prin testare unitară. Inițial, am validat transmisia I2C izolată către OLED trimițând octeți individuali din datasheet-ul SSD1306. Apoi am integrat rutinele complexe (formulele de calibrare Bosch pentru BME280 pe int32_t). Corectitudinea memoriei a fost validată prin întreruperea repetată a alimentării și verificarea citirii corecte din registrele EEPROM la repornire. Siguranța execuției a fost testată rulând stația non-stop timp de >12h.
  
 +===== Planificare si Jurnal =====
 +Munca a fost planificată modular, de la hardware spre software. ​
  
-===== Jurnal =====+  * **Săptămâna 1:** Documentare documentații (Datasheets BME280, SSD1306), achiziție piese, realizarea schemei electrice de bază. 
 +  * **Săptămâna 2:** Implementarea rutinei I2C pe baza laboratorului 6 și testarea conexiunii (ACK) cu ambele slave-uri de pe magistrală. 
 +  * **Săptămâna 3:** Extragerea parametrilor de calibrare BME280 din ROM-ul senzorului. Setarea Timer-ului 1 și a ADC-ului pentru potențiometru. 
 +  * **Săptămâna 4:** Dezvoltarea algoritmului de randare grafică fără framebuffer și logică de stocare Max/Min în registrele EEPROM. 
 +  * **Săptămâna 5:** Implementarea secvenței de Reset EEPROM, asamblarea finală a componentelor și redactarea documentației Wiki.
  
 +===== Rezultate Obţinute =====
 +Am obtinut un sistem embedded complet, portabil si stabil. Potentiometrul permite selectarea a 5 ecrane distincte. Ecranele de grafica randeaza corect evolutia climatului, iar sistemul afiseaza permanent extremele inregistrate,​ fara artefacte vizuale, cu un consum minim de memorie si o implementare hardware curată, fără fire expuse haotic.
  
 +===== Concluzii =====
 +Scrierea codului la nivel de registru a evidentiat avantajele optimizarii de spatiu si viteza specifice programarii low-level. Integrarea timerelor si a intreruperilor a permis decuplarea logicii de afisare de cea de achizitie. Sistemul rezultat confirma pe deplin ipoteza initiala, este robust, retine datele critic-istorice in mod nevolatil si reprezinta o aplicatie practica excelenta a conceptelor studiate.
  
-===== Bibliografie/​Resurse ​=====+===== Download ​===== 
 +  * Codul sursă complet al proiectului:​ [[https://​github.com/​razvandegeratu/​StatieMeteo|Repository GitHub]]
  
 +===== Bibliografie/​Resurse =====
   * Datasheet ATmega328P (Microchip).   * Datasheet ATmega328P (Microchip).
   * Datasheet Senzor BME280 (Bosch Sensortec).   * Datasheet Senzor BME280 (Bosch Sensortec).
   * Datasheet Display OLED SSD1306 (Solomon Systech).   * Datasheet Display OLED SSD1306 (Solomon Systech).
   * Suport de Laborator PM 2026: Lab 2 (Intreruperi),​ Lab 3 (Timere), Lab 4 (ADC), Lab 6 (I2C).   * Suport de Laborator PM 2026: Lab 2 (Intreruperi),​ Lab 3 (Timere), Lab 4 (ADC), Lab 6 (I2C).
pm/prj2026/victor.stoica0203/degeratu_razvan.1779181802.txt.gz · Last modified: 2026/05/19 12:10 by razvan.degeratu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0