Digispark (default 16.5mhz) serial.read() не работает

Тема в разделе "Arduino & Shields", создана пользователем Ariadna-on-Line, 18 окт 2023.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Вопрос к неугомонным тестерам.
    Рисовал, компилил, тестил в Протеусе и шил скетчи с Serial. print(). Понадобился ввод по сериалу. И тут затык - Serial.available() ничего не видит. TX - PB2 (пин7). Перепробовал в роли RX все пины (кроме ресета ессно). Нет приема. Вопрос - это глюк Протеуса или в реале будет так же ? Проверить в реале пока не на чем.
    ПС. В пакете примеров к Спарку нет скетчей с Serial-ом (не USB-iшным). Тем не менее - вывод в Сериал (пин7) работает прекрасно. Примеры с софт-сериалом работают, но места занимают слишком много.
    ППС. Где находятся коды функций Serial-a для платформы ДжСпарка ?
    С уважением.
     
    Последнее редактирование: 18 окт 2023
  2. User248

    User248 Гик

    А с каких пор у Digispark аппаратный сериал появился? Только SoftwareSerial используют обычно.
     
  3. parovoZZ

    parovoZZ Гуру

    Аппаратный сериал у тиньки85 был всегда. Правда, не совсем аппаратный и не совсем UART. Я про это когда-то рассказывал.
     
  4. User248

    User248 Гик

    На распиновке не вижу.

    digispark_attiny85_pinout.png
     
  5. KindMan

    KindMan Гуру

    Там USI + таймер = UART. Гуглиться по AVR307.
    Мне протеус подкладывал свинью несколько раз, я с ним не дружу больше.
     
  6. User248

    User248 Гик

    Тогда лучше I2C использовать для связи. Немного сложнее сериала. Этот USI и используется для его работы.
     
  7. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Мне надо задать с терминала Спарке числовой параметр. Ну и как это сделать I2C-ом, не изобретая очередной костыль ? При Этом со Спарки на терминал прекрасно все идет.. Просто раньше НЕ приходилось в нее отправлять. Отсюда и вопрос.
     
    Последнее редактирование: 19 окт 2023
  8. User248

    User248 Гик

    Костыль - это получить UART с помощью USI. Используйте SoftwareSerial на любых доступных контактах. А если не влезает прошивка, то используйте другой микроконтроллер.
     
  9. parovoZZ

    parovoZZ Гуру

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

    то её следует оптимизировать. Для начала выкинуть оттуда дурину и всё, что с ней связано.
     
  10. User248

    User248 Гик

    Тоже вариант. Короче, есть из чего выбрать и хорошо. Это раньше выбора особо небыло.
     
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это все понятно кроме одного - На Спарке Serial.print() работает как часы. Не работает Serial.read(). Не знаю каким образом разработчики платформы реализовали Сериал. Но коль они сделали передачу - просто невероятно чтобы они не сделали прием. У фирмачей так не бывает.
     
    Последнее редактирование: 19 окт 2023
  12. Asper Daffy

    Asper Daffy Иксперд

    Во-первых, он там полудуплексный.

    А можно посмотреть а) код и б) используемое ядро дигиспарка, а то трындим ни о чём.
     
    Последнее редактирование: 19 окт 2023
  13. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Выложу. Но позже. Насчет ядра - вы имеете в виду это ?
     

    Вложения:

    • Goertzel.png
      Goertzel.png
      Размер файла:
      59,5 КБ
      Просмотров:
      64
  14. Asper Daffy

    Asper Daffy Иксперд

    Есть несколько ядер для спарка. У Вас
    http://digistump.com/package_digistump_index.json ?
    Или другое какое? Если другое, то какое? Где Вы его брали?
     
  15. Asper Daffy

    Asper Daffy Иксперд

    В общем, ответа я не дождусь, скажу так в пустоту.

    Если у Вас стандартная digistump, то для 85-ой там используется не HardwareSerial, а TinyDebugSerial.

    А теперь к Вашему заявлению
    Конечно, не бывает! Чтение есть! Можете сами на него посмотреть в файле

    C:\Users\<имя юзера>\AppData\Local\Arduino15\packages\digistump\hardware\avr\1.6.7\cores\tiny\TinyDebugSerial.h

    Выглядит оно во так:
    Код (C++):

        virtual int read( void )
        {
          return( -1 );
        }
     
    Нравится? Ну, вот так оно и работает :)
     
    User248 нравится это.
  16. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Есть одно - это же самое. Где взял уже не помню.
     
  17. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Участник OKF прислал ссылку на софт-сериал. Пара-тройка функций - зато это главные функции и экономный.
    https://github.com/nerdralph/picoUART
    В инфе от Диджиспарка написано - выложена бесплатная (!!!) версия софта. А значит и к гадалке не ходи - раскошеливайтесь и прием по сериалу - будет.)))) Расскажите пожалуйста - где в коде видно, что используется именно эта библиотека ?

    ПС. Посмотрел этот пикоУАРТ. Из фишек - работа по одному проводу в обе стороны. Мой любимый стиль - "Впихнуть невпихуемое". Проверил. Нормально.
     
    Последнее редактирование: 25 окт 2023
  18. Asper Daffy

    Asper Daffy Иксперд

    Да, я-то расскажу, только это частное знание, которое Вам ничего не даст. Надо учиться читать программы и видеть такие вещи.

    В файле WProgram.h в строках №№ 18 и 19 записано
    Код (C++):
    #include "TinyDebugSerial.h"
    #include "HardwareSerial.h"
    В файле core_build_options.h в блоке, относящемся к AttinyX5 (строки №№ 106-134) в строке № 132 задана константа
    Код (C++):
    #define DEFAULT_TO_TINY_DEBUG_SERIAL              1
    Далее, в файле HardwareSerial.h в строках №№62-75 все условия неверны, значит HardwareSerial не используется.

    Наконец, в файле TinyDebugSerial.h в строке 742 условие верно, значит глобальная переменная Serial имеет тип TinyDebugSerial.
     
    Ariadna-on-Line и DetSimen нравится это.
  19. ИгорьК

    ИгорьК Гуру

    Тут "есть два путя".

    Первый, правильный и зело уважаемый тот, что вы ВСЕГДА применяете, глубоко вникая в суть вещей и программ, и (не)передавая знание великовозрастным школярам о 64 годах.

    Второй - неправильный, что использует технические возможности поиска IDE. @Ariadna-on-Line, попробуйте этот презренный путь сами.
     
  20. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ничего не имею против. Имею только сказать - программирование меня по жизни не кормило и, видимо, не будет. Это хобби. Кормили - электроника и химия. Не получится "глубоко копать коды". Это будет стремлением "объять необъятное", а мое хобби - "впихивать невпихуемое" ))))))))))))))))). Вот задаю конкретные вопросы - спасибо что вы отвечаете ! С уважением.

    ПС. Нашел-таки чего хотел. Вернее, нашел то, что потерял.
    Ядро : ATTinyCore - Плата : ATtiny85(Micronucleus/DigiSpark).
    Не нужно никаких СофтСериалов.
    Serial() работает в ОБЕ стороны как в обычной UNO. Менее горомоздкий чем PicoUART. Всем спасибо.
     
    Последнее редактирование: 26 окт 2023