Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:alexandra.misloschi [2026/05/15 13:50]
alexandra.misloschi
pm:prj2026:bianca.popa1106:alexandra.misloschi [2026/05/25 11:08] (current)
alexandra.misloschi [5. Rezultate Obţinute]
Line 12: Line 12:
  
   * **Modul PRACTICE:** Un mediu de antrenament liber unde utilizatorul poate exersa alfabetul Morse, primind feedback instantaneu pentru fiecare caracter. Se accesează din ecranul principal prin apăsarea butonului NEXT.   * **Modul PRACTICE:** Un mediu de antrenament liber unde utilizatorul poate exersa alfabetul Morse, primind feedback instantaneu pentru fiecare caracter. Se accesează din ecranul principal prin apăsarea butonului NEXT.
-  * **Modul EXAM:** Un mod de testare structurat unde sistemul solicită scrierea unui cuvânt ​cheie (ex: „SOS”) și oferă un verdict final de tip Pass/Fail bazat pe acuratețea mesajului. Se accesează din ecranul principal prin apăsarea butonului DONE.+  * **Modul EXAM:** Un mod de testare structurat unde sistemul solicită scrierea unui cuvânt ​selectat aleatoriu dintr-un dicționar de 10 cuvinte. Sistemul ​oferă un verdict final de tip Pass/Fail bazat pe acuratețea mesajului ​introdus orbește. Se accesează din ecranul principal prin apăsarea butonului DONE.
  
 Interacțiunea dintre modulele proiectului este organizată astfel: Interacțiunea dintre modulele proiectului este organizată astfel:
Line 40: Line 40:
 | **LED-uri(3x)** | Verde, Roșu, Galben | Semnalizare vizuală pentru Pass (PB0), Fail (PB1) și înregistrare (PB3). | | **LED-uri(3x)** | Verde, Roșu, Galben | Semnalizare vizuală pentru Pass (PB0), Fail (PB1) și înregistrare (PB3). |
 | **Rezistențe** | 220 Ohm / 10k Ohm | Protecția componentelor (LED/​Buzzer) și limitarea curentului. | | **Rezistențe** | 220 Ohm / 10k Ohm | Protecția componentelor (LED/​Buzzer) și limitarea curentului. |
-| **Placă prototipare** | PCB FR4 4x6 cm | Suportul mecanic și electric final pentru cositorirea componentelor periferice. | 
 | **Cabluri** | Jumper Wires | Realizarea conexiunilor electrice între periferice și placa de dezvoltare. | | **Cabluri** | Jumper Wires | Realizarea conexiunilor electrice între periferice și placa de dezvoltare. |
  
 ===== 3.1. Schema Electrică ===== ===== 3.1. Schema Electrică =====
  
