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/27 20:45]
mihai.brisculescu [Current implementation status]
pm:prj2026:bianca.popa1106:mihai.brisculescu [2026/05/28 16:17] (current)
mihai.brisculescu [4. Audio Output — Triple I2S Architecture]
Line 98: Line 98:
 There was **one hardware fix** I had to make during bring-up: the jack-detect lines didn't work on the first powered-up board because the UDA1334A breakout'​s onboard 47 µF AC-coupling capacitors leave the jack TIP nodes floating at DC, so the tip switch can't actually drag the detect line low. I fixed it by soldering a **10 kΩ resistor from each jack's TIP to its sleeve (GNDA)** on the audio side of the AC-coupling cap — that pins TIP to GNDA at DC, and the tip switch can do its job again. This isn't on the schematic; it's a point-to-point fix on the assembled board. There was **one hardware fix** I had to make during bring-up: the jack-detect lines didn't work on the first powered-up board because the UDA1334A breakout'​s onboard 47 µF AC-coupling capacitors leave the jack TIP nodes floating at DC, so the tip switch can't actually drag the detect line low. I fixed it by soldering a **10 kΩ resistor from each jack's TIP to its sleeve (GNDA)** on the audio side of the AC-coupling cap — that pins TIP to GNDA at DC, and the tip switch can do its job again. This isn't on the schematic; it's a point-to-point fix on the assembled board.
  
-{{:​pm:​prj2026:​bianca.popa1106:​pcb_top_brisculescu.png?​nolink&​800}}+{{ :​pm:​prj2026:​bianca.popa1106:​pcb_top_brisculescu.png?​nolink&​800 }}
  
 ==== Schematic (full) ==== ==== Schematic (full) ====
Line 155: Line 155:
 **Critical constraints I had to respect:** **Critical constraints I had to respect:**
   * All Teensy 4.0 GPIO pins are 3.3 V logic and are **NOT 5 V tolerant**. Every peripheral has been chosen accordingly.   * All Teensy 4.0 GPIO pins are 3.3 V logic and are **NOT 5 V tolerant**. Every peripheral has been chosen accordingly.
-  * The VIN-to-VUSB copper trace on the bottom of the Teensy must be **cut** when the board is powered from an external battery, otherwise the USB rail back-feeds into the battery path. This trace IS cut on the assembled board.+  * The VIN-to-VUSB copper trace on the bottom of the Teensy ​or the USB cable'​s red wire must be **cut** when the board is powered from an external battery, otherwise the USB rail back-feeds into the battery path.
   * Debug uses USB ''​Serial''​ (12 Mbit/s), so IO 0 and IO 1 — which default to ''​Serial1''​ RX/TX — are repurposed as GPIO outputs driving the MAX98357A ''​SD_MODE''​ lines. Firmware must therefore **never call ''​Serial1.begin()''​**.   * Debug uses USB ''​Serial''​ (12 Mbit/s), so IO 0 and IO 1 — which default to ''​Serial1''​ RX/TX — are repurposed as GPIO outputs driving the MAX98357A ''​SD_MODE''​ lines. Firmware must therefore **never call ''​Serial1.begin()''​**.
 </​note>​ </​note>​
Line 246: Line 246:
 <note warning> <note warning>
 **Required breakout rework:** The Adafruit 3006 breakout (and clones) includes a 1 MΩ SMD pull-up between ''​SD_MODE''​ and the chip's V_DD (5 V). This must be **desoldered from each breakout before installation** — otherwise the GPIO LOW state would fight the pull-up and shutdown never engages. Once removed, only the chip's internal 100 kΩ pull-down remains. **Required breakout rework:** The Adafruit 3006 breakout (and clones) includes a 1 MΩ SMD pull-up between ''​SD_MODE''​ and the chip's V_DD (5 V). This must be **desoldered from each breakout before installation** — otherwise the GPIO LOW state would fight the pull-up and shutdown never engages. Once removed, only the chip's internal 100 kΩ pull-down remains.
- 
-**Do NOT bridge any breakout channel-selection solder jumpers** (''​L'',​ ''​R'',​ ''​Mono''​). If bridged, they hard-tie ''​SD_MODE''​ to the chip's 5 V VDD, and driving the GPIO LOW would short 5 V to GND through the 3.3 V GPIO pin and damage the Teensy. 
 </​note>​ </​note>​
  
Line 376: Line 374:
 | 23 / A9 | ''​JACK_GUITAR_DET''​ | GPIO input | Plain digital input. 100 kΩ pull-up + RC LPF (4.7 kΩ / 1 µF). | | 23 / A9 | ''​JACK_GUITAR_DET''​ | GPIO input | Plain digital input. 100 kΩ pull-up + RC LPF (4.7 kΩ / 1 µF). |
 | 24–33 | NC | — | Back-side pads, unused. | | 24–33 | NC | — | Back-side pads, unused. |
-| VIN | +5V input | Power | From MT3608 (VIN-VUSB trace cut on the Teensy). |+| VIN | +5V input | Power | From MT3608 (Teensy'​s ​VIN-VUSB trace / USB cable'​s red wire cut). |
 | GND | Ground | Power | Connected to ''​GND''​ (digital) domain. | | GND | Ground | Power | Connected to ''​GND''​ (digital) domain. |
 | 3.3V | 3.3V output | Power | From Teensy LDO → shift registers, joystick, both pots, OLED, UDA1334A breakout, all pull-ups, battery-sense divider. | | 3.3V | 3.3V output | Power | From Teensy LDO → shift registers, joystick, both pots, OLED, UDA1334A breakout, all pull-ups, battery-sense divider. |
  
-==== Photos ​/ proof-of-life ​====+==== Photos ====
  
