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

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

В общем, сначала нужно ответить на вопрос: зачем диод по питанию, коль скоро 1 мкф не обеспечивает не то, что 2 сек питания, а даже и запись в еепром?

Чтобы дым не шел от неправильно вставленной батарейки.

 

А может быть, он всё же обеспечивает ОЗУ питанием на 2 секунды от перехода в "любимое состояние"? Оно, допустим, хранится в EEPROM и при включении сравнивается с RAM и потом RAM расписывается например нулями.

Какое напряжение, по твоему, для этого нужно? А то мой осциллограф никакого не видит.

 

Зачем тогда нужен делитель напряжения?

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

 

 

При отключении питания конденсатор АЦП остаётся заряженным внутри кристалла, где изоляция хорошая! И 14пф могут протянуть долго...

Я еще не успел досканально проверить эту идею, но слышу её не впервые. Кто-нибудь может подтвердить что такое есть?

 

 

Не этот ли пичок мы видим на ногах 2,3 в самом начале на диаграмме из №137?

Не думаю, в этот момент напряжение еще не превысило 1.8 и проц еще не стартанул. Да и потом он еще много-много тактов будет в ресете.

 

 

Зачем тогда диод, если AMC7135 линейный регулятор?

Чтобы проц не спалить неправильно вставленной батарейкой.

 

Ещё одна ёмкость - 3 входа AMC7135, в дататшите обозванные "band-gap reference", которые можно подать на вход компаратора. Хотя утечка с неё по плате непредсказуема.

 

Этот самый "band-gap reference" я уже общупал со всех сторон. Очень быстро стартует. Я думал его с нарастающим питанием на ADC1 сравнивать - не получается перехода ни при каких условиях.

 

 

Нужна полная схема - куда идут ноги 1,2,3,5? Не видно ни на схеме из №64 ни на плате из №94.

Никуда. Я же рисовал полную схему. На одной плате просто есть контактные площадки через которые эти ножки можно на землю подключить для управленичя режимами.

 

Есть более качественные фото плат:

 

post-4140-1263243888_thumb.jpg

post-4140-1263244003_thumb.jpg

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


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

заразили :)

 

провел эксперименты на меге32 (чтобы в терминал выводить). сделал 3 массива по 5 байт в неинициализируемой области ОЗУ: один заполняю 0, второй 0xFF, третий символом 'A'. при включении питания выводил содержимое массивов и сумму всех байтов в каждом.

 

получил следующие результаты:

1. при быстром передергивании питания (менее 1 сек), при среднем (до 5 сек) и при длительном (более 30 сек) невозможно по содежимому ОЗУ определить, как долго оно было обесточено. наверное, при использовании каких-то особых методов анализа шанс определения времени есть, но мне он показался мнимым...

2. каждая ячейка в массивах стремится к своему "любимому" значению при подаче питания, причем с высокой степенью точности: из 30 экспериментов, например, первый байт первого массива у меня всегда был равен 62, второй 188 или 189 и т.д. отклонение в 1 бит, редко в 2.

3. имеется слабая тенденция в увеличении числа единиц при очень долгом обесточивании.

 

такие вот результаты...

 

P.S. экспериментировал на STK500 - питание дергал его выключателем.

 

программа:

uint8_t __attribute__((section(".noinit"))) str1[5];
uint8_t __attribute__((section(".noinit"))) str2[5];
uint8_t __attribute__((section(".noinit"))) str3[5];

static void prn(uint8_t *s){
    uint16_t tmp=0;
    printf_P(PSTR("\n"));
    print_line('=',25);
    printf_P(PSTR("\n"));
    for(uint8_t i=0; i< 5; i++){
        printf_P(PSTR("%u "),s[i]);
        tmp += s[i];
    }
    printf_P(PSTR("\nSUM=%u"),tmp);
}

int main(void){
    printf_P(PSTR("\n\nTest RAM"));
    prn(str1);
    prn(str2);
    prn(str3);
    memset(str1,0,5);
    memset(str2,255,5);
    memset(str3,'A',5);
    while(1);
}

 

примерный результат:

Test RAM

=========================

62 188 238 233 34

SUM=755

=========================

233 22 11 139 253

SUM=658

=========================

228 195 47 90 155

SUM=715

 

Test RAM

=========================

62 188 238 233 163

SUM=884

=========================

