Wifi slot и js - использование мультиплексора для аналоговых входов

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Dmitry Sadakov, 29 апр 2020.

  1. Dmitry Sadakov

    Dmitry Sadakov Нерд

    Всем привет. На WiFi слот стоит мультиплексор, который позволяет все пины платы подключить на вход ADC ESP-12. А есть ли библиотека которая позволяет управлять этим подключением на JS?
    А то не могу подключить ни одного аналогового датчика.

    Как альтернатива - подскажите как управлять мультиплексором от вывода D15? Схема приложена...
     

    Вложения:

    • Снимок.PNG
      Снимок.PNG
      Размер файла:
      116,6 КБ
      Просмотров:
      287
    Последнее редактирование: 30 апр 2020
  2. Konkery

    Konkery Гик

    Д
    Дмитрий, удалось разобраться, как управлять мультиплексором?
     
  3. Unixon

    Unixon Оракул Модератор

    Судя по коду библиотеки, там управление переключением каналов зашито внутрь analogRead(), который дергается изнутри Espruino.

    Код (C++):
    #include "wiring_private.h"
    #include "pins_arduino.h"

    extern "C" int  __analogRead(uint8_t pin);

    extern "C" int analogRead(uint8_t pin) {

      static uint8_t currentAin = 0;

      delay(0);
      if (pin >= ANALOG_INPUT_HARDWARE) {
        return 0;
      }
      uint8_t ain = analog_pin_to_mux_channel[pin];
      if (ain == (uint8_t)NOT_A_PIN) {
        return 0;
      }
      if (currentAin > ain) {
        for (int i = 0; i < (8 - currentAin); ++i)
        {
          digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
          digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
          digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
          digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
        }
        currentAin = 0;
      }
      for (int i = currentAin; i < ain; ++i)
      {
        digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
        digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
        digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
        digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
      }
      currentAin = ain;
      return __analogRead(ANALOG_INPUT_HARDWARE);
    }

    void initVariant() {
      // we need to reset analog mux. When ANALOG_INPUT_SELECTOR_PIN is high
      // on ~0.4 ms, mux channel is becoming 0.
      // Mux channel is swithing on back \_ front. But there is no switching
      // - rc reset is still high when ANALOG_INPUT_SELECTOR_PIN became low
      uint16_t resetDelay = 777;
      pinMode(ANALOG_INPUT_SELECTOR_PIN, OUTPUT);
      digitalWrite(ANALOG_INPUT_SELECTOR_PIN, HIGH);
      delayMicroseconds(resetDelay);
      digitalWrite(ANALOG_INPUT_SELECTOR_PIN, LOW);
      delayMicroseconds(resetDelay);
    }
     
    arkadyf и Konkery нравится это.
  4. Konkery

    Konkery Гик

    Если я правильно понял, вы нашли/просмотрели библиотеку на С. Сын пишет на JS вот и встала задача рабораться как это работает на Espruino. Очень странно что в официальной странице Wiki Амперки, ни пол слова не сказано как организована работа. Например я нигде не увидел что GPIO D15 управляет мультиплексором, только на схеме видно что его отдали под эту функцию. А ведь получается что порт то занят, а сын как раз на него что то вешал. В общем должна быть какая то библиотека, в противном случае работает "чистое" API Espruino, а там реализация функции analogWrite(...) ничего не ведает о мультиплексоре
     
  5. Unixon

    Unixon Оракул Модератор

    Внутри WiFi Slot не чистое Espruino, а адаптированный вариант прошивки.
    В самом конце страницы http://wiki.amperka.ru/products:wifi-slot есть ссылки на все необходимое.
    Вам не нужно управлять мультиплексором явно, нужный код уже зашит внутрь analogRead() Espruino/ESP8266/WiFi Slot.
    analogWrite() это совсем другая история, ШИМ выдается напрямую на соответствующие порты.
    D15 зарезервирован под переключение каналов АЦП, к нему нельзя подключиться.
     
    arkadyf нравится это.
  6. Konkery

    Konkery Гик

    По порядку
    - analogWrite() моя опечатка, прошу прощения, не заметил, речь конечно о analogRead().
    - из чего следует:
    ? Я устанавливал прошивку с сайта Espruino
    - что подразумевается под
    ? Смотрим раздел налоговый мультиплексор:
    где тут хоть полслова как программно это работает ? Где на странице wiki упоминание того что использовать порт нельзя по D15 ? Открываем поиск на странице, результат 0.
     
  7. Unixon

    Unixon Оракул Модератор

    Предполагается, что у вас установлена "Прошивка Espruino v2.01 для WiFi Slot". Самая нижняя ссылка на странице вики.
    Если хотите то же самое делать из ванильной Espruino - вместо встроенного analogRead нужно будет переписать на JS код модифицированной функции, который я процитировал выше, это собственно кусок исходников прошивки.
    D15 использовать можно, но к нему нельзя снаружи подключиться (см. схему WiFi Slot), т.к. он не выведен на контакты.
    Да, это странно, что принцип работы не описали. Вероятно, решили, что достаточно модифицировать прошивку, чтобы все автоматом работало.
     
    Konkery нравится это.
  8. Konkery

    Konkery Гик

    Спасибо за разъяснения.
    Но с
    не соглашусь. Вот скин wiki страницы которую вы упоминаете
    upload_2021-6-28_20-31-24.png
    если перейти по ссылке (п. 2) то мы попадем на эту страницу
    upload_2021-6-28_20-34-53.png
    upload_2021-6-28_20-35-48.png
    это инструкция по установке прошивки на модуль, и нигде не говориться про некую "особенную" прошивку.
    Что касается меня то я давно стараюсь не использовать прошивки от Амперки. Ранее на форуме поднимал вопрос
    про отставание прошивок от Амперки от Espruino. Сын несколько раз сталкивался с тем что задуманное не удавалось
    реализовать из за отставания или неизвестных нам отличий от оригинала. Железки у них интересные, удобные для обучения
    и построения различных платформ с минимальным риском убить железку. Что касается прошивок то по максимуму
    стараюсь использовать либо оригинальные контроллеры от Espruino либо контроллеры под которые Гордона есть
    прошивка.
    В любом случае, на мой взгляд, было бы правильнее не городить очередную прошивку и потом "вечно" ее поддерживать
    а написать библиотеку для поддержки мультиплексора.

    PS: что касается прошивки для всех видов и форм ESP то на сайте Амперки настоящий хаос с инструкциями как для
    ESP8266 так и для ESP32. Недавно для школы покупал несколько наборов WiFi Slot, потратил целый день что бы ее прошить
    посмотрел на форум и понял что я еще легко отделался)) в итоге поставил но по инструкции с Espruino. Думаю нужно будет
    поднять вопрос о том что бы устранили неточности и написали одну четкую инструкцию (проверенную) по которой можно
    будет поставить без квеста.
     

    Вложения:

  9. Unixon

    Unixon Оракул Модератор

    Да, как-то запутанно там всё. Напишите в поддержку, может когда-нибудь поправят.