|
|
  |
Три RS-485 на LPC-1768, Может есть примеры? |
|
|
|
Nov 7 2013, 15:10
|
Знающий
   
Группа: Свой
Сообщений: 693
Регистрация: 19-11-04
Пользователь №: 1 177

|
QUOTE (jcxz @ Nov 7 2013, 07:04)  По-моему вы выдумываете проблемы на ровном месте... Никаких проблем для RS-485 со всеми UART-и в LPC нет. Единственное неудобство, как вы уже заметили - это необходимость обнаруживать появление бита 6 в LSR после опустошения FIFO. Так поэтому и был вопрос насчет совета по выбору минимально проверенной в работе реализации из того развала что гуглится.  Как обычно, неохота заниматься изобретением велосипеда. QUOTE Кроме как поллингом я думаю это вряд-ли как-то удобно сделать. Ну и что? Ну будет маленькая задержка на переключение, но на той стороне корректно написанное ПО для работы с RS-485 всегда должно вставлять задержку при переключении RX->TX. Есть сомнения в "корректности" ПО на другой стороне. По части устройств (датчиков) с которыми придется работать уже и производителя нет физически, даже жаловаться некому, если что. QUOTE Какая у вас тактовая частота и загрузка CPU? 80 MHz, загрузка невысокая в среднем, но периодически более приоритетная задача в RTOS блокирует процессор на 20-50 мсек полностью (прерывания при этом большую часть времени разрешены, но ими нельзя злоупотреблять особо). QUOTE (toweroff @ Nov 7 2013, 17:20) Непонятна необходимость в 3х интерфейсах 485, ведь это моноканал фактически, или таковы тех условия? Сами устройства могут жить на виртуально одной паре? Нет, не могут. Адская смесь старья с несовместимыми протоколами и с несовпадающими скоростями, которые не получится поменять.
|
|
|
|
|
Nov 7 2013, 15:50
|
Знающий
   
Группа: Свой
Сообщений: 693
Регистрация: 19-11-04
Пользователь №: 1 177

|
QUOTE (toweroff @ Nov 7 2013, 19:23)  посмотрите схемотехнику этого хаба спокойно до 230кбод можно сделать для простого UART без всяких пинодрыгов (ну, если LPC мастер, конечно) LPC не везде мастер, в том то и дело. По одному из типов датчиков он должен только "прослушивать" обмен фирменной панели индикации с датчиками, и подхватывать данные, которые идут по запросу панели. И на запросы по некоторым адресам "подсовывать" данные с датчиков другого типа, имитируя совместимые с панелью. Выкинуть панель и опрашивать самостоятельно нельзя. Так что вариантов не морочиться с разработкой и использовать коммерчески доступное оборудование похоже нет. А хотелось...  Изделие по сути даже не мелкосерийное а "несколькоштучное".
|
|
|
|
|
Nov 7 2013, 23:51
|
Знающий
   
Группа: Свой
Сообщений: 693
Регистрация: 19-11-04
Пользователь №: 1 177

|
QUOTE (toweroff @ Nov 7 2013, 20:05)  не увидел препятствий ну так сделайте ту линию "мастером" Hm... Мастером чего? Три шины, с разными протоколами... На одной устройство должно быть слейвом и подслушивать обмен плюс подсовывать переформатированные данные с датчиков на второй шине (где оно мастер и должно само опрашивать слейвов). Датчики на второй шине не совместимы по протоколу с оригинальными, которым не удалось найти полноценную замену, и пришлось ставить то что функционально и по габаритам подходит. Производителя оригинальных датчиков в природе уже нет. На eBay за 2 года не пробегали ни разу, мониторится постоянно. Плюс третья шина на которой еще один зоопарк в MODBUS RTU. И все это должно окучиваться и передаваться оператору на комп по Ethernet (дальше не моя епархия).
|
|
|
|
|
Nov 8 2013, 02:31
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Golikov A. @ Nov 8 2013, 03:33)  хотя я думаю легче отключить FIFO на приемнике - передатчике и пусть АРМ все он-лайн разрулит, или он еще что-то делать будет? Причём тут FIFO? Чем FIFO мешает? К тому же автор написал, что есть интервалы с высокой загрузкой прикладной задачей, в которые нежелательно много дрыгаться (к тому же под ОС). Проблема у автора не в FIFO, а в том, что в LPC нет прерывания по установке бита 6 LSR (завершении передачи последнего бита). Это существенный недостаток UART-ов 16550. Сам постоянно плююсь от этого. Цитата(Velund @ Nov 7 2013, 21:10)  Есть сомнения в "корректности" ПО на другой стороне. По части устройств (датчиков) с которыми придется работать уже и производителя нет физически, даже жаловаться некому, если что. 80 MHz, загрузка невысокая в среднем, но периодически более приоритетная задача в RTOS блокирует процессор на 20-50 мсек полностью (прерывания при этом большую часть времени разрешены, но ими нельзя злоупотреблять особо). Вижу 2 варианта: 1. Классически: по получению прерывания опустошения буфера (одного из UART), разрешаем прерывания таймера и в нём мониторим биты TEMT LSR. Если вы не уверены в корректности ПО на той стороне и в необходимых задержках RX->TX на той стороне, придётся конечно увеличить частоту этого прерывания до максимума (хоть до максимальной бодовой скорости) и оптимально писать ISR (может на асме). Сильно это не загрузит процессор, так как разрешаться это прерывание будет по THRE одного из UART, а запрещаться - при TEMT==1 для всех разрешённых UART. А это всего лишь длительность одного байта на текущей скорости (ну конечно могут быть наложения по времени от неск. UART). Так как характер времён высокой загрузки у вас порядка десятков мсек, то такой ISR никак не помешает. 2. Завести линию TX каждого UART на отдельное прерывание GPIO, разрешать его по THRE, запрещать по TEMT своего UART. В остальном - подобно п.1.
|
|
|
|
|
Nov 8 2013, 08:30
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Velund @ Nov 6 2013, 22:23)  Встала задача - реализовать три интерфейса RS-485 на плате расширения к изделию сделанному на LPC1768. Пины всех трех UART (кроме того самого единственного UART1 который аппаратно держит RS-485) и несколько свободных GPIO выведены на разъем расширения. Скорости - скорее всего выше 19200 не будет но хотелось бы потенциально держать до 115200. Предлагаю следующий проверенный вариант: 1. Шина приводится в активное предопределенное состояние на одном из концов резисторами путем "раскорячки": между A и + питания - 330 Ом, между B и землей - 330 ом, между A и B - тоже 330 ом. 2. Вход DI полудуплексного RS-485 чипа садится на землю. 3. Вход DE через инвертор подключается к TX микроконтроллера. 4. Вход RE тоже на землю; во время собственной передачи с шины будет приходить эхо, которое можно обрабатывать программно на предмет совпадения того, что послали и приняли - возможность оценить ошибки на шине - или просто игнорировать.
Сообщение отредактировал KnightIgor - Nov 8 2013, 10:01
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|