Differences

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

Link to this comparison view

pm:prj2026:bianca.popa1106:mihai.brisculescu [2026/05/04 11:23] (current)
mihai.brisculescu created
Line 1: Line 1:
 +====== MiniSynth V2 ======
  
 +  * **Autor:** Brișculescu Mihai-Darius
 +  * **Grupa:** 335CA
 +  * **An universitar:​** 2025–2026,​ semestrul 2
 +  * **Curs:** Proiectare cu Microprocesoare (PM)
 +  * **Facultate:​** Automatică și Calculatoare,​ UNSTPB
 +
 +===== Introducere =====
 +
 +**MiniSynth V2** este un sintetizator/​sampler digital portabil, polifonic, alimentat la baterie, construit pe baza microcontroler-ului **Teensy 4.0** (ARM Cortex-M7 @ 600 MHz). Dispozitivul reproduce sunete prin trei mecanisme complementare:​
 +
 +  - **Forme de undă matematice** (sine, sawtooth, square, triangle, pulse, noise) generate în timp real de Teensy Audio Library.
 +  - **Instrumente wavetable** (pian, corzi, tobe etc.) preîncărcate în flash-ul firmware-ului,​ sintetizate de obiectul ''​AudioSynthWavetable''​.
 +  - **Sample-uri WAV utilizator** încărcate de pe un card microSD (44.1 kHz, 16-bit, mono).
 +
 +Toate instrumentele dispun de **anvelope ADSR per-instrument**,​ **acordare pe scale muzicale** (Chromatic, Major, Minor, Pentatonic, Blues, Dorian etc., cu rădăcină configurabilă) și un **lanț de efecte** (Reverb, Delay, Chorus, Flanger, Bitcrush, Distortion). Polifonia este de **8 voci** cu alocare dinamică (oldest-voice stealing).
 +
 +==== Ce face ====
 +
 +  * **Tastatură de 25 de taste** (C4–C6) cu butoane de octave shift (Oct+ / Oct−) ce extind acoperirea pe întregul interval MIDI.
 +  * **Ieșire stereo** prin difuzoare integrate (2× Sony SS-TSF550, 4 Ω) amplificate digital de 2× MAX98357A Class-D.
 +  * **Ieșire pentru căști** mufă jack 3.5 mm (TRS, comutată).
 +  * **Ieșire pentru amplificator de chitară** mufă jack 6.35 mm (mono, comutată) cu sumare L+R în mono.
 +  * **Display OLED 1.3"** (SSD1306, 128×64) pentru meniu și feedback vizual.
 +  * **Joystick analogic** pentru pitch bend / modulation în mod cântat și navigare în meniu.
 +  * **Potențiometru rotativ** pentru volum master / ajustare parametri în meniu.
 +  * **Alimentare** dintr-un acumulator 18650 Li-Ion, încărcare USB-C prin TP4056.
 +
 +==== Scopul proiectului ====
 +
 +Realizarea unui instrument muzical electronic complet, autonom (battery-powered,​ fără PC), care să acopere cele 7 teme de laborator ale cursului PM (GPIO, UART, Întreruperi,​ Timere/PWM, ADC, SPI, I2C) într-o aplicație coerentă și utilă.
 +
 +==== Ideea de la care am pornit ====
 +
 +Mi-am dorit un proiect care să combine **electronica analogică** (audio path, alimentare, jack-uri comutate) cu **DSP în timp real** (sinteză polifonică,​ efecte, eșantionare) și o **interfață utilizator** propriu-zisă (display + meniu navigabil). Un sintetizator polifonic portabil, cu eșantionare bifurcată (instrumente factory + sample-uri user pe SD card), îndeplinește toate cele trei criterii și demonstrează simultan **toate cele 7 laboratoare PM**, nu doar minimul cerut de 3 — fiecare modul al proiectului mapează firesc pe câte un laborator (GPIO/​UART/​INT/​PWM/​ADC/​SPI/​I2C),​ fără implementări forțate.
 +
 +==== Utilitatea ====
 +
 +  * **Pentru utilizator:​** un instrument muzical portabil, hackabil (sample-urile sunt simple fișiere WAV pe SD card, fără recompilare),​ cu funcție educativă (modul "​scale-locked"​ împiedică notele false — util pentru începători și improvizație).
 +  * **Pentru mine:** un proiect care îmbină ferm partea hardware (PCB design, audio analog, alimentare) cu firmware embedded real-time (DSP, DMA, drivere I2S/​SPI/​I2C/​ADC),​ oferindu-mi expunere directă la întregul stack al unui sistem embedded de complexitate medie.
 +
 +===== Descriere generală =====
 +
 +==== Schemă bloc ====
 +
 +<​code>​
 +                         ​┌───────────────────────────┐
 +                         ​│ ​      ​Teensy 4.0          │
 +                         ​│ ​  (NXP iMXRT1062, M7)     │
 +                         ​│ ​      3.3 V GPIO          │
 +                         ​└─┬───┬───┬───┬───┬───┬───┬─┘
 +                           ​│ ​  ​│ ​  ​│ ​  ​│ ​  ​│ ​  ​│ ​  │
 +        ┌──────────────────┘ ​  ​│ ​  ​│ ​  ​│ ​  ​│ ​  ​│ ​  ​└──────────────────┐
 +        │                      │   ​│ ​  ​│ ​  ​│ ​  ​│ ​                      │
 +        │ GPIO bit-bang ​       │   ​│ ​  ​│ ​  ​│ ​  │ I2S1 (BCLK/​LRCLK/​DIN) │
 +        ▼                      │   ​│ ​  ​│ ​  ​│ ​  ​▼ ​                      │
 +   ​┌──────────┐ ​               │   ​│ ​  ​│ ​  ​│ ​ ┌──────────────┐ ​        │
 +   │ 4× SR    │                │   ​│ ​  ​│ ​  ​│ ​ │  UDA1334A ​   │──L/​R───►│ Jack 3.5mm
 +   │ 74HC165 ​ │◄──┐ ​           │   ​│ ​  ​│ ​  ​│ ​ │  I2S DAC     ​│ ​        │ (căști, comutat)
 +   │ (25 keys)│ ​  ​│ ​           │   ​│ ​  ​│ ​  ​│ ​ └──────┬───────┘ ​        │
 +   ​└──────────┘ ​  ​│ ​           │   ​│ ​  ​│ ​  ​│ ​        ​│ ​                │
 +                  │            │   ​│ ​  ​│ ​  ​│ ​        │ 2× 47kΩ + cap   │
 +   ​┌──────────────┴─────┐ ​     │   ​│ ​  ​│ ​  ​│ ​        ​▼ ​                │
 +   │ 2× butoane octave ​ │      │   ​│ ​  ​│ ​  ​│ ​     Sumare L+R ─────────►│ Jack 6.35mm
 +   │ (Omron B3F)        │      │   ​│ ​  ​│ ​  ​│ ​                          │ (chitară, comutat)
 +   ​└────────────────────┘ ​     │   ​│ ​  ​│ ​  │
 +                               ​│ ​  ​│ ​  ​│ ​  ​│ ​ ┌─────────────────┐
 +                               ​│ ​  ​│ ​  ​│ ​  ​├─►│ MAX98357A LEFT  │──► Boxă L (4 Ω)
 +                               ​│ ​  ​│ ​  ​│ ​  ​│ ​ └────────┬────────┘
 +                               ​│ ​  ​│ ​  ​│ ​  ​│ ​          │ SD_MODE
 +                               ​│ ​  ​│ ​  ​│ ​  ​└───[direct]┘ ​ (pin 14)
 +                               ​│ ​  ​│ ​  │
 +                               ​│ ​  ​│ ​  ​│ ​     ┌─────────────────┐
 +                               ​│ ​  ​│ ​  ​├─────►│ MAX98357A RIGHT │──► Boxă R (4 Ω)
 +                               ​│ ​  ​│ ​  ​│ ​     └────────┬────────┘
 +                               ​│ ​  ​│ ​  ​│ ​              │ SD_MODE
 +                               ​│ ​  ​│ ​  ​└───[210 kΩ]────┘ ​ (pin 22)
 +                               ​│ ​  │
 +                               ​│ ​  │ ADC (A1, A2, A3)
 +                               ​│ ​  ▼
 +                               ​│ ​ ┌────────────────────┐
 +                               ​│ ​ │ Joystick X/​Y/​SW ​   │
 +                               ​│ ​ │ Potențiometru 10kΩ │
 +                               ​│ ​ └────────────────────┘
 +                               │
 +                               │ I2C (SDA0, SCL0)
 +                               ▼
 +                              ┌─────────────────────┐
 +                              │  SSD1306 OLED 1.3" ​ │
 +                              │     ​128×64 ​         │
 +                              └─────────────────────┘
 +
 +   SPI hardware (CS, MOSI, MISO, SCK):
 +        ┌──────────────────────┐
 +        │  HW-125 microSD ​     │  ◄── ​ user samples (.wav)
 +        └──────────────────────┘
 +
 +   ​Detecție jack-uri (GPIO + 100kΩ pull-up):
 +        Pin 6  ◄── SJ1-3535NG ​ (tip switch, "​break"​)
 +        Pin 23 ◄── Switchcraft 112AX (tip switch, "​make",​ polaritate inversată)
 +
 +   Lanț de alimentare:
 +   18650 Li-Ion ──► TP4056 (USB-C) ──► MT3608 boost ──► 5V ──► Teensy VIN
 +                                        │                 │
 +                                        └► CHRG ── R ──► WP7113GD LED (verde, charging)
 +                                                          │
 +   3.3V LDO Teensy ──► logica (74HC165, joystick, pot, OLED, pull-up-uri)
 +</​code>​
 +
 +==== Module hardware ====
 +
 +^ Modul ^ Componentă principală ^ Rol ^ Interfață cu MCU ^
 +| **Microcontroler** | Teensy 4.0 | DSP audio + control + UI | — |
 +| **Tastatură 25 taste** | 4× SN74HC165N + Omron B3F-1000 | Scanare matrice taste | GPIO bit-bang (pin 5/8/9) |
 +| **Butoane octave** | 2× Omron B3F-1000 | Shift octavă ±1 | GPIO + INT (pin 2, 3) |
 +| **Joystick** | SparkFun analog joystick | Pitch bend / modulation / meniu | ADC (A1, A2) + GPIO (pin 4) |
 +| **Potențiometru** | 10 kΩ rotativ | Volum / ajustare valori meniu | ADC (A3) |
 +| **DAC stereo** | UDA1334A | I2S → analog L/R | I2S (pin 7, 20, 21) |
 +| **Amplificator L** | MAX98357A | Class-D, 3.2 W, canal stâng | I2S (shared) + SD_MODE (pin 14) |
 +| **Amplificator R** | MAX98357A | Class-D, 3.2 W, canal drept | I2S (shared) + SD_MODE (pin 22, 210 kΩ) |
 +| **Difuzoare** | 2× Sony SS-TSF550 (4 Ω) | Ieșire stereo | analogic |
 +| **Jack căști** | SJ1-3535NG (TRS comutat) | Ieșire 3.5 mm + detecție | analog + GPIO det. (pin 6) |
 +| **Jack chitară** | Switchcraft 112AX (TS comutat) | Ieșire 6.35 mm mono + detecție | analog + GPIO det. (pin 23) |
 +| **Display** | SSD1306 OLED 1.3" 128×64 (Adafruit 938) | Meniu + HUD | I2C (pin 18, 19) |
 +| **Storage** | HW-125 microSD breakout | User samples (.wav) | SPI hardware (pin 10–13) |
 +| **LED încărcare** | WP7113GD (verde, 5 mm) | Indicator charging | TP4056 CHRG (independent de MCU) |
 +| **Încărcător** | TP4056 USB-C | CC/CV Li-Ion + protecții | — |
 +| **Boost converter** | MT3608 | 3.0–4.2 V → 5 V | — |
 +| **Acumulator** | 18650 Li-Ion + holder | Sursă de energie | — |
 +| **Întrerupător** | Rocker switch | ON/OFF general (post-MT3608) | — |
 +
 +==== Interacțiunea modulelor ====
 +
 +**Pe firul audio (digital → analog):**
 +Teensy generează stream-ul I2S (BCLK pin 21, LRCLK pin 20, DIN pin 7) care este distribuit simultan către **trei dispozitive**:​ UDA1334A (DAC pentru căști / chitară) și două MAX98357A (amplificatoare Class-D pentru difuzoarele stereo). Selecția canalului per amplificator se face prin pinul ''​SD_MODE''​ (analog multi-nivel),​ conform Tabelului 5 din datasheet-ul MAX98357A: ampul stâng primește ''​SD_MODE''​ direct dintr-un GPIO Teensy (HIGH = canal stâng), iar ampul drept primește ''​SD_MODE''​ printr-un rezistor serie de **210 kΩ** care, împreună cu pull-down-ul intern de 100 kΩ, plasează tensiunea în intervalul B1–B2 (canal drept). Calculul rezistorului serie (din datasheet, pentru VDDIO = 3.3 V):
 +
 +<​code>​
 +R_SMALL = 94.0 × VDDIO − 100  =  94.0 × 3.3 − 100  =  210.2 kΩ
 +</​code>​
 +
 +→ se folosește **210 kΩ (E96)** sau **220 kΩ (E24)**.
 +
 +**Pe firul de comandă (UI → DSP):**
 +Joystick-ul și potențiometrul sunt citite pe ADC. Joystick-ul efectuează în modul //play// pitch bend (X) și modulation (Y); apăsarea click-ului joystick-ului activează meniul. În meniu, mișcările joystick-ului sunt **doar pentru navigare**, iar potențiometrul este **singurul** mecanism de modificare a valorilor (volum master, ADSR, voice count, concert pitch, scale, root note). Această separație previne modificările accidentale în timpul navigării.
 +
 +**Pe firul de detecție și mute hardware:**
 +La introducerea unui jack (căști sau chitară), GPIO-urile de detecție (pin 6 și pin 23) basculează stările (cu polarități inversate, conform datasheet-urilor SJ1-3535NG vs. Switchcraft 112AX). Firmware-ul răspunde tragând pinii 14 și 22 (''​SD_MODE''​) în LOW, ducând **ambele MAX98357A în shutdown hardware** (~0.6 µA quiescent / chip). Acest mecanism elimină pop-urile audibile și economisește baterie când un jack rămâne introdus.
 +
 +**Pe firul de alimentare:​**
 +Acumulatorul 18650 alimentează modulul TP4056 (charging + protecții);​ ieșirea acestuia merge la MT3608 care urcă tensiunea la **5 V**. Acest rail unic alimentează Teensy (prin VIN, **cu trasa VIN-VUSB tăiată** — obligatoriu pentru a preveni back-feed-ul USB), cele două MAX98357A, UDA1334A și HW-125. LDO-ul intern al Teensy (3.3 V) alimentează apoi logica de joasă putere: 74HC165, joystick, potențiometru,​ OLED și toate pull-up-urile. LED-ul de charging WP7113GD este conectat **direct** între VBUS și pinul CHRG al TP4056 — nu consumă pini sau ciclii MCU.
 +
 +===== Hardware Design =====
 +
 +==== Listă de componente ====
 +
 +=== Componente principale ===
 +
 +^ Componentă ^ Cantitate ^ Sursă ^ Rol ^
 +| Teensy 4.0 (NXP iMXRT1062, ARM Cortex-M7 @ 600 MHz) | 1 | PJRC / Mouser | Microcontroler principal |
 +| UDA1334A I2S DAC breakout (NXP) | 1 | eMAG (clonă) | DAC stereo line-level pentru căști + chitară |
 +| MAX98357A I2S Class-D amplifier breakout (Adafruit/​clonă) | 2 | Temu | Amplificare Class-D 3.2 W per canal pentru difuzoare |
 +| Sony SS-TSF550 (4 Ω, bass-reflex satellite) | 2 | Local | Difuzoare stereo |
 +| SN74HC165N (8-bit PISO shift register) | 4 | Mouser | Scanare 25 taste + 7 intrări nefolosite |
 +| Bourns 4608X-101-103LF (rețea bussed 8× 10 kΩ) | 4 | Mouser | Pull-up-uri pentru 25 taste + 7 intrări libere |
 +| Omron B3F-1000 (tactile switch, low-profile) | 27 | Mouser | 25× taste pian + 2× butoane octave (Oct+/​Oct−) |
 +| Adafruit 938 — OLED 1.3" 128×64 SSD1306 | 1 | Mouser / eMAG | Display meniu și HUD play-mode (jumperele J1, J2 lipite pentru I2C) |
 +| SparkFun analog joystick (2-axis + push-button) | 1 | Temu | Pitch bend / modulation / navigare meniu |
 +| Potențiometru rotativ 10 kΩ liniar | 1 | Local | Volum master / ajustare parametri meniu |
 +| HW-125 microSD card module (cu LDO 3.3 V + level shifter) | 1 | Temu | Storage user samples (.wav) |
 +| SJ1-3535NG (jack 3.5 mm TRS, switched) | 1 | Mouser | Ieșire căști + detecție plug |
 +| Switchcraft 112AX (jack 6.35 mm TS, switched, "Tip Closed Circuit"​) | 1 | Mouser | Ieșire amplificator chitară + detecție plug |
 +| WP7113GD (LED verde 5 mm, GaP, V_F ≈ 2.0 V) | 1 | Mouser | Indicator charging (driven de TP4056 CHRG) |
 +| TP4056 USB-C charger module (cu protecții + CHRG/STDBY pads) | 1 | Temu | Încărcare CC/CV pentru Li-Ion |
 +| MT3608 boost converter module (2 A max) | 1 | Temu | 3.0–4.2 V → 5 V stabil |
 +| 18650 Li-Ion + holder cu contacte arc | 1 | Local | Sursă de energie |
 +| Rocker switch (ON/OFF, single-pole) | 1 | Local / Temu | Întrerupător general pe rail-ul 5 V |
 +| PCB custom (KiCad → fabricație online) | 1 | JLCPCB / similar | Suport mecanic + interconectare |
 +
 +=== Componente pasive (valori cheie) ===
 +
 +^ Valoare ^ Cantitate ^ Rol ^
 +| 210 kΩ (E96) sau 220 kΩ (E24) | 1 | Rezistor serie ''​SD_MODE''​ pentru MAX98357A-RIGHT (selecție canal drept la VDDIO = 3.3 V) |
 +| 100 kΩ | 4 | Pull-up-uri detecție jack (×2) + divizor monitorizare baterie (×2) |
 +| 47 kΩ | 2 | Rețea de sumare L+R → mono pentru ieșirea de chitară |
 +| 1 kΩ (sau 470 Ω pentru luminozitate sporită) | 1 | Limitare curent LED charging (WP7113GD) |
 +| 0.47 µF / 1 µF film | 2 | Cuplare AC pe ieșirile analogice ale UDA1334A |
 +| 100 nF ceramic | ~10 | Decuplare locală pe pinii VDD ai fiecărui IC |
 +| 10 µF electrolitic / ceramic | ~5 | Decuplare bulk pe rail-ul 5 V și 3.3 V |
 +
 +==== Schemă electrică ====
 +
 +<note important>​
 +Schema electrică completă (KiCad) va fi adăugată ca imagine și ca fișier sursă în secțiunea **Download** la milestone-ul **M2 (săptămâna 12)**, după finalizarea proiectării PCB.
 +</​note>​
 +
 +Subansamble cheie deja proiectate (descrieri detaliate vor urma împreună cu schemele):
 +
 +  * **Scanare tastatură** — 4× SN74HC165 înlănțuite,​ alimentate la 3.3 V (range valid 2–6 V conform datasheet-ului SN74HC165), QH-ul ultimului 165 → pin 5 Teensy; SH/LD comun → pin 9; CLK comun → pin 8.
 +  * **I2S audio bus** — BCLK (pin 21), LRCLK (pin 20), DIN (pin 7) partajate între UDA1334A și ambele MAX98357A. Fără MCLK (UDA1334A regenerează intern; MAX98357A "No MCLK Required"​ per datasheet).
 +  * **SD_MODE drive** — pin 14 → ''​SD_MODE''​ LEFT (direct, 0 Ω); pin 22 → 210 kΩ → ''​SD_MODE''​ RIGHT. Jumperele de canal de pe breakout-uri **NU se podesc** (altfel GPIO LOW ar scurtcircuita rail-ul de 5 V prin GPIO de 3.3 V).
 +  * **Detecție jack-uri** — pin 6 + 100 kΩ pull-up la 3.3 V (SJ1-3535NG,​ polaritate normal-LOW);​ pin 23 + 100 kΩ pull-up la 3.3 V (Switchcraft 112AX, polaritate normal-HIGH).
 +  * **LED charging** — VBUS → anod WP7113GD → catod → R_LED (1 kΩ) → TP4056 CHRG (open-drain). Calcul: I_LED = (5.0 − 2.0) / 1000 = **3.0 mA** (sub limita absolută de 25 mA).
 +  * **Divizor baterie** — VBAT → 100 kΩ → ADC (A?) → 100 kΩ → GND, raport 1:2.
 +
 +==== Diagrame de semnal ====
 +
 +<note tip>
 +Diagramele de timing pentru I2S, SPI și SR-shift vor fi adăugate la M2 împreună cu schemele.
 +</​note>​
 +
 +==== Pin-out Teensy 4.0 (final) ====
 +
 +^ Pin ^ Funcție ^ Periferic ^ Observații ^
 +| 0 | RX1 | UART | Debug serial input |
 +| 1 | TX1 | UART | Debug serial output |
 +| 2 | BTN_OCT_UP | GPIO + INT | Octavă +1 |
 +| 3 | BTN_OCT_DN | GPIO + INT | Octavă −1 |
 +| 4 | JOY_SW | GPIO + INT | Click joystick (activare meniu / select / toggle) |
 +| 5 | SR_DATA | GPIO bit-bang | Ieșirea QH a ultimului 74HC165 |
 +| 6 | JACK_HP_DET | GPIO input | Detecție căști (LOW = liber, HIGH = plug) |
 +| 7 | I2S1_DIN (OUT1A) | I2S | Date I2S → DAC + ambele amp-uri |
 +| 8 | SR_CLK | GPIO bit-bang | Clock 74HC165 |
 +| 9 | SR_LATCH | GPIO bit-bang | SH/LD 74HC165 |
 +| 10 | SD_CS | SPI | Chip select HW-125 |
 +| 11 | SD_MOSI | SPI | MOSI HW-125 |
 +| 12 | SD_MISO | SPI | MISO HW-125 |
 +| 13 | SD_SCK | SPI | SCK HW-125 (+ LED onboard Teensy) |
 +| 14 | AMP_LEFT_SD | GPIO output | ''​SD_MODE''​ MAX98357A LEFT (direct) |
 +| 15 / A1 | JOY_X | ADC | Pitch bend / navigare orizontală |
 +| 16 / A2 | JOY_Y | ADC | Modulation / navigare verticală |
 +| 17 / A3 | VOL_POT | ADC | Volum / ajustare parametri |
 +| 18 / A4 | SDA0 | I2C | OLED date |
 +| 19 / A5 | SCL0 | I2C | OLED clock |
 +| 20 | LRCLK1 | I2S | Word select → toate cele 3 dispozitive audio |
 +| 21 | BCLK1 | I2S | Bit clock → toate cele 3 dispozitive audio |
 +| 22 / A8 | AMP_RIGHT_SD | GPIO output | ''​SD_MODE''​ MAX98357A RIGHT (prin 210 kΩ) |
 +| 23 / A9 | JACK_GUITAR_DET | GPIO input | Detecție chitară (HIGH = liber, LOW = plug — polaritate inversată) |
 +| VIN | +5 V | Power | De la MT3608, **cu trasa VIN-VUSB tăiată** |
 +| 3.3V | +3.3 V | Power | De la LDO intern Teensy → logică de joasă putere |
 +
 +==== Acoperirea celor 7 laboratoare PM ====
 +
 +^ Laborator ^ Implementare în MiniSynth V2 ^
 +| **GPIO** | Scanare 25 taste prin 74HC165 (bit-bang), butoane octave, click joystick, detecție jack-uri |
 +| **UART** | Debug serial (Serial1) pentru diagnostic în timpul dezvoltării |
 +| **Întreruperi** | Pin-change pe butoanele de octave, ISR audio (DMA I2S), click joystick, detecție hold pentru ieșire meniu |
 +| **Timere / PWM** | Generare I2S clocks (BCLK 1.4 MHz, LRCLK 44.1 kHz), ISR-ul Teensy Audio Library la 2.9 ms (PIT periodic), timing pentru hold-detect |
 +| **ADC** | Joystick X/Y, potențiometru,​ monitorizare baterie (divizor 100k/100k) |
 +| **SPI** | Card microSD (HW-125) pe SPI hardware — single full SPI demonstration cu CS/​MOSI/​MISO/​SCK |
 +| **I2C** | Display OLED SSD1306 |
 +
 +===== Software Design =====
 +
 +==== Mediu de dezvoltare ====
 +
 +  * **Arduino IDE** + **Teensyduino** add-on (suportul oficial PJRC pentru toolchain-ul ARM)
 +  * **PlatformIO** ca alternativă pentru build-uri reproductibile (CI)
 +  * **PJRC Audio Design Tool** ([[https://​www.pjrc.com/​teensy/​gui/​|GUI online]]) pentru proiectarea graph-ului DSP
 +  * **Teensy Wavetable Editor** ([[https://​github.com/​TeensyAudio/​Wavetable-Synthesis|repo oficial]]) pentru conversia SoundFont-urilor (''​.sf2''​) în header-e C
 +  * **KiCad 8** pentru schemă și PCB
 +
 +==== Librării și surse 3rd-party ====
 +
 +  * **Teensy Audio Library** (PJRC, BSD) — DSP graph, oscilatoare,​ filtre, mixere, efecte, wavetable, WAV playback
 +  * **Adafruit SSD1306** + **Adafruit GFX** (BSD) — driver OLED și primitive grafice
 +  * **SD** (built-in Teensyduino) — acces card microSD
 +  * **FrankBoesing Teensy-WavePlayer** ([[https://​github.com/​FrankBoesing/​Teensy-WavePlayer|GitHub]]) — variantă optimizată pentru sample loop-points
 +  * **EEPROM** (built-in) — persistare setări (master volume, voice count, ADSR per instrument, scale, root note)
 +
 +==== Algoritmi și structuri planificate ====
 +
 +  * **8-voice polyphony** cu alocare dinamică (oldest-voice stealing)
 +  * **Trei motoare de sinteză rulând în paralel:**
 +    * ''​AudioSynthWaveform''​ / ''​AudioSynthNoiseWhite''​ (math)
 +    * ''​AudioSynthWavetable''​ (factory wavetable din PROGMEM)
 +    * ''​AudioPlaySdWav''​ (user samples cu loop-points)
 +  * **ADSR per-instrument** persistat (factory în EEPROM-emulation,​ user în ''​instrument.txt''​ pe SD)
 +  * **Lanț de efecte fix-ordonat:​** Distortion → Bitcrush → Chorus → Flanger → Delay → Reverb (toggle ON/OFF per efect)
 +  * **Quantizare pe scale:** mapare ''​midi_note → scale_degree''​ cu rădăcină configurabilă
 +  * **Pitch shift în timp real** pentru sample-uri user (''​playback_rate = 2^(semitone_offset / 12)''​)
 +  * **Sistem de meniu** ierarhic cu 4 tipuri de noduri (Category, Instrument terminal, Effect terminal, Numeric/​Enum parameter, Read-only display)
 +  * **Hardware mute** la introducerea unui jack — driving SD_MODE LOW pe ambele amp-uri (fără manipulare buffer I2S)
 +
 +<note tip>
 +Implementarea propriu-zisă (surse + funcții) va fi documentată detaliat la milestone-ul **M3 (săptămâna 13)**.
 +</​note>​
 +
 +===== Rezultate Obținute =====
 +
 +<note tip>
 +Secțiune ce va fi completată după finalizarea proiectului (PM Fair, săptămâna 14, ~30 mai 2026): fotografii ale dispozitivului asamblat, capturi de pe osciloscop ale semnalelor I2S/SPI, măsurători de consum, demonstrație video.
 +</​note>​
 +
 +===== Concluzii =====
 +
 +<note tip>
 +Secțiune ce va fi completată după demonstrația finală.
 +</​note>​
 +
 +===== Download =====
 +
 +<note warning>
 +Arhive ce vor fi încărcate progresiv:
 +
 +  * **M1 (acum):** acest document
 +  * **M2 (săptămâna 12):** schemă KiCad (''​.kicad_sch''​),​ PCB (''​.kicad_pcb''​),​ gerber-uri pentru fabricație,​ BOM detaliat
 +  * **M3 (săptămâna 13):** sursele firmware (''​.ino''​ + ''​.h''/''​.cpp''​),​ wavetable headers, manifestul SD card de demo
 +  * **M4 (final):** fișiere OpenSCAD pentru carcasa 3D-printabilă (''​.scad''​ + ''​.stl''​),​ fotografii, video demo
 +
 +Namespace OCW: ''​pm:​prj2026:​bianca.popa1106:​mihai.brisculescu''​.
 +</​note>​
 +
 +===== Jurnal =====
 +
 +  * alegerea proiectului,​ research pe Teensy 4.0 vs. alternative (RP2040, ESP32, STM32 — ales Teensy pentru audio library matur și DMA I2S nativ).
 +  * definirea arhitecturii hardware; selecție DAC (UDA1334A) și amplificator (inițial TPA6021A4N analog, apoi schimb la MAX98357A digital pentru imunitate la zgomot de alimentare).
 +  * redactare documentație inițială OCW; început PCB layout în KiCad.
 +
 +===== Bibliografie/​Resurse =====
 +
 +==== Resurse Hardware (datasheet-uri) ====
 +
 +  * Teensy 4.0 — [[https://​www.pjrc.com/​store/​teensy40.html|PJRC store page]] și [[https://​www.pjrc.com/​teensy/​datasheets.html|specs]]
 +  * NXP UDA1334ATS — datasheet UDA1334ATS (NXP)
 +  * Maxim/​Analog Devices MAX98357A — datasheet MAX98357A/B
 +  * TI SN74HC165 — datasheet SN74HC165 (Texas Instruments)
 +  * Bourns 4608X-101-103LF — datasheet bussed resistor network
 +  * Omron B3F — datasheet seria B3F tactile switches
 +  * Kingbright WP7113GD — datasheet WP7113GD (V_F = 2.0 V tip., I_F max 25 mA)
 +  * Solid State Industries WP154A4SUREQBFZGW — datasheet RGB LED (variantă alternativă)
 +  * CUI SJ1-353xNG — datasheet seria SJ1-353xNG (3.5 mm switched jack)
 +  * Switchcraft NL110X / MNL110X — datasheet seria 1/4" switched jack (variantă AX = "Tip Closed Circuit"​)
 +  * SSD1306 — datasheet controller OLED (Adafruit 938 monochrome breakout)
 +  * HW-125 microSD module — schemă tipică (LDO + 74LVC125 level shifter)
 +  * TP4056 — datasheet TP4056 (Nanjing Top Power) + schema modulului USB-C cu protecții
 +  * MT3608 — datasheet MT3608 (Aerosemi) boost converter
 +  * Sony SS-TSF550 — manual seria SS-TSF550/​770/​WSF550
 +
 +==== Resurse Software ====
 +
 +  * [[https://​www.pjrc.com/​teensy/​td_libs_Audio.html|Teensy Audio Library — documentație oficială]]
 +  * [[https://​www.pjrc.com/​teensy/​gui/​|PJRC Audio System Design Tool]]
 +  * [[https://​teensyaudio.github.io/​Wavetable-Synthesis/​|Teensy Wavetable Synthesis]] — generare instrumente din SoundFont
 +  * [[https://​github.com/​FrankBoesing/​Teensy-WavePlayer|FrankBoesing/​Teensy-WavePlayer]]
 +  * [[https://​learn.adafruit.com/​adafruit-gfx-graphics-library|Adafruit GFX Library guide]]
 +  * [[https://​learn.adafruit.com/​monochrome-oled-breakouts|Adafruit SSD1306 monochrome OLED guide]]
 +
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
pm/prj2026/bianca.popa1106/mihai.brisculescu.txt · Last modified: 2026/05/04 11:23 by mihai.brisculescu
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