Обсуждаем контроллеры компании Atmel.
Ответить

Не определенное состояние пина после ухода в глубокий сон

Ср окт 06, 2021 17:37:13

Использую attiny13, к int0 подключена кнопка, шим на OCR0A. МК находится в режиме PW_DOWN_MODE, просыпается только по INT0, соответственно. Когда просыпается:
1. отключаю прерывание по int0
2. запускается ШИМ(OCR0A = 200)
3. пока кнопка нажата бесконечный while
4. OCR0A = 0;
5. включаю прерывание по INT0, прерывание заканчивается и МК снова засыпает
Проблема в том, что после того как он засыпает, на ножке ШИМ случайным образом появляется логическая единица. Я в чем-то ошибся и надо порт как-то к земле притягивать? В моем понимании вывод ШИМ должен быть прижат к земле во сне

Спойлер#define F_CPU 600000
#include <avr/io.h>
#include <avr/sleep.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define ClearBit(reg, bit) reg &= (~(1<<(bit)))
#define SetBit(reg, bit) reg |= (1<<(bit))

#define PWM_PIN 0
#define BTN 1

ISR (INT0_vect) {
ClearBit(GIMSK, INT0);
OCR0A = 200;
while(~PINB & (1 << BTN));
OCR0A = 0;
SetBit(GIMSK, INT0);
}

int main(void){
DDRB = (1 << PWM_PIN); // set pins for output
PORTB = (1 << BTN); // set pullup for BTN
TCCR0A = (1 << COM0A1) | (1 << COM0A0) | (1 << WGM00) | (1 << WGM01);
TCCR0B = (1 << CS01);
TCNT0 = 0;
OCR0A = 0;

GIMSK |= (1 << INT0);
MCUCR |= (1 << SE) | (1 << SM1);
sei();

while(1){
sleep_cpu(); // sleep cpu
}
}

Re: Не определенное состояние пина после ухода в глубокий со

Ср окт 06, 2021 19:46:57

перед уходом в сон ты САМ должен отключить ножку от ШИМ и подать на нее ноль - если тебе там нужен ноль.
а так, в каком состоянии находилась ШИМ, в таком она и остается.

Re: Не определенное состояние пина после ухода в глубокий со

Ср окт 06, 2021 20:32:56

Starichok51, благодарю. До этого пробовал просто в POTRB записать ноль, не подумал что надо в самом таймере пин в обычный режим перевести

Re: Не определенное состояние пина после ухода в глубокий со

Ср окт 06, 2021 20:53:57

а что у тебя подключено к ножке ШИМ, ели тебе мешает там единица?

Re: Не определенное состояние пина после ухода в глубокий со

Чт окт 07, 2021 08:51:40

Starichok51, да вроде случайное состояние пина в принципе не очень хорошо. У меня там висит транзистор, который рулит движком и упор в низкое энергопотребление

Re: Не определенное состояние пина после ухода в глубокий со

Чт окт 07, 2021 09:46:45

это я на всякий случай спросил, хотя и так понятно, что там может что-то остаться во включенном состоянии.

Re: Не определенное состояние пина после ухода в глубокий со

Чт окт 07, 2021 19:17:56

У меня единственная проблема в том, что в режиме глубокого сна потребление 3мА

Re: Не определенное состояние пина после ухода в глубокий со

Чт окт 07, 2021 21:15:20

где-то утечка тока. Надо очень тщательно прорабатывать схемотехнику и программу. У меня глубокий сон - это 1 мкА или даже меньше.

Re: Не определенное состояние пина после ухода в глубокий со

Чт окт 07, 2021 23:51:44

по типовым характеристикам из даташита 3 мА - это активный режим, а не сон.
сейчас посмотрел твой текст в первом посте.
нехорошо делать
OCR0A = 0;
зачем таймеру создавать конфликтную ситуацию. запиши в main раз и навсегда
OCR0A = 200;
а перед уходом в сон отсоедини ножку от ШИМ и запиши на эту ножку ноль.
а при выходе из сна опять подсоедини ножку к ШИМ.

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 00:39:45

в режиме глубокого сна потребление 3мА

Эта фраза очень некорректна.
Потребление чем? Attiny13?
Чем измеряли?
Где схема?

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 05:36:47

daaar
Попробуйте так
DDRB <- 0xFD
PORTB <- 0x22
ACSR <- ACD
MCUCR <- 1<<SE|1<<SM1;|0<<SM0
Думаю, что после разрешения SLEEP POWER DOWN конструкция while, в том как есть сейчас, приведет к зависону.

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 12:59:04

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

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 14:43:46

Даташит говорит об обратном. Ножки на вход надо оставлять только те, которые "слушают" или по-другому никак. Вот только она должна быть подтянута к шине питания или к нулевой шине. Иначе входной шум будет "дёргать" входной триггер Шмитта, что негативно будет сказываться на энергопотреблении.
А в нуле ножка на выход или в единице, на энергопотреблениии это не сказывается никак.

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 16:37:49

ну как это не сказывается?
если ножка осталась в единице и к ней подключена какая-то нагрузка, то нагрузка и во время сна будет потреблять ток от питания через ножку.
и наоборот, если нагрузка подключена к питанию (+5В) и ножка осталась в нуле, то тоже от питания будет потребление тока.

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 21:25:58

речь шла про конкретный выход, а не нагрузку. Либо писатель не русский и не смог донести правильно свою сакральную мысль.
Я же говорю - чтобы добиться потребления 1 мкА и менее, необходимо очень тщательно прорабатывать схемотехнику и программу. На от,бись не взлетит.

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 21:34:36

Схема такая:
Изображение

Собрано все на макетке, питается от 12 вольт.

Выводы: R - на красный светодиод, G на зеленый, BTN - кнопка, LED - вывод подключен к полевику которые зажигает ленту от 12 вольт, ADC - из схемы видно куда подключен

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 21:41:41

с такой схемой о powerdown можно не беспокоиться. Здесь и без этого хватает токопотребляющих цепей.

Добавлено after 1 minute 49 seconds:
Re: Не определенное состояние пина после ухода в глубокий сон
кстати, в делителе напряжения BAT верхний резистор должен быть 10к. Так рекомендует даташит. Иначе измерения будут нелинейными.

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 21:42:30

parovoZZ, а что именно будет потреблять? У меня всё выключено в режиме сна, единственный потребитель это LDO получается

То есть норм будет работать если референсным напряжением поставлю напряжение питания МК? Нижний резистор оставить на 5.1 ком?

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 21:53:53

LDO - это он на бумаге. А по факту на нем падает 7 вольт. LDO - не более 1 вольта.
Референс можно брать абсолютно любой удобный. Только обязательно помнить - блок АЦП перед сном обязательно выключать ручками!!! В этом блоке есть аналоговые цепи и при потере тактирования они не отключаются от шины питания, а продолжают кушать ток.

Re: Не определенное состояние пина после ухода в глубокий со

Пт окт 08, 2021 21:57:36

parovoZZ, получается надо отключать ручками АЦП, ШИМ. Если использую i2c или spi их тоже?
Ответить