Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 09.07.2021, 18:23  
tsb
Прописка
 
Аватар для tsb
 
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
tsb на пути к лучшему
По умолчанию Re: ADUCM360 и RS485

optical illusion
"Мультипроцессорный режим", по-моему, не является синонимом 9-битного режима UARTа. Множество промышленных контроллеров общаются по шине RS485 с помощью протокола MODBUS в режиме 8 бит. Адресация информационного пакета к конкретному устройству выполняется на уровне протокола.
Реклама:

Последний раз редактировалось mike-y-k; 03.10.2022 в 11:21. Причина: 7.15
tsb вне форума  
Непрочитано 09.07.2021, 18:55  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 287
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию

j-Roger
В этом режиме есть специальный "флаг", когда этот флаг установлен МК ожидает передачу адреса. И когда приходит байт с признаком "адрес" - то происходит прерывание. В обычном режиме прерывание происходит только когда приходит байт, адреса нет совсем. Этот признак адреса передается 9 битом в "посылке". Поэтому и называют 9 битный режим. Передавать легко - можно запрограммировать бит четности, который идет сразу за 8 битом и все будет ОК. А вот как заставить UART делать прерывания при приеме адреса и не делать прерывания когда приходит обычный байт?

tsb
Мне то нужно сделать совместимость с другими МК, например с Силабсом, у которого есть этот мультипроцессорный режим. При чем тут MODBUS?

Последний раз редактировалось mike-y-k; 03.10.2022 в 11:24. Причина: 6.6, 7.15
optical illusion вне форума  
Непрочитано 09.07.2021, 21:34  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,727
Сказал спасибо: 2,418
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: ADUCM360 и RS485

Можно просто игнорировать прерывание,если это не адрес.
Все проще.
baiderin вне форума  
Непрочитано 10.07.2021, 12:26  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 287
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию Re: ADUCM360 и RS485

baiderin
Не привычно как то думать про сотрудников Analog Devices, что они "неумные" и просто так засунули эту операцию в "приватный класс" (ради смеха?). Я в это не верю.
Люди на их форуме задают вопросы как подключить RS485 к этому МК, и им отвечают - читайте доки. Можно было просто сказать - "игнорируйте прерывание". Что проще этого?
Изначально, зачем то вводили режим "9 бит" в работу UART. Могли бы просто "игнорировать" прерывание, если 9 бит "не адрес".
Думаю, это работает, как то по другому.

Последний раз редактировалось mike-y-k; 03.10.2022 в 11:25. Причина: 7.15
optical illusion вне форума  
Непрочитано 10.07.2021, 13:28  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,420
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: ADUCM360 и RS485

optical illusion, откуда вообще этот проц взялся?? зачем он тебе нужен???
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 10.07.2021, 13:40  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,801
Сказал спасибо: 2,913
Сказали Спасибо 3,123 раз(а) в 2,113 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: ADUCM360 и RS485

Сообщение от optical illusion Посмотреть сообщение
Как видим нет 9 бит режима.
КМК, такое (MPCM) есть только в UART семейства MCS-51. В частности - Silabs. И то, "в старых" контроллерах обходились одним прерыванием на весь UART.
Миниатюры:
Нажмите на изображение для увеличения
Название: MCS-51_MPCM.jpg
Просмотров: 0
Размер:	289.4 Кб
ID:	163927  
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 10.07.2021, 13:47  
optical illusion
Прописка
 
Регистрация: 17.08.2013
Сообщений: 287
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
optical illusion на пути к лучшему
По умолчанию Re: ADUCM360 и RS485

индюк
Я отстал от "жизни"? В STM32 стали делать 24 битные АЦП? У них руки из правильного места уже "выросли"?

Последний раз редактировалось mike-y-k; 03.10.2022 в 11:26. Причина: 7.15
optical illusion вне форума  
Непрочитано 10.07.2021, 14:17  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,420
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: ADUCM360 и RS485

внешнюю поставь
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 10.07.2021, 15:53  
j-Roger
Гражданин KAZUS.RU
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 683
Сказал спасибо: 362
Сказали Спасибо 757 раз(а) в 359 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию

Несколько слов по проекту СN0359.
Вот фрагмент схемы подключения RS485, никаких ноу-хау.
Нажмите на изображение для увеличения
Название: ADUCM360.jpg
Просмотров: 0
Размер:	90.9 Кб
ID:	163931

