This is an old revision of the document!


Enigma Mini Synthesizer

Introducere

Prezentarea pe scurt a proiectului vostru:

  • ce face
  • care este scopul lui
  • care a fost ideea de la care aţi pornit
  • de ce credeţi că este util pentru alţii şi pentru voi

Functionalitate: Proiectul reprezinta un mini-sintetizator de sunet generat digital de microcontroller-ul ATmega328P. Interfata muzicala principala este asigurata de un senzor capacitiv tactil TTP229 cu 8 canale functionale, care actioneaza ca o tastatura de clape (Do-Do2), iar un senzor capacitiv independent MPR121 (HW-017) cu 12 electrozi joaca rolul unui pedale de sustain — la atingerea oricarui electrod, este redata o secventa de note aleatoare. Utilizatorul poate controla parametrii sunetului prin 6 butoane tactile (3 pentru schimbarea octavei intre valorile 1-6, cate doua octave per buton, si 3 pentru selectarea formei de unda: patrat, sine sau triunghi) si 2 potentiometre citite prin canalele ADC (PC0 pentru controlul tempoului de sunet si PC1 pentru modularea globala a frecventei). Generarea semnalului audio se realizeaza prin tehnica PWM folosind Timer1 al microcontroller-ului. Semnalul rezultat este curatat printr-un filtru trece-jos RC (rezistenta de 1kΩ si condensator de 100nF), amplificat de un modul de clasa D PAM8403 si redat prin doua difuzoare de 3W. Pe un ecran LCD 1602 conectat via I2C sunt afisate in timp real nota muzicala curenta, octava, frecventa sunetului emis si forma de unda activa.

Utilitate: Mini-sintetizatorul este atat un proiect de integrare hardware-software (procesare semnal audio, citire senzori capacitivi prin protocoale SPI si I2C, afisare I2C), cat si un instrument de divertisment interactiv. El ofera utilizatorilor posibilitatea de a experimenta cu crearea de sunete electronice, de a intelege cum formele de unda, modularea frecventei si controlul gate-ului afecteaza timbrul si caracterul muzical al unui sunet, si de a canta melodii simple pe o scara de o octava. Poate fi folosit ca material didactic pentru demonstrarea practica a conceptelor de convertoare ADC, filtre pasive, amplificare de putere si generare PWM.

Inspiratie: Ideea proiectului a pornit de la nostalgia pentru muzica electronica a anilor '90, in special pentru peisajele sonore ambientale ale proiectului muzical Enigma. Dorinta de a recrea, macar conceptual, experienta utilizarii unui sintetizator hardware clasic, a dus la decizia de a transforma placa de dezvoltare ATmega328P Xplained Mini intr-un instrument muzical retro-futurist, tactil si complet autonom.

Scop: Scopul principal al proiectului este de a proiecta, asambla si programa un sistem embedded functional capabil sa genereze si sa proceseze semnal audio in timp real. Din punct de vedere tehnic, proiectul urmareste aprofundarea cunostintelor despre timere, PWM, comunicare I2C si SPI, conversie analog-digitala si citirea senzorilor capacitivi pe platforma AVR.

Descriere generală

O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.

Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html

Hardware Design

Aici puneţi tot ce ţine de hardware design:

Lista de piese: * Unitate de procesare: ATmega328P Xplained Mini

  • Interfață de intrare: Butoane Tactile 6x6mm, Potențiometre WH148 10k
  • Interfață de control: TTP229 (16-Channel Capacitive Touch Sensor)
  • Interfață de ieșire: LCD 1602, Interfață I2C (PCF8574)
  • Audio: PAM8403 (Class D Audio Amplifier), Difuzoare 3W 8 ohmi, Filtru Pasiv RC (Low-Pass) (din rezistențe de 1kohm și condensator de 100nF)
  • Conectivitate: 2 breadboard-uri de 400 găuri fiecare, fire dupont tată-tată și mamă-tată

Schema electrica:

Stadiu hardware fizic:

Lipituri necesare:

Bara de pini pe ATmega328P Xplained Mini (PB1 + PD0-PD7) Bara de pini pe PAM8403 (VIN, GND, IN_L, IN_R, LOUT+, LOUT-, ROUT+, ROUT-) Bara de pini pe HW-017 (3.3V, GND, SDA, SCL, ADD, IRQ) Bara de 16 pini între modulul I2C (PCF8574) și LCD 1602 Fire cu capăt dezgolit pe terminalele difuzoarelor (+ și - pe fiecare)

Conexiuni complete:

Alimentare:

ATmega 5V → șina +5V breadboard ATmega GND → șina GND breadboard Șina +5V breadboard 1 → șina +5V breadboard 2 Șina GND breadboard 1 → șina GND breadboard 2

