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

Как отладить программу на Attiny85?

Добрый день!

 

Очень хочется сделать устройство, а Attiny85 через сутки перестает слышать запросы по I2C от ESP. (Я пробовал заменить ESP на Atmega32u4 - не помогло. Делаю вывод, что дело в Attiny85).

 

Attiny85 работает - именно он будит ESP8266 через каждые 30 мин и ожидает команды по i2c. Пробуждение происходит, а связь по i2c через 30-40 часов пропадает.

Я компилировал проект в PlatformIO. Пробовал компилировать в Arduino IDE с этим ядром: https://github.com/SpenceKonde/ATTinyCore - тоже не работает.

 

 

Код: https://github.com/dontsovcmc/ImpCounter/tr...er/ImpCounter85

 

Attiny85 раз в 4 раза в секунду опрашивает 2 входа, засыпая между опросами.

Раз в 1 минуту она пишет значения счетчиков в буфер 100 байт.

Раз в 30 минут Attiny измеряет напряжение питания, включает i2c Slave и подает импульс на Reset ESP

ESP отправляет команды, опрашивая Attiny85. Как прочитает заголовок + буфер, то отправляет команду на сон и сам засыпает.

 

 

Проблема:

Я не знаю, что за ядро использую, не знаю опции компиляции, фьюзы.

Я плохо понимаю, хватает ли памяти, стека моей программе.

 

Возможные шаги:

1. Сравнить не только ядра библиотек, но и фьюзы с работающими в интернете проектами =)

2. Расставить логирование во всех ответвлениях программы и смотреть ,вдруг они сработали

3. Попробовать другую библиотеку i2c

4. Попробовать не i2c, а SoftwareSerial

5. Показать код специалисту (анекдот про ДНК не вспоминать!)

6. Запустить код в симуляторе

7. Узнать, поможет ли debugWire и купить Atmel-ICE (+научиться с ним работать)

8. Cменить Attiny85 на более пафосные STM и т.п.

9. Изучить книжку по программированию микроконтроллеров и отрастить бороду.

 

Уважаемые специалисты, по какому пути пойти для устранения неисправности? :smile3046:

Какую диагностику мне еще под силам сделать? (как узнать, хватает ли памяти, регистры "возвращаются ли на свои места")

 

Поделиться сообщением


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

1. После "звеса", аккуратно проверьте, в каком состоянии находятся шины SDA SCL.

(есть ли на них сигналы, если "залипли" уровни, то какой на какой линии).

Аккуратно - это не отключая питание, не нажимая сбос, не "выпаливая", в электрическом смысле, схему.

2. Управление через ресет - это "оригинально". В особенности - для WiFi ESP8266. На время ресета ОНО пропадает из эфира.

на ре-коннект тратится время и электричество.

3. Что висит на шине I2C кроме ESP ?

4. Какие резисторы "подтяжки" для линий I2C установлены в схеме ?

5. Уровни напряжений на I2C со стороны ESP и Attiny должны быть согласованы. (что и как в подробностях для этих чипов не скажу).

----------

Re_1 - что есть "ядра" библиотек ?

Re_2 - если это сбой, то сомневаюсь, что "напрямую" таким образом Вы его отловите.

Re_3 - Можно, но это та-же лотерея. Пропадет этот глюк, появятся другие.

Re_4 - см.Re_3

Re_5 - можно. Вы хотите чтобы специалист вместо Вас выполнил ОТЛАДКУ вашего проекта.

Re_6 - скорее всего это бесполезно. Или у Вас есть симулятор ESP8266 ?

Re_7 - Это правильное решение, но .... Похоже что этот процессор - уже совсем устарел. ICE Atmel/Microchip почему-то до охренения дорогой.

Архитектура процессора - тоже сугубо атмеловская. У них все "застряло" в районе 2560. Смотрите ARM - очень доступные отладки у STM - c отладчиком на борту. Если что - ОНО ардуино-совместимое. Как вариант - неплохая платформа для старта - MSP430F149, F5438. Правда не из дешевых.

