Сразу проблема (

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем ostrov, 1 окт 2016.

  1. sys

    sys Злобный Буратино Модератор

    :) неплохо так... Другого способа я пока не знаю...
     
  2. ostrov

    ostrov Гуру

    Не совсем понял описание функции в вики:
    Что означает [P4, P5], 0b0101 - подача на ноги последовательно 1 и 0? Почему ноги две а бита 4?
     
  3. sys

    sys Злобный Буратино Модератор

    опечатка digitalWrite([P4, P4, P5, P5], 0b0101); там имеется ввиду что указав подряд один и тот же пин и засунув в него 1 а потом тут же 0 можно получить короткий импульс.
    Также импульс короткий и точный можно получить от digitalPulse(), который выше упоминали...
     
    Последнее редактирование: 5 окт 2016
    arkadyf и ostrov нравится это.
  4. ostrov

    ostrov Гуру

    Эксперименты показали, что влияние оказывают только два младших бита в value, остальные ничего не кодируют и никак не используются. Если же сделать так: digitalWrite([P4, P4], 0b01); то действительно очень быстро переключится P4 с 1 на 0, примерно за 4мкс.
     
  5. sys

    sys Злобный Буратино Модератор

    это если данных в массиве меньше чем бит, то остальные биты в пролете.... первоисточник подтверждает:
    "If pin argument is an array of pins (eg. [A2,A1,A0]) the value argument will be treated
    as an array of bits where the last array element is the least significant bit.
    In this case, pin values are set least significant bit first (from the right-hand side
    of the array of pins). This means you can use the same pin multiple times, for
    example digitalWrite([A1,A1,A0,A0],0b0101) would pulse A0 followed by A1."
    ( http://www.espruino.com/Reference#t_l__global_digitalWrite )
    4мкс?... имхо, достаточно быстро :)
     
    ostrov нравится это.
  6. ostrov

    ostrov Гуру

    Так я и понял. В вики ошибочка закралась, надо бы исправить.

    Кстати, ради интереса провел тот же тест на UNO:
    Код (C++):
    void setup() {
      Serial.begin(9600);
      unsigned long t = millis();
      for (unsigned int i = 0; i < 5000; i++) {
        PORTB |= 0b01010101;
      }
      Serial.print(millis() - t);
    }
    Получил результат 2мс (в 500 раз быстрее), то есть дрыгать ногами на аппаратном уровне все же намного веселее даже несмотря на меньшую тактовую частоту. Отсюда делаю выводы для чего использовать C++ а для чего JS.
     
    sys нравится это.
  7. sys

    sys Злобный Буратино Модератор

    у моего JS результат 840 мс, т.е. в 420 раз медленнее уны :) ... хотя еще не использовали возможность записи в регистры ;)

    Но я с вами согласен - каждому языку найдется свое применение со своей выгодой
     
  8. ostrov

    ostrov Гуру

    И это замечательно. Я для себя выяснил, что однозначных преимуществ во всем не имеет ни Arduino ни Espruino, стало быть никого не надо забрасывать, каждому найдется своя работа. )
     
    sys нравится это.
  9. sys

    sys Злобный Буратино Модератор

    Хотите фокус? ;) Проведите "тест на время" передергивания "ногами" (вкл/выкл) (Готовить в Espruino IDE)
    Код (Javascript):
    function test() {
      "compiled";

      var pP6 = 0|P6.getInfo().out_addr;
      var pP8 = 0|P8.getInfo().out_addr;
      var pP10 = 0|P10.getInfo().out_addr;
      var pP12 = 0|P12.getInfo().out_addr;

      var cnt = 5000;
      var ft = Date.now();

      print(ft);

      for (var i=0;i<cnt;i++) {

        poke32(pP6, 1);
        poke32(pP6, 0);
        poke32(pP8, 1);
        poke32(pP8, 0);
        poke32(pP10, 1);
        poke32(pP10, 0);
        poke32(pP12, 1);
        poke32(pP12, 0);
      }

      print(Date.now()-ft);
    }

    function start_test(){

      pinMode(P6, "output");
      pinMode(P8, "output");
      pinMode(P10, "output");
      pinMode(P12, "output");

      test();

    }

    start_test();

    Результат не скажу - ради интриги :)
     
    Последнее редактирование: 1 июн 2017
  10. sys

    sys Злобный Буратино Модератор

    кстати, а Вы в своем тесте по-моему не дрыгаете ногами, а только включаете их. Или я не заметил выключения?
     
  11. ostrov

    ostrov Гуру

    Это недокументированный но быстрый способ дрыгания. Проверьте опытным путем.
     
  12. sys

    sys Злобный Буратино Модератор

    обязательно проверю... но потом ;)