Пробовал смастерить подобную схему для воспроизведения звука на этом же контроллере и памяти. Но не могу уложиться в ресурсы процессора. Если срабатывает прерывание во время обмена по i2c и начинается запись в portB для вывода звука, данные теряются, если же запретить прерывания во время чтения по i2c, то звук прерывается и превращается в хрип. Не подскажете, как тут быть?
Сорри, не сразу заметил... Я не использую прерывания. Просто ввожу некоторую задержку между чтением отдельных байтов. Во время этой задержки проверяю все, что необходимо - принят ли байт из UART-а, нажаты ли кнопки и пр.
Спасибо за ответ, но мы пока бросили эту затею со звуком)) Тоже мастерим для лазертага электронику. Два года назад еще заказали в Смоленске 10 комплектов на основе системы uMT MilesTag, но все оборудование у нас очень быстро пришло в негодность из-за неудовлетворительного качества исполнения. Решили полностью переделать электронику, но пока успехи не очень радуют. Не могу разобраться с алгоритмами декодирования отдельных битов посылки. Измеряю длительность бита включая-выключая таймер по установлению флага прерывания INT0IF, но таймер выдает ошибочное время.
Я так сделал. Дизассемблировал их прошивку и в нужных местах вместо кусков кода, работающих с их звуковым блоком, просто вставил вызов своей подпрограммы, которая "выстреливает" через UART код(символ), соответствующий тому или иному звуку. Задача звукового блока в этом случае - просто принять этот символ и воспроизвести звук. И второй кусок - это работа с ЖКИ, управляемым по SPI. Это, во-первых, не требует большого кол-ва пинов у м/к, во-вторых - позволяет отображать одновременно патроны/обоймы/жизни.
А какой жки используете? шину spi я для дисплея развел, но пока делаем без него. решил делать все на pic18lf2620 и isd1760. со звуком пока не разбирался, но протокол milesteg работает без проблем.