Перейти к содержанию

Может ли кто посмотреть все ли в порядке с прошивкой Atmega48v-10au?


Armenn

Рекомендуемые сообщения

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

Индикатор не светится, ну и функционал не работает.

Может кто посмотреть прошивку и сказать что в ней все плохо или должна работать? 

ATMEGA48V@TQFP32.BIN

Избегайте тех, кто старается подорвать вашу веру в себя. Эта черта свойственна мелким людям. Великий человек, наоборот, внушает чувство, что вы можете стать великим. (Марк Твен)

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Это бинарный файл. Его можно посмотреть только дизассемблером, который выдаст на гора листинг в виде голых инструкций процессора. Если кто-то и возьмётся его анализировать, то это будете Вы. :-)

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

А хотя бы понять можно, это мусор или есть логика в файле?

Избегайте тех, кто старается подорвать вашу веру в себя. Эта черта свойственна мелким людям. Великий человек, наоборот, внушает чувство, что вы можете стать великим. (Марк Твен)

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

18 минут назад, Armenn сказал:

это мусор или есть логика в файле?

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

Ссылка на комментарий
Поделиться на другие сайты

Просто в программаторе сохранил .hex

ATMEGA48V@TQFP32.HEX

Избегайте тех, кто старается подорвать вашу веру в себя. Эта черта свойственна мелким людям. Великий человек, наоборот, внушает чувство, что вы можете стать великим. (Марк Твен)

Ссылка на комментарий
Поделиться на другие сайты

@andrusha152

Сохранил только флэш.

ATMEGA48V@TQFP32_flash.HEX

16 минут назад, Electric_84 сказал:

а схему устройства где взять?

Нужно только две ноги. На одну поступает 1 когда вода есть. Со второй включается реле. Протеус демо качаю.

Избегайте тех, кто старается подорвать вашу веру в себя. Эта черта свойственна мелким людям. Великий человек, наоборот, внушает чувство, что вы можете стать великим. (Марк Твен)

Ссылка на комментарий
Поделиться на другие сайты

Динамическая индикация работает, вроде. Но подключал на глаз, как попало. Мало информации. Протеус пишет, что нет опорного напряжения для АЦП.

Безымянный.jpg

Ссылка на комментарий
Поделиться на другие сайты

On 7/20/2022 at 7:25 PM, Armenn said:

А хотя бы понять можно, это мусор или есть логика в файле?

Я уже очень давно не работаю с AVR, но если мне не изменяет память, то в самом начале прошивки обычно идёт таблица прерываний. Первая запись — вектор сброса и она всегда валидна. Остальные должны содержать или переходы к ISR или содержать инструкцию типа RETI (возврат из прерывания).

Согласно этому документу (страница 140) код операции инструкции RETI — 0x9518. Такой комбинации в области, выделенной под таблицу прерываний нет. Можем также предположить, что по адресу вектора сброса находится инструкция JMP, посредством которой осуществляется переход в тело программы. Код этой операции также можно посмотреть в упомянутом документе, но уже на странице 103. В отличие от RETI его размер составляет 4 байта и точное значение зависит от адреса перехода, но первые 4 бита постоянны и равны 0x9. Таковых в первом байте не наблюдается.

Из сказанного выше можно сделать два предположения:

  1. автор прошивки не использовал прерывания и его программа начинается непосредственно с нулевого адреса;
  2. считанная прошивки "бита";

Более точно можно установить, как я уже сказал, с помощью дизассемблера. И, по-моему, на эту операцию способен, в том числе, и Протеус. Побегайте по помощи, там должно быть сказано, где он находится. Ну или просто методом "тыка" в менюшках поищите.

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

Что, до сих пор никто не дизассемблировал?

avr-objdump -D ATMEGA48V\@TQFP32_flash.HEX -m avr > res.lss

Вроде на нормальную прошивку похоже. И rjmp'ы в таблице векторов, и инициализация стека.

res.lss

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

@COKPOWEHEU, спасибо за намётку! Не знал, что objdump умеет в дизассемблер.