Несколько ключевых моментов.
Проект построен довольно красиво; работа основана на очереди сообщений. Сообщение содержит указатель на функцию-обработчик и список параметров. Пока в очереди есть сообщения, они извлекаются и выполняются их функции-обработчики.

Не прячу портянки кода под спойлер, ибо спойлер не всегда корректно работает.

Файл source\hal\drivers\uart.cpp
Вот фрагмент обработчика прерывания для приёма по UART.
При приеме символа LF производится обработка принятой строки
(в очередь сообщений ставится обработчик rx_line )
PHP код:
...
if ((
pADI_UART-›COMIIR COMIIR_STA_RXBUFFULL) == COMIIR_STA_RXBUFFULL)
{
    if (
p_rx_buf == rx_pingpong[0])
    {
        if (
rx_length[0] ‹ SIZE(rx_pingpong[0]))
        {
            
p_rx_buf[rx_length[0]++] = pADI_UART-›COMRX;
        }
    }
    else
    {
        if (
rx_length[1] ‹ SIZE(rx_pingpong[1]))
        {
            
p_rx_buf[rx_length[1]++] = pADI_UART-›COMRX;
        }
    }

    
// если принят символ конца строки, то требуется ее обработка.
    
if (pADI_UART-›COMRX == '\n')
    {
        if (
p_rx_buf == rx_pingpong[0])
        {
            
p_rx_buf rx_pingpong[1];
            
rx_length[1] = 0;
            
rd_count[1] = 0;
        }
        else
        {
            
p_rx_buf rx_pingpong[0];
            
rx_length[0] = 0;
            
rd_count[0] = 0;
        }

        
app msg;
        
msg.argc 0;
        
// ставим в очередь сообщений сообщение с 
        // функцией-обработчиком "rx_line"
        
msg.fun rx_line// ‹‹ обработчик сообщения
        
ts_post_message(msg);
    }
}
... 


Файл source\applications\uart_exec.cpp
Вот обработчик принятой строки (тот самый rx_line )
Если в принятой строке распознаётся команда, то она выполняется
(в очередь сообщений ставится обработчик распознанной команды, согласно массиву command_table )
PHP код:
...
struct command command_table[] = {{"poll"cmd_poll},
                                  {
"setvolt"cmd_voltage},
                                  {
"setfreq"cmd_frequency},
                                  {
"setk"cmd_cellconstant},
                                  {
"setcof"cmd_coefficient},
                                  {
"setstm"cmd_setuptime},
                                  {
"sethtm"cmd_holdtime}};

int rx_line(int argcchar *argv[])
{
    
char line[128];

    
rewind(stdin);
    
// читаем в буфер строку из входного потока (это UART)
    
fgets(line128stdin);

    
char *p;
    
decltype(flash_file::rs485_addressrs485_addressaddress = -1;

    
flash_file p_flash_file;
    
// позиционируемся на адрес узла в файле конфигурации
    
fseek(p_flash, (int) (&p_flash_file-›rs485_address) - (int) (p_flash_file), SEEK_SET);
    
// читаем адрес узла из конфигурационного файла в переменную
    
fread(&rs485_addresssizeof(flash_file::rs485_address), 1p_flash);

    
// позиционируемся на первую лексему во входной строке
    
strtok(line", \t\r\n");

    
// интерпретируем первую лексему во входной строке как адрес узла (вероятно, это диктуется протоколом обмена)
    
sscanf(p"%i", &address);

    
// если адрес во входной строке совпадает с адресом из файла конфигурации, 
    // то это пакет "для нас", обработаем его
    
if (address == rs485_address)
    {
        
strtok(nullptr", \t\r\n");

        for (
int i 0‹ SIZE(command_table); ++i)
        {
            if (!
strcmp(pcommand_table[i].cmd))
            {
                
app msg;
                
msg.fun command_table[i].fun// ‹‹ обработчик сообщения
                
msg.argc 1;
                
msg.argv = new char*[1];
                
msg.argv[0] = new char[strlen(command_table[i].cmd) + 1];
                
strcpy(msg.argv[0], command_table[i].cmd);

                for (
strtok(nullptr", \t\r\n"); != nullptrstrtok(nullptr", \t\r\n"))
                {
                    
char **old_argv;
                    
old_argv msg.argv;

                    
msg.argv = new char*[msg.argc 1];

                    for (
int j 0‹ msg.argc; ++j)
                    {
                        
msg.argv[j] = old_argv[j];
                    }

                    
msg.argv[msg.argc] = new char[strlen(p) + 1];

                    
strcpy(msg.argv[msg.argc], p);

                    
delete[] old_argv;
                    ++
msg.argc;
                }

                
// ставим в очередь сообщений сообщение с
                // функцией-обработчиком, указанным для
                // принятой команды (массив "command_table" выше )
                
post_message(msg);

                break;
            }
        }
    }
}

... 

P. S.
Тут не пахнет никакими 9-битами, нужно курить формат посылок в доках и разбираться с этим.
На беглый взгляд: каждый принимаемый информационный пакет должен начинаться с адреса узла в кодировке ASCII. Тупо принимаем все пакеты. Если адрес "наш", обрабатываем команду; если нет - игнорируем.

Ну а все классы-наследники CDialog нужны лишь для интерактивного энкодерно-"менюшного" конфигурирования с последующим
сохранением настроек в файле конфигурации.

Это C++, ардуины вроде тут ни при чём.

Всё, ушёл пить пиво

Сообщение от optical illusion Посмотреть сообщение
На форуме ADI люди спрашивали - их куда то послали "почитать".
optical illusion, вот тут есть неплохое курево ( на случай, если Вы ещё не пробовали ).

Краткое резюме ))

