Иногда, после подачи питания на разрабатываемое устройство, микроконтроллер не стартует. Все остальное работает в заданном режиме, а МК «молчит», как будто завис. Способ решения проблемы оказался очень простой и неожиданный.
Вполне возможно, что проблема присуща и другим МК фирмы Atmel, но это не «antiAD», а способ решения проблемы. Впервые, я, столкнулся с этой проблемой, когда стал закупать микроконтроллеры по цене семечек у Китайских «поставщиков». Цена прельстила — жизнь наказала. Не стоит такая экономия проблем с потребителем. Ведь, известно, что радиодетали на АлиЭкспресс, это отбраковка фирменного производителя которую Китайцы с удовольствием скупают со скидкой и впаривают всему миру под видом оригинала. Короче, такая проблема присуща только микроконтроллерам, купленным в Китае.
Первым делом я грешил на качество питания — Китайский стабилизатор 78L05 я пересмотрел осциллографом вдоль и поперек. Конденсаторы и трассировку печатных плат перепаял в разных вариантах. Вдоволь наигрался с линией RESET и с остальными, а сколько пинков под жопу получил «сторожевой пес». Микроконтроллер зависал явно в момент старта, еще до начала исполнения программы. Причем не всегда, а примерно один раз из трех стартов.
Проблему удалось решить вникнув в устройство микроконтроллера, а точнее в механизм его запуска. Если объяснить это кратко, то не все составляющие части в МК, стартуют одновременно. Первым стартует питание, потом управление питанием, потом процессор, память, интерфейсы, АЦП и т.д. Так вот, если «управление питанием» не даст разрешение, никто после него не стартанёт.
Управлять стартом микроконтроллера мы можем так:
- Комбинацией «фьюзов» SUT0 и SUT1 можно выбрать задержку начала исполнения программы (0мс, +4мс, +64мс), что-бы дать микроконтроллеру «раскачаться». Но это не наш случай, т.к. наш МК даже на раскачку не выходит.
- Значение «фьюза» монитора питания BODLEVEL не дает микроконтроллеру включиться до достижения заданного порога питающего напряжения. Очень нужная «весчь» в цифровой технике, но в нашем случае не работает потому… что мы ее не включили! А именно — по умолчанию «фьюз» BODEN = 1, т.е. монитор питания выключен!
Вот и получается, что иногда программа микроконтроллера начинает работать раньше, чем запустятся остальные части МК. Что приводит управляющую часть МК в ступор. Похоже, что часть отбракованных Китайцам микросхем именно с такими «косяками» потому, что «фирменные» МК заводятся без проблем, в любой позе.
Кстати, MCS Electronics таки разродились обновлением BASCOM в 2019г. после десятилетнего забвения. Я уж на Бейсик с сожалением «положил», а тут на те: версия 2.0.8.2