#1 Re: Програмування Arduino » Упрощение кода » 2020-03-18 13:54:37

User пише:

В ютубе хватает примеров про сон Attiny и прерывания. Например, поиск по словах Attiny13A save mode показывает много примеров.

Спасибо большое за совет. Обязательно им воспользуюсь!

#2 Re: Програмування Arduino » Упрощение кода » 2020-03-18 13:50:11

Watchdog пише:
Abramonromka пише:

... Грусть. Т.е. если его увести в сон, сам он уже из него не выйдет?

Не делайте поспешных выводов и глубже изучайте предмет. И тогда выйдет.

Мотивировали)

#3 Re: Програмування Arduino » Упрощение кода » 2020-03-17 15:32:41

Kaka пише:
Abramonromka пише:

А почему они не должны совмещаться?)

Ну, потому и не должны. Если что-то "лучше всего подходит", то у него всего хватает и жрёт он сколько надо. А если не хватает и жрёт через чур, то это называется "не подходит".

Как тебе вот такая фраза? "Для задачи перевозки пяти тонн навоза лучше всего подходит Mercedes-AMG GT roadster, только вот пять тонн навоза в него не влазит, да и дороговат он для такой работы"?

Вот ты примерно также написал :-)


Возможно не правильно выразился, за что прошу прощения) Просто старался как можно подробнее всё расписать.

#4 Re: Програмування Arduino » Упрощение кода » 2020-03-17 15:31:36

Watchdog пише:
Abramonromka пише:

... отработав все вычисления, снова уходит в сон, в ожидание сигнала с датчика. Это в принципе ферштейн. Но как это реализовать в коде я не совсем ферштейн, или в МК это заложено изначально? переход в режим ожидания.

Заложено, только требует управленя программистом. В ATtiny13, к сожалению, не предумотрен AI. smile

Грусть. Т.е. если его увести в сон, сам он уже из него не выйдет?

#5 Re: Програмування Arduino » Упрощение кода » 2020-03-17 13:00:00

Watchdog пише:
Abramonromka пише:
Watchdog пише:

Чтобы влезло нужно переделать всё, включая Ардуиновское ядро, и то не факт. Станет известно только после того. Волшебной формулы, превращающей фантазии в футпринт нет. smile

Понял. Ну пока памяти хватает, поэтому больше вопрос по активации режимов энергосбережения.

Я могу прочитать вам даташит и апликэйшин экзамлэс по этому поводу, если не выходит самому. smile А так подскажу. Энергоэконмичное выполнение программ базируется на принципах управления вычисленими событиями. Т.е. процессор запускается в работу только в случае переходов машинины сосояний приложения, отрабатывая необходимые вычисления. Всё остальное время "спит". Это ещё иногда называют ленивыми вычислениями. Ферштейн?

Ну т.е. как только на вход приходит сигнал, процессор запускается в работу, отработав все вычисления, снова уходит в сон, в ожидание сигнала с датчика. Это в принципе ферштейн. Но как это реализовать в коде я не совсем ферштейн, или в МК это заложено изначально? переход в режим ожидания.

#6 Re: Програмування Arduino » Упрощение кода » 2020-03-17 11:34:10

Watchdog пише:
Abramonromka пише:

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

Чтобы влезло нужно переделать всё, включая Ардуиновское ядро, и то не факт. Станет известно только после того. Волшебной формулы, превращающей фантазии в футпринт нет. smile

Понял. Ну пока памяти хватает, поэтому больше вопрос по активации режимов энергосбережения.

#7 Re: Програмування Arduino » Упрощение кода » 2020-03-17 11:32:37

Kaka пише:

Парень,

у тебя в голове вот эти две фразы:

Abramonromka пише:

МК ATTiny13 ... подходит больше всего

но память ATTiny13 ... может не хватить. А так же МК потребляет повышенный ток постоянно.

хорошо совмещаются?

У меня вот как-то не очень.

Возьми такую же по размеру ATtiny85 с её память и режимом picopower и не выноси сам себе мозг.

А почему они не должны совмещаться?) Может я конечно чего-то не знаю о 13тиньке...
85тинька дороже. Но если других вариантов сократить потребление энергии нет, то придется ломать мозг с 85.

#8 Re: Програмування Arduino » Упрощение кода » 2020-03-17 10:48:24

Watchdog пише:

А что бы понять, что у вас там написано, удобно расставляйте отступы и скобки или придётся делать это за вас.
PS: first update patch for the project. big_smile

Исправил, спасибо за замечание)

Watchdog пише:

А просто деньгами возьмёте?  smile

Взять деньгами?) Мне взять?) big_smile
Если речь о оплате упрощения кода, то боюсь это не уместно. Тем более рубль упал, вирусы вокруг) Да и код-то написан уже, другое дело если бы я с нуля просил написать, да, это была бы наглость с моей стороны просить бесплатно.

#9 Програмування Arduino » Упрощение кода » 2020-03-17 10:17:46

Abramonromka
відповідей: 17

Добрый день, форумчане. У меня такая задача: необходимо создать несколько устройств на МК, датчике вибрации/наклона, светодиоде и батарейке (таблетка). Каждое должно светиться по своему. Написал код для МК ATTiny13 (может найду что на замену, но пока она подходит больше всего). Задача всех устройств после удара или движения - светодиод начинает моргать, как только устройство вернули в состояние покоя (положили на стол, например) светодиод поморгал ещё 5 секунд и выключился. Начнёт моргать опять только когда устройство снова приведут в движение (возьмут в руки, ударят, кинут).

Пробное устройство я уже собрал, (пульсирующий) всё работает исправно, но память ATTiny13 1Кб, этот код вышел на 564 б, соответственно если я захочу его усложнить, то 1 Кб может не хватить. А так же МК потребляет повышенный ток постоянно.

Собственно прошу Вас помочь упростить код (если это возможно) и, что самое главное, помочь с режимами МК, чтобы увеличить время работы от батарейки.

Заранее Вас благодарю!

int vib = 4;
int led = 0;
long loopTime = 5000;

void setup() {
    pinMode(led, OUTPUT);
    pinMode(vib, INPUT);
}

void loop()
{
    if (digitalRead(vib)){
        unsigned long currentMillis = millis();
        while(millis()-currentMillis<=loopTime) {
            for(int fadeValue = 0; fadeValue <=255; fadeValue+=5) {
                 analogWrite(led,fadeValue);
                 delay(2);
            }
            for(int fadeValue = 255; fadeValue >=0; fadeValue-=5) {
                 analogWrite(led,fadeValue);
                 delay(2);
            }
            for(int fadeValue = 0; fadeValue <=255; fadeValue+=5) {
                  analogWrite(led,fadeValue);
                  delay(2);
             }
             for(int fadeValue = 255; fadeValue >=0; fadeValue-=5) {
                  analogWrite(led,fadeValue);
                  delay(2);
             }
             digitalWrite(led, LOW);
             delay(600);
        }
    }
}

Підвал форуму