реклама на сайте
подробности

 
 
> Несколько датчиков и UART, Варианты решений.
Белка12
сообщение Dec 22 2012, 21:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159



Есть микроконтроллер ADUC831. В его состав входит интерфейс UART.

Можно ли по этому интерфейсу принимать данные от нескольких датчиков и каким образом?

Я пробовала опрашивать и принимать данные с газового датчика со встроенным RS485 интерфейсом optosense. Там все работает нормально. Скорость обмена 9600.

Теперь надо в пару к нему подсоединить датчик Dinament, со встроенным RS232 интерфейсом, другой скоростью обмена и другим форматом посылки данных.

Как-то не очень понятно, как их можно опрашивать и принимать данные по одному UART. Надо как-то организовать адресацию, наверное? А разве RS232 поддерживает адресацию? А RS485?

Может, кто-то сталкивался с подобным?

С уважением, Белка12.

Сообщение отредактировал Белка12 - Dec 22 2012, 22:02
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Dec 24 2012, 18:10
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
RS232 - не поддерживает.
Я не хочу вспоминать про 9 бит .
Но хотелось уточнить модели датчиков туда сюда DS почитать


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Белка12
сообщение Dec 24 2012, 18:59
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 29-01-09
Пользователь №: 44 159



Цитата(ILYAUL @ Dec 24 2012, 22:10) *
Я не хочу вспоминать про 9 бит .
Но хотелось уточнить модели датчиков туда сюда DS почитать



Один датчик наш, питерский, optosense, (RS485) возможна поддержка адресации.
http://www.optosense.ru/ru/welcome.html



Второй датчик английский, Dynament, (RS232).

http://www.dynament.com/


Цитата(novchok @ Dec 24 2012, 22:09) *
Другой вариант, если один микроконтроллер обслуживает несколько датчиков, по аналоговой или цифровой линии, а наружу связан с RS485 интерфейсом. Тогда так, как описали выше, получили пакет, определили какой там датчик, выдали обратно информацию с данного датчика.
Короче нужны подробности, как у Вас все это организовано.


Ув. novchok, так я и хочу определиться КАК мне все организовать и каким образом организовать адресацию датчиков.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Dec 24 2012, 22:44
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Белка12 @ Dec 24 2012, 20:59) *
Ув. 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 иногда бывает важно как можно скорей освободить шину, так как датчик может сразу же начать отвечать на запрос. Для освобождения шины используется прерывание по завершению передачи последнего байта пакета, или (если мастер принимает сам себя) приём последнего байта своего же запроса.
Go to the top of the page
 
+Quote Post
Harbinger
сообщение Dec 25 2012, 04:05
Сообщение #5


старший лаборант
******

Группа: Свой
Сообщений: 2 702
Регистрация: 30-09-05
Из: ЮЗЖД
Пользователь №: 9 097



Цитата(_Артём_ @ Dec 25 2012, 00:44) *
RS485 и RS232 могут подключать к одному UART-у МК, нужно поочерёдно отключать-включать приём передачу на одном из интерфейсов. Когда опрашивается 485-й, запрещён 232-й, и наоборот.

Это не всегда нужно. Если заведомо известно, что одновременной передачи со стороны ведомых не будет (например, принципиально различные протоколы обмена), можно TXD пустить в оба канала, а RXD свести по логическому "И".
Можно извратиться и по-другому, в случае, когда внешние устройства могут проявлять инициативу, а для одного из них установлен более высокий приоритет. Некоторые МК умеют переключать (remap) линии UART на другие физические порты, позволяя переключиться с одного драйвера на другой по прерыванию от изменения состояния порта (поймали старт-бит). Пробовал такое на STM8L - получается только в случае, если после переключения не нужно менять настройки UART (скорость и т.п.). В общем, время "свистоплясок" с переключением-перенастройкой должно быть пренебрежимо малым по сравнению с длительностью старт-бита. Тут есть ещё нюанс, зависящий от конкретной реализации UART - если старт-бит "ловится" не по уровню, а по спаду, ничего не получится. sad.gif
Для небольших расстояний, в пределах одной платы, можно использовать прямо UART с простейшими драйверами с ОК (ОС) на TXD ведомых устройств.


--------------------
Китайская комплектация - европейское качество! ;)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Белка12   Несколько датчиков и UART   Dec 22 2012, 21:52
- - _Артём_   Цитата(Белка12 @ Dec 22 2012, 23:52) Можн...   Dec 22 2012, 22:54
|- - Белка12   Цитата(_Артём_ @ Dec 23 2012, 02:54) RS48...   Dec 24 2012, 16:17
|- - Hmm   Белка12 Гм.. Например: Запрос: 2 уникальных байт...   Dec 24 2012, 17:17
|- - novchok   Цитата(Белка12 @ Dec 24 2012, 20:17) А мо...   Dec 24 2012, 18:09
|- - vvs157   Цитата(Белка12 @ Dec 24 2012, 22:59) так ...   Dec 24 2012, 21:08
|- - ILYAUL   Цитата(Белка12 @ Dec 24 2012, 22:59) Один...   Dec 25 2012, 04:14
||- - Белка12   Цитата(ILYAUL @ Dec 25 2012, 08:14) Это ч...   Dec 25 2012, 11:54
|- - bookd   Значит Вам нужно соединить два устройства с разным...   Dec 25 2012, 06:30
- - chernenko   Можно мультиплексор поставить. Делал так когда над...   Dec 25 2012, 12:37
- - vovanse   Вы пытаетесь два совершенно разных датчика с разны...   Dec 25 2012, 12:48
- - ILYAUL   ЦитатаНет, внутри датчика тоже есть контроллер Это...   Dec 25 2012, 14:24
- - Белка12   Вот кусок описания протокола чтения optosense, как...   Dec 25 2012, 14:54
- - ILYAUL   Так на optosense он в общем доступе , а вот на Dyn...   Dec 25 2012, 16:00
- - Белка12   А вот для Динамента.   Dec 25 2012, 18:24
- - ILYAUL   Мысли в слух: Протоколы разные, , оба протокола им...   Dec 25 2012, 20:11
- - pomo_al   Optosens'у крайне не желательно слать что-то, ...   Dec 26 2012, 01:49
|- - Белка12   Цитата(pomo_al @ Dec 26 2012, 05:49) Неск...   Dec 26 2012, 09:21
|- - Белка12   Цитата(pomo_al @ Dec 26 2012, 05:49) Opto...   Jan 23 2015, 22:28
|- - Andrew Su   Цитата(Белка12 @ Jan 24 2015, 00:28) Зада...   Feb 12 2015, 19:36
- - vladec   Кстати есть мультипротокольные драйвера, могущие р...   Dec 26 2012, 06:31


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 08:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016