Белка12 0 22 декабря, 2012 Опубликовано 22 декабря, 2012 (изменено) · Жалоба Есть микроконтроллер ADUC831. В его состав входит интерфейс UART. Можно ли по этому интерфейсу принимать данные от нескольких датчиков и каким образом? Я пробовала опрашивать и принимать данные с газового датчика со встроенным RS485 интерфейсом optosense. Там все работает нормально. Скорость обмена 9600. Теперь надо в пару к нему подсоединить датчик Dinament, со встроенным RS232 интерфейсом, другой скоростью обмена и другим форматом посылки данных. Как-то не очень понятно, как их можно опрашивать и принимать данные по одному UART. Надо как-то организовать адресацию, наверное? А разве RS232 поддерживает адресацию? А RS485? Может, кто-то сталкивался с подобным? С уважением, Белка12. Изменено 22 декабря, 2012 пользователем Белка12 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 22 декабря, 2012 Опубликовано 22 декабря, 2012 · Жалоба Можно ли по этому интерфейсу принимать данные от нескольких датчиков и каким образом? Можно. Теперь надо в пару к нему подсоединить датчик Dinament, со встроенным RS232 интерфейсом, другой скоростью обмена и другим форматом посылки данных. Перед началом опроса датчика настраивайте UART на нужную скорость, отключайте ненужный и включайте нужный интерфейс, шлите запрос, принимайте ответ. Надо как-то организовать адресацию, наверное? Надо. А разве RS232 поддерживает адресацию? RS232 - не поддерживает. RS485 допускает подключение нескольких устройств на одну шину. Адресация реализуется протоколом передачи данных (не определённым в стандарте - например своим). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Белка12 0 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба RS485 допускает подключение нескольких устройств на одну шину. Адресация реализуется протоколом передачи данных (не определённым в стандарте - например своим). Большое спасибо, ув. _Артём_! А можно ли подробнее: как именно подключить и адресовать несколько устройств при использовании RS485 интерфейса? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hmm 0 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Белка12 Гм.. Например: Запрос: 2 уникальных байта + байт адресуещего устройство + контрольная сумма; Ответ: байт количества байт данных + контрольная сумма. Помимо физического RS485 можно использовать K-LINE. Если понятно - о чем я напостил, то далее проблем быть не должно. Успехов! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novchok 0 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба А можно ли подробнее: как именно подключить и адресовать несколько устройств при использовании RS485 интерфейса? Устройства подключаются парралельно по RS485 шине, вот описание с картинками http://www.novosoft.by/Ency/rs-485.htm По поводу адресации, один мастер на шине. Все датчики его слушают, чего они выдаст. Каждый датчик принимает пакет от Мастера, а отвечает Мастеру только тот датчик, чей адрес указан в запросе. Если датчик уже имеет встроенный RS485, то в документации должен быть адрес датчика. Если это все самоделки, тогда дачик цепляется к микроконтроллеру, тот в свою очередь на шину RS485. Программа в микроконтроллере, в каждом микроконтроллере, потому что их столько же сколько датчиков, так вот программа определяет свой адрес и выдает на шину RS485 данные. Другой вариант, если один микроконтроллер обслуживает несколько датчиков, по аналоговой или цифровой линии, а наружу связан с RS485 интерфейсом. Тогда так, как описали выше, получили пакет, определили какой там датчик, выдали обратно информацию с данного датчика. Короче нужны подробности, как у Вас все это организовано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба RS232 - не поддерживает. Я не хочу вспоминать про 9 бит . Но хотелось уточнить модели датчиков туда сюда DS почитать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Белка12 0 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Я не хочу вспоминать про 9 бит . Но хотелось уточнить модели датчиков туда сюда DS почитать Один датчик наш, питерский, optosense, (RS485) возможна поддержка адресации. http://www.optosense.ru/ru/welcome.html Второй датчик английский, Dynament, (RS232). http://www.dynament.com/ Другой вариант, если один микроконтроллер обслуживает несколько датчиков, по аналоговой или цифровой линии, а наружу связан с RS485 интерфейсом. Тогда так, как описали выше, получили пакет, определили какой там датчик, выдали обратно информацию с данного датчика. Короче нужны подробности, как у Вас все это организовано. Ув. novchok, так я и хочу определиться КАК мне все организовать и каким образом организовать адресацию датчиков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба так я и хочу определиться КАК мне все организовать и каким образом организовать адресацию датчиков.Соединить просто проводами RS232 и RS485 не получится. Обычные RS232 устройства адресацию не поддерживают, так как стандартная шина RS232 не предполагает подсоединение нескольких устройств. Да и электрически они напрямую не совместимы. Поэтому нужен либо RS232<->RS485 конвертер (под данную задачу нужен с адресацией, неочевидно что доставаем и/или дешев) либо делать подобный девайс самому. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 24 декабря, 2012 Опубликовано 24 декабря, 2012 · Жалоба Ув. novchok, так я и хочу определиться КАК мне все организовать и каким образом организовать адресацию датчиков. На RS232 датчик должен быть один, если адресация не поддержана протоколом датчика. Алгоритм пожет быть такой: volatile uint8_t SensorRequestFlag; // таймер обеспечивает заданную частоту опроса - например 10 Гц void Timer_10Hz_Handler() { SensorRequestFlag=1; } #define RS_485_SENSOR_NUMBER 5 // для примера 5 датчиков void main() { Init_periferals(); while (1) { if (SensorRequestFlag) { SensorRequestFlag=0; // опрос датчика по RS485 RS232_DisableTx(); RS232_DisableRx(); for (unsigned char i=0; i<RS_485_SENSOR_NUMBER; i++) { RS485_EnableTx(); RS485_DisableRx(); SendRequestTo_RS485( i ); // посылка запроса по RS485 // переключение на приём RS485_EnableRx(); RS485_DisableTx(); // ожидание ответа по RS485 заданное время WaitAnswerFromRS485(MAX_RS485_WAIT_TIME); } // запрет RS485 RS485_DisableTx(); RS485_DisableRx(); // посылка запроса на RS232 RS232_EnableTx(); RS232_EnableRx(); SendRequestTo_RS232(); // посылка запроса по RS232 // ожидание ответа по RS232 заданное время WaitAnswerFromRS232(MAX_RS232_WAIT_TIME); RS232_DisableTx(); RS232_DisableRx(); } } } RS485 и RS232 могут подключать к одному UART-у МК, нужно поочерёдно отключать-включать приём передачу на одном из интерфейсов. Когда опрашивается 485-й, запрещён 232-й, и наоборот. Для RS485 иногда бывает важно как можно скорей освободить шину, так как датчик может сразу же начать отвечать на запрос. Для освобождения шины используется прерывание по завершению передачи последнего байта пакета, или (если мастер принимает сам себя) приём последнего байта своего же запроса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harbinger 10 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба RS485 и RS232 могут подключать к одному UART-у МК, нужно поочерёдно отключать-включать приём передачу на одном из интерфейсов. Когда опрашивается 485-й, запрещён 232-й, и наоборот. Это не всегда нужно. Если заведомо известно, что одновременной передачи со стороны ведомых не будет (например, принципиально различные протоколы обмена), можно TXD пустить в оба канала, а RXD свести по логическому "И". Можно извратиться и по-другому, в случае, когда внешние устройства могут проявлять инициативу, а для одного из них установлен более высокий приоритет. Некоторые МК умеют переключать (remap) линии UART на другие физические порты, позволяя переключиться с одного драйвера на другой по прерыванию от изменения состояния порта (поймали старт-бит). Пробовал такое на STM8L - получается только в случае, если после переключения не нужно менять настройки UART (скорость и т.п.). В общем, время "свистоплясок" с переключением-перенастройкой должно быть пренебрежимо малым по сравнению с длительностью старт-бита. Тут есть ещё нюанс, зависящий от конкретной реализации UART - если старт-бит "ловится" не по уровню, а по спаду, ничего не получится. :( Для небольших расстояний, в пределах одной платы, можно использовать прямо UART с простейшими драйверами с ОК (ОС) на TXD ведомых устройств. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Один датчик наш, питерский, optosense, (RS485) возможна поддержка адресации. 1. Работа с сетевым адресом Предусмотрено присвоение преобразователю сетевого адреса в диапазоне 0 – FF . Это позволяет подключить на одну линию UART до 256 преобразователей. При включении преобразователю по умолчанию присваивается адрес 00. Для просмотра и изменения адреса введены следующие команды: И что-то у меня гадосное чувство ,что нет у него внутри буфера под RS232 или RS485 -это чистый USART/ Ну да , что и подтверждается сайтом. данные с газового датчика со встроенным RS485 интерфейсом Это через доп плату? Второй датчик английский, Dynament, (RS232). Модельку хоть озвучте. Но судя по некоторым из просмотренных, они работают на той же скорости и с тем же форматом кадра И кстати , как далеко буду стоять датчики от Вашей платы. Но честно говоря проблем с адресацией я не вижу, что по USART , что по UART или RS485 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bookd 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Значит Вам нужно соединить два устройства с разными интерфейсами под управлением одного контроллера ADUC. Предложу самый простой вариант. Остальные сложнее в реализации. Добавляете в схему еще один микроконтроллер, ATMega162, у которого на борту аж два UART. Подключаете Ваши датчики к этому микроконтроллеру. На один UART вешаете трансиверы RS232, на другой UART подключаете трансиверы RS485. И подключаете датчики по честным интерфейсам. Соединяете этот микропроцессор с Вашим ADUC по SPI или напрямую через IO порты, если они у Вас никак еще не используются. А RS232 ADUC можно подключить к преобразователю например FT232, который даст в Вашу систему USB интерфейс. В итоге получаете коробочку, которая с одной стороны содержит два датчика с разными интерфейсами, с другой имеет USB интерфейс, который можно подключить к любому ноутбуку. И запитаться кстати тоже от этого USB интерфейса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Белка12 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 (изменено) · Жалоба Это через доп плату? Нет, внутри датчика тоже есть контроллер. Модельку хоть озвучте. Но судя по некоторым из просмотренных, они работают на той же скорости и с тем же форматом кадра Да, любой датчик Dynament, модель не имеет значения. Протокол обмена у всех датчиков практически одинаков. Понимаете, скорость они зашивают такую, какую нужно заказчику. А у нас есть в наличии, датчики от этих двух поставщиков с разными скоростями и разными интерфейсами. Т.е. идем от обратного. И кстати, как далеко буду стоять датчики от Вашей платы. Но честно говоря проблем с адресацией я не вижу, что по USART , что по UART или RS485 Очень близко, в одном корпусе. Ну, Вы не видите проблем с адресацией, а у меня это как раз проблема, бывает. :laughing: На RS232 датчик должен быть один, если адресация не поддержана протоколом датчика. Один датчик (optosense, RS485) поддерживает адресацию, а второй, (Dynament, RS232) не поддерживает. Алгоритм может быть такой.........: Спасибо.:) RS485 и RS232 могут подключать к одному UART-у МК, нужно поочерёдно отключать-включать приём передачу на одном из интерфейсов. Когда опрашивается 485-й, запрещён 232-й, и наоборот. Для RS485 иногда бывает важно как можно скорей освободить шину, так как датчик может сразу же начать отвечать на запрос. Для освобождения шины используется прерывание по завершению передачи последнего байта пакета, или (если мастер принимает сам себя) приём последнего байта своего же запроса. А, может, нужна микросхема некого коммутатора с использованием третьего выхода, управляемого с помощью контроллера, не так ли? Изменено 25 декабря, 2012 пользователем Белка12 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chernenko 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Можно мультиплексор поставить. Делал так когда надо было на один физический USART вешать несколько разделенных физически линий RS-485 + RS-232 Для вашей задачи самое то. Например, CD4052BM (есть и посовременнее). Есть офиц ответ TI что они работают и при питании 3.3 В. Схема рабочая стоит во многих ком. продуктах одной компании многие годы. Именно для задачи переключения одного UART на разные интерфейсы и ветви. Но выбор зависит от задачи. Вам виднее и вам выбирать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vovanse 0 25 декабря, 2012 Опубликовано 25 декабря, 2012 · Жалоба Вы пытаетесь два совершенно разных датчика с разными протоколами и скоростями обмена подключить к МК. Тут только два варианта - либо два UART, либо некий коммутатор. Адресацию Оптосенс поддерживает, но она поможет только в том случае, если на одном UART будет несколько их датчиков. И где у Оптосенса 485-й ? Там, по моему, только 232. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться