Мне нужен dimax, вопросы по сторожевому таймеру
- Войдите на сайт для отправки комментариев
Возможно кто-то ещё знает.
Надо:
- спать
- просыпаться по WDT
Либо:
- просыпаться по RISING на D2
- WDT применять по назначению (сброс висящей системы)
Проблемы:
1. Беру пример Nick Gammon со сном и пробудкой по WDT. Работает на mega328. НЕ работает на mega8. Компилятор жалуется "WDTCSR не определено". Меняю на WDTCR, ошибка исчезает, но работоспособности добиться невозможно.
ЭТОТ РЕГИСТР В MEGA8 ПРОСТО ИНАЧЕ НАЗЫВАЕТСЯ, НЕ ИМЕЕТ WDP3 И WDIE, ОТЛИЧАЕТСЯ ОТ WDTCSR ЕЩЁ ЧЕМ-ТО, ОТЛИЧАЕТСЯ ВООБЩЕ ПОЛНОСТЬЮ, ЭТО ВООБЩЕ СОВЕРШЕННО ДРУГОЙ РЕГИСТР ИЛИ ЧТО? В ЧЕМ ПРОБЛЕМА?
2. Не использую пока что WDT, просто хочу будить по внешнему прерыванию.
Работает с attachInterrupt(N,isr,LOW). НЕ РАБОТАЕТ С RISING. Полностью. Вообще, просто не возникает прерывания. Был и прямой вывод в порт внутри прерывания, и detachInterrupt при просыпании как в классическом примере, и просто с флагами и без detachInterrupt(), бесполезно.
Дребезг глушу RC цепью (внутренняя подтяжка, либо внешняя 100k)+0.15uF.
Хочу ответ по таймеру (просыпаться раз в 2 секунды), меня не покидает ощущение что в mega8 этой возможности нет и я впустую трачу время.
в восьмерке WDT работает по другому. Щас поищу в своих записях
с лёту не нашол, но помню, что в 8 WDT одноступенчатый, а не двух, как в 328, т.е. он сразу сбрасывает контроллер, без прерываний всяких. А во-вторых, максимальное сторожевое время не 8 секунд (как в 328), а чуть больше двух.
The external interrupts need to be set for a level interrupt not a rising or falling edge
Отсюда. Зашибись ёпт. Какого-то хрена я узнаю об этом на хрен знает каких задворках с пятой страницы гугла, когда это русским (ну или англ) по белому должно быть написано на arduino.cc
DetSimen, про второе я знаю. А вот про первое весьма вероятно, что просыпаться раз в 2.1 сек и делать дела тупо невозможно. На данный момент я так понимаю что под m8 включить WDT равносильно fuse-биту WDTON.
нет, когда фьюз WDTON установлен, это значить, собаку принудительно отключить нельзя, он постоянно включен. А когда фьюз WDTON выключен - тогда можно и включать и выключать по желанию.
я на восьмерке когда что-то делал, не помню, датчик какой-то в теплице, пришлось схему городить, чтоб будить ее по внешнему прерыванию от 555, раз в 5 или 10 минут. Но зараза, нихрена не термостабильно получилось. Интервал плавал чуть не в 2 раза с мая по сентябрь, но, мне не критичненько было. И, да, внешнее прерывание только по уровню в режиме сна и по фронтам, если внутренний I/O clock не спит.
И еще, вспомнил, тама Таймер0 по сравнению не работает, только по переполнению.
Положение вещей по факту:
The external interrupts can be triggered by a falling or rising edge or a low level. This is set up as indicated in the specification for the MCU Control Register – MCUCR. When the external interrupt is enabled and is configured as level triggered, the interrupt will trigger as long as the pin is held low. Note that recognition of falling or rising edge interrupts on INT0 and INT1 requires the presence of an I/O clock
The I/O clock is used by the majority of the I/O modules, like Timer/Counters, SPI, and USART. The I/O clock is also used by the External Interrupt module, but note that some external interrupts are detected by asynchronous logic, allowing such interrupts to be detected even if the I/O clock is halted. Also note that address recognition in the TWI module is carried out asynchronously when clkI/O is halted, enabling TWI address reception in all sleep modes.
В режиме сна, я так понимаю, IO clock отключен нахрен.
Короче, задача не решается ни с того угла, ни с WDT, а родить надо. Уже начинает припекать.
Размыкающий геркон я конечно купить могу, но это надёжность уже меньшая просто на порядок.
Без матов как дальше в тему писать, я хз. Слов нет уже.
Короче, задача не решается ни с того угла, ни с WDT, а родить надо. Уже начинает припекать.
Размыкающий геркон я конечно купить могу, но это надёжность уже меньшая просто на порядок.
Без матов как дальше в тему писать, я хз. Слов нет уже.
дак ты геркон на плюс перевесь. разомкнется - на ноге будет 0
переименуйте тему в [решено]
Или удалите, всё равно она бесполезная.
Q. Как использовать внешние прерывания по высокому уровню?
A. Никак. Входы PCINT - active low.
Q. Что писать в attachInterrupt в качестве типа прерывания? Правда ли что внешние прерывания реагируют на любой уровень и фронты?
A. Только LOW. Чушь собачья. RISING, FALLING, HIGH нарушают логику. Только LOW.
A. Никак. Входы PCINT - active low.
Я думал, ты про INT0, INT1.
Ну да. int0=Digital 2; int1 = Digital 3. На mega8, 168, 328. Не?
Вопрос из праздного любопытства. Таки почему под Atmega8 регистр сторожевого таймера называется не WDTCSR? Он просто WDTCR? Или там ещё какая собака закопана? И возможно ли вообще вывести mega8 по WDT из сна?
1. PCINT и INT0/1 - савсем разные вещи
2. WDT на Atmega8 только сбрасывает проц, прерывания нет.
Подождём dimax. Он нам, невеждам, всё расскажет.
Да это я не так выражаюсь. Так на выводе D2 написано. INT0/PCINT чтото там. Туплю.
Всмысле нет события, которое запустило бы функцию вида ISR(WDT_vect)? Печально тогда.
я еще в #2 писал, что WDT в восьмерке одноступенчатый, а в 328 - двух, т.е. можно настроить, что сначала прерывание, а потом сброс.
В восьмерке прерывания нет, сразу сброс.
Вот все прерывания восьмерки, больше нету.
и я тут нихрена WDT_vect не вижу....
а вот прерывания с векторами 2 и 3 могут работать по уровню и по обоим фронтам, это не PCINT. Но только когда IO Clock не спит. Пачитай про attachInterrupt() чонить.
Какого-то хрена я узнаю об этом на хрен знает каких задворках с пятой страницы гугла, когда это русским (ну или англ) по белому должно быть написано на arduino.cc
Пока ДетСимен все пишет правильно и вмешиваться не нужно...
Одно меня порадовало:
Вуду, а с хераль ДШ на контроллер ты искал на arduino.cc? Чисто энтомологический интерес. Просто не вник, почему он там должен быть?
----
дальше вопросы:
1. ВД прерывания на 8 нету, зачем оно тебе было нужно?
2. Из глубокой спячки нельзя выходить ничем, кроме ЛОУ, даже на 328. Это очевидно.
3. На AtMega 8 нет PCINT и всяких фронтов, тока ЛОУ, тока хардкор ;)...
4. Выбор 8, а не 328 или 168 чем-то серьезным обусловлен? корпуса одинаковые,совместимые по ногам, цены - почти одинаковые. Тут религиозные мотивы? Или просто есть мешок и жалко выбросить? ;)
5. Хочешь совет - поставь задачу нормально. Пока непонятно, зачем тебе спячка, почему атмега8, чем не устраивает ЛОУ для вывода из спячки и т.д.?
а вот прерывания с векторами 2 и 3 могут работать по уровню и по обоим фронтам, это не PCINT. Но только когда IO Clock не спит. Пачитай про attachInterrupt() чонить.
на атмега8 не могут
Пост #6 даташит на Атмега8 66 страница. Фронты распознаются, когда камень не в спячке.
Не мешок. Была плата, отслужила, валялась без надобности. На ней мега8, два резистра, разъём и пады на все выводы. Было лень новую делать.
Вот собсно по пунктам и ответ на мои подозрения... Спасибо.
Пост #6 даташит на Атмега8 66 страница. Фронты распознаются, когда камень не в спячке.
ты прав. извини - задумался о своем ;)
Если думы тяжелые, надо налить. :)
дык я сижу и слежу за процессом... второй перегонки ;)... вот не хочу автоматизировать! Самогон потеряет "теплую ламповость";).
Тело отобрал... слежу за хвостами, штоп их потом в третий перегон пустить. И поработать не отойти и не поспать....
Voodoo Doll, я не четко представляю что Вы делаете, но на атмеге8 я делаю радиодатчики температуры и ОВВ передача нрф-кой.
WDT перезагружает МК каждые 2 сек, читает датчик, отправляет данные и засыпает. Двух батареек АА хватает на год.
Voodoo Doll Есть вот такая библиотека, может Вам подойдет, я не проверял. Описание вставляю
<< Энергосберегающий режим
Датчик перерасхода воды. Геркон в счётчике, двигатель с редуктором на кран, у двигателя отдельный источник питания с опторазвязкой.
Хороший вариант, но мне приходится помнить, сколько там натикал счётчик. Так что перезагрузка не подходила.
Может для данной задачи не совсем удобный вариант, но есть такая штука как PCF8583. Там есть вывод для внешнего осциллятора, который может работать по event pulse. Потребление небольшое, вроде как.
Voodoo Doll, я смотрю и без меня уже разобрались. В общем не взяли бы вы это древнее говно, всё бы было ОК. 328 мега умеет просыпатся и под RISING, и вотчдог у неё более полноценный.
Датчик перерасхода воды. Геркон в счётчике, двигатель с редуктором на кран, у двигателя отдельный источник питания с опторазвязкой.
Датчик перерасхода это наверное тоже что и расхода?
Собирался делать что-то похожее... Как Вы решили вопрос по микропотреблению через подтяжку геркона?
Ведь геркон при отсутствии потока может быть разомкнут (ток не течет = 0) или замкнут = ток через подтяжку значительный: сотни мкА если подтяжка десятки кОм.
Если подтяжка несколько МОм, тогда наводки при разомкнутом герконе порушат всю работу девайса.
Pyotr, помимо подтяжки бывает и стяжка (Pull-down), которая ничего не ест :)
Хороший вариант, но мне приходится помнить, сколько там натикал счётчик. Так что перезагрузка не подходила.
В любом случае Вам надо хранить данные в энергонезависимой памяти - внутренней или внешней. При зависании WDT перезагрузит МК и данные обнулятся.
Pyotr, помимо подтяжки бывает и стяжка (Pull-down), которая ничего не ест :)
Dimax, можно чуть подробней. Словами как подключить геркон, чтоб при замыкании-размыкании было устойчивое состояние на пине МК "0" или "1" и при этом ток не превышал нескольких мкА.
Pyotr, помимо подтяжки бывает и стяжка (Pull-down), которая ничего не ест :)
Ну немного dimax приврал. Жрет энергию все. Даже конденсатор. Зарядился разрядился и немного энегии ушло. И чем чаще заряд-разряд тем больше расход тока. И хотя конденсаторы на вход никто не вешает.Но ведь затворы это тоже конденсаторы . Дорожки на выводах тоже конденсаторы, ножки на микросхемах тоже конденсаторы. Так капелька по капельке и ток течет. Я это к тому что чем меньший ток надо достигнуть, тем большую оптимизацию надо делать.
qwone, ну расскажите какой ток будет в этой цепи пока кнопка не замкнута:
Pyotr, это и вам ответ.
dimax. Зачем подключать геркон, который никогда не будет замкнут?
Ведь геркон при отсутствии потока может быть разомкнут (ток не течет = 0) или замкнут = ток через подтяжку значительный: сотни мкА если подтяжка десятки кОм.
Если подтяжка несколько МОм, тогда наводки при разомкнутом герконе порушат всю работу девайса.
Вот в этом и вся "соль" - мы не знаем в каком состоянии окажется геркон на долгие часы, когда нет потока воды.
В схеме геркон-резистор нет разницы по потреблению тока, что верхняя подтяжка, что нижняя...
Вариант: заменить на геркон с переключающими контактами не рассматриваем - там всё просто.
Ну тогда резистор по максимуму, и конденсатор паралельно входу МК, или лучше RC-цепочку, и никаких наводок не будет.
Одно радует, скоро mega8 у меня кончатся. Это как с резисторами 0805. Теперь только 1206.
Ну тогда резистор по максимуму, и конденсатор паралельно входу МК, или лучше RC-цепочку, и никаких наводок не будет.
Это понятно. Только для снижения потребления резистор нужно порядка 1 МОм и кондер единицы нФ. Это подавит ВЧ помехи, но 50 Гц при разомкнутом герконе могут пролезть.
Частота с геркона у меня 100-150 Гц, возможно даже до 400 Гц.
Вот такая задачка для схемотехников...
Частота с геркона у меня 100-150 Гц, возможно даже до 400 Гц.
Вы заставляете геркон срабатывать 400 раз в секунду? Так с него только дребезг будет идти. И сдохнет быстро, особенно если геркон китайский. С такими частотами нужно оптику использовать.
Вы заставляете геркон срабатывать 400 раз в секунду? Так с него только дребезг будет идти. И сдохнет быстро, особенно если геркон китайский. С такими частотами нужно оптику использовать.
400 Гц не будет конечно. Это про запас)) Рабочая 50-120 Гц.
В датчик встроен датчик холла. И ни каких бы проблем, еслиб он не потреблял милиамперы. Если отключать питание ему, то чем будить МК, когда начнется расход воды?
Встроил геркон вместо датчика холла, подул в датчик расхода - частотомер плавно показывал увеличение частоты до 600 Гц. Не ожидал, что геркон может так шустро переключаться. От воды будет не более 100 Гц.
Работать будет не каждый день и всего несколько часов.
Pyotr, у геркона наверное дребезг на 600Гц. Снимите осциллограмму работы с ног геркона, увидите какой там трэш. Имхо лучше подвести стационарное питание, чем извращаться с экономией миллиампер.
Уважаемый dimax
Алексей Фодин, я тут на форуме далеко не самый умный :) И индивидуальными заказами/консультациями к сожалению не занимаюсь, мне это не интересно. Спрашивайте здесь. Коллективный разум всегда лучше, чем одна голова.