Jump to content

    

Search the Community

Showing results for tags 'attiny'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Сайт и форум
    • Новости и обсуждения сайта и форума
    • Другие известные форумы и сайты по электронике
    • В помощь начинающему
    • International Forum
    • Образование в области электроники
    • Обучающие видео-материалы и обмен опытом
  • Cистемный уровень проектирования
    • Вопросы системного уровня проектирования
    • Математика и Физика
    • Операционные системы
    • Документация
    • Системы CAD/CAM/CAE/PLM
    • Разработка цифровых, аналоговых, аналого-цифровых ИС
    • Электробезопасность и ЭМС
    • Управление проектами
    • Neural networks and machine learning (NN/ML)
  • Программируемая логика ПЛИС (FPGA,CPLD, PLD)
    • Среды разработки - обсуждаем САПРы
    • Работаем с ПЛИС, области применения, выбор
    • Языки проектирования на ПЛИС (FPGA)
    • Системы на ПЛИС - System on a Programmable Chip (SoPC)
  • Цифровая обработка сигналов - ЦОС (DSP)
    • Сигнальные процессоры и их программирование - DSP
    • Алгоритмы ЦОС (DSP)
  • Микроконтроллеры (MCs)
    • Cредства разработки для МК
    • ARM
    • AVR
    • MSP430
    • Все остальные микроконтроллеры
    • Отладочные платы
  • Печатные платы (PCB)
    • Разрабатываем ПП в САПР - PCB development
    • Работаем с трассировкой
    • Изготовление ПП - PCB manufacturing
  • Сборка РЭУ
  • Аналоговая и цифровая техника, прикладная электроника
  • Силовая Электроника - Power Electronics
  • Интерфейсы
  • Поставщики компонентов для электроники
  • Майнеры криптовалют и их разработка, BitCoin, LightCoin, Dash, Zcash, Эфир
  • Дополнительные разделы - Additional sections

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Город


Код проверки


skype


Facebook


Vkontakte


LinkedIn


Twitter


G+


Одноклассники

