Transcript Document 7572943
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 7 Column selector 8 Row data Keyboard controller PIC18LF4525 (I ²C Slave) 49 Keys, organized as button matrix with 7 columns, 8 rows Pitch Bend Optoelectronic Device 2Y0A21 I ²C User Interface ATMEGA328 (I ²C Master) RS232 LCD / Keypad Module CFA-533 8 Parallel MIDI Synthesizer ATSAM2195 Audio Amplifier Speaker
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 I 2 C Master
Hardware implementation ATSAM2195 Atmel synthesizer chip QFN-44 package with ground plane Measures 0.7
×0.7×0.2 cm 3
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
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
Menu node data structure:
Software implementation
Software implementation I 2 C 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
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Design procedure
Results
Results Measurements Key polling: Max 250 µs I 2 C 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
DEMO