Если судить по результатам его исполнения всё выглядит действительно удобоваримо. Хотя переход по адресу вектора сброса в каждом неиспользованном прерывании выглядит немного странно. Но это вкусовщина, однако. :-)

Ссылка на комментарий
Поделиться на другие сайты

Это чья то компиляторщина (автоматическая вставка компилятором переходов по неиспользуемым прерываниям). IDA определила то же самое.

Ссылка на комментарий
Поделиться на другие сайты

Не обязательно автоматическая. Такая рекомендация, например, есть в статье на этом сайте:

 

Цитата

На месте каждого неиспользуемого в программе прерывания желательно поставить “заглушки” в виде команды возврата rjmp 0 или reti, как это сделано в строках 14…31.

 

Ссылка на комментарий
Поделиться на другие сайты

если есть неиспользуемые прерывания, то такая вставка "заглушек" по их векторам не имеет никакого смысла.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

Отчасти имеет. Если используется только прерывание из середины таблицы векторов, что писать между вектором перезагрузки и вектором используемого прерывания? Для примера та же тринадцатая тинька. Первым номером у неё идёт ресет, дальше внешнее прерывание, прерывание по смене состояния пина, и только четвёртым идёт прерывание по переполнению таймера. Что писать во второй и третьей строке, если используется только четвёртая? Или есть способ "ужать" таблицу, дав понять контроллеру, где теперь искать вектор для переполнения таймера?

Ссылка на комментарий
Поделиться на другие сайты

Программисты знатные параноики, однако. :-)

Чисто теоретически неучтённая аномалия может привести к тому, что разрешится некоторое прерывание, для которого не предусмотрен вектор обработки. Если не прописать в соответствующую "строку" таблицы что-то вменяемое, как тот же RETI или, RJMP последствия могут быть довольно непредсказуемые: от спонтанного сброса до прыжка в случайную область памяти и попыткой исполнения там каких-то инструкций.

Такие ошибки встречаются крайне редко, но полностью исключать их нельзя. И даже в абсолютно правильно работающей программе тоже. Интересующеся могут загуглить SUT или Single Upset Event к примеру.

Поэтому и считается хорошей практикой заполнить неиспользуемые "строки" командами возврата из прерывания, сбросом или переходом в какой-то вектор по умолчанию. 

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

И точно так же получите непредсказуемый результат. Неизвестно, какой адрес возврата окажется в стеке после вашей аномалии.

Ссылка на комментарий
Поделиться на другие сайты

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

НО, правильно написанный код исключает такие проблемы.

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

НО, правильно написанный код исключает такие проблемы.

Сам я оставляю таблицу, так как в момент написания кода легко воспользоваться любым из векторов.

Ссылка на комментарий
Поделиться на другие сайты

52 минуты назад, Гость_Григорий_Т. сказал:

у каждого прерывания есть адрес

Верно.

1457141391_.png.2c30981afff3fa4cd78cfff90d05468a.png

И если мне нужен только вектор переполнения таймера, у меня есть два варианта. Первый - явно указать компилятору писать команду rjmp TMR по адресу 0х0003. При этом адреса 0х0002 и 0х0001 скорее всего останутся незадействованными - едва ли компилятор туда что-нибудь запихнёт. Второй вариант - адреса 0х0002 и 0х0001 забить заглушками. Оно понятно, что это ловля байтов, но ведь интересно, это во-первых, а во-вторых, в программировании микроконтроллеров каждый байт может стать на вес золота - ну иногда :-)

Ссылка на комментарий
Поделиться на другие сайты

1 hour ago, Гость_Григорий_Т. said:

И точно так же получите непредсказуемый результат. Неизвестно, какой адрес возврата окажется в стеке после вашей аномалии.

Почему? Вот использую я для включения прерывания некую переменную, в которую записал бит логическим ИЛИ. А остальные оставил без изменений. А переменная стековая и рядом с нужным битом затесался ещё и ошибочный. И включилось прерывание не только, скажем, по переполнению таймера, но ещё и по совпадению.

