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

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Ответить
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Сообщение Demon »

Есть несколько устройств объединеных сетью RS485 с организацией ведущий-ведомые. Как можно автоматически назначить адреса ведомых устройств ? Есть ли у ATMEG заводские номера зашитые в память ? И если есть можно ли их прочитать из программы?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Заводских номеров у атмег нет, есть сигнатура, но одинаковая для одинаковых контроллеров, так что назначать нужно на этапе прошивки МК. Можно сделать так, что изначально у всех будет например 0-й адрес, при соединении нового устройства в сеть ведущий берет незанятый номер и выдает его в сеть, если у устройства 0-й номер, то оно присваивает себе новый и отвечает ведущему. Тогда нужно просто добавлять в сеть устройства по одному и давать ведущему команду на выделение нового адреса. Ну или что-то в этом роде...
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2056
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва

Сообщение Microtech »

Поставьте на устройстве кнопку. При её нажатии, устройство начинает отвечать по фиксированному служебному адресу, и ждать команды присвоения постоянного адреса для работы. Задача ведущего - присвоить этот адрес.
Ещё можно поставить какую-либо чипулину с уникальным номером, например - термометр DS18B20.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Сообщение Demon »

Спасибо за советы. Возникли проблемы с протеусом. При имитации при прямом подключении выводов МК связка ведущи-1 ведомый обмен идет нормально, при ведущий - 2 ведомых команды от ведущего приходят, но ответ от ведомых ведущему не приходят. Причины в принципе понятны: отвечаеющему мешает 2 молчащий ведомый. Если же ставить драйвер RS-485(MAX487) то программа виснет, даже если помещен один ведущий который шлет информацию просто "в воздух", причем по наблюдению зависание происходит в момент когда контроллер переключает драйвер на прием. В чем может быть проблема или как можно сделать сеть RS-232 с несколькими ведомыми (чтобы отладить обмен) ?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

В таких случаях лучше выкладывать проект и прошивку, со слов все косяки не угадаешь.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Сообщение Demon »

В архиве исходники CVAVR + файлы протеуса
Вложения
wake.rar
(307.8 КБ) 191 скачивание
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

В исходник сильно не вглядывался, т.к. в Си не спец, возможно проблема в задержках между приемом-передачей и переключением MAX487. На сколько я понял там стоит задержка в 2мс, возможно ее стоит изменить. Симулятор похоже не зависает, дело в том, что при использовании MAX487 возникает куча ошибок кадров со стороны обоих контроллеров, отображение лога при этом может сильно тормозить программу (например отображение окна SPI отладчика при постоянном обмене по SPI вешает протеус наглухо :facepalm: ). Проблему симуляции можно решить, поставив вместо MAX487 - буфер, например 74125 на цепи TX слейвов, но это не отвечает на вопрос почему с 487 возникают ошибки кадра. Если поставить 2 терминала (в HEX режиме), то видно что после преобразования UART-485-UART в конце вылезает лишний 0, вот с этим и нужно бороться.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2056
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва

Сообщение Microtech »

Грабли могут быть, когда на линии нет активных передатчиков. Приёмники, при этом могут ловить 50 Гц, или постоянный "0", что может вызвать ложные прерывания от UART, вешающие систему. Поставьте на мастере 2 резистора, подтягивающие линию к неактивному состоянию (когда на входах RxD UARTов будет лог.1, в перерывах передачи данных)
P.S. по поводу "Си" ничего не скажу, мне проще вручную перетранслировать этот си на асм, или паскаль (хоть бейсик) а затем только понимать алгоритм :o .
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Сообщение Demon »

Пока попробую поставлю буферы. А как в протеусе поставить терминалы в HEX-режим?
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Microtech писал(а):Грабли могут быть, когда на линии нет активных передатчиков. Приёмники, при этом могут ловить 50 Гц, или постоянный "0", что может вызвать ложные прерывания от UART, вешающие систему. Поставьте на мастере 2 резистора, подтягивающие линию к неактивному состоянию
Да, подтяжка линий это все правильно, но до этих граблей еще надо дойти, тут в симуляторе (где нет никаких наводок) как следует не работает...
Demon писал(а):А как в протеусе поставить терминалы в HEX-режим?
Симуляцию на паузу, на терминале правой кнопкой щелкнуть, там в меню будет такой пункт.
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Сообщение Demon »

Спасибо за совет идея с буферами прошла, сейчас в симуляции 12 ведомых отвечают на запросы ведущего. С MAX487 попробую разобратся попозже на заключительной стадии.
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

У МК51-х у UARTa есть режим с адресацией устройств..
Насколько знаю, у АВР-ок - он тоже есть..

Это когда каждому МК прописывается его адрес на шине, а при передаче именно с этим байтом у конкретного МК возникает прерывание..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Сб янв 20, 2007 20:44:33
Откуда: Из закаулков вашей души

Сообщение Demon »

Да у AVR есть такое, но проблема стоит как автоматически назначить каждому устройству в сети свой уникальный адрес. Wake взят т.к. есть готовые процедуры для МК и .dll-ки для ПК
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Demon писал(а):12 ведомых отвечают на запросы ведущего
13 контроллеров симулируется! Жесть :))) Интересно с какой скоростью... Хотя если аналоговых элементов и индикаторов нет наверно не сильно тормозит.
Ответить

Вернуться в «Умные мысли»