Перейти к содержанию
    

9 ATMег на одной шине

предистория: я новичок, работаю с МК ~2 месяца, и не все еще попробовал и испытал.

стоит задача обмена данными между контроллерами по шине RS-485, т.е. нужно использовать UART на МК. Какова должна быть концепция обмена? правила? Как сделать односторонний обмен написано в книге, а как чтобы был 1 главный(например) МК, который мог и посылать в определенный удаленный МК байты, и принимать тоже? и чтобы никто друг другу не мешал? :05:

Изменено пользователем Andrеys

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 главный(например) МК, который мог и посылать в определенный удаленный МК байты, и принимать тоже? и чтобы никто друг другу не мешал? :05:

Посмотрите wake , например.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите wake , например.

 

ИМХО, да... С разработки протокола... Можно и что-нибудь проприетарное... С опросом, либо с гарантированными тайм-слотами и т.д.... Может быть следует немного литературу почитать по протоколам... Заодно и кругозор увеличите... Ну а если срочно - то wake годится...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если не охото заморачиватся с протоколом или если необходимо опрашивать какие либо устройства работающие по собственному протоколу, то можно применить мультиплексор и демультиплексор. Хотя в данном случае я бы посоветовал сделать выбор устройства именно по протоколу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил делать с опросом, главный МК выдает байт-адрес, затем байт-data.

Приняли все, а укого адрес совпал - работает с принятым байтом-data.

Этот байт в себе содержит либо указания к работе ус-ва, либо вопрос "что передать?",

на что ус-во всегда отвечает, в ответе либо "ничего не надо" либо "вам data!", и всем хорошо)

 

Передавать от ус-ва А к ус-ву Б получлось, но вот чтоб после этого Б вернуло что-то А такого еще не было :help:

В схеме, с которой работаю, для обеспечения связи стоят ADM1485, они превращают уровни атмеги в уровни RS-485, передача возможно только в одном направлении в одно и тоже время,

т.е. в ус-вах постоянно нужно переключать эти ADM то на прием, то на передачу, так вот я переключаю, но не работает что-то совсем, может переключение происходит слишком медленно??? и нужно выдерживать какое-то время?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил делать с опросом, главный МК выдает байт-адрес, затем байт-data.

Приняли все, а укого адрес совпал - работает с принятым байтом-data.

Этот байт в себе содержит либо указания к работе ус-ва, либо вопрос "что передать?",

на что ус-во всегда отвечает, в ответе либо "ничего не надо" либо "вам data!", и всем хорошо)

 

Передавать от ус-ва А к ус-ву Б получлось, но вот чтоб после этого Б вернуло что-то А такого еще не было :help:

В схеме, с которой работаю, для обеспечения связи стоят ADM1485, они превращают уровни атмеги в уровни RS-485, передача возможно только в одном направлении в одно и тоже время,

т.е. в ус-вах постоянно нужно переключать эти ADM то на прием, то на передачу, так вот я переключаю, но не работает что-то совсем, может переключение происходит слишком медленно??? и нужно выдерживать какое-то время?

У вас одномастерная архитектура.

Соответственно в режиме простоя мастер должен находится в режиме передачи, а слейвы в режиме приема.

Мастер передал пакет и переключился в режим приема. Вот сдесь первый нюанс: вы уверены в том что вы переключили мастер в режим приема после отправки всего пакета? (собственно это относится и к слайвам)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, мастер после отправки переключен на прием, подан "0" на ADM, что значит встать на прием, бит RXEN в "1", TXEN в "0", смотрю осциллографом, на ногу PD2/RXD конттроллера приходит сигнал, но в прерывание по приему заходить никто не собирается.. ставил там для проверки флажок. очень странно...

а слайв после приема отлично работает, переключается на передачу и шлет (в данный момент байт за байтом, это для отладки) число, которое я вижу на ноге контроллера..

 

Причина была найдена! Спасибо за совет и советы, думаю, дальше я сам.

А дело, как всегда, было в одной строчке, я на что только не грешил, оказалось в главном ус-ве (мастере) не было _SEI();, в прерывания мы поэтому не ходили, день ушел на перепроверку, но все равно УРА! :laugh:

Изменено пользователем Andrеys

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Позвольте разбавить тему немного ... упоминался здесь WAKE ... интересно узнать сколько места занимает его реализация в контроллере?

Пробовал прицепить его к Tiny (своя реализация ... исходники на страничке протокола не компилил - юзаю CV)... получается, что только протоколом и заниматься ей -- маловато памяти (для кода) остается :-(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AndryG

По ссылке на протокол wake, которая была дана выше есть иходники на Си для AVR. Посмотрите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не использовал никогда компилятора того (кажется там ИАР) ... вот и прошу общественность, если не трудно, поделится знаниями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

появилась какая-то празитная вещь :) , природу которой я не знаю, 2 устройства в любой момент времени могут обмениваться информацией(все также по RS-485 через ADMы1485), но раз из ~20 приходит информация некорректно, мусор какой-то, то все единицы, то число 2 в любой степени :mellow: :dry:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

появилась какая-то празитная вещь :) , природу которой я не знаю, 2 устройства в любой момент времени могут обмениваться информацией(все также по RS-485 через ADMы1485), но раз из ~20 приходит информация некорректно, мусор какой-то, то все единицы, то число 2 в любой степени :mellow: :dry:

А расскажите про задержки от момента внезапно появившегося желания передать :

разворот драйвера RS485 на передачу => начало передачи => передача => окончание передачи => разворот драйвера на прием.

Как оно работает то? Принимает ли приемник, когда передатчик передает? Передает ли передатчик, когда приемник принимает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А расскажите про задержки от момента внезапно появившегося желания передать :

разворот драйвера RS485 на передачу => начало передачи => передача => окончание передачи => разворот драйвера на прием.

Как оно работает то? Принимает ли приемник, когда передатчик передает? Передает ли передатчик, когда приемник принимает?

Про задержки написано в спецификации на драйвер. По задумке RS485 - шина полудуплексная, то есть данные могут передаваться ТОЛЬКО В ОДНОМ НАПРАВЛЕНИИ, причём направление выбирается подтягиванием ног драйвера nRE и DE, если их обьеденить - то получим переключатель приём/передача

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А расскажите про задержки от момента внезапно появившегося желания передать :

разворот драйвера RS485 на передачу => начало передачи => передача => окончание передачи => разворот драйвера на прием.

Как оно работает то? Принимает ли приемник, когда передатчик передает? Передает ли передатчик, когда приемник принимает?

 

Да нет, алгоритм мой рабочий! опыта-то мало, откуда ж первопроходцу знать что оба ус-ва одновременно на приеме стоять не должны и будет болтанка??(для отладки ставил на примем их) подсказал человек - запаял по резистору к линии, на землю и на питание по 10К и все дела

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу использования резисторной растяжки линии есть разные мнения, но мне представляется правильным, что-бы все работало и без нее.

Для этого нужно обеспечить перед началом передачи пакета активное состояние передатчика на время не менее 1-го байта, что-бы приемник, при необходимости, завершил прием "мусорного" байта, а на уровне протокола обеспечить отфильтровывание "мусора" используя признаки начала/конца пакета и контрольные суммы.

Дело в том, что когда линия растянута 10 кОм, то ее помехоустойчивость значительно ниже, чем в случае работы мощного драйвера. Т.е. в условиях внешних помех все равно будет "мусор" на входе и с ним придется бороться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...