233 22 27 139 253

SUM=674

=========================

228 227 47 90 155

SUM=747

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


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

А Вы попробуйте понаблюдать не за ячейками ОЗУ, а за регистрами общего назначения.

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


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

При отключении питания конденсатор АЦП остаётся заряженным внутри кристалла, где изоляция хорошая! И 14пф могут протянуть долго... Тогда при включении питания выбираем ногу 2, висящую в воздухе (?) на вход АЦП и, собственно, АЦПуем :)

да, есть какой-то эффект! (собственно об этом @Ark давно говорил)

взял один свой девайс с тини13 и попробовал. перед выключением цифровые буферы были подключены к одному из висящих в воздухе ADC, вход подтянут к питанию и подключен к АЦП (т.е. внутренний конденсатор заряжается до питания). при включении сразу отключал цифровые буферы от этого входа ADC, оцифровывал вход и отправлял в регистр сравнения ШИМ (смотрел скважность ШИМ). разницу в 1 и 5 секунд видно невооруженным глазом :)

почему-то эффект виден только в том случае, если опорным напряжением АЦП является питание. если в качестве опорного используется внутренний ИОН, то ШИМ всегда зашкален (возможно ИОН не успевает установиться, нужно сдвинуть АЦПирование во времени)

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

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


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

разницу в 1 и 5 секунд видно невооруженным глазом :)
Красиво :-)

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


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

Красиво :-)

в смысле? это сарказм? :)

 

разницу в 1 и 5 секунд видно невооруженным глазом :)

измеренное значение напряжения на висячей ноге отправляется в регистр сравнения ШИМ и выводится на ногу. разницу в 1 и 5 секунд отсутствия питания видно невооруженным глазом... на экране осциллографа, естественно

питания нет 5с:

post-37401-1263289936_thumb.jpg

питания нет 1с:

post-37401-1263289948_thumb.jpg

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

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


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

да, есть какой-то эффект! (собственно об этом @Ark давно говорил)

 

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

 

А еще надо изучить с хорошим разрешением осциллограммы на неиспользуемых ножках при подаче питания (там, где такой выброс наблюдается). Если "таки да", то точка семплирования будет видна.

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


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

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

смотреть надо на платке от фонарика (там вообще другие утечки будут), а у меня ее нет. видел в выходные в продаже такие фонарики (120р. гад всего-то и стоит), но не купил :)

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

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


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

смотреть надо на платке от фонарика

 

А я и предлагаю топикстартеру :)

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


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

смотреть надо на платке от фонарика (там вообще другие утечки будут), а у меня ее нет. видел в выходные в продаже такие фонарики (120р. гад всего-то и стоит), но не купил :)

Сомнительно. 120 р - это фонарики с кластером из 5-mm диодов и директ-драйвом от кассеты AAA. А чтобы с драйвером на трех AMC7135 - это с приличным диодом, питанием от Li-ion и стоят они от $10..15, в Китае. 120 р - это только егойный диод, не из самых "крутых"...

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


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

я тут продолжал ковыряться с STK500 и мега32 (понятно, что это совсем не тини13 по строению порта)... причем без особых изысков все на Си тестировал. и я обнаружил другой интересный момент: показания АЦП зависят от того, как долго контроллер находился в состоянии сброса при поданном питании! :) причем при кратком нажатии на сброс показания АЦП около 1000, а при длительном (минуты 3) опускаются до 390. т.е. я так понимаю, что в данном случае мы наблюдаем как раз постоянную времени разряда по внутрикристальным утечкам... интересно, длительность power-down режима так можно вычислить? ;)

int main(void){
    ADMUX = _BV(REFS0);
    ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADPS2);
    while(ADCSRA & _BV(ADSC));
    printf_P(PSTR("\nADC=%u"),ADC);
    PORTA = 1;
    while(1);
}

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


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

Здорово что на АЦ что-то нащупали. Сейчас посленовогоднюю текучку раскидаю - пощупаю тоже. Только я вот думаю на какой ноге они могли бы это делать? На всех свободных при выключении нули. Остается только ADC1 - на ней 0.8 В висит. Не помешают ли они в момент включения?

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


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

Только я вот думаю на какой ноге они могли бы это делать? На всех свободных при выключении нули.

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

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


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

На PB0 ведь какой-то широкий импульс сразу после включения появляется.

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


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

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