В дальнейшем во время исполнения программы это условное "переполнение" сработает, но если в таблице прерывания на этом векторе установлен RETI, то исполнение благополучно вернётся обратно.

Сценарий, безусловно, синтетический, но всё же. Ну а от всяких помех или заряженных частиц в принципе застраховаться нельзя. Можно лишь свести к минимуму возможные последствия и вероятность возникновения.  

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Да, сначала был написан бутлодер для тини 24. Там нет выделенной памяти под бутлодер и заморочек с областями откуда можно записывать и перезаписывать флеш из программы, там все просто! Также там нет УАРТА, пришлось написать. Ну и самое главное: перезаписывай любые страницы флеш из любого места! В тини 24 под бутлодер ушло 48% памяти. В проекте технологи выделили слишком мало физического места под схему. Потом развел плату, оказалось, что места не так уж и мало. Потом выяснилось, что пинов впритык, и если будет дальнейшее расширение, их может не хватить. И после долгих (ну очень долгих) изысканий (цена, доступность, размеры) остановился на 88 (очень низкая цена, корпус чуть больше чем у 24, датчик температуры, а это важно, но не критически). Да, и сейчас все программируют на С и др. языках высокого уровня, что занимает очень (ну очень) много места, и чипы с небольшой памятью остаются не востребованы, и как следствие низкий спрос, и низкая цена!!! И при тупом переносе программы перезаписи страниц флеш программа не заработала... Ну и пошли изыскания, и я набрел на ВАШ проект, самый полный и законченный на то время. Нужно было выяснить чип который был у меня битый или я что-то упустил при программировании? (в бутлодерах я новичек) Недостаток 88 на сегодня, то что из пользовательской памяти нельзя перепрограммировать флеш, хотя страница стирается.   По поводу ВАШЕЙ программы: выяснилось, что при включенном фьюзе WDT в конфигурации, соединение не устанавливается, а в хелпе это не отражено. В некоторых ситуациях соединение можно восстановить лишь отключив / включив питание, сброс через ножку ресет не помагает. Будем копать дальше,... и глубже....!  
    • Сейчас по входу стоит керамика 0,1 мкФ + электролит 220 мкФ, иголок вроде нет, ну во всяком случае старичек С1-93 их не показывает.
    • Платы материнки и УВ пока в брак.  - Семён Семёныч... (с) Вы ничего не забыли, сэр? Как вы собрались регулировать УВ по уровню выходного сигнала??? Решение уже есть, пока в процессе.
    • Ну в идеале каптоновым скотчем как вам сказали,но можно обмотать чем угодно лижбе диалектриком было и хотябы немного высокотемпературное,я бы термо усадку взял,поидеи хорошо пойдет  Ещё видел где трансформатор медно алюминиевой жилой был на ампер 10 если не больше на вид аж,и там алюминиевая обмотка сечением пол сантиметра была замотана в бумагу пропитанную в воске,слоем миллиметр примерно эта изоляция была 
    • Всем привет. Собрал мх50, запустился с первого раза, когда делал замеры, соскочил щуп, спалил выходники и пред, заменил, все ок. Питание тор 250 ватт 30х2 выход, после выпрямителя 44В 20000мкф в плечо  увеличил входные емкости на оконечниках, добавил шунтирующую пленку  плата софт старта присутсвует цепь буше взял из ОМ2.7 ТП выставил 100мА добавлена термозащита на каждый канал( но как оказалось, с таким корпусом хрен перегреешь) АС kef q150 dac Aiyima a5 max получилось снять 81 ватт с канала при 8ом нагрузке (на фото самое точное измерение на левом мультиметре) без сигнала если прислонится к ас еле уловимое шипение  при наличии сигнала все ок, играет отлично, мне очень понравилось. в планах ОМ2.7
    • Уже 52 скачивания. Значит актуальна.
    • Получается либо таймер работает наполовину и идет передача, либо таймер работает как надо, но передача не идет(
×
×
  • Создать...