A speaker is a device that produces sounds from the electrical signal having audio encoded. The speakers usually have a 3.5 mm jack for audio output from the computer. Nowadays USB interface is also gaining popularity for interfacing audio devices with the computer. A lot of portable audio and musical devices nowadays have USB connector for interfacing with the computers. The USB pluggable portable devices are easy to carry away along with a laptop or notebook computer anywhere. Plus, USB is now such a universal interface that it is more common than any other computer interface for serial communication. The USB pluggable devices also have the advantage that they can draw power from the USB port itself.
When USB interface is used by an audio device for connecting with the computer, the audio stream coming from the device also needs to be according to the USB protocol. In this project, a typical 3.5 mm audio jack of a regular speaker is replaced with the USB interface to connect with a computer. In order to decode audio stream from the computer according to USB protocol, there needs a controller chip that could accept the digital audio signal (square waveform with audio encoded in it) and decode it according to the USB protocol and convert it to the analog electrical signal. As a controller chip 8-bit USB AVR – Atmega 32u4 is used in the project. The AVR based Lightweight USB Framework (LUFA) is used as the firmware of the chip which is modified to decode digital audio output and send out the audio stream in the form of analog electrical signal.
In the USB protocol, there is a separate device class for audio devices – Audio Class 1.0. The open-source LUFA framework has the drivers for audio class devices as well. With the use of LUFA firmware, the device driver code to implement USB protocol is not needed to be written explicitly. Modifying the firmware code to customize the functioning of the Audio Class driver will be all sufficient.
The project uses Arduino Pro Micro as the controller board which connects to a personal computer by on-board USB port and USB cable. The board sends out the analog audio signal from an analog pin connecting to Analog In wire of the speaker.
This project is based on Arduino Pro Micro which has the USB AVR – Atmega 32u4 as the sitting MCU. In order to understand this project, one must have basic knowledge of the AVR microcontrollers and the embedded C programming for AVRs. WinAVR Studio is used to write, edit and compile the project code, so closely following the project shall require familiarizing with the above stated IDE as well. Though LUFA framework takes care of implementing the USB protocol and has APIs to abstract the lower level codes, understanding USB protocol is recommended to understand how actually the project is working. In fact, if anyone has already worked on some other microcontroller, it will not be much pain to understand and follow this project as the project code is about getting digital audio signal at the analog pin of the AVR microcontroller and modifying the LUFA device driver for audio class to customize the device functioning.
1. Arduino Pro Micro
3. Connecting wires
4. Micro USB cable
5. Any regular speaker
SOFTWARE TOOLS REQUIRED
1. WinAVR Studio
2. AVR Dude
3. LUFA Firmware
The project is built on Arduino Pro Micro and uses Atmega 32u4 as the USB controller chip. The Audio jack of the speaker has three wires – VCC, Ground and Analog In. The VCC and Ground wires are connected with the common VCC and ground of the circuit respectively. The Audio In wire of the speaker is connected with the D5 analog pin (Pin 6 of Port C on Arduino Pro Micro). A speaker with in-built amplifier should be used in the project. The board is connected to the computer from using USB cable. The program code for the project is burnt to the Arduino Pro Micro using AVR Dude.
HOW THE PROJECT WORKS
In this project the USB protocol is implemented by the LUFA framework. For configuring the controller chip to work as USB speaker, the Audio Class Driver of the LUFA framework will be used. The Audio Class 1.0 driver takes care of the transfers between the host device and the audio devices like microphone, speaker and USB Connect-able musical instruments.
When a USB device is attached to the host (PC), the host sends request for configuration details in the form of control transfer. The connected device has to respond with appropriate descriptors to get configured and ready for further operations. Only after configuration, the device can communicate with the host in the form of interrupt, isochronous or bulk transfers for executing the operations for which the device has been made. In case of speaker, after configuring with the host device, it has to communicate with the host in the form of isochronous transfers as audio data is a kind of time sensitive information. The process of identification and configuration of the device with the host is called enumeration.
Read More: Atmega 32u4 Based USB Speaker