AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
22.02.2013, 09:46
|
#91
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Режимы сна Атмега-8
Должно быть меньше 0,5 мкА
Образцовый сам отключается, если не используется в АЦП или компараторе
Похоже он не входит в Слип или неправильно настроен mcucr
Утечек у современных контроллеров нет, могут быть только сквозные токи, если входы висят в воздухе. Настраивай как выходы или включай подтяжку, или подавай на входы определенный уровень
|
|
|
|
23.02.2013, 03:16
|
#92
|
Частый гость
Регистрация: 29.04.2008
Сообщений: 39
Сказал спасибо: 6
Сказали Спасибо 16 раз(а) в 8 сообщении(ях)
|
Re: Режимы сна Атмега-8
В общем добился я снижения питания до 1 ma. только вот проблема - немогу разобратся почему INT1 не выводит микрасхему из повер давна, я так понял проблема в типе сигнала при пробуждении... Пробовал и с синхронизацией по TOSK1 в даташите написано что он оптимизирован под кварц. перепробовал уже все... видно придется проект закинуть, больше не хватает нервов. Всем спасибо за помощь.
Последний раз редактировалось mvn77; 23.02.2013 в 08:54.
|
|
|
|
23.02.2013, 08:05
|
#93
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Режимы сна Атмега-8
Читаем даташит, там даже картинки есть. Неиспользуемые ножки перевел на выход?
|
|
|
|
23.02.2013, 09:57
|
#94
|
Частый гость
Регистрация: 29.04.2008
Сообщений: 39
Сказал спасибо: 6
Сказали Спасибо 16 раз(а) в 8 сообщении(ях)
|
Re: Режимы сна Атмега-8
Вчера просидел весь день и всю ночь - Проблема в том что не просыпается от прерывания по INT1 (INT0). Из даташита не вылазию - для меня просто непонятно " перепад по низкому уровню - все что я могу подать сигнал с частотой 1ГЦ на INT1 - но от него микруха не просыпается, а больше мне будить нечем.
Цитата:
|
Неиспользуемые ножки перевел на выход?
|
- я их наоборот перевожу в режим на вход, для снижения энергопотребления
вот выдержка из кода:
// INT1 Mode: Low level
GICR|=0x80;
MCUCR=0x00;
GIFR=0x80;
...........................................
MCUCR |= ((1‹‹SE)|(1‹SM1)); // для PowerDown mode ( пробовал и MCUCR |= ((1‹‹SE)|(1‹SM1)|(0‹SM0));
SFIOR = (1‹‹PUD); //включаем на всех шинах Z
ACSR |= (1‹‹ACD); //выключаем компаратор
ADCSRA = (0‹‹ADEN);// выключаем АЦП
WDTCR = 0x00; //Выключить WDT
DDRB = 0x00; // все выводы порта B сконфигурировать как входы.
DDRC = 0x00; // все выводы порта C сконфигурировать как входы.
DDRD = 0x00; // все выводы порта D сконфигурировать как входы.
#asm("sei"); //Глобальное разрешение прерываний.
#asm("sleep"); //Отправляем контроллер в спящий режим
#asm("nop"); // 1 холостой такт
delay_ms(1);
#asm("cli"); //Глобальное запрещение прерываний.
..... и засыпаем глубоким мертвым сном....
|
|
|
|
23.02.2013, 12:40
|
#95
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,915
Сказал спасибо: 2,980
Сказали Спасибо 3,159 раз(а) в 2,144 сообщении(ях)
|
Re: Режимы сна Атмега-8
Сообщение от mvn77
|
Вчера просидел весь день и всю ночь - Проблема в том что не просыпается от прерывания по INT1 (INT0). Из даташита не вылазию - для меня просто непонятно " перепад по низкому уровню - все что я могу подать сигнал с частотой 1ГЦ на INT1 - но от него микруха не просыпается, а больше мне будить нечем.
// INT1 Mode: Low level
GICR|=0x80;
MCUCR=0x00;
GIFR=0x80;
...........................................
MCUCR |= ((1‹‹SE)|(1‹SM1)); // для PowerDown mode ( пробовал и MCUCR |= ((1‹‹SE)|(1‹SM1)|(0‹SM0));
...........................................
#asm("sei"); //Глобальное разрешение прерываний.
#asm("sleep"); //Отправляем контроллер в спящий режим
#asm("nop"); // 1 холостой такт
delay_ms(1);
#asm("cli"); //Глобальное запрещение прерываний.
..... и засыпаем глубоким мертвым сном....
|
Для выхода из Power Down низкий уровень (ISC1x = 00) на INT1 должен удерживаться на время не меньшее чем 1 мкс (см. раздел 13. External Interrupts, второй абзац). А если это время при этом будет меньше, чем задержка старта, установленная битами конфигурации CKSEL и SUT, то прерывание не будет распознано и МК только проснётся, но его не выполнит.
Сообщение от mvn77
|
- я их наоборот перевожу в режим на вход, для снижения энергопотребления вот выдержка из кода:
SFIOR = (1‹‹PUD); //включаем на всех шинах Z
DDRB = 0x00; // все выводы порта B сконфигурировать как входы.
DDRC = 0x00; // все выводы порта C сконфигурировать как входы.
DDRD = 0x00; // все выводы порта D сконфигурировать как входы.
|
Уж сколько раз твердили свету... Потому не буду вдаваться в подробности (тем более - не имея схемы). Если есть возможность отключить от контроллера всё остальное, то попробуйте вот так:
Код:
|
//SFIOR = (1‹‹PUD); //включаем на всех шинах Z
DDRB = 0x00; // все выводы порта B сконфигурировать как входы.
DDRC = 0x00; // все выводы порта C сконфигурировать как входы.
DDRD = 0x00; // все выводы порта D сконфигурировать как входы.
PORTB = 0xFF;
PORTC = 0xFF;
PORTD = 0xFF; |
и доложите результат по току потребления. Если такой возможности нет - приведите схему и мы Вам нарисуем правильную настройку портов для sleep'а.
|
|
|
|
23.02.2013, 12:42
|
#96
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Режимы сна Атмега-8
Ну молодец... От этого и повышенный ток - входы висят в воздухе и на входных каскадах сквозные токи... Переводи на выходы все ноги, кроме тех на которых внешние цепи формируют нормальный логический уровень
Когда на ноге 0 - она непрерывно генерит прерывание до тех пор пока 0 не исчезнет. По идее в прерывании контроллер должен перевести внешнюю схему так, чтобы она перешла в уровень 1.
Ставь мега48/88 - у них есть пинчейндж, который будит по перепаду из повердовна
|
|
|
|
23.02.2013, 14:06
|
#97
|
Частый гость
Регистрация: 29.04.2008
Сообщений: 39
Сказал спасибо: 6
Сказали Спасибо 16 раз(а) в 8 сообщении(ях)
|
Re: Режимы сна Атмега-8
На атмегу 88 Перейти не могу, хотя и хотел - у меня програматор Pony PROG он не зашаривает новые 88е, хотя 2шт. лежат.
По коду - если честно, я за эти дни постоянного перебора и разбора кода настолько отупел, что даже женщин с 23 поздравляй... Обидно, что проблему со сном я не считал важной, и на ней же застрял.
При переводе в повер давн атмега 8L потребляет 0.01 ма, ( в рабочем режиме 8-10 ма) что отлично. Но как я писал выше DS1307 отказывается ее будить. При попытке будить ток скачет от 0.01 до 0.5 - разобраться не могу из за нехватки опыта и плохого знания английского. Остальной код проекта работает хорошо. Самое интересное, что в инете невозможно найти рабочий пример с питание атмеги8 от батарейки. В общем я в ступоре, проблема походу не решаема...
Схема такова
|
|
|
|
23.02.2013, 15:34
|
#98
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Режимы сна Атмега-8
Поставь между DS и мегой RC-цепочку, и диод с любой свободной ножки для ускорения заряда конденсатора после срабатывания прерывания "по низкому уровню". Или RS-триггер, запускает DS, сбрасывает мега после срабатывания прерывания. Или, что ещё лучше, собери часы на меге, без DS
|
|
|
|
23.02.2013, 16:04
|
#99
|
Частый гость
Регистрация: 29.04.2008
Сообщений: 39
Сказал спасибо: 6
Сказали Спасибо 16 раз(а) в 8 сообщении(ях)
|
Re: Режимы сна Атмега-8
Вроде нашол причину глюков - проблема была в сильно длинном сигнале пробуждения - все это время (1сек) генерирится прерывание. Щас буду думать как уменьшить длину сигнала.... походу RS цепочкой....
|
|
|
|
23.02.2013, 18:25
|
#100
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,915
Сказал спасибо: 2,980
Сказали Спасибо 3,159 раз(а) в 2,144 сообщении(ях)
|
Re: Режимы сна Атмега-8
Сообщение от mvn77
|
Вроде нашол причину глюков - проблема была в сильно длинном сигнале пробуждения - все это время (1сек) генерирится прерывание. Щас буду думать как уменьшить длину сигнала.... походу RS цепочкой....
|
Сразу после пробуждения контроллера, прямо в обработчике прерывания, запретите INT1, сбросьте флаг и снова разрешайте только перед очередным засыпанием.
Для Вашей схемы настройка портов перед засыпанием будет примерно такой:
Код:
|
DDRB = 0x00; // все выводы порта B сконфигурировать как входы.
PORTB = 0xFF; // с подтяжками
DDRC = 0x00; // все выводы порта C сконфигурировать как входы.
PORTC = 0xFF; // с подтяжками
DDRD |= 0x02; // все выводы порта D сконфигурировать как входы (кроме PD2).
PORTD = 0xFF; // с подтяжками |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:25.
|
|