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

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


Armenn

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

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

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

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

ATMEGA48V@TQFP32.BIN

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

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

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

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

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

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

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

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

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

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Просто в программаторе сохранил .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 пользователей онлайн

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