Обсуждаем контроллеры компании 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
}
}
Ср окт 06, 2021 19:46:57
перед уходом в сон ты САМ должен отключить ножку от ШИМ и подать на нее ноль - если тебе там нужен ноль.
а так, в каком состоянии находилась ШИМ, в таком она и остается.
Ср окт 06, 2021 20:32:56
Starichok51, благодарю. До этого пробовал просто в POTRB записать ноль, не подумал что надо в самом таймере пин в обычный режим перевести
Ср окт 06, 2021 20:53:57
а что у тебя подключено к ножке ШИМ, ели тебе мешает там единица?
Чт окт 07, 2021 08:51:40
Starichok51, да вроде случайное состояние пина в принципе не очень хорошо. У меня там висит транзистор, который рулит движком и упор в низкое энергопотребление
Чт окт 07, 2021 09:46:45
это я на всякий случай спросил, хотя и так понятно, что там может что-то остаться во включенном состоянии.
Чт окт 07, 2021 19:17:56
У меня единственная проблема в том, что в режиме глубокого сна потребление 3мА
Чт окт 07, 2021 21:15:20
где-то утечка тока. Надо очень тщательно прорабатывать схемотехнику и программу. У меня глубокий сон - это 1 мкА или даже меньше.
Чт окт 07, 2021 23:51:44
по типовым характеристикам из даташита 3 мА - это активный режим, а не сон.
сейчас посмотрел твой текст в первом посте.
нехорошо делать
OCR0A = 0;
зачем таймеру создавать конфликтную ситуацию. запиши в main раз и навсегда
OCR0A = 200;
а перед уходом в сон отсоедини ножку от ШИМ и запиши на эту ножку ноль.
а при выходе из сна опять подсоедини ножку к ШИМ.
Пт окт 08, 2021 00:39:45
в режиме глубокого сна потребление 3мА
Эта фраза очень некорректна.
Потребление чем? Attiny13?
Чем измеряли?
Где схема?
Пт окт 08, 2021 05:36:47
daaar
Попробуйте так
DDRB <- 0xFD
PORTB <- 0x22
ACSR <- ACD
MCUCR <- 1<<SE|1<<SM1;|0<<SM0
Думаю, что после разрешения SLEEP POWER DOWN конструкция while, в том как есть сейчас, приведет к зависону.
Пт окт 08, 2021 12:59:04
Выход в ноль потребляет много тока, необходимо настраивать ножку на вход.
Пт окт 08, 2021 14:43:46
Даташит говорит об обратном. Ножки на вход надо оставлять только те, которые "слушают" или по-другому никак. Вот только она должна быть подтянута к шине питания или к нулевой шине. Иначе входной шум будет "дёргать" входной триггер Шмитта, что негативно будет сказываться на энергопотреблении.
А в нуле ножка на выход или в единице, на энергопотреблениии это не сказывается никак.
Пт окт 08, 2021 16:37:49
ну как это не сказывается?
если ножка осталась в единице и к ней подключена какая-то нагрузка, то нагрузка и во время сна будет потреблять ток от питания через ножку.
и наоборот, если нагрузка подключена к питанию (+5В) и ножка осталась в нуле, то тоже от питания будет потребление тока.
Пт окт 08, 2021 21:25:58
речь шла про конкретный выход, а не нагрузку. Либо писатель не русский и не смог донести правильно свою сакральную мысль.
Я же говорю - чтобы добиться потребления 1 мкА и менее, необходимо очень тщательно прорабатывать схемотехнику и программу. На от,бись не взлетит.
Пт окт 08, 2021 21:34:36
Схема такая:
Собрано все на макетке, питается от 12 вольт.
Выводы: R - на красный светодиод, G на зеленый, BTN - кнопка, LED - вывод подключен к полевику которые зажигает ленту от 12 вольт, ADC - из схемы видно куда подключен
Пт окт 08, 2021 21:41:41
с такой схемой о powerdown можно не беспокоиться. Здесь и без этого хватает токопотребляющих цепей.
Добавлено after 1 minute 49 seconds:
Re: Не определенное состояние пина после ухода в глубокий сон
кстати, в делителе напряжения BAT верхний резистор должен быть 10к. Так рекомендует даташит. Иначе измерения будут нелинейными.
Пт окт 08, 2021 21:42:30
parovoZZ, а что именно будет потреблять? У меня всё выключено в режиме сна, единственный потребитель это LDO получается
То есть норм будет работать если референсным напряжением поставлю напряжение питания МК? Нижний резистор оставить на 5.1 ком?
Пт окт 08, 2021 21:53:53
LDO - это он на бумаге. А по факту на нем падает 7 вольт. LDO - не более 1 вольта.
Референс можно брать абсолютно любой удобный. Только обязательно помнить - блок АЦП перед сном обязательно выключать ручками!!! В этом блоке есть аналоговые цепи и при потере тактирования они не отключаются от шины питания, а продолжают кушать ток.
Пт окт 08, 2021 21:57:36
parovoZZ, получается надо отключать ручками АЦП, ШИМ. Если использую i2c или spi их тоже?
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.