The Project

An MP3 player based around the PIC24FJ64GA002 microcontroller and the VS1011E MP3 decoder. Using SD cards to store song data. This project is the evolution of the earlier vPod, which was itself based on the open-source Daisy MP3 player. The vPod2 corrects earlier issues with SD card formatting (the Daisy was FAT32 only) and build complexity (many parts were removed, and a smaller processor was used).

Design Constraints

  • Cost – A limited per-kit budget is available, thus discounted and/or donated parts are preferred.
  • Complexity – As the kits are being soldered together by children, complexity is to be avoided – smaller pin-count parts, through-hole wherever possible, and the elimination of components if at all possible. Improvements made here included using an on-chip oscillator and avoiding surface-mount buttons.
  • Size – The kit should be small in order to keep costs down and maintain portability, but not be so small that it becomes tricky for the kids to solder it.

My Role

  • Parts selection. Determination of appropriate components and suggested implementations of each.
  • Circuit Design and Board Layout. Based on research from the parts selection, implementing an effective and simple circuit, paying attention to the size constraint.
  • Programming. Save for the filesystem layer (which was implemented using Microchip’s MDD File System code), all code was developed from scratch. This included track navigation, button debouncing, and interfacing with the MP3 decoder.
  • Training. The counsellors had to be trained in debugging of the implemented boards. This also included programming in features to indicate probable failure points in case of improper operation. In addition, the counsellors responsible for mounting the parts that were only available in surface mount packages – the MP3 decoder and SD card socket – had to be trained in proper assembly of those components.

Lessons Learned

  • PIC24 architecture – This architecture was new to me at the start of this project, and proved to be quite interesting. This can especially be said for the Peripheral Pin Select (PPS) feature of the part employed in this project, which vastly simplified the task of circuit board layout.
  • Using the VLSI audio decoders – I had never used these devices before this project – some details (such as the disposition of unused I/O pins and the oscillator setup) proved to be more sensitive than I had expected, but I overcame these obstacles quickly.
  • Limitations of In-circuit debugging – Some issues that cropped up during development resulted in the device resetting itself, for no apparent reason. This was later found to be the result uninitialized of an data structure, though determining the cause took some time as the in-circuit debug hardware could not provide a useful answer. This experience reinforced for me that tools can only do some of the work – intelligence and ingenuity are still necessary to track down and solve problems.