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

Как распознать кратковременное выключение на Tiny13

За это время можно че хош в EEPROM записать. Во всяком случае один бит с номером режима точно.

Типовое время записи в EEPROM данных на порядок больше. Конкретно у tiny13 - 1.8 ms в предварительно стертую ячейку.

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


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

Да не надо в EEPROM ничего при выключении писать. Надо при старте определять как давно были выключены и при хорошем питании уже всё что надо делать.

 

Попробовал неинициализированную переменную проверять при старте. Хранится в памяти где-то 75 мс после выключения питания. После этого принимает произвольное значение, так как проверку ни на 0, ни на FF при старте не проходит. Маловато будет...

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


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

Чудес не бывает. Значит что-то есть еше.

 

Ну во-первых всякие BOD, ADC и компаратор отключить. Вочдог отключить. Просыпаемся по положительному перепаду. Сколько будет храниться так?

 

Тактовая 128 кГц. Возможно лучше даже максимальная. Отмолотил и уснул.

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


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

Включение следующего режима работы осуществляется кратковременным отключением питания кнопкой.

Причем, это "кратковременно" запросто может быть больше секунды. Если выключить на большее время, то

после включения режим не меняется (помнится).

 

Не помню чо там в tiny13, но в 2313 был регистр, хранящий тип только что произошедшего ресета (power-on, brown-out, user...). Если контроллер достаточно быстро вырубится по BOD, то возможно внутреннее состояние проживет достаточно долго, чтобы следующий ресет определился как BOR (в даташите где-то был рисунок с уровнями, на которые BOD реагирует).

 

Второй вариант - с тем же регистром, но как-то цепляющийся за постоянную времени RC-цепочки на ноге ресета.

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


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

Не помню чо там в tiny13, но в 2313 был регистр, хранящий тип только что произошедшего ресета (power-on, brown-out, user...). Если контроллер достаточно быстро вырубится по BOD, то возможно внутреннее состояние проживет достаточно долго, чтобы следующий ресет определился как BOR (в даташите где-то был рисунок с уровнями, на которые BOD реагирует).

Может я конечно не умею BOD готовить, но на моей практике не было еще ни одного контроллера, который бы POR без BOR поднимал. Наоборот возможно, но за такое время дело доходит именно до POR.

 

Что-то я уже расстроился. Перебрал почти все регистры аппаратуры - они при ресете зануляются намертво. А SRAM не держит нужное время... Чтож там китайцы нарыли то?

 

Второй вариант - с тем же регистром, но как-то цепляющийся за постоянную времени RC-цепочки на ноге ресета

Нет там ничего. Вся схема это диод с конденсатором на питании и два резистора делителя питания на АЦП. Единственный конденсатор разряжается полностью за единицы миллисекунд.

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


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

Гость @Ark
Что-то я уже расстроился. Перебрал почти все регистры аппаратуры - они при ресете зануляются намертво. А SRAM не держит нужное время... Чтож там китайцы нарыли то?

IMHO, немного не там ищите... При подключении нагрузки к источнику, напряжение на нем будет заметно "проседать". А при отключении нагрузки - будет медленно восстанавливаться к прежнему уровню... ;)

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


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

Всеже если все так как описал автор, то я думаю, что решение именно в засыпании при нажатии кнопки с принятием максимальных мер по экономии потребления. Может конденсатор там на единицы микрофарад и при вылизывании энергопортебления получим нужные секунды хранения в ОЗУ. Чудес не бывает. Может действительно запоминается значение источника сброса. Нужно посмотреть что там есть.

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


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

IMHO, немного не там ищите... При подключении нагрузки к источнику, напряжение на нем будет заметно "проседать". А при отключении нагрузки - будет медленно восстанавливаться к прежнему уровню...

Я уже думал измерять что-то в окружении. Напряжение на акб как вариант. Только в одном из режимов диод потребляет всего 40 мА. Более того, плата вообще без диода тоже меняет режимы. Я не могу представить как на акб 18650 потребление tiny13 может что-то там "просадить". За идею спасибо. Попробую её подумать :) Еще бы приборы, способные это измерить были...

 

