Когда-то я решал подобную задачу с помощью 51-го от Silabs. Данные с SD считывал в буфер ёмкостью в два сектора (1024 байта). Считываем первый сектор в первую половину буфера и запускаем таймер, который вырабатывает прерывания с нужной частотой. По прерываниям выбираем из буфера байты и посылаем в ЦАП (в Вашем случае это ШИМ). Не дожидаясь конца воспроизведения первого сектора, считываем второй сектор во вторую половину буфера. Прерывания не мешают считыванию очередного сектора. Как только началось воспроизведение второго сектора ( из второй половины буфера) считываем следующий сектор в первую половину буфера и т.д. Не знаю, успеет ли АВР воспроизводить с частотой 22кГц.