I²C bus (SDA + SCL):

ATmega PC4 → SDA (HW-017, PCF8574) ATmega PC5 → SCL (HW-017, PCF8574, TTP229)

TTP229:

VCC → +5V GND → GND SCL → PC5 SDO → PD3

HW-017:

3.3V → ATmega 3.3V GND → GND SDA → PC4 SCL → PC5 IRQ → PD2 (INT0)

PCF8574 + LCD:

VCC → +5V GND → GND SDA → PC4 SCL → PC5 16 pini → LCD 1602 (lipit direct)

Audio:

ATmega PB1/OC1A → rezistor 1kΩ → condensator 100nF → PAM8403 IN_L PAM8403 VIN → +5V PAM8403 GND → GND PAM8403 LOUT+ / LOUT- → Difuzor stânga PAM8403 ROUT+ / ROUT- → Difuzor dreapta

Butoane (6x):

Un pin → GND Celălalt pin → PD4, PD5, PD6, PD7, PB2, PB3

Potențiometre (3x):

Pin stânga → +5V Pin dreapta → GND Pin mijloc (wiper) → PA0, PA1, PA2

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Mediu de dezvoltare

PlatformIO integrat in Visual Studio Code, cu framework Arduino pentru AVR. Compilarea si incarcarea codului pe placa se realizeaza prin avrdude cu protocolul xplainedmini_isp, specific placii ATmega328P Xplained Mini.

Librarii si surse 3rd-party

Librarie Sursa
LiquidCrystal_I2C
marcoschwartz
Adafruit_MPR121
Adafruit (instalata local in /lib)
Wire.h
Arduino built-in
Arduino.h
Arduino built-in

Generare audio PWM

Sunetul este generat prin configurarea directa a registrelor Timer1 (TCCR1A, TCCR1B, ICR1, OCR1A) in modul Fast PWM cu frecventa variabila. Formula de calcul este:

top = (16MHz / (2 × frecventa)) - 1

Duty cycle-ul controlat prin POT_TEMPO (PC0) implementeaza un efect de gate — sunetul este intrerupt ritmic intre 5% si 95% din perioada, creand efecte de la „tic-tic” scurt pana la sunet lung continuu.

Calculul frecventei

Functia calcFreq() porneste de la frecventele standard Do–Do2 (261.63 Hz – 523.25 Hz), le ajusteaza in functie de octava selectata (1–6, prin inmultire sau impartire repetata cu 2) si aplica un modificator global citit din potentiometrul POT_FREQ (PC1), mapat intre 0.75× si 1.25×.

Citire TTP229

Protocolul de comunicare cu TTP229 este implementat manual (bit-banging) pe pinii PB2 (SDO) si PB4 (SCL), fara a folosi perifericul SPI hardware. Se citesc 8 biti la fiecare apel, fiecare bit fiind esantionat pe frontul crescator al clock-ului cu delayMicroseconds(2).

Citire MPR121

Senzorul MPR121 comunica prin I2C la adresa 0x5A. Functia mpr121.touched() returneaza un cuvant de 16 biti in care fiecare bit corespunde unui electrod. Cand orice electrod este atins, modulul activeaza functia de sustain — ultima nota cantata pe TTP229 este retinuta in variabila lastKeyboardNote si redata continuu.

Debounce butoane

Cele 6 butoane tactile folosesc detectia frontului descrescator (HIGH→LOW) prin compararea starii curente cu starea anterioara retinuta in variabile static, eliminand necesitatea intarzierilor blocking (delay()).

Afisaj LCD

Ecranul este actualizat maxim o data la 150ms pentru a evita flickerul. Sunt afisate nota curenta (Do/Re/Mi etc.), octava, frecventa in Hz si forma de unda activa. Cand nicio tasta nu este apasata, ecranul afiseaza starea globala a sintetizatorului (octava + unda).

Surse și funcții implementate

{| class=“wikitable” border=“1”

Funcție
readTTP229()
getFirstKey()
calcFreq()
playFreq()
stopSound()
updateLCD()
setup()
loop()

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

Codul sursă

Codul sursă complet al proiectului, împreună cu biblioteca locală Adafruit_MPR121 și fișierul de configurare platformio.ini, sunt disponibile in acest repo pe GitHub:

https://github.com/roxtastic/Enigma-Synth

Repository-ul conține:

- src/main.cpp — codul principal al sintetizatorului

- lib/Adafruit_MPR121/ — biblioteca locală pentru senzorul capacitiv MPR121

- platformio.ini — configurarea proiectului PlatformIO (placă, protocol de upload, dependențe)

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2026/ciprian.popescu0411/ilinca.tololoi.1779636057.txt.gz · Last modified: 2026/05/24 18:20 by ilinca.tololoi
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