This shows you the differences between two versions of the page.
|
pm:prj2026:atoader:bianca.gorgovan [2026/05/09 22:01] bianca.gorgovan [Jurnal] |
pm:prj2026:atoader:bianca.gorgovan [2026/05/09 22:22] (current) bianca.gorgovan [Schemă bloc] |
||
|---|---|---|---|
| Line 12: | Line 12: | ||
| * estimează **viteza unghiulară maximă** a swing-ului prin integrarea giroscopului; | * estimează **viteza unghiulară maximă** a swing-ului prin integrarea giroscopului; | ||
| * afișează un **contor de lovituri** și statistici live pe un display TFT 1.8"; | * afișează un **contor de lovituri** și statistici live pe un display TFT 1.8"; | ||
| - | * oferă **feedback vizual instant** printr-un LED RGB (verde = lovitură bună, roșu = slabă, galben = forehand, albastru = backhand); | + | * oferă **feedback vizual instant** printr-un LED RGB (verde = lovitură bună, roșu = slabă); |
| - | * permite reset / schimbare de mod printr-un buton fizic. | + | * permite reset printr-un buton fizic. |
| ==== Scop ==== | ==== Scop ==== | ||
| Line 35: | Line 35: | ||
| Sistemul este construit în jurul plăcii de dezvoltare **ATmega328P Xplained Mini**, care joacă rolul de coordonator central. Microcontrollerul citește continuu date inerțiale de la senzorul MPU6050 prin magistrala **I2C**, le procesează printr-o pipeline simplă de detecție și clasificare, după care actualizează simultan două canale de output: ecranul TFT (text și statistici) prin **SPI** și LED-ul RGB (feedback luminos) prin trei canale **PWM**. Un buton conectat ca GPIO permite reset-ul contorului. | Sistemul este construit în jurul plăcii de dezvoltare **ATmega328P Xplained Mini**, care joacă rolul de coordonator central. Microcontrollerul citește continuu date inerțiale de la senzorul MPU6050 prin magistrala **I2C**, le procesează printr-o pipeline simplă de detecție și clasificare, după care actualizează simultan două canale de output: ecranul TFT (text și statistici) prin **SPI** și LED-ul RGB (feedback luminos) prin trei canale **PWM**. Un buton conectat ca GPIO permite reset-ul contorului. | ||
| + | |||
| ==== Schemă bloc ==== | ==== Schemă bloc ==== | ||
| + | {{ :pm:prj2026:atoader:schema_blocbgorgovan.png?500 |}} | ||
| + | * **MPU6050** ⇄ **ATmega328P** — //I2C, 100 kHz//: la fiecare ~10 ms, MCU-ul (master) citește 14 octeți (3× accel + temp + 3× gyro) de la slave-ul MPU6050 (adresa 0x68). Sunt folosite primitivele ''twi_start'' / ''twi_write'' / ''twi_read_ack'' / ''twi_read_nack'' / ''twi_stop'' din driverul de la Lab 6. | ||
| + | * **ATmega328P → modul detecție swing** //(software)//: un filtru pe magnitudinea accelerației (||a|| − g) detectează startul și sfârșitul unei lovituri. | ||
| + | * **ATmega328P → modul clasificare** //(software)//: pe baza semnului ω_z (giroscop, axa verticală a încheieturii) și a vârfului de accelerație, decide forehand/backhand și slab/mediu/puternic. | ||
| + | * **ATmega328P → ST7735 TFT 1.8"** — //SPI, master → slave//: după fiecare lovitură detectată, MCU-ul redesenează zona de text și afișează: | ||
| + | * ''HITS: 24'' | ||
| + | * ''SHOT: FOREHAND'' | ||
| + | * ''POWER: HIGH'' | ||
| + | * ''SWING: 320 deg/s'' | ||
| + | * **ATmega328P → LED RGB (R+G)** — //PWM//: 2 canale PWM independente, generate de Timer 0 (OC0B = verde) și Timer 2 (OC2B = roșu), modulează intensitatea celor două culori. LED-ul are anod comun → driver-ul software inversează duty-cycle-ul (0 = stins, 255 = maxim). | ||
| + | * **Buton → ATmega328P** — //GPIO + INT0//: tratat în întrerupere externă pe PD2, cu debouncing software. La apăsare = reset contor lovituri. | ||
| + | |||
| ==== Module software ==== | ==== Module software ==== | ||
| + | |||
| | Modul | Sursă | Descriere | | | Modul | Sursă | Descriere | | ||
| | ''twi.c/.h'' | Lab 6 (preluat, F_CPU adaptat la 16 MHz) | driver I2C low-level | | | ''twi.c/.h'' | Lab 6 (preluat, F_CPU adaptat la 16 MHz) | driver I2C low-level | | ||
| Line 45: | Line 57: | ||
| | ''spi.c/.h'' | Lab 5 (preluat) | driver SPI low-level | | | ''spi.c/.h'' | Lab 5 (preluat) | driver SPI low-level | | ||
| | ''st7735.c/.h'' | Lab 5 (preluat, adaptat pentru pini noi) | driver TFT 1.8" | | | ''st7735.c/.h'' | Lab 5 (preluat, adaptat pentru pini noi) | driver TFT 1.8" | | ||
| - | | ''timers.c/.h'' | Lab 3 (preluat, extins) | configurare PWM 3 canale pe Timer 0 + Timer 2 | | + | | ''timers.c/.h'' | Lab 3 (preluat, extins) | configurare PWM 2 canale pe Timer 0 + Timer 2 | |
| - | | ''rgb.c/.h'' | **scris** | wrapper PWM pentru LED RGB cu efecte (solid / blink / fade) | | + | | ''rgb.c/.h'' | **scris** | wrapper PWM pentru LED RGB (R+G) cu efecte (solid / blink / fade) | |
| - | | ''swing_detect.c/.h'' | **scris** | detecție swing (histeresis pe magnitudine accel) și clasificare | | + | | ''swing_detect.c/.h'' | **scris** | detecție swing și clasificare | |
| - | | ''usart.c/.h'' | Lab 1 (preluat) | UART debug + Teleplot | | + | |
| | ''main.c'' | **scris** | bucla principală, integrare module, FSM | | | ''main.c'' | **scris** | bucla principală, integrare module, FSM | | ||
| + | |||
| + | |||
| + | |||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| Line 74: | Line 88: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | //(De completat în etapa următoare. Va include: mediu de dezvoltare — PlatformIO + avr-gcc; biblioteca petitFatFs (3rd party, doar dacă adăugăm SD); algoritmul de detecție swing; algoritmul de clasificare; FSM-ul aplicației.)// | ||
| ===== Rezultate Obținute ===== | ===== Rezultate Obținute ===== | ||
| - | //(De completat la finalul implementării.)// | + | |
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| - | //(De completat la final.)// | ||
| ===== Download ===== | ===== Download ===== | ||
| - | //(Arhivă cu surse, schema bloc și schema electrică — de adăugat după primul commit pe Git.)// | ||