-[[https://youtu.be/​l58ewZxxkRw|Mini Synth Demo]]+{{ :pm:​prj2026:​bianca.popa1106:​img_4742.jpg?​nolink&​800 }}
  
-{{ :​pm:​prj2026:​bianca.popa1106:​img_4738.jpg?​nolink&​600 |}}+{{ :​pm:​prj2026:​bianca.popa1106:​img_4744.jpeg?​nolink&​800 }}
  
-{{ :​pm:​prj2026:​bianca.popa1106:​img_4742.jpg?​nolink&​600 |}}+{{ :​pm:​prj2026:​bianca.popa1106:​img_4746.jpeg?​nolink&​800 }}
  
-{{ :​pm:​prj2026:​bianca.popa1106:​img_4837.jpg?​nolink&​600 |}}+{{ :​pm:​prj2026:​bianca.popa1106:​img_4838.jpg?​nolink&​800 }}
  
-{{ :​pm:​prj2026:​bianca.popa1106:​img_4838.jpg?​nolink&​600 |}} 
  
 ==== Hardware milestones ==== ==== Hardware milestones ====
Line 476: Line 473:
  
 <​code>​ <​code>​
-IDLE ─trigger─▶ ARMED ─count-in─▶ RECORDING ─trigger─▶ PLAYING +IDLE ─trigger─▶ ARMED ─count-in─▶ RECORDING ─trigger─▶ PLAYING 
-                                                            │ +                                                          │  
-                                       ┌──trigger──┐ ​       ​│ +                                                          │ │ trigger 
-                                       │           ▼        │ +                                                  trigger │ │ 
-                              ARMED_OVERDUB ​── ​wrap ──▶  ​OVERDUB ​+                                                          ▼ │ 
 +                                                   ​ARMED_OVERDUB 
 +                                                          │ 
 +                                                         wrap 
 +                                                          ▼ 
 +                                                       OVERDUB
  
-   long-hold trigger ​from PLAYING / OVERDUB ​─▶ ​ END_PROMPT ​(Save / Clear / Cancel)+PLAYING / OVERDUB ─long-hold trigger─▶ END_PROMPT 
 +                                      ​Save / Clear / Cancel
 </​code>​ </​code>​
  
Line 652: Line 655:
   * **Reset defaults test.** Settings → Reset → Reset. Confirm voice count = 8, concert pitch = 440 Hz, scale = Chromatic, all effects off, sine waveform selected. Confirm BPM / metronome / metronome volume are **NOT** reset (the looper EEPROM blob is intentionally preserved).   * **Reset defaults test.** Settings → Reset → Reset. Confirm voice count = 8, concert pitch = 440 Hz, scale = Chromatic, all effects off, sine waveform selected. Confirm BPM / metronome / metronome volume are **NOT** reset (the looper EEPROM blob is intentionally preserved).
  
-==== Demo video ====+==== Demo videos ​====
  
-<note tip> +[[https://youtu.be/​l58ewZxxkRw|Mini Synth Demo]] 
-A demo video coveringboot splash, playing a few notes on each instrument category, sweeping the FX pot, recording + overdubbing a loop, saving it to SD, plugging in headphones and confirming the speakers mute — will be uploaded here before the final deadline+ 
-</note>+[[https://​youtu.be/we-T9mZoAho|Mini Synth - Aria Math Demo]]
  
 +[[https://​youtu.be/​KdVtQQpLlJo|Mini Synth - Moog City 3 Demo]]
 ===== Results ===== ===== Results =====
  
Line 688: Line 692:
   * Hardware bring-up problem-solving — the jack-detect issue with the AC-coupled UDA1334A outputs was a real "oh no, the board doesn'​t work" moment that turned into a clean 10 kΩ-per-jack fix once I traced it.   * Hardware bring-up problem-solving — the jack-detect issue with the AC-coupled UDA1334A outputs was a real "oh no, the board doesn'​t work" moment that turned into a clean 10 kΩ-per-jack fix once I traced it.
  
-If I were to do it again, I'd probably move the metronome'​s audio path into a dedicated I2S channel rather than ''​master.port1''​ so the click is even more obviously separated from the looper record bus. And I'd add a real Concert-Pitch fine-tuner (cents) on top of the existing 1 Hz step. But for a one-semester project I'm pretty happy with where it landed.+If I were to do it again, ​I’d do better PCB routing, use discrete components instead of daughter boards, go with SMD instead of THT, make the PCB easy to install in a 3D printed enclosure, design an enclosure, add velocity sensitive keys, add better power management, use SDIO instead of SPI for SD card communication,​ find a way to record longer loops, maybe using a different type of memory. ​I'​d ​also probably move the metronome'​s audio path into a dedicated I2S channel rather than ''​master.port1''​ so the click is even more obviously separated from the looper record bus. And I'd add a real Concert-Pitch fine-tuner (cents) on top of the existing 1 Hz step. But for a one-semester project I'm pretty happy with where it landed.
  
 ===== Download ===== ===== Download =====
Line 699: Line 703:
 </​note>​ </​note>​
  
-  * Full schematic: {{:​pm:​prj2026:​bianca.popa1106:​minisynth_brisculescu.pdf|minisynth_brisculescu.pdf}}+  ​* Firmware source code: [[https://​github.com/​MidsoftEntertainment/​MiniSynth-public|MiniSynth Public Repo]] 
 +  ​* Full schematic: {{:​pm:​prj2026:​bianca.popa1106:​minisynth_brisculescu.pdf|MiniSynth.pdf}} 
 +  * Example loop: {{:​pm:​prj2026:​bianca.popa1106:​loop_002.wav|LOOP_002.WAV}}
  
 ===== Journal ===== ===== Journal =====
pm/prj2026/bianca.popa1106/mihai.brisculescu.1779903954.txt.gz · Last modified: 2026/05/27 20:45 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