440 likes | 603 Vues
This project presents a unique 49-key MIDI keyboard utilizing the ATSAM2195 low-power synthesizer. Key features include adjustable volume, reverb, and chorus effects, alongside an LCD display for settings navigation. With a low latency of under 800 µs and operating on USB or battery power at less than 2.5 watts, the keyboard supports over 100 instrument sounds and includes advanced functions like pitch bend and transposition. The project encompasses detailed design specifications, hardware/software implementation, challenges encountered, and ideas for future improvements.
E N D
EE 478 Final Project 49-key MIDI keyboard Jonathan Feucht, Whitney James
Introduction • 49-key touch insensitive keyboard • Utilizes the ATSAM2195 Low-power Single Chip Synthesizer with Effects • Adjustable settings using an LCD 16×2 character Crystalfontz CFA-533 display
Introduction Topics covered in this presentation: • Project description • Design specification • Hardware / Software implementation • Design procedure • Challenges encountered • Design improvement ideas
Design requirements • Low key latency (< 800 µs) • USB or battery powered (< 2.5 Watts total) • Adjustable volume, reverb, chorus levels • Adjustable reverb / chorus types • Pitch-bend mode • Transposition • Selection of 100+ instrument sounds • 3.3 V 150 mA supply for keyboard controller / Atmel synthesizer chip • 5 V supply for LCD screen, audio amp, and speakers.
Design requirements • Communication protocols • Parallel communication with ATSAM2195 chip • I²C communication between Keyboard controller and LCD driver • LCD menu master • Keyboard controller slave • RS-232 communication with LCD screen
Hardware implementation • Crystalfontz CFA-533 LCD • 16×2 character • Uses 19200 RS-232 • 6 navigation buttons
Hardware implementation • User front end - Seeeduino • 16 MHz ATMEGA328P • Controls LCD display • EEPROM used for saving settings after powerdown • I2C Master
Hardware implementation • ATSAM2195 Atmel synthesizer chip • QFN-44 package with ground plane • Measures 0.7×0.7×0.2 cm3
Hardware implementation • Operates 3.3 V supply • 2.2 Vpp analog output signal • Configured in parallel implementation
Hardware implementation • Amplifier stage for driving on-board speakers:
Software implementation • Crystalfontz CFA533 driver • Data sent out and received in “packets” • Command • Data length • Data • CRC checksum • For every command sent out, return packet is sent back
Software implementation • Buttons used for navigating tree-style menu • Left: Follow to parent menu • Right: Follow to child menu • Up: Navigate up the menu list • Down: Navigate down the menu list • Okay: If selectable, execute command or select setting; otherwise, navigate to child menu • Cancel: Go to main menu
Software implementation • Button polling • Command is issued to display to return states of buttons • Return packet is 3 bytes, indicating: • Buttons pressed down since last poll • Buttons released since last poll • Buttons currently being held down • Data ended up being NOISY • Filtered data by debouncing keys • Adjusted for smooth menu navigation
Software implementation • Tree menu • Implemented as tree of menu nodes • Used for modifying all keyboard settings • Each menu node consists of a complex data structure • Each node has pointers to parent node, and an array of pointers to children nodes
Software implementation • I2C Arduino / Pic communication • Synchronization on boot-up • Arduino sends settings to PIC using 2 bytes of data • After sending setting, Pic sends acknowledge code back
Results • Measurements • Key polling: Max 250 µs • I2C setting transfer: 179 ms • Power consumption: 1.2 Watts • Keyboard controller / synth chip: 0.216 Watts • Speakers / audio amplifier: 0.200 Watts • LCD display: 0.505 Watts • Seeeduino board: 0.279 Watts
Challenges encountered • Reflow soldering for QFN-44 package • Procedure • Testing • 3.3 V vs. 5 V • Using program memory for menu drivers • ATSAM2195 initialization • LCD driver communication • Frustrations with Arduino environment • No μs delays • Arduino environment I²C drivers would not trigger interrupts on the PIC during reads
Project status • Working as is • Planning to add more features; perhaps include second instrument package, enable drum patch, or something else.
Ideas for improvement • More keys!!! • More features • Free up pins on the keyboard controller • Touch-sensitive key action • Incorporate everything on only one microcontroller
Conclusion • We successfully implemented a prototype for a keyboard instrument for midgets • Still has room for more features and creativity • Our project is way cooler than Torin, Daniel, and Russell’s project