Сообщение от optical illusion Посмотреть сообщение
Подскажите, кто ни будь приделывал RS485 к ADUCM360?
В частности, это сделано фирмой Аналоговые девицы в упомянутом Вами проекте.
Было интересно и познавательно ознакомиться с проектом.

Сообщение от optical illusion Посмотреть сообщение
Ну он, как оказалось, странно заточен под Ардуино
С++. Ардуино - это аппаратная платформа, язык программирования - это язык программирования.
Никакой связи между платформой и ЯП нет.

Сообщение от optical illusion Посмотреть сообщение
И судя по всему, в том примере нет исходников той части где производится обработка прерывания во время работы UART с RS485. Или я не нашел.
Сообщение от optical illusion Посмотреть сообщение
Где бы посмотреть как работает железо UART ADUCM360 в режиме RS485?
См. посты #21 и #22 темы и ( если, конечно, Вам нужно ) изучайте файлы проекта и доки. В доках и исходниках всё есть!

Сообщение от optical illusion Посмотреть сообщение
то место которое меня интересует находится в закрытом классе.
Эти классы Вам (пока) не нужны, разве что для иллюстрации принципов ООП в действии. Там не приватный класс, а приватный метод класса. Означает (по умыслу разработчика), что класс сам знает, как работать со своими внутренними данными, а для пользователя класса предоставлен интерфейс, вот им и нужно пользоваться. Инкапсуляция-с . Классы ‹bla_bla_bla›Dialog используются в проекте лишь для настройки параметров данного экземпляра устройства.

Вопрос: а что Вам конкретно нужно по теме?
Без конкретики получится 9-битный сферический конь в вакууме и 388 страниц темы ни о чём

Последний раз редактировалось mike-y-k; 03.10.2022 в 11:29. Причина: 6.6
j-Roger вне форума  
Непрочитано 10.07.2021, 22:51  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,862
Сказал спасибо: 2,532
Сказали Спасибо 11,773 раз(а) в 5,897 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: ADUCM360 и RS485

Сообщение от j-Roger Посмотреть сообщение
С++. Ардуино - это аппаратная платформа, язык программирования - это язык программирования.
Никакой связи между платформой и ЯП нет.
Есть еще подход с соответствующей прослойкой. Этот подход не предполагает разбирательств "а шо там в нутре и как оно работает". Главное в подходе - "вот тут пни, а вот тут ткни".
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проброс rs485 по TCP/IP leontix Автоматика и аппаратура связи 33 28.08.2019 22:50
PROSTAR PR6000 по RS485 volk_perm Производственное оборудование 14 09.01.2017 18:18
Собрать преобразователь 4-20ма / RS485 Дератизатор Микроконтроллеры, АЦП, память и т.д 13 03.09.2012 08:36
RS485 stri Микроконтроллеры, АЦП, память и т.д 4 06.08.2007 10:36
[Решено] c АЦП через rs485 t0wer Измерительное оборудование 2 05.11.2004 11:40


Часовой пояс GMT +4, время: 21:09.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot