Differences

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

Link to this comparison view

pm:prj2026:florin.stancu:ianis.opritescu [2026/05/24 14:20]
ianis.opritescu [Software Design]
pm:prj2026:florin.stancu:ianis.opritescu [2026/05/24 14:32] (current)
ianis.opritescu [Jurnal]
Line 75: Line 75:
 ===== Software Design ===== ===== Software Design =====
  
- 
-===== Design Software ===== 
-Software-ul este organizat modular, fiecare periferic avand propriul modul (''​synth'',​ ''​usart'',​ ''​adc'',​ ''​i2c'',​ ''​oled''​),​ cu separare clara intre fisiere header si implementare. 
 ==== Motorul de Sinteza (synth.c / synth.h) ==== ==== Motorul de Sinteza (synth.c / synth.h) ====
 Nucleul audio foloseste **Direct Digital Synthesis (DDS)** cu un tabel sinus de 256 esantioane stocat in **PROGMEM** (Flash), economisind cei 2 KB de SRAM disponibili. Fiecare din cele 4 voci polifonice utilizeaza un acumulator de faza pe 16 biti, al carui byte superior indexeaza direct tabelul — eliminand orice calcul trigonometric la runtime. Nucleul audio foloseste **Direct Digital Synthesis (DDS)** cu un tabel sinus de 256 esantioane stocat in **PROGMEM** (Flash), economisind cei 2 KB de SRAM disponibili. Fiecare din cele 4 voci polifonice utilizeaza un acumulator de faza pe 16 biti, al carui byte superior indexeaza direct tabelul — eliminand orice calcul trigonometric la runtime.
Line 89: Line 86:
 Citirea celor 5 potentiometre (Attack, Decay, Sustain, Release, Volume) se face prin polling la intervale rare, folosind un contor uint8_t cu overflow natural la 256 iteratii — evitand un timer dedicat. Valorile ADC sunt convertite in rate Q8.8 prin ''​calc_rate()''​ si aplicate atomic (cu ''​cli()/​sei()''​). Citirea celor 5 potentiometre (Attack, Decay, Sustain, Release, Volume) se face prin polling la intervale rare, folosind un contor uint8_t cu overflow natural la 256 iteratii — evitand un timer dedicat. Valorile ADC sunt convertite in rate Q8.8 prin ''​calc_rate()''​ si aplicate atomic (cu ''​cli()/​sei()''​).
 ==== Interfata Python (piano.py) ==== ==== Interfata Python (piano.py) ====
-Scriptul ''​PianoController''​ ruleaza pe Linux (Wayland/​X11) ​fara dependinte grafice, folosind **termios raw mode** pentru detectia tastelor cu latenta minima. Un mecanism de **auto-release cu timere per-nota** (''​_schedule_release()''​) simuleaza key-up din terminal, care nu ofera nativ acest eveniment. Comunicatia seriala este protejata de un ''​threading.Lock'',​ iar un thread daemon dedicat (''​serial_reader_thread()''​) citeste asincron raspunsurile de la ATmega.+Scriptul ''​PianoController''​ ruleaza pe Linux fara dependinte grafice, folosind **termios raw mode** pentru detectia tastelor cu latenta minima. Un mecanism de **auto-release cu timere per-nota** (''​_schedule_release()''​) simuleaza key-up din terminal, care nu ofera nativ acest eveniment. Comunicatia seriala este protejata de un ''​threading.Lock'',​ iar un thread daemon dedicat (''​serial_reader_thread()''​) citeste asincron raspunsurile de la ATmega. 
 + 
 +<​html><​a href="​https://​github.com/​ianisopritescu/​PM_Soft_Synth">​Repo Github cod</​a></​html>​
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
Line 106: Line 105:
 </​note>​ </​note>​
  
-===== Jurnal ===== 
- 
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2026/florin.stancu/ianis.opritescu.1779621630.txt.gz · Last modified: 2026/05/24 14:20 by ianis.opritescu
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