Re_8 - --> Re-7

Re_9 Это зависит от Вашей цели. "Сляпать" что-то - это одно. Если планируете серьезно использовать МК и программирование - то без работы с документацией на процессор в виде даташитов не обойтись. Начинайте с простых примеров работы с процессором из состава application notes.

Необходимый инструмент - отладчик.

Поделиться сообщением


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

....

 

Большое спасибо за развернутый ответ!

 

Я нашел проблему у себя в коде: переполнение переменной!

millis() - это unsigned long;

 

У меня условие ожидания i2c было:

unsigned short s = millis():

if (millis() - s > 4000) и наступал момент Х, когда ожидание не происходило... )

 

 

Возникла мысль: если это возникает не сразу, то надо приблизить момент. Сделал цикл не 30 мин, а 10 сек. Через пару минут связь пропала. Включил лог и увидел, что ожидание связи отсутствует.

 

> 2. Управление через ресет - это "оригинально". В особенности - для WiFi ESP8266.

ESP8266 в deepsleep. Если дернуть reset, у него происходит более быстрая загрузка, чем если сбрасывать питание.

 

> Re_2

под "ядром" я понимаю стандартные библиотеки микроконтроллер.

 

> Re_6 Или у Вас есть симулятор ESP8266 ?

Я положил, что причина не в ESP8266, поэтому достаточно симулятор Attiny85. Вот только, как имитировать общение 2х МК я не знаю.

 

> Re_7

MSP430F149 офигенная микросхема! Я ее видел в китайском пульте интервальном для фотоаппаратов.

А чем их программируют и отлаживают!?

 

> Re_8

Почему кому-то еще нужны Atmega, если есть STM и возможностью отладки?

(уточню: я взял Atmega, т.к. решил, что для него уж точно написаны все библиотеки и не будет сюрпризов).

Изменено пользователем dontsov

Поделиться сообщением


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

По-моему, это не переполнение, а несоответствие типа возвращаемого ф-ей значения и переменной.

Если ВСЕГДА :) читать warnings компилятора, там ЭТО должно быть. ОНО не вынесено в класс ошибок по причине надежды компилятора

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

unsigned long time_stop = millis() + 4000;
if ( millis() > time_stop) . . . .

А методика "отлова" правильная - "ускорить" время.

 

ReRe_6 На симуляторе отлаживать клиент-сервер (например Ваш вариант, с мастер-слейв I2C) проблематично.

Как Вы подключите I2C слейва к PC на котором эмулируется мастер ? Это эффективно для "внутрипроцессорной" отладки,

но даже не все узлы периферии контроллера могут симулироваться, я уже не говорю о внешних подключениях (разве что UART).

Для отладки-проверки работы с внешними интерфейсами (SPI, I2C, UASRT, CAN, OWI) необходимо иметь лог.анализатор (клоны по 10 кваксов).

 

ReRe_7 Ti предлагают для MSP430 различные "стартовые" платы с программатором-отладчиком. Его (отладчик) далее можно использовать

как автономное устр-во для работы с другими платами. LaunchPad

Я использую Вот такой клон MSPLink

Процесс программирования и отладки - в IAR/MSP430.

> Re_8 . . .

(уточню: я взял Atmega, т.к. решил, что для него уж точно написаны все библиотеки и не будет сюрпризов).

:) Да, это так. Но насчет сюрпризов - особо не надейтесь. Сюрпризы есть даже в самих контроллерах, список - в errata.

Вы рискуете "застрять" на уровне устаревшего процессора и софта. Для "старта" - пойдет.

Сейчас стандарт "де факто" - ARM.

Поделиться сообщением


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

....

 

Да, warningа не было =(.

 

Спасибо! Буду развлекаться.. =)

 

Запилил тест счетчика внешней микросхемой Atmega 32u4, которая еще и импульсы подает. Прогоню полный цикл attiny.

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...