DrLithium писал(а):В моём понимании, "не корректная постановка задачи" - это постановка такой задачи, которую или не возможно выполнить, или проще решить по-другому.
у нас с вами одинаковое понимание
а теперь, мои "домыслы". вы сделали какой-то информатор, который брал время (да?) по и2ц и в зависимости от него воспроизводил какой-то файл.
проект-первоисточник воспроизводил файл "в главном цикле", т.е. сам ШИМ генерировался по прерываниям таймера путем выборок данных из буфера, а буфер пополнялся, как я понимаю, путем чтения в главном цикле.
и такой подход мне представляется логичным и нормальным.
теперь вы добавляете работу с и2ц. вы сделали это, как я понял, по прерываниям, только не понял, каким именно. и поимели проблемы, т.к. прерывания могли тормозить основные, "звуковые" прерывания, что явно отражалось на качестве звука. конкретная реализация мне неизвестна, и если я рассуждаю неверно, можете меня поправить.
что бы сделал я.
я бы и2ц читал в главном цикле. так как время меняется 1 раз в секунду, то чаще его считывать просто нет нужды. и вряд ли разумно, т.к. воспроизведение любой фразы длится соизмеримое время. считать 10 байт из и2ц - на это надо примерно 100 циклов шины, или 200 изменений уровня на пинах МК. при тактовой частоте 16 МГц на это не может потребоваться больше 2 мс, что при любом программном ногодрыге более чем реализуемо элементарно. пауза между воспроизведением файлов в 2 мс никак не может быть обнаружена.
итак, воспроиводим текущую фразу до конца. считываем время и решаем, какой файл воспроизводить следующим. запускаем его на воспроизведение. в чем подвох? уверен на 100500%, что никаких проблем с программным и2ц в этом случае не возникнет, прерываний, кроме тех, что уже есть в проекте, не потребуется. качество работы изделия никак не изменится.
ваш ход
