_________________________________________________________________________________________________________
Если Вы работали на встроенном тактовом генераторе и случайно прошили фьюзы (например нажали кнопку Program All , забыв при этом снять галочку "запрограммировать фьюзы" Program Fuse Bit(s) - микроконтроллер может отключить встроенный тактовый генератор и переключиться на работу с внешним кварцем (естественно перестав при этом работать).
При попытке прошить кристалл, CodeVision выдаёт подобные ошибки:
или так:
Фьюзы - это "переключатели" внутри микроконтроллера, отвечающие за подключение встроенного тактового генератора, за подключение внешнего кварца, за подключение режима работы от внешнего генератора итд. Настроить их прямо в программе, так же как регистры, нельзя. Настраиваются фьюзы только при прошивке.
Fuse по-английски "плавкая перемычка". На старых микроконтроллерах фьюзы были одноразовые. Это была группа проводящих участков на кристалле микроконтроллера. Если проводящий участок нужно было запрограммировать, на него подавали большой ток, структура кристалла в этом месте разрушалась и переставала проводить ток. Повреждённый непроводящий участок считали за лог. нуль; целый участок - за лог. единицу.
Сейчас фьюзы многоразовые (это просто вспомогательная ячейка памяти), но пережиток тех времён остался в обозначении запрограммированных фьюзов:
• Запрограммированный фьюз обозначают дыркой (лог.0, непроводящий участок );
• Незапрограммированный - галочкой (лог.1, проводящий участок );
Таким образом, фьюзы программируются "дырками", а не галочками.
__________________________________________________________________________________________________
Для восстановления работоспособности микроконтроллера, найдите в окошке ProgramFuseBit(s) биты:
CKSEL0
CKSEL1
CKSEL2
CKSEL3
SUT0
SUT1
CKOPT
...и сравните с табличкой. Определите, на какой режим работы вы только что прошили свой микроконтроллер:
Чаще всего, все вышеуказанные биты - это дырки (по умолчанию в CVAVR не стоит ни одна галочка), т. е. все эти биты запрограммированы. Что соответствует подключению внешнего кварца с частотой от трёх до 8 МГц:
1. Купите кварц на частоту от трёх до 8 МГЦ или выпаяйте из компьютерного лома (частота кварца написана на его корпусе). И два конденсатора от 12 до 36 пф.
2. Найдите на микроконтроллере выводы XTAL1 и XTAL2, воткните между ними кварц. С этих же выводов бросьте на общий провод конденсаторы (хотя можете и без них попробовать).
3. В конфигурации проекта поменяйте частоту чипа на 8000000 (или другую, на которую рассчитан Ваш кварц). Можно не менять, но тогда функция delay будет неправильно рассчитывать задержки (если вы, конечно, будете её использовать).
4. На всякий случай перепрошейте фьюзы (теперь уже CVAVR должна нормально распознавать микроконтроллер):
Tools >> Chip programmer >> Program >> Fuse Bit(s)
5. Почистите чип и ещё раз залейте прогу (естественно не забудьте откомпилировать её перед этим).
Если будут вылезать ошибки, попробуйте просто закрыть окошко с ошибкой и прошить ещё разок. Протоколы для программаторов разрабатывались ещё во времена Windows95 и для старых моделей компов. На некоторых современных, особенно многоядерных компьютерах с Windows XP (Windows Vista, Windows 7) иногда бывает только со второго-третьего раза нормально прошивается (во всяком случае у меня).
6. Когда снова получите "власть" над микроконтроллером, тут уж как хотите - можете его обратно на встроенный генератор переключить, а можете и на кварце продолжать работать, на высокой частоте.
PS. Прочитать значения фьюзов из CodeVisionAVR (и записать их перед тем, как что-либо проделывать с микроконтроллером, чтобы восстановить потом можно было) можно так: Tools >> Chip Programmer >> Read >> Fuse Bit(s)