С другой стороны, на сколько хватит EEPROM, если в него постоянно писать ADC? А записать его только после выключение всё равно не получится - нет у них даже 1.8 мс, не говоря уже о 2x1.8 мс.

 

Всеже если все так как описал автор, то я думаю, что решение именно в засыпании при нажатии кнопки с принятием максимальных мер по экономии потребления.

Посмотри еще раз осциллограммы. Через 320 мкс они упираются в BOD. Всё, никакой жизни, кроме переходных процессов, в микроконтроллере после этого уже нет. И любое последующее включение пойдет по одному и тому же сценарию. Так что, полюбому надо какой-то побочный эффект искать.

 

 

Может конденсатор там на единицы микрофарад и при вылизывании энергопортебления получим нужные секунды хранения в ОЗУ.

Да какие там единицы... 0603 керамика. Максимум 1 мкФ и то сомневаюсь. Доберусь до работы - померяю. Одно я понял - вылизывай, не вылизывай проспать столько не получится всё равно.

 

 

Чудес не бывает. Может действительно запоминается значение источника сброса. Нужно посмотреть что там есть.

Что-то есть точно. И это что-то мне уже спать спокойно не даёт? :(

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


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

IMHO, немного не там ищите... При подключении нагрузки к источнику, напряжение на нем будет заметно "проседать". А при отключении нагрузки - будет медленно восстанавливаться к прежнему уровню... ;)

Кстати, да. Интересно, как схема ведет себя при работе от сетевого БП, который не проседает?

 

С другой стороны, тогда придется постоянно писать в EEPROM текущее значение напряжения, иначе можно не успеть.

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


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

Недавно делал проект на одном из AVR, программа на ассемблере. Один из регистров общего назначения хранил режимы работы устройства, не помню точно, но r24 вроде. Оказалось, что для инициализации режима по умолчанию после включения вместо команды ldi использовал команду sbr, из-за чего последний режим сохранялся удивительным образом после отключения питания. По питанию стоит конденсатор 220мкФ, но напряжение на нём довольно быстро падало после отключения. Потребление схемы в рабочем режиме где-то 20мА.

Максимально не проверял, но секунд 30 точно регистр сохранял данные.

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


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

Гость @Ark
Я не могу представить как на акб 18650 потребление tiny13 может что-то там "просадить".

Тинька, конечно, заметно не сможет "просадить". Но если включить светодиоды (фонарь же?), то "просадка" батареи может быть существенной. АЦП тиньки должно ее определить....

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


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

К своему сообщению добавлю, что у меня командой sbr устанавливалась часть битов регистра, а состояние остальных сохранялось после отключения. Возможно из-за того, что некое остаточное напряжение на конденсаторе по питанию оставалось длительное время.

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


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

Если выключить на большее время, то

после включения режим не меняется (помнится).

 

Уверены насчет выделенного слова? А то может всегда помнит? Тогда достаточно при подаче питания выбирать следующий режим. Номер его, естественно, хранить в EEPROM.

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


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

Емкость конденсатора может быть и больше( нада померять).

Я делал такую потеху основываясь на битах BORF и PORF регистра MCUSR.

Если PORF - берем из епрома режим и работаем

Если только BORF - берем из епрома режим инкрементируем записываем и работаем.

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


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

Уверены насчет выделенного слова? А то может всегда помнит? Тогда достаточно при подаче питания выбирать следующий режим. Номер его, естественно, хранить в EEPROM.

Главный затык как я понял в величине времени отключенного питания при котором происходит смена режима. Т.е. если выключено надолго - режим не меняется, а если на пару секунд то меняется. Вот в этих секундах и затык.

 

Кстати, Автор, Вы опять про BOD и т.п., а если все поотключать, в т.ч. АЦП и компаратор чтоб внутрений ИОН тоже выключился - то потремление становится микроамперы, что возможно и позволит выиграть нужные пару секунд.

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


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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...