Attiny45 после программного обеспечения Serial

Я хотел бы разбудить Attiny45 от сна Serial communication. RX подключается к контакту 7 (D2). Когда я пытаюсь использовать процедуру PCINT0_vect, я получаю сообщение об ошибке «множественное определение` __vector_2 », поэтому похоже, что Software Serial уже использует« ISR (PCINT0_vect) »и прерывание смены знака.

Итак, мой вопрос в том, будет ли связь со слезами Attiny от сна?

Есть ли возможность изменить CLKPR, когда Attiny начинает получать? Например, я устанавливаю делитель часов на 256 в течение большей части времени и когда он начинает получать, он возвращается к 1.

Я думал о чем-то вроде этого:

void loop() {
 if (SWSerial.available()>0) {
   noInterrupts ();
   CLKPR = bit (CLKPCE);
   CLKPR = clock_div_1;
   interrupts ();
 }
//other code here
}

Я не возражаю потерять некоторые байты, но мне нужно максимально уменьшить ток холостого хода. Спасибо.

2 голоса | спросил lakotamm 2 J000000Thursday15 2015, 12:35:04

1 ответ


2

Вопрос №1: Может ли изменение на булавке 7 просыпаться от сна?

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

В зависимости от того, какой компилятор /библиотеки вы используете, что-то вроде этого ...

include <avr/sleep.h>

...

set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();
//We will only reach this line after an interrupt has occured

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

Если вам действительно нужна самая низкая мощность, вы можете написать свой собственный программный последовательный код, который переводит процессор в режим ожидания между последовательными бит-переходами. В зависимости от того, сколько времени вы будете тратить на фактическое получение данных, это может резко снизить общее энергопотребление.

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

Вопрос №2: Есть ли возможность изменить CLKPR, когда Attiny начинает получать?

Да. Вы можете изменить предделитель в любое время, но обратите внимание, что ...

  1. Часы не работают вообще во время режима power-down, поэтому нет причин отбрасывать назад перед сном - это просто означает, что вам потребуется больше времени, чтобы проснуться, когда произойдет изменение.

  2. Иногда масштабирование часов может фактически использовать больше мощности, особенно когда сон разрешен. Процессор, работающий со скоростью 1/2, использует более чем на 1/2 мощности, поэтому часто более эффективно работать с максимальной скоростью, делать то, что вам нужно делать как можно быстрее, а затем снова заснуть.

Лучший вариант для вас будет зависеть от таких факторов, как то, как часто вы будете получать данные по сравнению с ожиданием данных и сколько работы вы хотите использовать для оптимального использования энергии. Этот чип может быть эффективным extreme , но он может взять на себя работу, чтобы воспользоваться этим.

ответил bigjosh 2 J000000Thursday15 2015, 17:23:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132