1. Уважаемый Гость! При написании вопросов в раздел форума [ArduCopter] Вопросы, проблемы и решения обязательно придерживаться шаблона сообщения, оговоренного в правилах раздела! Если сообщение не будет оформлено должным образом, то и ответ на вопрос будет с наименьшим приоритетом. Старайтесь дать максимально полную информацию по вашей проблеме, чтобы можно было более детально рассматривать вопрос!
    Скрыть объявление
  2. Уважаемый Гость! Хотите получать кэшбэк с покупок в online-магазинах? Сервис "Zozi.ru" дает такую возможность!
    Скрыть объявление
  3. Друзья! Для нашего ресурса необходим дополнительный объем пространства в облаке Dropbox. Подробнее.
    Скрыть объявление

Прошиваем регуляторы с микроконтроллером Atmel AVR

Тема в разделе "Регуляторы оборотов (ESC)", создана пользователем raefa, 30 янв 2015.

Реклама. Купить это место.
  1. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
  2. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Так что же в итоге сделать? Ну я к примеру написал продавцу/производителю по поводу прошивки и т.п. Надеюсь получить ответ. Получается, для того что бы получить полностью рабочий результат, недостаточно иметь совместимую прошивку? Нужно знать фьюзы? Кстати, прошу прощения что нигде не прочитал, но что такое фьюзы? Это наверное такие тонкие настройки, вернее ключи, которые их активируют в прошивке? Я прав? Есть примеры фьюзов?
    Спасибо.
     
  3. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Фьюзы - настройки работы МК. Там задается частота, режимы работы, использование дополнительных интерфейсов и т.д.
    Их можно установить как и до/после прошивки, так и отдельно. Так же можно установить либо дудкой, либо программами с графической оболочкой.
    Дим, в твоем логе сообщений про них что-то было. Какие стояли - можно определить только считав с "живого" регулятора, какие записались - смотри в файлах того, что заливал.
    Еще необходимо знать, что фьюзы бывают прямые и обратные и под каждую программу это надо учитывать, иначе МК можно убить сильно или не сильно.
     
  4. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Я думаю, что регулятор - это не какое-то супер-пупер устройство, и бутлоадер там должен быть обычный. Предлагаю залить стандартный бутлоадер для этого типа МК. Найти где-нибудь в таблице значения фьюзов.
    Возможно, в какой-нибудь программе имеется выбор типа микропроцессора, и простая кнопка "залить бут". Например типа как на АрдуиноИДЕ - выбираешь тип МК (допустим Мега 2650 или 328), и тыкаешь "залить бутлоадер". И ИДЕ сама прошивает те фьюзы, какие надо (и происходит это более безопасно, не попутаешь случайно фьюз, и нет опасности заблочить окончательно МК). Но конкретно АрдуиноИДЕ не поддерживает 8 мегу...
     
  5. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Господа, вот фьюзы, считанные прожигателем c рабочего ESC(не подвергавшегося перепрошивке):
    Screenshot_163.jpg

    А вот считанные Дудкой:
    Screenshot_164.jpg
    Код:
    Cформированная командная строка:
    avrdude.exe -p m8 -c usbasp -P usb  -U lock:r:lock.hex:r -U hfuse:r:hfuse.hex:r -U lfuse:r:lfuse.hex:r
    
    
    avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: Device signature = 0x1e9307
    avrdude.exe: reading lock memory:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: writing output file "lock.hex"
    avrdude.exe: reading hfuse memory:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: writing output file "hfuse.hex"
    avrdude.exe: reading lfuse memory:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude.exe: writing output file "lfuse.hex"
    
    avrdude.exe: safemode: Fuses OK (E:FF, H:CA, L:2F)
    
    avrdude.exe done.  Thank you.
    
    
    Ничего не получается, мотор после подключения питания трещит, не вращается и соответственно никакого писка.

    Из благородного рода Arduino у меня имеется только Nano.
     
  6. Xichnik55

    Xichnik55 Старший научный сотрудник

    Регистрация:
    10 сен 2015
    Сообщения:
    668
    Город:
    Омск
    Имя:
    Иван
    Что же такое FUSE биты? Слова вроде бы знакомые, но многие толком и не знают их предназначение, ставят галочки и прошивают, работает устройство да и ладно. Я вам хочу рассказать немного про эти FUSE биты.

    FUSE биты (фьюзы) – ну если по простому, то они настраивают определенные параметры микроконтроллеров, это некий инструмент для их тонкой настройки Фьюзы включают или настраивают такие параметры как:
    - частота генератора, внешний или внутренний генератор
    - запрет на чтение прошивки микроконтроллера
    - включение или выключение таймеров
    - деление частоты кварцевого генератора
    - защита EEPROOM от стирания
    …и так далее. У каждого микроконтроллера выставляются свои фьюзы, у разных микроконтроллеров разный список фьюзов, например в ATmega8 нет фьюза CKOUT, но он присутствует в ATtiny2313. В даташитах к микроконтроллерам все эти фьюзы расписаны.

    Главное правило при работе с фьюзами – не торопиться их выставлять, если вы точно не уверены в правильности своих действий.

    Теперь распишем названия некоторых фьюзов, их обозначения и то, на что они влияют. Вообще, есть фьюзы для защиты программы от копирования (лок-биты), фьюзы, устанавливающие определенные функции, а так же так называемые "старшие" и "младшие" байты. Самый популярный фьюз, который выставляется практически всегда, это:

    CKSEL, таких фьюзов с разными буквами всего четыре, это группа CKSEL0, CKSEL1, CKSEL 2 и CKSEL3, определяют частоту тактового генератора, и его тип, тактовые импульсы для работы необходимы практически любого микроконтроллера. Во многих микроконтроллерах есть внутренний генератор, но мы можем подключить внешний и фюзы выставить для работы от внешнего генератора. Внешний кварцевый резонатор подключается на вывода XTAL1 и XTAL2, кроме того припаивается пара конденсаторов ~20пф одним концом на кварц, другим на минус. Если допустить ошибку при установке этих фьюзов, то микроконтроллер может "заблокироваться" для того чтобы восстановить контроллер, подают тактовый сигнал на ногу XTAL1, на данный момент придумано не мало схем для восстановления контроллеров, залоченных таким образом. Этот генератор можно сделать практически из любой логики или даже из таймера 555.

    [​IMG]

    Есть простые схемы, с использованием 1 транзистора, пары резисторов и кварцевого резонатора, и более сложные, на микросхемах типа К155ЛА3. Данные способы 100% оживляют контроллеры с таким дефектом

    Группа фьюзов SUT1 и SUT0 — fuse биты, управляющие режимом запуска тактовых генераторов МК, а так же задают скорость старта МК после подачи питания. Связаны с фьюзами CKSEL, а именно CKSEL0.

    CKOPT - бит, определяет работу встроенного генератора для работы с кварцевыми резонаторами, устанавливает "амплитуду" колебаний тактового сигнала на кварце. Данный бит программируется достаточно часто.

    RSTDISBL – очень опасный фьюз, ошибочная установка может отключить вывод RESET, после чего пропадет возможность программирования ISP программатором. Бит RSTDISBL превращает вывод RESET в порт ввода-вывода.

    SPIEN – фьюз, который разрешает работу МК по интерфейсу SPI. Все микроконтроллеры выпускаются с уже установленным битом SPIEN. Считается опасным фьюзом.

    EESAVE - Удобно читать как EEPROOM SAVE, дословно означает "сохранить EEPROOM", данный фьюз защищает EEPROM от стирания. Например когда в очередной раз заливаете прошивку в контроллер, можно поставить EESAVE = 0, и при стирании МК EEPROOM останется не тронутым.

    BOOTSZ, состоит из группы битов BOOTSZ1 и BOOTSZ0, определяют размер области памяти записываемых программ, связан с битом BOOTRST.

    BOOTRST, определяет адрес, с которого и будет начато исполнение программы. Если бит установлен т.е. если BOOTRST = 0, то начало программы будет с адреса области загрузчика (Boot Loader).

    BODEN - бит, который при выставлении (BODEN=0), будет контролировать за питающим напряжением, на предельно низких напряжениях микроконтроллер может перезапускаться, глючить и так далее. Связан с BODLEVEL.

    BODLEVEL. - определяет момент срабатывания детектора уровня питающего напряжения, при снижении напряжения питания ниже уровня, произойдет "перезагрузка" контроллера.

    SELFPRGEN - бит, который разрешает (SELFPRGEN=0) или запрещает (SELFPRGEN =1) программе производить запись в память.

    OCDEN – данный фьюз разрешает или запрещает чтение программы из памяти контроллера.

    В некоторых программах фьюзы выставляются зеркально. Запомните,запрограммированный фьюз=0, а не запрограммированный=1. В программах Algorithm Builder, UniProf фьюзывыставляются одним образом, а в программах PonyProg, CodeVisionAVR, AVR Studio, SinaProg и некоторых других, фьюзы нужно выставлять зеркально по сравнению с предыдущим списком программ.

    Уже давно на просторах Интернета появились так называемые "калькуляторы фьюзов", это специальные приложения, призванные помочь в конфигурировании микроконтроллера. Приложение интуитивно понятное, думаю разберетесь, в списке контроллеров выбираем нужный нам МК, далее выбираем необходимые функции, а ниже выставляются галочки фьюзов, все очень просто.

    [​IMG]

    Данные приложения очень удобны, т.к. например в последнее время очень часто авторы своих проектов значения фьюзов пишут непонятными буквами или цифрами, или же словами, новичку не понятно, что это значит и какие фьюзы при этом нужно выставлять, (часто можно встретить комментарий к статье "а какие фьюзы выставлять?"). Калькулятор фьюзов нам в этом плане очень сильно помогает.

    [​IMG]

    Думаю что теперь, если у вас спросят "что такое фьюзы, и зачем они нужны?", вы сможете объяснить человеку их назначение, а пока, на этом все!
    --- Сообщения объединены, 20 дек 2015 ---
    https://www.dropbox.com/sh/bsywqe4uvomej46/AAAfo5diy_Rc1sARAjB1yn_aa?dl=0 в папке мануалы посмотрите еще про фьюзы,там все доходчиво и подробно.
     
    Последнее редактирование: 20 дек 2015
  7. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    А какие фьюзы в "нерабочем" регуле?
     
  8. Xichnik55

    Xichnik55 Старший научный сотрудник

    Регистрация:
    10 сен 2015
    Сообщения:
    668
    Город:
    Омск
    Имя:
    Иван
    На всех картинках фьюзы как по даташиту:
    - снятая галочка– fuse bit = 0, фьюз запрограммирован / активный;
    - установленная галочка– fuse bit = 1, фьюз НЕ запрограммирован / НЕ активный.

    Для UniProf - ставить как на картинках
    Для PonyProg, CVAVR, AVR Studio – ставить инверсно, т.е. наоборот.

    Фьюзы ATmega8 заводские настройки внутренний RC генератор на 1.0МГц
    [​IMG]



    Фьюзы ATmega8 внутренний RC генератор на 2.0МГц
    [​IMG]



    Фьюзы ATmega8 внутренний RC генератор на 4.0МГц
    [​IMG]



    Фьюзы ATmega8 внутренний RC генератор на 8.0МГц
    [​IMG]



    Фьюзы ATmega8 внешний генератор на 1.0-16.0МГц
    [​IMG]



    Фьюзы ATmega48/88/168 заводские настройки внутренний RC генератор на 1.0МГц
    [​IMG]



    Фьюзы ATmega48/88/168 внутренний RC генератор на 8.0МГц
    [​IMG]



    Фьюзы ATmega48/88/168 внутренний RC генератор на 128кГц
    [​IMG]



    Фьюзы ATmega48/88/168 внешний генератор на 0.4_25.0МГц
    [​IMG]
     
    Последнее редактирование модератором: 20 дек 2015
  9. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Может он сдох (ключи)?
    Когда проверяли - подключили на полную или через лампочку (или с лабораторного БП низким током)?
     
  10. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Спасибо БОЛЬШОЕ Иван за подробнейший материал по фьюзам, который наверняка поможет не только мне, но и другим интересующимся участникам форумных дискуссий. ;)
    На нерабочем фьюзы такие же. Очищаю информацию в полях фьюзов, считываю и результат тот же.

    Тимур, Что могу тут сказать? Сейчас экспериментирую с двумя ESC, один из них (первый) читается/пишется/очищается, значит ключи рабочие. Ошибок никаких не появляется в логах при вышеперечисленных манипуляциях (логи идеальные). У другого (второй) наблюдается проблема. Видимо он исдох (слитно). ПО на него никак не реагирует (не удаётся обнаружить контроллер) и соответственно целый лог ошибок.
    Подключал напрямую к сожалению без ограничения по току(ну если 50 ампер это ограничение:D), без лампочки, хотя читал про неё. Может быть после перепрошивки вставку плавкую воткнуть в цепь? Такая возможность имеется, только вот каким номиналом. (лампочка лампочке рознь). Дома всё уже несколько лет как на светодиодах. Было в лучшие времена слава богу закуплено.
     
  11. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Не стартует?
    Тут может быть несколько проблем.
    1) Не те фьюзы, надо вспоминать, что могло встать и подбирать соответствующий генератор, чтобы ISP заработало.
    2) Фьюзы могли встать, которые переключают ногу Reset в режим порта. В данном случае поможет только параллельный высоковольтный программатор (в интернетах информации предостаточно).
    3) Сдохла мега как-то (да, да и такое может быть). Мегу под замену, благо дешевые.
    Автомагазинов у вас рядом нет? :D 12В 5Вт из поворотника/тормоза и т.д.
     
  12. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Не стартует. В зависимости от прошивки трещит, молчит, жужжит и т.п. Не крутится никак.
    Маловероятно. Логи ошибок обнаружения МК.
    Попробуем. Высоковольтный, это 12В как я понимаю? Уже идёт Ардуинка Leonardo R3 Pro Micro ATmega32U4 из Китая.
    Весьма велика вероятность. Тоже грешу на Атмегу, но может быть и ключи.
    Есть. Можно сходить. Саша, будь добр, проясни, почему именно лампочку, а не отсечку по току? Насколько я понимаю, лампочка ток ограничивает. При нагревании проводника сопротивление его увеличивается прямопропорционально (у полупроводников всё наоборот и в степенной зависимости). Ну поставлю я лампу из поворотника к примеру и что она сделает? Как спасёт ключ/чуткий контроллер и от чего?
    Спасибо.
     
  13. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    12, и главное, что принцип работы другой.
    С ней разве тоже можно? Не думаю...
    Ну если ключи работают нештатно, т.е. допустим, что все открылись и остаются открытыми, а мотор подключен, то получится КЗ, которое выжгет или обмотки или ключи. Или все это дело зажгет просто лампочку.
     
  14. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Вот она-то как раз и высоковольтная. Кроме того универсальная, а то кроме USBasp альтернативы нет (обрезок Nano не в счёт).
    Ну есть доля правды конечно, но не без тёмной стороны. Лучше конечно через вставку и амперметр с запоминание в лог. Есть у меня такой от SkyRC.
     
  15. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Вот лог по умершему ESC:
    Screenshot_171.jpg
    Пытаюсь зашить фьюзы, но видимо контроллер заблокировался.
     
  16. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Вот детализация по выставленным "родным" фьюзам ESC:
    Screenshot_165.jpg

    Вот дефолтная детализация по МК:
    Screenshot_166.jpg
    Screenshot_167.jpg

    Этот скрин с нерабочего esc?Написано биты с инверсией т.е все что без галок включено.Получается RSTDISBL включен ? И кристалл заблокирован?Надо подумать.......
     
    Последнее редактирование модератором: 21 дек 2015
  17. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Не проще и там и там посмотреть в одинаковом виде? Получается, что так...
     
  18. Xichnik55

    Xichnik55 Старший научный сотрудник

    Регистрация:
    10 сен 2015
    Сообщения:
    668
    Город:
    Омск
    Имя:
    Иван
    Конфигурационные биты находятся в особой области памяти и могут быть изменены только с помощью программатора при записи контроллера. Есть старший байт и младший байт. Младший байт обычно отвечает за частоту, а старший за всякие фенечки.

    Итак, главное:

    В Atmel AVR принята следующая нотация: сброшенный в ноль fuse bit считается активным, т.е. включенным.

    Пример Бит RSTDSBL, как можно догадаться из названия, это RESET DISABLE. Включил эту опцию и у тебя нога RESET превращается в порт ввода-вывода, но за это ты теряешь возможность перешить контроллер через ISP.

    Так вот, чтобы выключить RESET (и получить большое западло с прошивкой в обмен на мелкую подачку в виде дополнительной ножки) в этот бит надо записать 0.

    С одной стороны нелогично и криво. Как бы во всем мире принята нотация, что ноль это выключено, а тут, понимаешь, наоборот. С другой стороны, это их контроллер, что хотят то и делают. Один раз запомнить и все. Да и вообще, в электронике часто за сигнал берут ноль.



    Однако контроллеры делают электронщики, а прошивающие программы — программисты. Как бы логично. И вот эти программисты взяли и заварили адскую путаницу с галочками. Нет бы им раз и навсегда принять за стандарт, что галочка это 1, а не ВКЛЮЧЕНО (что, напомню, является нулем). И поэтому в одних прошивающих программах галочка означает, что опция включена (в FUSE бит записывается 0),в других, обычно написанных электронщиками, галочка означает единицу. Т.е. с точностью до наоборот.

    А что будет если перепутать? А будет ОЧЕНЬ плохо. Контроллер войдет в неправильный режим и может заблокируется наглухо. Т.е. раз прошил и все. Приехал.

    Нет, спасти его можно, но для этого тебе потребуются дополнительные ухищрения в виде высоковольтного программатора, JTAG адаптера или генератора тактов. Все зависит от того в какой режим ты загонишь контроллер своими неправильными настройками.

    Обычно все решается напайкой кварца и запуском от этого кварца. Худшее же что может случиться — потребуется внешний генератор тактов. Который бы оживил кристалл. Делается он за пять минут из любой микросхемы ТТЛ логики, например из К155ЛА3 — схем в инете навалом. Или на таймере 555, либо можно взять второй МК и на нем написать простую программку, дрыгающую ножкой. А если есть осциллограф, то с него можно поиметь сигнал контрольного генератора — его клемма должна быть на любом осциле. Землю осцила на землю контроллера, а выход генератора на XTAL1.

    Но что делать если зуд нестерпимый, контроллер залочен, а никакой микросхемы для реанимации под рукой нету? Тут иногда прокатывает метод пальца. Прикол в том, что на тело человека наводится весьма нефиговая наводка частотой примерно 50Гц. Всякий кто хватался за щупы осциллографа руками помнит какие шняги тут же возникают на экране — вот это оно! А почему бы эту наводку не заюзать как тактовый сигнал? Так что припаиваешь к выводу XTAL1 провод, хватаешься за него рукой, и жмешь на чтение или запись контроллера :) Предупреждаю сразу, метод работает через жопу, далеко не с первого раза, читает долго и порой с ошибками, но на перезапись FUSE битов в нужную сторону должно хватить.
     
  19. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Саша, это прочитано на заранее исправном контроллере, полностью рабочем и крутящим мотор. Никакие действия над ESC не производились кроме чтения. Эталонный образец.
    Биты в незалоченный ESC писать могу, прошивку заливать могу, но есть одна разница: Разница в байтах калибровочных ячеек генератора!
    1. Результаты чтения калибровочных ячеек генератора нерабочего тела(которое незалочено и нормально шьётся):
    Чтение калибровочных ячеек генератора тела.jpg

    2. Результаты чтения калибровочных ячеек генератора эталонного образца:
    Чтение калибровочных ячеек генератора эталона.jpg

    3. Дефолт дудки (без ESC):
    Дефолт программы без ESC.jpg

    4. Фьюзы эталонного ESC:
    Конфиг эталонного ESC.jpg

    Всё, что касается заблокированного МК, который НЕ читается, НЕ пишется, НЕ реагирует на оказание первой медицинской помощи и реанимационные действия, пока не рассматриваем.

    Нет, спасти его можно, но для этого тебе потребуются дополнительные ухищрения в виде высоковольтного программатора, JTAG адаптера или генератора тактов. Все зависит от того в какой режим ты загонишь контроллер своими неправильными настройками.


    Fusebit doctor
     
    Последнее редактирование: 21 дек 2015
  20. AEROBATICS

    AEROBATICS Студент

    Регистрация:
    1 апр 2015
    Сообщения:
    76
    Город:
    Москва
    Имя:
    Дмитрий
    Никто так и не ответил по поводу различий тела и эталона:
     
    Последнее редактирование модератором: 16 май 2016
  21. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Ой, циферки уже завтра посмотрю...
     
Реклама. Купить это место.