Официальный сайт компании Arduino по адресу arduino.cc
Режимы работы SoftwareSerial
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 06/08/2014 - 19:44
При запуске аппаратного последовательного порта можно указать кроме скорости еще и формат данных типа SERIAL_8N2.
Я так понял, что программная реализация умеет только скорость менять. Может есть какая библиотека для этого? Полдня гугл сегодня мучил.
Да, 4 порта на Mega мне не хватает, нужно 5.
Ну или подскажите, как добавить еще один порт, который умеет 2 стоповых бита. :)
Собственно проблема состоят в добавлении еще одного порта и проёме на него данных в формате 8-N-2
Вот тут http://forum.pjrc.com/threads/24199-AltSoftSerial-amp-parity-e-g-begin(9600-SERIAL_8E1)
Человек пытался "допилить подобную поддержку" в AltSoftSerial.... с помощью автора AltSoftSerial.
Но не вникал особо "что там у него в итоге вышло"
Короче, SoftwareSerial принимает SERIAL_8N2 нормально. Вопрос закрыт :)
Если разобрались, подскажите, подалуйста, где что подкрутить... Нужно подружить Softwareserial с данными в формате с контролем четности 8/1/1 .
Тут полный список : https://forum.pjrc.com/threads/24199-AltSoftSerial-amp-parity-e-g-begin%289600-SERIAL_8E1%29?p=69902&viewfull=1#post69902
case SERIAL_8O1
parity = 1;
data_bits = 8;
Что-то мудрёно...Т.е. штатным образом имеющийся SoftwareSerial на такое не способен? Вроде же ТС запустил:
Ну по крайней мере на 9600 он у меня хавал всё нормально.
Ну так мне 9600 и надо. Что и где конкретно нужно прикрутить?
Ничего не надо. Только пины правильно задать.
SoftwareSerial SIM(2,3);
Я так понимаю - это неправильно.
На Mega я делал так:
SoftwareSerial swSerial(10, 11); // RX - 10, TX - 11
Главное, чтобы RX висел на порту, который умеет прерывание.
Или я чего-то не понимаю или... я не понимаю ничего...И где здесь задается формат данных? Откуда SOFTWARESERIAL узнает про директора кроватной фабрики? Я считал, что по аналогии с hard должна быть запись что-то типа SoftwareSerial swSerial.begin(9600, SERIAL_8O1) , но так не пройдет.
Нету тут такого.
Смотри ответ #6.
А как же он проглотил Ваш SERIAL_8N2 ? Он сам автоматом "подстроился" ?
А как же он проглотил Ваш SERIAL_8N2 ? Он сам автоматом "подстроился" ?
Заданное количество стоповых битов, в любых com-портах, и программных и аппаратных, влияет только на передачу - то есть, может немного увеличить паузу между передаваемыми байтами.
Но на приёме всегда проверяется наличие одного стопового бита. Поэтому и "подстроился", скорей всего.
Глупость.
Особенно про "подстроился"
Совпало- да.
Чётность-нечётность и количество стопов не зря задают чтобы принять вообще и ошибку поймать в частности.
Все в основном юзают 8N1, но это не факт что все юзают.
Например как вы отличите на приёме 8N1 и 7O2
Ваш восьмой бит будет или данными или чётностью предыдущих семи.
Успехов с чтении...... ;)
Но 8N1 и 8N2 будут свобдно взаимно передаваться/приниматься. Количество стоповых битов, при приёме, значения не имеет - во всех аппаратных com-портах которые я встречал, и надеюсь в программных тоже.
К информационным битам, и биту чётности, это не относится - их количество в настройках передачи и приёма должно, разумеется, полностью совпадать.
Не спорю, 8N1 и 8N2 будут приниматься 99.9% нормально.
0.1% на то, что между окончанием 8N1 и стартом передачи следующего байта не будет паузы от слова совсем.
Тут уж как приёмная сторона решит: вдруг она увидив один стоп и ожидая второго выбьет ошибку приняв старт
( сорри, всё время путаю марк и спэйс, поэтому пишу старт-стоп)
trembo, в документации, например, на "стандартный" 16550 UART указано явно, что второго стоп-бита приёмник ждать не будет - одного ему вполне достаточно, независимо от установленного режима работы.
Поэтому я тут и упираюсь. :)
number of Stop bits selected.
Насчёт других микросхем, и тем более программных реализаций - да, согласен, нужно уточнять для каждого конкретного случая.
Короче, SoftwareSerial принимает SERIAL_8N2 нормально. Вопрос закрыт :)
Пытался реализовать проект на программном последовательном порту, и понял, что программная реализация умеет только скорость менять. Может уже есть какая библиотека для этого ?
Так всё же есть альтернативный SoftwareSerial в котором можно задавать параметры данных?
Нашёл вот здесь
да , опоздал )
Так всё же есть альтернативный SoftwareSerial в котором можно задавать параметры данных?
Нашёл вот здесь
Initial commit
ledongthuc committed on 3 May 2015
Жаль, что на момент создания темы ещё не было. Добавил в закладки.
Проблемы softSerial-ов в том, что одни долго торчат в обработчике прерываний. Со всеми вытекающими... С другой стороны, других решений не видно.(
Проблемы softSerial-ов в том, что одни долго торчат в обработчике прерываний. Со всеми вытекающими...
Да.
С другой стороны, других решений не видно.(
Нет. Реализуемо для небольших скоростей, до 4800.
Нет. Реализуемо для небольших скоростей, до 4800.
Ну да. Наверно можно играться с таймером, попадая в средину бита. Но, опять таки, если тебе не портят жизнь другие прерывания.)
А из за этих SoftSerial-ов даже tone нельзя нормально сформировать. Хрипит по чём зря.)
Ну типа. 4 прерывания таймера на бит. Обработчик короткий как выстрел. Остальные прерывания тоже не длинные должны быть.
Ну 4 прерывания на бит - это совсем хорошо, как учат в школе.) Думаю, одним можно обойтись, чай не графья.) Опять таки - от серьёзности зависит.
Если одновременно прием и передача - никак одним. Разве что два таймера, один принимает, другой передает. Но это явно не лучше чем 4 прерывания на бит на одном таймере.
//Ну 4 прерывания на бит - это совсем хорошо, как учат в школе.)
Бля, меня чето в школе такому не учили, даже в высшей. Может школа не та была... )))
Можно еще пытатся перенастраивать интервал таймера по ходу прием и передачи. Тогда два прерывания на бит при двустороннем обмене, но сам расчет интервала в обработчике прерывания будет занимать время, удлинять обработчик. В общем не факт что так удастся быстрей работать.
на библиотеке, что дал ссылку заработало, иногда, на десять пакетов проскакивает сбой приёма, но это можно в скетче отфильтровать, на SoftwareSerial вообще не взлетело
Бля, меня чето в школе такому не учили, даже в высшей. Может школа не та была... )))
Ну это образно.) Насколько помню, Атмел учит обходиться тремя выборками на бит. Потому и школа.))
Одолел DetSimen_а библиотеку под YAESU девайсы, обернул в правленный SomeSerial CustomSoftwareSerial, нужны были параметры 8N2