This shows you the differences between two versions of the page.
|
pm:prj2026:ciprian.popescu0411:ilinca.tololoi [2026/05/24 18:20] ilinca.tololoi [Download] |
pm:prj2026:ciprian.popescu0411:ilinca.tololoi [2026/05/25 01:59] (current) ilinca.tololoi [Afisaj LCD] |
||
|---|---|---|---|
| Line 33: | Line 33: | ||
| <note tip> | <note tip> | ||
| - | Aici puneţi tot ce ţine de hardware design: | + | Aici puneti tot ce tine de hardware design: |
| - | * listă de piese | + | * lista de piese |
| - | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | * scheme electrice (se pot lua si de pe Internet si din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) |
| * diagrame de semnal | * diagrame de semnal | ||
| - | * rezultatele simulării | + | * rezultatele simularii |
| </note> | </note> | ||
| **Lista de piese:** | **Lista de piese:** | ||
| * **Unitate de procesare:** ATmega328P Xplained Mini | * **Unitate de procesare:** ATmega328P Xplained Mini | ||
| - | * **Interfață de intrare:** Butoane Tactile 6x6mm, Potențiometre WH148 10k | + | * **Interfata de intrare:** Butoane Tactile 6x6mm, Potentiometre WH148 10k |
| - | * **Interfață de control:** TTP229 (16-Channel Capacitive Touch Sensor) | + | * **Interfata de control:** TTP229 (16-Channel Capacitive Touch Sensor) |
| - | * **Interfață de ieșire:** LCD 1602, Interfață I2C (PCF8574) | + | * **Interfata de iesire:** LCD 1602, Interfata 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: | + | * **Audio:** |
| + | |||
| + | - PAM8403 (Class D Audio Amplifier) | ||
| + | - Difuzoare 3W 8 ohmi | ||
| + | - Filtru Pasiv RC (Low-Pass) (din rezistenta de 1kohm si condensator de 100nF) | ||
| + | |||
| + | * **Conectivitate:** breadboard, fire dupont tata-tata si mama-tata | ||
| + | |||
| + | ===Schema electrica:=== | ||
| {{:pm:prj2026:ciprian.popescu0411:schema_electrica_rox.png?900 |}} | {{:pm:prj2026:ciprian.popescu0411:schema_electrica_rox.png?900 |}} | ||
| - | Stadiu hardware fizic: | + | ===Stadiu hardware fizic:=== |
| {{:pm:prj2026:ciprian.popescu0411:milestone_hardware_rox.jpeg?600 |}} | {{:pm:prj2026:ciprian.popescu0411:milestone_hardware_rox.jpeg?600 |}} | ||
| - | Lipituri necesare: | + | **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 intre modulul I2C (PCF8574) si LCD 1602 | ||
| - | Bara de pini pe ATmega328P Xplained Mini (PB1 + PD0-PD7) | + | * Fire cu capat dezgolit pe terminalele difuzoarelor (+ si - pe fiecare) |
| - | 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: | + | ===Conexiuni:=== |
| - | Alimentare: | + | **Alimentare:** |
| - | ATmega 5V → șina +5V breadboard | + | ATmega 5V → sina +5V breadboard |
| - | ATmega GND → șina GND breadboard | + | ATmega GND → sina GND breadboard |
| - | Șina +5V breadboard 1 → șina +5V breadboard 2 | + | Sina +5V breadboard 1 → sina +5V breadboard 2 |
| - | Șina GND breadboard 1 → șina GND breadboard 2 | + | Sina GND breadboard 1 → sina GND breadboard 2 |
| - | I²C bus (SDA + SCL): | + | **I²C bus (SDA + SCL):** |
| ATmega PC4 → SDA (HW-017, PCF8574) | ATmega PC4 → SDA (HW-017, PCF8574) | ||
| ATmega PC5 → SCL (HW-017, PCF8574, TTP229) | ATmega PC5 → SCL (HW-017, PCF8574, TTP229) | ||
| - | TTP229: | + | **TTP229:** |
| VCC → +5V | VCC → +5V | ||
| Line 84: | Line 94: | ||
| SDO → PD3 | SDO → PD3 | ||
| - | HW-017: | + | **HW-017:** |
| 3.3V → ATmega 3.3V | 3.3V → ATmega 3.3V | ||
| Line 92: | Line 102: | ||
| IRQ → PD2 (INT0) | IRQ → PD2 (INT0) | ||
| - | PCF8574 + LCD: | + | **PCF8574 + LCD:** |
| VCC → +5V | VCC → +5V | ||
| Line 100: | Line 110: | ||
| 16 pini → LCD 1602 (lipit direct) | 16 pini → LCD 1602 (lipit direct) | ||
| - | Audio: | + | **Audio:** |
| ATmega PB1/OC1A → rezistor 1kΩ → condensator 100nF → PAM8403 IN_L | ATmega PB1/OC1A → rezistor 1kΩ → condensator 100nF → PAM8403 IN_L | ||
| PAM8403 VIN → +5V | PAM8403 VIN → +5V | ||
| PAM8403 GND → GND | PAM8403 GND → GND | ||
| - | PAM8403 LOUT+ / LOUT- → Difuzor stânga | + | PAM8403 LOUT+ / LOUT- → Difuzor stanga |
| PAM8403 ROUT+ / ROUT- → Difuzor dreapta | PAM8403 ROUT+ / ROUT- → Difuzor dreapta | ||
| - | Butoane (6x): | + | **Butoane (6x):** |
| Un pin → GND | Un pin → GND | ||
| - | Celălalt pin → PD4, PD5, PD6, PD7, PB2, PB3 | + | Celalalt pin → PD4, PD5, PD6, PD7, PB2, PB3 |
| - | Potențiometre (3x): | + | **Potentiometre (3x):** |
| - | Pin stânga → +5V | + | Pin stanga → +5V |
| Pin dreapta → GND | Pin dreapta → GND | ||
| Pin mijloc (wiper) → PA0, PA1, PA2 | Pin mijloc (wiper) → PA0, PA1, PA2 | ||
| + | |||
| ===== Software Design ===== | ===== Software Design ===== | ||
| Line 178: | Line 189: | ||
| === Surse și funcții implementate === | === Surse și funcții implementate === | ||
| - | {| class="wikitable" border="1" | + | **readTTP229()** |
| - | | Funcție || Descriere | + | |
| - | |- | + | Citește starea celor 8 electrozi ai TTP229 prin bit-banging SPI și returnează un byte cu biții corespunzători tastelor apăsate |
| - | | <code>readTTP229()</code> || Citește starea celor 8 electrozi ai TTP229 prin bit-banging SPI și returnează un byte cu biții corespunzători tastelor apăsate | + | |
| - | |- | + | |
| - | | <code>getFirstKey()</code> || Parcurge byte-ul returnat de TTP229 și returnează indexul primei taste apăsate (0–7) sau -1 dacă nicio tastă nu e apăsată | + | **getFirstKey()** |
| - | |- | + | |
| - | | <code>calcFreq()</code> || Calculează frecvența finală a notei în funcție de indexul notei, octava curentă și modificatorul de frecvență de la potențiometru | + | Parcurge byte-ul returnat de TTP229 și returnează indexul primei taste apăsate (0–7) sau -1 dacă nicio tastă nu e apăsată |
| - | |- | + | |
| - | | <code>playFreq()</code> || Configurează Timer1 pentru unda pătrat sau apelează tone() pentru celelalte forme de undă; include cache pe ultima frecvență pentru a evita reconfigurări inutile | + | |
| - | |- | + | |
| - | | <code>stopSound()</code> || Oprește orice sunet activ, resetează registrele Timer1 și marchează starea ca inactivă | + | **calcFreq()** |
| - | |- | + | |
| - | | <code>updateLCD()</code> || Actualizează ecranul LCD cu nota, octava, frecvența și forma de undă curentă, cu throttle de 150ms | + | Calculează frecvența finală a notei în funcție de indexul notei, octava curentă și modificatorul de frecvență de la potențiometru |
| - | |- | + | |
| - | | <code>setup()</code> || Inițializează toți pinii, Timer1, I2C, LCD și MPR121 | + | |
| - | |- | + | |
| - | | <code>loop()</code> || Bucla principală: citește butoanele, potențiometrele, TTP229, MPR121, calculează nota activă, aplică gate/duty și actualizează LCD-ul | + | **playFreq()** |
| - | |} | + | |
| + | Configurează Timer1 pentru unda pătrat sau apelează tone() pentru celelalte forme de undă; include cache pe ultima frecvență pentru a evita reconfigurări inutile | ||
| + | |||
| + | |||
| + | |||
| + | **stopSound()** | ||
| + | |||
| + | Oprește orice sunet activ, resetează registrele Timer1 și marchează starea ca inactivă | ||
| + | |||
| + | |||
| + | |||
| + | **updateLCD()** | ||
| + | |||
| + | Actualizează ecranul LCD cu nota, octava, frecvența și forma de undă curentă, cu throttle de 150ms | ||
| + | |||
| + | |||
| + | |||
| + | **setup()** | ||
| + | |||
| + | Inițializează toți pinii, Timer1, I2C, LCD și MPR121 | ||
| + | |||
| + | |||
| + | |||
| + | **loop()** | ||
| + | |||
| + | Bucla principală: citește butoanele, potențiometrele, TTP229, MPR121, calculează nota activă, aplică gate/duty și actualizează LCD-ul | ||
| + | |||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| Line 202: | Line 240: | ||
| Care au fost rezultatele obţinute în urma realizării proiectului vostru. | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
| </note> | </note> | ||
| + | |||
| + | Aici poate fi observata functionalitatea hardware si software, combinate in stadiul final al proiectului: | ||
| + | |||
| + | https://imgur.com/a/U1WJFZq | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||