This block diagram shows the key parts of the project:

Not shown are the controls (connected to an I2C port expander) and the I2C OLED display.

I had originally planned to add IR control to this project - and there is a header on PCB for it - but kinda lost interest (realising a CD player project in 2020 makes little sense) before I got around to implementing it. Plus, I'm not sure if there's enough memory left for that anyway.
There's also a header for a S/PDIF output on the PCB as well - but again, not soldered on or implemented in code for the same reason.

I've chosen to incorporate a pro-mini board, rather than a bare ATMEGA328p, into this project partially due to laziness, and partially because they cost about the same anyway.

The code, whilst heavily based on the ATAPIDUINO project, is mostly rewritten - there isn't much that remains unchanged from the original (original code this is based off of is in the repo as well).

What works:

  • Playing CDs
  • Controls: Stop, Play, Pause, Fast Forward, Rewind, Next track, Prev track, Eject
  • OLED display: Shows track number, track time, and one of: Play/Stop/FF/RW/Eject symbols
  • Analogue audio output via DAC

What doesn't work / issues:

  • Forgot to connect 3v3 to pin 20 (DVDD) of the DAC/PCM5102, ooops. Added bodge wire between the 3v3 output tab on U4 to the bottom of C11
  • IR control - the header on the PCB exists, but not fitted or implemented in code
  • Untested: Audio mute circuit. During development, it was powered via the Pro-Mini (with a sepearte ATX supply for the CD-ROM drive), so I needed to disable the mute circuit as there was no 12v input. So there's a bodge wire between TP2 and TP3, with R25 & R29 not populated. I've no reason to think it wouldn't work, but I lost interest before testing it. If I was continuing with this project, I'd probably add a jumper to disable it.
  • S/PDIF output: There's a header on the PCB for a FCR684204T 3.5mm TOSLINK connector, but I've not fitted it. It should only require a small amount of extra code to tell the WM8805 to enable this output.
  • I was planning to design a case for this along the lines of a "normal" stand-alone CD player, but attaching everything to a piece of plywood will do now I think.
  • General PCB layout - the position of the IDE cable partially obscures the display. My original intention was for the display and controls to be mounted on a front panel, so it wouldn't have mattered (there are pin headers next to each button for this reason). But there's no reason why the layout couldn't be improved to accommodate both options.