Конфликты SPI и Serial
- Войдите на сайт для отправки комментариев
Здравствуйте уважаемые форумчане, программирую на ардуино НАНО проект с бегущей строкой.
Идея: Плата принимает данные через пины RX TX, расшифровывает, и показывает бегущую строку.
бегущая строка сформирована из трех модулей LED (32x16), подключенных через библиотеку DMD.
Данные принимаю c другого устройства через интерфейс RS-485, преобразую драйвером RS485-RS232, подключаю к RX TX пинам ардуино.
Проблема: Создал проект который слушает Serial и выводит опять в Serial
if(Serial.available()){ Serial.write(Serial.read()); }
данные получаю, никаких проблем нет. Проблемы возникают когда я пытаюсь прикрутить бегущую строку. Строка работает, но нет взаимодействия с серийным портом (данные не идут). Пытался сделать вот так
#include <SoftwareSerial.h> SoftwareSerial mySerial(3, 2); void setup(void) { Serial.begin(115200); mySerial.begin(115200); } void loop(void) { if(mySerial.available()){ Serial.write(mySerial.read()); } }
тоже самое. Есть подозрения что это какой то конфликт SPI и Serial. Может кто нибудь сталкивался?
Простите, не понял, а SPI тут каким боком?
Простите, не понял, а SPI тут каким боком?
когда к этой програмке которую привел пример подключаю библиотеку DMD (бег. строка - SPI), то уже не могу получить данные с RX TX пинов на ардуино
Ну так и приводите программу, которая неправильно работает. Зачем Вы эту-то привели?
Ну так и приводите программу, которая неправильно работает. Зачем Вы эту-то привели?
В наших узких кругах считается что 115200 многовато будет для софтварного сериала.
В наших узких кругах считается что 115200 многовато будет для софтварного сериала.
между прочим даже Marlin (хрен его знает есть ли что тяжелее вообще) на такой скорости работает а эта шалупонь и подавно должна
В наших узких кругах считается что 115200 многовато будет для софтварного сериала.
Обьясните мне что такое "коряво работающий сериал порт" и что вы хотите с него считать?
Это как раньше телевизор на даче: еле видная картинка среди шумов?
http://arduino.stackexchange.com/questions/21465/softserial-max-speed-lo...
https://github.com/arduino/Arduino/issues/2019
Это как раньше телевизор на даче: еле видная картинка среди шумов?
именно так. вот тогда и можно было бы тут о скоростях рассуждать. а если совсем не работает значит не работает
тем более не коды запуска ракет передавать ))
мне кажется дело не в скорости 115200. ведь данные приходят с другого устройства (именно данные, а не набор байт!)
к примеру
вот если запустить программу, она будет выводить все что придет на пин RX. если раскоментировать строку
данные перестают приходить на пин RX. при этом остается возможность отправлять на ком порт через компьютер (байты приходят обратно эхом).
Библиотеку DMD использовал здесь https://github.com/freetronics/DMD
очень странно я посмотрел бибилиотеку DMD и не видел в контрукторе там ничего такого, что могло бы мешать
путем комментирования строк нашел проблемные места. в файле SPI.cpp строка 26
как эти регистры могут мешать? понять не могу
Народ, никто разве не сталкивался с таким
Похоже на конфликт по скорости. Оба интерфейса быстрые, на прерываниях и производительности не хватает. Для диагностики понизьте скорости обоих.
Похоже на конфликт по скорости. Оба интерфейса быстрые, на прерываниях и производительности не хватает. Для диагностики понизьте скорости обоих.
"
Warning: if the SS pin ever becomes a LOW INPUT then SPI
06
// automatically switches to Slave, so the data direction of
07
// the SS pin MUST be kept as OUTPUT.
вот это вот переведи на нормальный русский мне кажется тут и разгадка )
А чего тут переводить. Если SPI Работает в мастер-режиме, то пин SS обязан быть либо в OUTPUT, либо если уж в INPUT, то хотя бы HIGH. А если он станет INPUT/LOW SPI сам переключится в Slave режим.
у нашего гения нет решения вопроса ))
Кстати возможнео дело в
Serial
.
Он как раз запросто может забивать всё что угодно, ведь основное назначение для связи с компом + монитор порта его пользует ип глюки могут быть
Мне кажется надо попробовать у когонибудь ещё скетч запустить
вот пример скетча который не работает. в плате ардуино надо соединить RX пин и D13.
при закоментированной строке данные идут. когда строку оставляем - пин RX наотрез перестает видеть что либо
в описании к SPI ничего не написано про конфликты. Запустите кто нибудь эту программу.
Столкнулся с той же проблемой при использовании SoftwareSerial и SPI в подобном проекте (с библиотекой DMD/DMD2). При отключенном SPI в порт идет чистая информация из источника (другая ардуино), при включенных обоих библиотеках в софт.сериалпорт летит мусор.
Пришлось отказаться от SoftwareSerial и работать с обычным UART. Не так удобно конечно, но иначе не получается)
Находил упоминание о библиотеке AltSerial, но проверять не было времени. Попробуйте, может кому-то поможет.