Ну, в общем, чтобы частота линейно менялась, нужен ее прямой синтез. Берется накопительный регистр, скажем двухбайтный, и к нему постоянно(с фиксированной частотой) прибавляется значение из регистра частоты(скажем, 1 байт). Как только накопительный регистр превысил порог(больше или равно), выдаешь импульс, отнимаешь от накопительного регистра значение порога, и тут же возвращаешься на проверку превышения порога. Это на тот случай, если прибавлено было больше значения порога. Как относится значение рег. частоты к порогу, так относится средняя вых. частота к частоте суммирования. Если они равны, то при каждом суммировании будет выдаваться импульс. Вот так оно и работает. Немного хромает, но это единственный способ получить произвольную среднюю частоту при фиксированной тактовой. Чем выше частота суммирования, тем меньше хромает - т. е., меньше скачет период вых. сигнала. Что касается линейного роста частоты, рег. частоты надо инкрементировать каждый раз, отсчитав фиксированное число суммирований. Чем меньше это число, тем быстрее растет частота. Чтобы иметь типа меандр, надо по каждому превышению порога не выдавать импульс, а переключать порт из "0" в "1" или наоборот, т. е. инвертировать.
Суммировать, ессно, по таймеру. Чобы не делать прямого синтеза, можно выставлять период таймера по функции 1/х от частоты. Функция, ессно, табличная, но однобайтная получится довольно корявая, а двухбайтная - длинная таблица. И во всяком случае средняя частота будет неточной.
|