Работа с низкоскоростным каналом связи

Тема в разделе "Arduino & Shields", создана пользователем liahim55, 24 окт 2019.

  1. liahim55

    liahim55 Нерд

    Имеется канал связи не позволяющий передавать со скоростью выше 250 бод.
    В Ардуино IDE минимальная скорость 300 бод.
    Если беру одно из стандартных значений для СОМ порта 150 или 110 бод и
    ставлю Serial.begin (110); Arduino передает мусор. Подскажите пожалуйста как победить проблему.
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Азбука Морзе?
     
  3. liahim55

    liahim55 Нерд

    сигналы Е&М в канале ТЧ
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Радиоканал не?
     
  5. akl

    akl Гуру

    имеется в виду монитор порта в ардуино иде?
    можно попробовать другую программу, например Terminal-v.1.9b
    я не проверял будет ли оно работать, но там есть тычка "custom BR" и по идее туда можно вписать что угодно в том числе меньше 300
     
  6. liahim55

    liahim55 Нерд

    В цифровых системах передачи каналы тональной частоты (ТЧ) полосой 300 гц - 3,4 Кгц передаются в виде цифрового потока со скоростью 64 Кбит/сек.и дополнительно сопровождаются сигналами Е&M , которые передаются со скоростью примерно 500 бит/ сек и часто просто не используются. Задача организовать по ним
    низкоскоростной канал. Связать 2 компъютера через гипертерминал на скорости 150 либо 110 бод удается, на скорости 300 бод появляются ошибки. Задача передать данные с ардуино на компъютер. Ардуино Serial.begin(300); выполняет нормально, а при Serial.begin (110); выдает мусор. Другими словами 2 компьютера на скорости 110 бод связать удается, а ардуино и компъютер нет
     
    Последнее редактирование: 24 окт 2019
  7. parovoZZ

    parovoZZ Гуру

    врукопашную сконфигурируй регистры.
     
  8. akl

    akl Гуру

    в ардуино вроде все правильно конфигурируется. Но я так понял, там у старшего регистра для настройки скорости только 4 бита задействуются, поэтому в них нельзя засунуть число больше 4095. Так что, получается скорость меньше 250 в принципе невозможно накрутить?

    Как вариант - взять ардуину на 8 МГц
     
  9. parovoZZ

    parovoZZ Гуру

    открыть даташит да посмотреть. Там даже целая таблица есть. Не вижу темы для обсуждения.
     
  10. Daniil

    Daniil Гуру

    А программный сериал тут не поможет?
     
    akl нравится это.
  11. liahim55

    liahim55 Нерд

    Там и таблица и формула, но IDE с этими регистрами отказывается работать.

    UBRR.JPG
     
  12. akl

    akl Гуру

    в атмегах 8, 16, 32 и других, в UBRR только 12 разрядов, так что с настоящим уартом при 16 мгц точно не получится 150 накрутить. А вот SoftwareSerial как выше написали, может и прокатит.
     
  13. parovoZZ

    parovoZZ Гуру

    Надо заголовочник приинклюдить. Толи avr.h толи ещё какой. Сейчас не вспомню(
     
  14. akl

    akl Гуру

    в атмеге328 вроде там есть номер у этих регистров и надо писать UBRR0L и UBRR0H. но это не точно
     
  15. liahim55

    liahim55 Нерд

    Есть в наличии ардуино мини на 8 мгц. Буду пробовать.
     
  16. liahim55

    liahim55 Нерд

    UBRRL0L и UBRR0H, это я пробовал - не помогло. То же подозреваю, что надо что то приинклюдить. Ищу что.
     
  17. akl

    akl Гуру

    я бы для начала программный сериал попробовал. Настоящий сериал к компу, а софтверный к тому что там на 150 бод работает. Возможности для отладки повышаются неимоверно

    инклюдить там что-то вроде #include <avr/io.h> наверно
     
  18. liahim55

    liahim55 Нерд

    Тему можно закрыть. Проблема решена. akl прав, регистр UBRR 12 разрядный. На 8 мегагерцовой ардуине при сбросе бита U2X регистра UCSRA в 0, заработал обмен 150 бод. может кому пригодится.
    подключаем
    #include <avr/io.h>
    в сетапе добавляем
    UBRR0H= 13;
    UBRR0L= 4;
    byte val = UCSR0A;
    val = val&0b11111101;
    UCSR0A = val;


    Спасибо всем за участие.
     
    Последнее редактирование: 26 окт 2019