-{{:​pm:​prj2026:​bianca.popa1106:​schema_electrica_cori_2.png?​700|}}+{{:​pm:​prj2026:​bianca.popa1106:​schema_electrica_cori_2.png?​775|}}
  
 ===== 4. Software Design ===== ===== 4. Software Design =====
 +
 +==== Descrierea codului aplicaţiei (firmware) ====
 +
 +Firmware-ul aplicației gestionează în timp real achiziția de semnale, decodificarea caracterelor Morse, controlul perifericelor de feedback și navigarea într-o structură ierarhică de meniuri. Sistemul este asincron, bazându-se pe mecanisme de întreruperi pentru a elimina latențele de procesare și pentru a asigura o precizie maximă în cronometrarea impulsurilor.
 +
 +Din punct de vedere didactic, structura software-ului integrează conceptele fundamentale din trei laboratoare distincte, aplicate simultan pe lângă funcțiile de bază de I/O digital (GPIO):
 +
 +  * **Laboratorul de Întreruperi Externe:** Folosit pentru citirea asincronă a butonului Morse pe pinul PD2, eliminând tehnica ineficientă de polling.
 +  * **Laboratorul de Timere și PWM:** Utilizat dublu — Timer 0 controlează baza de timp în milisecunde și generează semnalul acustic (PWM) pe PD5, iar Timer 1 generează un semnal Fast PWM de 50 Hz pentru poziționarea servomotorului.
 +  * **Laboratorul de Protocoale de Comunicație Serie (I2C):** Implementează controlul ecranului LCD 1602 prin magistrala TWI (Hardware I2C) la adresa 0x27, reducând numărul de conexiuni fizice la doar două fire (SDA/SCL).
 +
 +=== Mediu de dezvoltare ===
 +
 +  * **Microchip Studio / PlatformIO:​** Utilizat pentru scrierea codului în limbaj C pur (fără framework-ul Arduino), compilare cu setul de unelte avr-gcc și încărcarea binarului pe microcontroler prin programatorul integrat mEDBG al plăcii Xplained Mini.
 +
 +=== Biblioteci şi surse 3rd-party folosite ===
 +
 +Pentru a asigura o eficiență maximă și un consum minim de memorie, proiectul este dezvoltat nativ, fără utilizarea unor biblioteci externe sau framework-uri complexe. Controlul perifericelor se realizează prin configurarea directă a regiștrilor microcontrolerului,​ fiind utilizate doar bibliotecile standard incluse în compilatorul avr-gcc:
 +
 +  * **<​avr/​io.h>:​** Pentru maparea și controlul direct al regiștrilor hardware ai ATmega328P.
 +  * **<​avr/​interrupt.h>:​** Pentru gestionarea vectorilor de întrerupere hardware.
 +  * **<​util/​delay.h>:​** Pentru generarea întârzierilor calibrate necesare protocolului de inițializare a ecranului.
 +  * **<​string.h>​ și <​stdio.h>:​** Utilizate pentru manipularea bufferelor de text și formatarea indicatorilor pe LCD.
 +
 +=== Algoritmi şi structuri implementate ===
 +
 +  * **Mașină de Stări Finită (Finite State Machine - FSM):** Logica aplicației este ghidată de o structură cu 4 stări distincte:
 +    * **WELCOME:​** Starea inițială de repaus ce afișează meniul principal și așteaptă selecția utilizatorului.
 +    * **PRACTICE:​** Modul de antrenament liber în care caracterele sunt decodificate și concatenate la mesaj în urma confirmării manuale (Butonul NEXT).
 +    * **EXAM:** Modul de testare cu cerință extrasă dinamic și evaluare finală.
 +    * **RESULT:** Starea de calcul și afișare a statisticilor de performanță.
 +  * **Algoritmul de Decodificare (String Matching):​** Semnalele (puncte și lines) sunt colectate într-un buffer de caractere (morse_buffer). La apăsarea butonului NEXT, acest buffer este comparat prin funcția strcmp cu șabloanele standard din alfabetul internațional Morse.
 +  * **Calculul Vitezei WPM (Words Per Minute):** Implementat eficient prin aritmetică pe numere întregi pentru a evita utilizarea resurselor de tip float:
 +
 +$$WPM = \frac{char\_count \times 12}{t\_total}$$
 +
 +(Notă: Formula derivă din standardul internațional Paris (standardul Morse), unde un cuvânt standard are o lungime medie de 5 caractere. Constanta 12 reprezintă simplificarea matematică a raportului dintre cele 60 de secunde dintr-un minut și cele 5 caractere per cuvânt ($\frac{60}{5} = 12$), asigurând un calcul rapid pe 8 biți).
 +
 +==== (Etapa 3) Surse şi funcţii implementate ====
 +
 +=== Listă funcții critice ===
 +
 +^ Funcție ^ Tip Returnat ^ Descriere și Rol Hardware ^
 +| `I2C_init()`,​ `I2C_start()`,​ `I2C_stop()`,​ `I2C_write()` | `void` | Driverul software nativ pentru protocolul TWI (I2C) la frecvența de 100 kHz. |
 +| `LCD_init()`,​ `LCD_command()`,​ `LCD_print()` | `void` | Inițializează ecranul în mod de control pe 4 biți și gestionează afișarea textului. |
 +| `set_servo_angle(uint8_t angle)` | `void` | Modifică registrul `OCR1B` pentru a varia lățimea pulsului PWM (Timer 1) între 1 ms și 2 ms. |
 +| `decode_morse(char* cod)` | `char` | Returnează litera corespunzătoare șirului de puncte și linii sau `?` pentru cod invalid. |
 +| `hardware_init()` | `void` | Configurează direcțiile pinilor (DDR), rezistențele pull-up și timerele hardware. |
 +
 +=== Gestionarea Întreruperilor (ISR) ===
 +
 +  * **`ISR(TIMER0_OVF_vect)`:​** Incrementat la fiecare revărsare a Timerului 0, generând o bază de timp precisă în milisecunde (`ms_ticks`) folosită la debouncing și cronometrare.
 +  * **`ISR(INT0_vect)`:​** Declanșat de butonul MORSE pe pinul PD2. La apăsare (Transition Low), activează starea pinului de ieșire și cuplează pinul PD5 la Timer 0 (`COM0B0`) pentru a genera sunetul pe buzzer, salvând totodată timestamp-ul actual. La eliberare (Transition High), decuplează modulul de sunet și calculează durata totală a impulsului. Dacă valoarea depășește pragul de debouncing de 50 ms, decide dacă semnalul a fost un punct (`.`) sau o linie (`-`) pe baza pragului critic de 250 ms.
  
 ===== 5. Rezultate Obţinute ===== ===== 5. Rezultate Obţinute =====
  
 +În urma implementării hardware și software, sistemul DashDot Morse Coach este complet funcțional și rulează conform specificațiilor,​ oferind o experiență interactivă și fluidă. ​
 +
 +Mai jos sunt prezentate imaginile cu cele trei stări principale ale proiectului (Meniul de pornire, Afișarea erorilor în caz de FAIL și Validarea succesului în caz de PASS):
 +
 +{{:​pm:​prj2026:​bianca.popa1106:​cori_demo1.jpeg?​350|}}{{:​pm:​prj2026:​bianca.popa1106:​cori_demo2.jpeg?​357|}}
 +{{:​pm:​prj2026:​bianca.popa1106:​cori_demo3.jpeg?​350|}}
 ===== 6. Concluzii ===== ===== 6. Concluzii =====
  
 +A fost un proiect foarte tare de realizat și chiar mi-a plăcut mult să lucrez la el și să mă joc cu el. Pe parcursul dezvoltării,​ am aprofundat implementarea unei mașini de stări (FSM) și lucrul direct cu timerele și întreruperile pe microcontrolerul ATmega328P.
 ===== 7. Jurnal ===== ===== 7. Jurnal =====
  
