Например TDA7294

Форум РадиоКот • Просмотр темы - ATTINY13A просыпается из-за АЦП
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 12, 2025 17:12:55

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: ATTINY13A просыпается из-за АЦП
СообщениеДобавлено: Вт янв 21, 2025 11:26:43 
Родился

Зарегистрирован: Вт янв 21, 2025 10:55:42
Сообщений: 9
Рейтинг сообщения: 0
Народ, подскажите как быть. АЦП настроен на работу в ручном режиме:
Код:
    DIDR0 |= ADC_PIN;

    // REFS0 - внутрений источник опорного напряжения
    // ADLAR - выравнение по старшему байту
    // ADC_CHANNEL - ADC1
    ADMUX = (1 << REFS0) | (1 << ADLAR) | ADC_CHANNEL;
   
    // ADPS2 - Делитель на 16, при частоте 1.2 МГц (т.к. CKDIV8 фьюз) выйдет 75 кГц (как раз в рекомендованном диапазоне)
    // ADEN - АЦП включен
    // ADIE - Разрешить прерывание
    ADCSRA = (1 << ADPS2) | (1 << ADEN) | (1 << ADIE);


когда нужно, то запускаю преобразование через ADCSRA |= (1 << ADSC)

Ну так вот проблема - АЦП запускается сам по себе при каждом переходе в сон (SLEEP_MODE_IDLE) и наглым образом пробуждает.
Какой вообще смысл автоматически запускаться при переходе в сон если ADSC сброшен или это ошибка в микроконтроллере?

Получается что есть только 2 выхода:
1) делать замер без прерывания - не очень подходит т.к. хочется всё же в SLEEP_MODE_ADC чтобы это происходило
2) каждый раз включать АЦП (со снятым битом ADSC) и сразу уходить в SLEEP_MODE_ADC сон. - но тут есть сомнения - пишут что первое преобразование после включения обычно не очень точное. А получается что каждый раз будет "первое" преобразование.

Как лучше поступить?
P.S. просто так будить МК нельзя т.к. логика завязана на том, что он будет пробуждаться через определенные интервалы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY13A просыпается из-за АЦП
СообщениеДобавлено: Вт янв 21, 2025 14:00:13 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 212
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1525
Рейтинг сообщения: 0
В документации это вполне описано. Можно стартовать преобразование при уходе контроллера в сон, чтобы внутренние шумы не мешали. А на счет первого преобразования - так какая разница будет ли оно первым после включения камня или первым после выхода из сна. Так и так аналоговые сигналы будут не такими, как при последующих преобразованиях.


Вложения:
Снимок экрана_2025-01-21_13-54-58.png [90.88 KiB]
Скачиваний: 32
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY13A просыпается из-за АЦП
СообщениеДобавлено: Вт янв 21, 2025 14:37:05 
Родился

Зарегистрирован: Вт янв 21, 2025 10:55:42
Сообщений: 9
Рейтинг сообщения: 0
А на счет первого преобразования - так какая разница будет ли оно первым после включения камня или первым после выхода из сна. Так и так аналоговые сигналы будут не такими, как при последующих преобразованиях.

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


Вчитался по подробнее в datasheet и вычитал что если выставлен бит ADIE, то преобразование начнется сразу после перехода в сон.
Получается что бит ADSC игнорируется.

Тогда алгоритм получается такой:
1) настроили АЦП (со сброшенными битами ADSC и ADIE)
2) обработчик прерывания ADC_vect - пустой
3) проснулись по какому-либо своему событию (внешнее прерывание или таймер)
4) когда нужно замерять напряжение, то:
- сохранили MCUCR
- выставили в MCUCR биты для SLEEP_ENABLED + SLEEP_MODE_ADC
- выставили в ADCSRA бит ADIE
- ушли в сон
- как проснулись убрали в ADCSRA бит ADIE и обработали ADCH
5) далее уже программа работает по остальной логике и засыпает как нужно.

Тесты показали что после ухода в сон для замера напряжения мы просыпаемся через 0,19 мс.
Если же включать АЦП перед тестом и потом выключать его (бит ADEN), то время замера 0,36 мс


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY13A просыпается из-за АЦП
СообщениеДобавлено: Вт янв 21, 2025 14:58:29 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 212
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1525
Рейтинг сообщения: 0
Ну так и включайте АЦП сразу по пробуждении. А перед уходом в сон отключайте. Может быть, хватит бита ADIE (лучше проверить. И не забывать, что это скажется на потреблении), а может и ADEN.
Цитата:
Тесты показали что после ухода в сон для замера напряжения мы просыпаемся через 0,19 мс.
Если же включать АЦП перед тестом и потом выключать его (бит ADEN), то время замера 0,36 мс
Это те самые 13 / 26 тактов, о которых говорит даташит?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: ATTINY13A просыпается из-за АЦП
СообщениеДобавлено: Вт янв 21, 2025 15:32:10 
Родился

Зарегистрирован: Вт янв 21, 2025 10:55:42
Сообщений: 9
Рейтинг сообщения: 0
Это те самые 13 / 26 тактов, о которых говорит даташит?

Получается что да. АЦП выставлен на 75 кГц, как раз примерно такое время и будет + затраты на выход из спящего режима.

И не забывать, что это скажется на потреблении

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY13A просыпается из-за АЦП
СообщениеДобавлено: Ср янв 22, 2025 11:04:50 
Родился

Зарегистрирован: Вт янв 21, 2025 10:55:42
Сообщений: 9
Рейтинг сообщения: 0
Может быть, хватит бита ADIE (лучше проверить. И не забывать, что это скажется на потреблении), а может и ADEN.

Тут вы оказались правы, бита ADIE не хватило. Почему-то в PWR_DOWN МК потреблял 500 uA.
По этому сделал на оборот - бит ADIE всегда установлен, а бит ADEN ставится когда нужно замерять напряжение. И сразу потребление во сне упало в 10 раз.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY13A просыпается из-за АЦП
СообщениеДобавлено: Ср янв 22, 2025 13:02:27 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 212
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1525
Рейтинг сообщения: 0
До 50 мкА в самом экономичном режиме? Все равно многовато, там единицы микроампер должны получаться. Но, может, ток через другие компоненты на плате добавляется.
Цитата:
бит ADEN ставится когда нужно замерять напряжение.
Насколько я понимаю, выставление ADEN это "первое включение", которое может быть неточным. Может, все-таки лучше включать его сразу по выходу из сна?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATTINY13A просыпается из-за АЦП
СообщениеДобавлено: Ср янв 22, 2025 14:32:01 
Родился

Зарегистрирован: Вт янв 21, 2025 10:55:42
Сообщений: 9
Рейтинг сообщения: 0
До 50 мкА в самом экономичном режиме?


Да тут всё нормально. Стоит резистивный делитель который потребляет 47 мкА. По хорошему его бы отключать, но уже просто ножек не осталось под это дело.

Насчет "первое включение" - тесты показала что погрешности нет, либо она настолько мала что можно не учитывать. Ну а то, что замер в 2 раза дольше - это не страшно.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y