Прошивка в первом приближении. Работает так, как я понял задачу. Есть некоторое изменение в назначении выводов.
Частота необходима от 0 до 2кГц если это возможно.
Тут нужна конкретика и разумный диапазон. Так понимаю, что частота 0,00001 Гц не нужна, может быть и 10 Гц не нужна. Я конечно, могу сделать и такие частоты, но Вы замучаетесь их устанавливать.
Кроме того, при использовании такого широкого диапазона частот, даже если сделать дискретность установки 1 Гц понадобится 2000 шагов. Если один шаг делать через каждые 0,1 сек, то чтобы достичь максимума понадобится 200 сек. Но в таком широком диапазоне дискретность 1 Гц достичь и непросто. Увеличение будет не по линейному графику, а что-то похожее на квадратичный график... Если в начале дискретность может и будет 1 Гц, то в конце это уже будут десятки, а то и сотни Гц.
Поэтому:
- укажите минимальную частоту;
- критически посмотрите на максимальную частоту;
- укажите дискретность установки;
- укажите скорость нарастания частоты в режиме 1.
Погоняйте прошивку, желательно в железе. Определитесь с параметрами, потом пишите, что нужно изменить или добавить.
Например, как следует из описания, светодиод на 7-ом выводе просто дублирует реле. То есть, его можно подключить к выводу МК на реле, или к самому реле. Но и как сейчас он ничему не мешает, смотрите сами.
Можно сделать запоминание последней частоты, чтобы каждый раз не с нуля (сейчас 0 - это около 70 Гц). Правда, тогда будет проблема, если частоту нужно уменьшить. Но решить ее можно так же каким-то нажатием на кнопку...