Прием потока через GPRS

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

  1. b707

    b707 Гуру

    Если для связи модема и Ардуины использован SoftwareSerial() - быстрее не заработает. Переходите на аппаратный сериал - там можно до 115200. Но потеряете возможность подключатся к ардуине по USB
    Что в этом странного? данные в TCP/IP всегда передаются пакетами, каждый из которых путешествует по сети отдельно, поэтому они и приходят с разными интервалами. Если в протоколе нет специальных мер - они еще и в неверном порядке могут приходить - не 1,2,3,4,5, а скажем 1.2, 5,4.3...
    А то, что скорость маленькая - я уже обьяснил. Ваш модем не поддерживает современные скоростные режимы передачи, никакого 3G там нет,
    ИМХО. устойчивой передачи музыки с этим модемом вы не получите.
     
    Airbus нравится это.
  2. parovoZZ

    parovoZZ Гуру

    Поэтому рецепт один - буферизация.
     
    Airbus нравится это.
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Да - думал об этом. Собираюсь заказать микрухи SPI SRAM. Пригодятся.

    Спасибо - не знал об этом.
     
    Последнее редактирование: 13 авг 2018
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Сомнительно. SoftwareSerial() - до 115200 работать должен, а тут всего - 38400.
     
  5. parovoZZ

    parovoZZ Гуру

    На леонардо работать точно не будет.
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Тогда что получается - справочник Ардуино ИДЕ гонит конкретную дезу ? Или я что-то не понимаю ?
     
  7. b707

    b707 Гуру

    Может и должен - но не работает. Можете сами убедится - подключитесь через Софтовый сериал к монитору ардуино на 115200 и выведите какую-нибудь длинную строчку в бесконечном цикле. У вас обчень быстро вместо букв пойдут квадратики.
     
    DIYMan нравится это.
  8. DIYMan

    DIYMan Guest

    Тут ключевое - должен, но не обязан. Как показывает практика, на высоких скоростях там не алё всё. Дело в комплексе проблем: обычно в прошивке не только SoftwareSerial юзается. А он, цуко - написан блокирующе, и отключает прерывания, когда ему надо. По факту можно поиметь нехилого головняка, когда при совместном использовании SoftwareSerial и аппаратного UART из второго - пропадают данные, это самый первый пример, пришедший на память, который случается на практике. Ну и сам SoftwareSerial, как совершенно верно заметил @b707 - на больших скоростях устраивает несварение.

    Идеально - вообще его не применять, если можно обойтись аппаратным UART.
     
  9. SergeiL

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

    115200 не пробовал, Но 38400 на Leonardo с софтсериал работает лучше, чем на 9600.
    По крайней мере, на коротких посылках.
    На передаче в софтериал есть запрещения прерываний, и чем они короче, тем легче воспринимаются остальным кодом, критичным к времени реакции.
    Чем выше скорость софтсериал, тем короче время запрета прерываний.
     
  10. DIYMan

    DIYMan Guest

    Я на довольно нагруженном проекте юзаю его на 57600, но пакеты данных там маленькие, с нечастой периодичностью и - довольно некритичные в целом. Выше скорость - уже хреново работает.
     
  11. SergeiL

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

    Наверное так и есть.
    Есть, наверное, как говорят, золотая середина, в зависимости от длины пакета и загруженности основного цикла, длинны кода в прерываниях.
    Я начинал тестировать на 9600, с софтсериал с передачей/приемом в основном цикле, и на не сильно загруженном основном цикле, вплоть до 38400, как мне показалось, время выполнения основного цикла, по отношению к времени реакции системы, для моей задачи, было более оптимальным именно на 38400.
    Это был просто тест софтсериал.
     
  12. parovoZZ

    parovoZZ Гуру

    Понадобился мне тут конвертер SPI -> UART. Сляпал его по-быстрому на леонардо в абдурино кодах. На частоте SPI 1 МГц и скорости UART 115200 у меня пропадали одиночные байты. Кольцевой буфер никак не помогал. Приходилось в драйвере SPI вводить задержки чуть ли не по 100 мкс. В конце-концов мне это надоело, и я сделал конвертер по уму (на си чистогане) на 328 камне. В результате сейчас работаю на SPI 4 МГц, UART 200 000. Одиночные байты вылетают со скоростью 15 000 байт в секунду. Вот так-то.
     
  13. parovoZZ

    parovoZZ Гуру

    И ещё что. На леонардо невозможно по-нормальному сделать SPI Slave. Приходится подтыкаться к мелкому светодиоду(( На нано пин выведен на гребенку.