Attiny85 и serial

Тема в разделе "Микроконтроллеры AVR", создана пользователем Shizuku, 5 фев 2022.

  1. Shizuku

    Shizuku Нуб

    Как известно, у Attiny85 нет Serial. Но есть всячески эмуляции, через которые таки можно читать/писать в порт.
    У меня Digispark ATtiny85 как на фото:
    https://disk.yandex.ru/i/yiexe2BMArZ7Dg

    Беру скетч Print.ini из примеров в Arduino IDE
    .arduino15/packages/digistump/hardware/avr/1.6.7/libraries/DigisparkCDC/examples/Print/Print.ino

    Код (C++):

    #include <DigiCDC.h>
    void setup() {  
      // initialize the digital pin as an output.
      SerialUSB.begin();
      /*
      remember the SerialUSB starts as soon as you call begin
      and doesn't restart the board when you open the serial monitor
      (like the uno does) - so if you print to it and you don't
      have a serial monitor open that text is lost.
      */

    }

    // the loop routine runs over and over again forever:
    void loop() {
     
      SerialUSB.println(F("TEST!")); //wrap your strings in F() to save ram!
     
      SerialUSB.delay(10);
      /*
      if you don't call a SerialUSB function (write, print, read, available, etc)
      every 10ms or less then you must throw in some SerialUSB.refresh();
      for the USB to keep alive - also replace your delays - ie. delay(100);
      with SerialUSB.delays ie. SerialUSB.delay(100);
      */

    }
     
    И заливаю в микроконтроллер по стандартной для digispark схеме, т.е. через передергивание кабеля.

    Загрузка проходит успешно и через минутку появляется порт - можно открывать монитор порта.

    Открываю и вижу вместо "TEST!" только первую букву "Т". Может остальные буквы где-то потерялись? Оставляю монитор порта открытым и передёргиваю тинку. Через минуту в порт падает ещё одна буква "T". И больше ничего.

    Можно изменить текст в скетче, но по прежнему на вывод уйдет только первый символ из строки.

    Если идет несколько команд вывода друг за другом, то остальные строки игнорируются вообще:

    Код (C++):

    SerialUSB.println(F("1_Line"));
    SerialUSB.println(F("2_Line"));
     
    Этот код выведет в монитор символ "1".

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

    Что я делаю не так?
     
  2. parovoZZ

    parovoZZ Гуру

    Все там есть. Делается сериал из USI блока.
     
  3. Shizuku

    Shizuku Нуб

    Я смогу и читать, и писать в com-порт?
    А можно подробнее, как это делается. Я немного погуглил, пишут про какой-то USI-модуль. Если нужно прикручивать к тинке еще одну плату модуля, то это есть не очень хорошо, т.к. потеряю компактность сборки.
     
  4. Asper Daffy

    Asper Daffy Иксперд

    Вы - нет, не можете, иначе этого топика бы не было.
    Пожалуйста, вот аппнота от Микрочипа - там всё написано.

    К этой аппонте есть готовые примеры кода, там же на сайте Микрочипа.
     
    Andrey12 и DetSimen нравится это.
  5. Shizuku

    Shizuku Нуб

    "Half Duplex UART" - если не ошибаюсь, это значит, что передача данных будет работать только в одну сторону.
    Плюс непонятно, что я дожен добавить в схему кроме собственно самого мк и USB кабеля.
    Мне нужен вариант, где работает Serial.read() и Serial.println(). Отдельная программа слушает COM-порт компьютера и принимает данные от Attiny85 по USB, парсит их, и отправляет ответ назад в порт.
    Уточнил на всякий, т.к. вижу, что много примеров, где uart используется для того, чтобы перекинуть rx/tx куда-нибудь на ардуино например или другое устройство.
     
  6. Feofan

    Feofan Нерд

  7. parovoZZ

    parovoZZ Гуру

    Взять мелкозявый МК с USB на борту и не выносить моск.
     
    Andrey12, Feofan и b707 нравится это.
  8. Shizuku

    Shizuku Нуб

    Понял. Half duplex - тоже можно в две стороны, но не одновременно.
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Когда втыкаете Дигиспарку в УСБ порт что вы получаете ? Новый Ком-порт, как и Ардуина УНО ?
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Сегодня получил по почте с Али две платки Дигиспарк-ов. Сначала комп писал, что неопознанный (летающий) УСБ объект. После установки драйверов - -libusb-win32 devices. Но в IDE не появилось никакого нового КОМ порта. Так что подошел к той же грани, что и многие до меня.
    Вопрос - ну и как с ней работать дальше ?

    ПС. Уточняю недописанное ночью. - После установки драйверов, в диспетчере устройств появляется:
    libusb-win32 devices => Digispark Bootloader.
    Так что бутлоадер в ней прописан. Но как указать ИДЕ-шке его присутствие, ведь ком-портов не появляется. Предустановлен классический блинк. Мигает исправно
     
    Последнее редактирование: 18 авг 2022
  11. DetSimen

    DetSimen Гик

    Загрущик прошить. Или через USBAsp
     
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Блин. Далеко не с первого раза нашел ответ. Вообще все касающееся Дигиспарки надо бы начинать именно с него.