Воскрешение микроконтроллера ATtiny2313 после "кривой" установки Fuse-битов

Я как-то баловался с fuse-битами на моей тиньке(Attiny2313) и был добаловался. Так как фьюзы я трогал только отвечающие за источник тактирующего сигнала мне повезло. Фьюз биты делятся на несколько групп:

Я как-то баловался с fuse-битами на моей тиньке(Attiny2313) и был добаловался. Так как фьюзы я трогал только отвечающие за источник тактирующего сигнала мне повезло. Фьюз биты делятся на несколько групп:

Перечень Fuse-битов в программе UniProf

1. Lock-фьюзы - отвечают за сохранность кода программы находящегося в микроконтроллере, так сказать предостварщает попытки скачать с микроконтроллера управляющую программу. Я так считаю что даже если скачать программу и попробовать её расшифровать то мало что получится, напрмиер стыкался с такими случаями в PHP.
2. Low-фьюзы - отвечают за источник тактирующих импульсов и задают коэффициент деления импульсов.
3. High-фьюзы - данные фьюзы лучше не трогать, так как они программируют жизненно важные настройки, напрмиер работу протокола последовательной передачи данных SPI.
4. Ext-фьюзы - эта группа фьюзов отвечает за настройки позволяющие микроконтроллеру выполнять функцию самоперепрошивки, полезная штука зарубежем с помощью нее часто устраивают так называемые boot loader-ы, у нас пока толковых статей на эту тему я не видел.

В этой статье я расскажу как восстановить работоспособность микроконтроллера семейства AVR на примере ATtiny2313 после неправильной их установки именно второй группы фьюзов - Low-фьюзы.

Неправильная установка фьюзов проявляется полным отсутствием признаком жизни микроконтроллера. Программа для прошивки микроконтроллеров UniProf полностью отказывается определять что за микроконтроллер подключен.

Программаторы микроконтроллеров AVR делятся на два типа: параллельные и последовательные(SPI).
Я пользуюсь последовательным, программатор предложенный Сергеем тоже последовательный. За возможность запрограммировать микроконтроллер посредством последовательного программатора отвечает соответственный фьюз SPIEN, он относится в к группе High-фьюзов, которые конфигурировать можно только полностью отдавая себе отчет о том, что последует после их включения/выключения. При отключении фьюза SPIEN микроконтроллер можно будет прошить исключительно параллельным программатором, так как этот фьюз отключает последовательный интерфейс передачи данных.

За источник тактирующего сигнала отвечает группа Low-фьюзов.
Для "воскрешения" микроконтроллера с неправильно выставленными Low-фьюзами потребуется генератор импульсов. В моем случаи генератор импульсов - это очень большая роскошь, и поэтому в его роли будет выступать микроконтроллер Attiny2313 прошиты следующей управляющей программой:

  1. #include <avr/io.h> //Библиотека ввода/вывода
  2.  
  3. #define INIT DDRB|=_BV(PB0)//Назначаем константу как настройку направления работы порта
  4.  
  5. #define ON PORTB&=~_BV(PB0)//Назначаем константу как включение порта то есть вывод "1" на PB0
  6.  
  7. #define OFF PORTB|=_BV(PB0)//Назначаем константу как включение порта то есть вывод "0" на PB0
  8.  
  9. #define nop() __asm__ __volatile__("nop")//Дефайним ассемблеровскую функцию паузы
  10.  
  11. int main(void)//Главная программа
  12. {
  13. INIT;//Выполняем конфигурацию направления порта на выход
  14. OFF; //Устанавливаем на PB0 значение "0"
  15. while(1)//Вечный цикл
  16. {
  17. nop(); //Выполняем паузу
  18. ON; //Устанавливаем на PB0 значение "1"
  19. nop(); //Выполняем паузу
  20. OFF; //Устанавливаем на PB0 значение "0"
  21. }
  22. return(0);
  23. }

Файл с программой в разделе Шаблоны .

Результат: программа генерирует импульсы частотой fкв./2, 1 так уходит на функцию nop();
Частоту кварца я брал 16МГц, при этом все отлично работало. Выход порта PB0 необходимо подсоединить к ноге номер 5 нашей дохлой Attiny2313, подключить программатор и запустить программу UniProf. После чего программа должна успешно определить подключенный микроконтроллер. Далее необходимо установить фьюз-биты в заводскую конфигурацию.

Проект в формате AVR studio с готовым HEX файлом прошивки.

Печатная плата проекта

Зачем NOP?

Для чего нужны 2 пустые операции nop? Почему нельзя без них? (пробывал без них - не работает. Вот и не могу понять)

Это пауза, её нужно

Это пауза, её нужно выдерживать что бы порт успел перейти в другое состояние.
То что ЦПУ дал сигнал перейти в 1 вместо 0 еще не значит что аппаратная часть порта микроконтроллера успеет это сделать быстрее чем прийдет новая команда от ЦПУ.

Печатная плата

Сделал разводку печатной платы для данного проекта.
Если заинтересует пишите kiahack(собака)mail(точка)ru

Шутишь? какая нафиг разводка

Шутишь? какая нафиг разводка печатки данного проекта?

Не шучу! ))

Самая простейшая!)
Всётаки удобнее не "навесу" биты исправлять, а поставить контроллер в разъём, подать питание и всё готово! )))

:-) гы гы

:-) гы гы

Uniprof - зло. Фьюзы в нем

Uniprof - зло. Фьюзы в нем неудобно выставлять. Приходится каждый раз смотреть в даташит или юзать калькулятор фьюзов.

Uniprof и фьюзы

Я сделал так: только купил новый мк, сразу посомтрел как фьюзы в нем стоят, записал в тетрадку. Потом нашел в нете фьюзы на внутренний генератор, записал в тетрадку (вообще очень советую при работе с МК записывать все тетрадку специальную). И все., теперь когда надо установить определенным образом фьюзы, я просто смотрю в тетрадку, для меня это совсем не в напряг.

+1

Одобрямс (аналогично, Шеф)!