Alex_ka,
Как работает tiny (в частности, таймеры) я сейчас не помню, но позволю себе покритиковать исходник "в общем".
Код пишется не для компьютера (микроконтроллера), а для людей, чтобы его читать можно было.
Ты ведь сам через пару месяцев будешь смотреть и долго-долго не понимать почему так написано.
* Константы желательно выносить в одно место, а не "расбрасывать" по всему тексту. Например,
F_PU = 4098000 (кстати, почему F_PU = 4098000? ранее было, что 4.096МГц) - я бы вынес наверх:
- Код:
#ifndef F_PU
#define F_PU 4098000
#endif
Тогда частоту можно задавать "вне исходных текстов" (не меняя исходник, компилировать под разные значения частоты).
* имена переменным давать такие, что было бы понятно, что в них. a, b, c - совсем не понятно.
например, 'а' я бы заменил на что-то типа 'carrier_hz' (несущая частота в Герцах)
* к моменту вычисления переменной 'с', переменная 'a' может быть нулевая. И комментарии говорят, что это, вроде как, нормально.
неплохо бы специально эту ситуацию обработать. Иначе (как минимум) может быть деление на ноль при вычислении 'c'.
* конструкция с массивом byte [] - странновато выглядит. Что хотелось выразить? В массиве всего два значения, if-ом (или ((i < 2) ? 3 : 2))не обойтись?
* при частоте менее 55MHz (если быть точнее при F_PU <= 55705600) условие if (c > 65536) никогда не сработает,
зачем там "наворот" с циклом?
Как-то странно выглядит переписывание регистров таймера в цикле. Не надо ли "привязаться" к тикам таймеров, т.е. в обработчиках "безопасно" менять необходимые значения?
====
Ну и "в общем". Честно говоря, не понимаю - зачем данный исходник. У тебя же задача выдать модулированный сигнал. Или я не понимаю?
Несущая - это константа (из набора: 425 Гц, 475 Гц, 725 Гц, 775 Гц)?
Модуляция амплитудная? Что представляет собой модулирующий сигнал? Как он "попадает в микроконтроллер"?
Заводим таблицу (таблицы, если выбирается одна из нескольких частот)
и выводим (например ШИМ-ом) значение из таблицы, умноженное на значение модулирующего сигнала
Все. На выходе фильтр, он должен "задавить" все лишнее (частоту ШИМ) до требуемых значений.