-  * **Data: 09.05.2026** - Milestone 1: Finalizarea conceptului "​DashDot Morse Coach",​ stabilirea listei de hardware necesar și structurarea documentației. +  * **09.05.2026** - Milestone 1: Finalizarea conceptului "​DashDot Morse Coach",​ stabilirea listei de hardware necesar și structurarea documentației. 
 +  * **16.05.2026** - Milestone 2: Asamblarea circuitului pe breadboard, testarea individuală a perifericelor (comunicația I2C pentru LCD, semnalul PWM pentru Servo) și implementarea primei versiuni a decodificatorului Morse. 
 +  * **24.05.2026** - Milestone 3: Optimizarea majoră a software-ului prin eliminarea codului blocant de debounce la butoanele de control. Adaugarea dicționarului de examen cu 10 cuvinte dinamice și adăugarea diagnosticului de erori direct pe ecranul LCD. 
 +  * **25.05.2026** - Milestone 4: Calibrarea finală a formulei pentru WPM și a pragurilor nivelurilor de viteză, testarea integrată a tuturor funcționalităților și finalizarea paginii de documentație pe OCW.
 ===== 8. Bibliografie/​Resurse ===== ===== 8. Bibliografie/​Resurse =====
  
pm/prj2026/bianca.popa1106/alexandra.misloschi.1778842233.txt.gz · Last modified: 2026/05/15 13:50 by alexandra.misloschi
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