Found 5 results

  1. Прошу помощи! Счетчик импульсов (watchdog в режиме генерации прерываний) на attiny85 считает импульсы просыпаясь раз в 250мс и раз в сутки выходит из цикла и общается по i2c. Возникла проблема — очень редко attiny85 уходит в бесконечный цикл. Как я это понял: 1. Устройство не выходит на связь через 15 мин. 2. Потребление вместо 12-17мкА стабильно 670мкА (без скачков и какой то работы). Нажатие на кнопку приводит к выходу из цикла. Т.е. цикл работает - состояние кнопки проверяется. Гипотеза: ISR(WDT_vect) не вызывается. Подозрения на некорректный ресет watchdog. Проблема проявляется крайне редко и не понятно как отловить. После зависания wdt_count = 15, т.е. значению иницилизации. Эту информацию вывел только что, поэтому поймал пока 1 зависание. Странно, что потребление линией 670мкА (измеряю EFM32 Energy monitor), потому что когда Ватериус считает импульсы - там четкие скачки потребления из-за пробуждения из deepsleep. volatile int16_t wdt_count; /* Вектор прерываний сторожевого таймера watchdog */ ISR( WDT_vect ) { wdt_count--; WDTCR |= bit( WDIE ); // так делать написано в datasheet } void resetWatchdog() { MCUSR = 0; WDTCR = bit( WDCE ); // Пробуждаемся (проверяем входы) каждые 250 мс WDTCR = bit( WDIE ) | bit( WDP2 ); // 250 ms #define ONE_MINUTE 240 // 1 минута примерно равна 240 пробуждениям wdt_reset(); } inline void counting() { power_adc_enable(); //т.к. мы обесточили всё а нам нужен компаратор adc_enable(); //после подачи питания на adc if (counter0.is_impuls()) { info.data.value0++; //нужен т.к. при пробуждении запрашиваем данные info.states.state0 = counter0.state; info.adc.adc0 = counter0.adc; storage.add(info.data); } #ifndef LOG_ON if (counter1.is_impuls()) { info.data.value1++; info.states.state1 = counter1.state; info.adc.adc1 = counter1.adc; storage.add(info.data); } #endif adc_disable(); power_adc_disable(); } //Запрос периода при инициализции. Также период может изменится после настройки. // Настройка. Вызывается однократно при запуске. void setup() { .... } void loop() { power_all_disable(); // Отключаем все лишнее: ADC, Timer 0 and 1, serial interface set_sleep_mode( SLEEP_MODE_PWR_DOWN ); // Режим сна resetWatchdog(); // Выход по прошествию WAKE_EVERY_MIN минут или по нажатию кнопки for (unsigned int i = 0; i < ONE_MINUTE && !button.pressed(); ++i) { wdt_count = info.wakeup_period_min; while ( wdt_count > 0 ) { noInterrupts(); if (button.pressed()) { interrupts(); break; } else { counting(); //Опрос входов. Тут т.к. https://github.com/dontsovcmc/waterius/issues/76 interrupts(); sleep_mode(); // Спим (WDTCR) } } } wdt_disable(); // disable watchdog power_all_enable(); // power everything back on storage.get(info.data); // Берем из хранилища текущие значения импульсов info.wdt = wdt_count; LOG_BEGIN(9600); LOG(F("Data:")); .... } Вот здесь была в другом проблема. Теперь не перезагружается... Но вот зависает: Если кто-то может потратить чуть больше времени, чтобы отладить проблему за вознаграждение - пишите. Спасибо!
  2. Прошу помощи! Счетчик импульсов (watchdog в режиме генерации прерываний) на attiny85 считает импульсы просыпаясь раз в 250мс и раз в сутки выходит из цикла и общается по i2c. Возникла проблема — очень редко (!) attiny85 перезагружается после общения по i2c. Как я это понял: я вижу на сервере увеличение на единицу счетчика перезагрузок и MCUSR в setup(). MCUSR обычно 1, а становится равен 8 (1000 - WDRF: Watchdog Reset Flag. Завершение работы таймера.). Подозрения на некорректную настройку watchdog. Проблема проявляется крайне редко и не понятно как отловить. Код: main.cpp main.cpp "избранное": int16_t wakeup_period_min; volatile int wdt_count; ISR( WDT_vect ) { wdt_count--; } void resetWatchdog() { MCUSR = 0; WDTCR = bit( WDCE ) | bit( WDE ); WDTCR = bit( WDIE ) | bit( WDP2 ); // 250 ms wdt_reset(); } #define ONE_MINUTE 240 void setup() { info.service = MCUSR; //причина перезагрузки noInterrupts(); ACSR |= bit( ACD ); interrupts(); resetWatchdog(); wakeup_period_min = WAKEUP_DEFAULT_PER_MIN; if (storage.get(info.data)) { //не первая загрузка info.resets = EEPROM.read(storage.size()); info.resets++; EEPROM.write(storage.size(), info.resets); } else { EEPROM.write(storage.size(), 0); } } void loop() { power_all_disable(); set_sleep_mode( SLEEP_MODE_PWR_DOWN ); resetWatchdog(); for (unsigned int i = 0; i < ONE_MINUTE && !button.pressed(); ++i) { wdt_count = wakeup_period_min; while ( wdt_count > 0 ) { noInterrupts(); if (button.pressed()) { interrupts(); break; } else { counting(); interrupts(); sleep_mode(); } } } wdt_disable(); .... ....Связь по i2c .... } Выдержка из даташита Какие гипотезы тестируются: 1. по даташиту нужно "To avoid the Watchdog Reset, WDIE must be set after each interrupt." добавил в ISR(WDT_vect): WDTCR |= bit( WDIE ); 2. Убрать WDE из WDTCR = bit( WDCE ) | bit( WDE ); Почему я уверен, что устройства не зависают: а) attiny продолжает считать импульсы корректно б) я посмотрел статистику и 70% attiny вышли на связь через WAKEUP_DEFAULT_PER_MIN, который получают в setup(). В остальных случаях через Х * WAKEUP_DEFAULT_PER_MIN из-за проблем со связью. Почему я думаю, что проблема в начале функции loop(), а не в цикле подсчета импульсов: a) attiny выходит на связь через дефалтный период, а не хаотично. б) attiny выходит на связь ПОСЛЕ цикла подсчета импульсов, значит ошибка была не в цикле, а перед ним. Проблема появляется с вероятностью около 0,0002%. К сожалению, моих знаний не достаточно, чтобы предположить, что может быть причиной перезагрузки. Прошу помощи!
  3. Столкнулся с очень редкими зависаниями (цикла? чипа?) attiny85 в Ватериусе. Проявляется через пару суток, когда период пробуждения ESP короткий (15 мин). Не могу понять причины. Требуются консультации + симулировать прошивку в AVR Studio. https://github.com/dontsovcmc/waterius/blob/master/Attiny85/src/main.cpp То, что Ватериус завис видно, потому что он перестает выходить на связь через 15 мин + потребление 400мкА, вместо 12-17мкА. Если нажать на кнопку, то Ватериус выйдет на связь. Взаимодействие, оплату предлагайте. Спасибо!
  4. Знатоки! Покритикуйте трассировку платы для приставки к импульсным счётчикам воды! Attiny85, спит и раз в 250мс просыпается, чтобы проверить состояние входов. Раз в сутки пробуждает ESP. Питание 3.0 В. Потребление при работе 25мкА, при включении ЕСП до 150мА. Что можно улучшить? factory-3.0.zip
  5. Уважаемые знатоки! Есть счетчик импульсов на Attiny85 . Раз в 250мс проверяет вход. Раз в сутки будит ESP для передачи данных. Прошивка отлажена и не менялась год. Несколько экземпляров из новой партии устройств начали зависать (компоненты одинаковые, куплены в elitan). Устройство настраивают - нажимают кнопку (attiny пробуждает ESP), минут 5 ESP включена, потом ESP посылает данные по i2c на Attiny и та корректно засыпает, продолжая считать. Через несколько часов Attiny перестает реагировать на нажатие кнопки. Помогает замыкание пина Reset на землю. Вопрос: 1. Как убедиться в том, что Attiny85 корректно прошилась? avrdude.exe -p t85 -c Usbasp -B 4 -P usb -U flash:w:"attiny85.hex":a Программатор: Китайский перепрошитый usb стик USBASP 2. Нужно ли прошивать фьюзы, если они остаются стандартными? Не записывали их обычно и в этот раз. 3. Стоит ли поставить Atmel Studio и можно ли там воспроизвести подобное поведение? Я не моделировал там, т.к. прошивка работает у многих людей корректно. 4. Является ли использование watchdog для перезагрузки решением проблем с зависанием? (нужна помощь с кодом) Код Буду рад любым советом, чтобы сделать устройство более надежным!