This shows you the differences between two versions of the page.
| — |
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> | ||