Писано на ассемблере в мплабе 8.92 и там же в симуляторе пытано.
Вот такая программулина: основано на табличке периода в 1-255 шагов таймер-генератора.
Самая высокая выходная частота около 10 килогерц. Базовый МК PIC12F629.
Файлы tsgn_0.txt и tsgn_1.txt -как образец получения максимальной выходной частоты ногодрыга - на практике вряд-ли интересны. Основной генератор tsgn_2.txt увязан также на прерывания - так что прийдется все заявленные в tsgn.asm незакомментированные инклуды почитать.
Вариаций с подстановкой парарметров на любой вкус - но более "быстроходной" вряд-ли сделать удастся, а вот снизить частоту - всегда пожалуйста.
Дополнительная "удобства" - возможность маской (созданной другой частью прикладной программы) включать и отключать любой из каналов (не выполнено в данном исходнике, но впоолне можно самостийно добавить).
Исходно в табличке меандр на максимальной скорости по выводу GP0 и какая-то "кракозябрина" на выводе GP2 (на что терпения/фантазии хватило для демонстрационной проверки). Вывод GP3 зарезервирован за линией сброса (на время экспериментов его назначение менять не рекомендуется).
В дефайнах указана константа автокалибровки - перед компиляцией подставить считанную из конкретного МК
В принципе... вроде вариации на тему музыкальной шкатулки...?