dontsov 0 25 апреля, 2018 Опубликовано 25 апреля, 2018 · Жалоба Добрый день! Очень хочется сделать устройство, а 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: Какую диагностику мне еще под силам сделать? (как узнать, хватает ли памяти, регистры "возвращаются ли на свои места") Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 26 апреля, 2018 Опубликовано 26 апреля, 2018 · Жалоба 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. Необходимый инструмент - отладчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dontsov 0 26 апреля, 2018 Опубликовано 26 апреля, 2018 (изменено) · Жалоба .... Большое спасибо за развернутый ответ! Я нашел проблему у себя в коде: переполнение переменной! 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, т.к. решил, что для него уж точно написаны все библиотеки и не будет сюрпризов). Изменено 26 апреля, 2018 пользователем dontsov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 27 апреля, 2018 Опубликовано 27 апреля, 2018 · Жалоба По-моему, это не переполнение, а несоответствие типа возвращаемого ф-ей значения и переменной. Если ВСЕГДА :) читать 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dontsov 0 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба .... Да, warningа не было =(. Спасибо! Буду развлекаться.. =) Запилил тест счетчика внешней микросхемой Atmega 32u4, которая еще и импульсы подает. Прогоню полный цикл attiny. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться