Страница 1 из 1

Автоматическое назначение адресов в RS485

Добавлено: Пн мар 05, 2012 14:12:36
Demon
Есть несколько устройств объединеных сетью RS485 с организацией ведущий-ведомые. Как можно автоматически назначить адреса ведомых устройств ? Есть ли у ATMEG заводские номера зашитые в память ? И если есть можно ли их прочитать из программы?

Re: Автоматическое назначение адресов в RS485

Добавлено: Пн мар 05, 2012 15:19:42
Engineer_Keen
Заводских номеров у атмег нет, есть сигнатура, но одинаковая для одинаковых контроллеров, так что назначать нужно на этапе прошивки МК. Можно сделать так, что изначально у всех будет например 0-й адрес, при соединении нового устройства в сеть ведущий берет незанятый номер и выдает его в сеть, если у устройства 0-й номер, то оно присваивает себе новый и отвечает ведущему. Тогда нужно просто добавлять в сеть устройства по одному и давать ведущему команду на выделение нового адреса. Ну или что-то в этом роде...

Re: Автоматическое назначение адресов в RS485

Добавлено: Вт мар 06, 2012 15:12:15
Microtech
Поставьте на устройстве кнопку. При её нажатии, устройство начинает отвечать по фиксированному служебному адресу, и ждать команды присвоения постоянного адреса для работы. Задача ведущего - присвоить этот адрес.
Ещё можно поставить какую-либо чипулину с уникальным номером, например - термометр DS18B20.

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 07:37:00
Demon
Спасибо за советы. Возникли проблемы с протеусом. При имитации при прямом подключении выводов МК связка ведущи-1 ведомый обмен идет нормально, при ведущий - 2 ведомых команды от ведущего приходят, но ответ от ведомых ведущему не приходят. Причины в принципе понятны: отвечаеющему мешает 2 молчащий ведомый. Если же ставить драйвер RS-485(MAX487) то программа виснет, даже если помещен один ведущий который шлет информацию просто "в воздух", причем по наблюдению зависание происходит в момент когда контроллер переключает драйвер на прием. В чем может быть проблема или как можно сделать сеть RS-232 с несколькими ведомыми (чтобы отладить обмен) ?

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 08:38:42
Engineer_Keen
В таких случаях лучше выкладывать проект и прошивку, со слов все косяки не угадаешь.

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 09:42:32
Demon
В архиве исходники CVAVR + файлы протеуса

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 11:12:43
Engineer_Keen
В исходник сильно не вглядывался, т.к. в Си не спец, возможно проблема в задержках между приемом-передачей и переключением MAX487. На сколько я понял там стоит задержка в 2мс, возможно ее стоит изменить. Симулятор похоже не зависает, дело в том, что при использовании MAX487 возникает куча ошибок кадров со стороны обоих контроллеров, отображение лога при этом может сильно тормозить программу (например отображение окна SPI отладчика при постоянном обмене по SPI вешает протеус наглухо :facepalm: ). Проблему симуляции можно решить, поставив вместо MAX487 - буфер, например 74125 на цепи TX слейвов, но это не отвечает на вопрос почему с 487 возникают ошибки кадра. Если поставить 2 терминала (в HEX режиме), то видно что после преобразования UART-485-UART в конце вылезает лишний 0, вот с этим и нужно бороться.

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 12:37:55
Microtech
Грабли могут быть, когда на линии нет активных передатчиков. Приёмники, при этом могут ловить 50 Гц, или постоянный "0", что может вызвать ложные прерывания от UART, вешающие систему. Поставьте на мастере 2 резистора, подтягивающие линию к неактивному состоянию (когда на входах RxD UARTов будет лог.1, в перерывах передачи данных)
P.S. по поводу "Си" ничего не скажу, мне проще вручную перетранслировать этот си на асм, или паскаль (хоть бейсик) а затем только понимать алгоритм :o .

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 13:17:14
Demon
Пока попробую поставлю буферы. А как в протеусе поставить терминалы в HEX-режим?

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 14:13:40
Engineer_Keen
Microtech писал(а):Грабли могут быть, когда на линии нет активных передатчиков. Приёмники, при этом могут ловить 50 Гц, или постоянный "0", что может вызвать ложные прерывания от UART, вешающие систему. Поставьте на мастере 2 резистора, подтягивающие линию к неактивному состоянию
Да, подтяжка линий это все правильно, но до этих граблей еще надо дойти, тут в симуляторе (где нет никаких наводок) как следует не работает...
Demon писал(а):А как в протеусе поставить терминалы в HEX-режим?
Симуляцию на паузу, на терминале правой кнопкой щелкнуть, там в меню будет такой пункт.

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 14:29:31
Demon
Спасибо за совет идея с буферами прошла, сейчас в симуляции 12 ведомых отвечают на запросы ведущего. С MAX487 попробую разобратся попозже на заключительной стадии.

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 14:34:43
МитяРа
У МК51-х у UARTa есть режим с адресацией устройств..
Насколько знаю, у АВР-ок - он тоже есть..

Это когда каждому МК прописывается его адрес на шине, а при передаче именно с этим байтом у конкретного МК возникает прерывание..

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 14:58:50
Demon
Да у AVR есть такое, но проблема стоит как автоматически назначить каждому устройству в сети свой уникальный адрес. Wake взят т.к. есть готовые процедуры для МК и .dll-ки для ПК

Re: Автоматическое назначение адресов в RS485

Добавлено: Ср мар 07, 2012 15:01:33
Engineer_Keen
Demon писал(а):12 ведомых отвечают на запросы ведущего
13 контроллеров симулируется! Жесть :))) Интересно с какой скоростью... Хотя если аналоговых элементов и индикаторов нет наверно не сильно тормозит.