можно определить тактовую частоту (ГРУБО), воспользовавшись WDT: настраиваем WDT на 15 миллисекунд, запускаем бесконечный цикл типа while(1) var++; и после того, как произойдет сброс, смотрим содержимое var - оно будет пропорционально тактовой частоте. если хорошо подумать, можно определить частоту с точностью процентов 10...
ну, про то, что var должна быть в НЕИНИЦИАЛИЗИРУЕМОЙ в стартапе области ОЗУ, я и не напоминаю...
можно и проще: настраиваем WDT на 15 миллисекунд и делаем ПРОГРАММНУЮ задержку на 10 миллисекунд, после чего ЦВЕ отключаем. если отключился WDT - тактовая РАСЧЕТНАЯ, если был сброс - значит, тактовая МЕНЬШЕ расчетной. 8 от 16 мегагерц отличить можно однозначно
Я бы взял частями... но мне надо сразу.