Не работает сеть rs 485 на avr

Уважаемые дамы и господа. Помогите с проблемой.

Суть проблемы в следующем: Имеется набор идентичных, управляемых AtMiko 8515 блоков (внутренний генератор 4мГц). В каждом блоке по несколько логических устройств (индикатор, клавиатура, ШИМ и тд). Пытаюсь соединить по сети RS 485 несколько блоков.

Аппаратная часть: в качестве преобразователя - max485. Подключаю как обычно RxD к RO (с подтяжкой или без через резистор 10к к 5В), TxD к выводу DI, RE и DE объединяем и подключаем к PD2 AtMiko 8515. Выводы A всех max485 объединяем и подтягиваем к +5В через резистор 680-2,2к (на макетной плате), выводы B всех max485 объединяем и подтягиваем к GND через резистор 680-2,2к, соответственно объединяем GND всех max485. Сами преобразователи max485 пока на макетной плате и были возможности для экспериментов и соответственно линия передачи не превышает 10см.

Программная часть: Назначил один блок ведущим (mostir), остальные ведомыми (slave) для исключения коллизий.Один ведомый настроен на ряд адресов логических блоков, входящих в состав одного ведомого.Один адрес может идентифицировать либо чтение в какой либо логический блок, либо запись. Использую мультипроцессорный режим USORT совместно со своим протоколом. Суть протокола в следующем:

-Запись данных ведущим в один из блоков ведомого:

I)со стороны ведущего:адрес устройства(8бит + 1)//ожидание конца передачи//данные(8 или 16 бит в зависимости от логического устройства в блоке).

II)со стороны ведомого:ожидание адреса//сброс мультипроцессорного режима//ожидание данных

- Чтение данных ведущим одного из блока ведомого:

I)со стороны ведущего: адрес устройства

II)со стороны ведомого: ожидание адреса//отправка данных.

Протокол работает верно. Пока с его помощью соединяю одного ведущего с одной платой ведомого. Если соединяю USORT напрямую RxD к TxD и наоборот процедуры чтения данных с логических блоков и записи происходят в полном объеме (верная реакция на события и верная индикация ЖК дисплея). Теперь если подключаю USORT через max 485 процедура записи идет в полном объеме (передавал сначала константы для сравнения), а вот процедура чтения оканчивается после первой транзакции(проверял убрав остальной код чтения) и ведущий сбрасывается сторожевым таймером не получив ответа. Такая же картина и при попытке чтения 16 бит данных. Есть ли какие нюансы при работе с max 485 поделитесь?

Код mostir и slave относительно обмена прилагаю.

Надеюсь не сильно утомил повествованием.

Если есть какие-либо мысли пишите. Всем заранее спасибо.

[11.71 Кб]

[11.22 Кб]