Подключение MAX485

Обсуждаем цифровые устройства...
Ответить
Родился
Сообщения: 5
Зарегистрирован: Ср авг 04, 2010 18:30:26

Сообщение akori »

Добрый день!

помогите заставить работать связку МК ATMEGA32A - MAX485 - ПК (свисток)
а то я совсем уже упоролся...
ATMEGA32A 2мГц от внутреннего осциллятора, UART 9600, 8-1-0
драйвер 485 - китай, с Али
свисток RS485-USB

собрано на макетке, сейчас в бесконечном цикле посылается один символ и ловится гипертерминалом
точнее не ловится, даже мусора нет, но примерно каждый пятый вторник, во время полнолуния мусор таки начинает приходить :shock:
на TXD МК сигнал скачет, на выходе с драйвера тоже, как и на свистке...
линия связи 30см, витая пара, без согласования..

блин, мне кажется я уже все перепробовал... :kill: :kill: :kill:

схема
Изображение
код

Код: Выделить всё

#define baudrate 9600L
#define bauddivider (F_CPU/(16*baudrate)-1)
#define HI(x) ((x)>>8)
#define LO(x) ((x)& 0xFF)

void usartInit() {
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600

UBRRL = LO(bauddivider);
UBRRH = HI(bauddivider);

UCSRA = 0;
UCSRB = 1<<RXEN|1<<TXEN|1<<RXCIE;
UCSRC = 1<<UCSZ0|1<<UCSZ1;

USART_TX_CTRL_DDR|=(1<<USART_TX_CTRL_PIN);
USART_TX_CTRL_PORT&=(1<<USART_TX_CTRL_PIN);
}
//управление приемом/передачей
void usartEnableTX(unsigned char state){
	if (state==USART_TX_ON)
		USART_TX_CTRL_PORT|=(1<<USART_TX_CTRL_PIN);
	else 
		if(state==USART_TX_OFF)
			USART_TX_CTRL_PORT&=!(1<<USART_TX_CTRL_PIN);		
}
//ф-я отправки символа
void usartPutc( unsigned char data ) {
	while ( !(UCSRA & (1<<UDRE)) );
	UDR = data; 
}

int main( void ) //Ãëàâíàÿ ôóíêöèÿ
{
	usartInit();
    sei();	
	for(;;) {
	 usartEnableTX(USART_TX_ON);
	 usartPutc("1");
	}// for(;;)
}
 
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

А почему у Вас дифференциальная пара притянута к питанию и земле резисторами? Резистор должен быть один 120 Ом между А и В
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Родился
Сообщения: 5
Зарегистрирован: Ср авг 04, 2010 18:30:26

Сообщение akori »

Эм... я когда собирал информацию по протоколу, наткнулся на вот эту статью
Раздел 4 Защитное смещение
Изображение

а вот согласование не стал делать, ибо линия всего 30см

Добавлено after 11 minutes 14 seconds:
Выбросил я MAX485 и подключил напрямую МК к другому переходнику rs232-usb

та же фигня, но начал писать фигню в гипертерминал, но при скорости приемника 110 и 300 бод
получается, неверна инициализация UART или скорость работы МК?

Проверил фьюзы, вроде по частоте все ок :( :(

Код: Выделить всё

D:\AVR\avrdude>avrdude -p m32 -c usbasp

avrdude: warning: cannot set sck period. please check for usbasp firmware update
.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9502 (probably m32)

avrdude: safemode: Fuses OK (E:FF, H:99, L:E2)

avrdude done.  Thank you.

D:\AVR\avrdude>
Друг Кота
Аватара пользователя
Сообщения: 6337
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Нормальная постановка вопроса: я знаю, как рекомендовано, но так делать не буду. Почему у меня не работает ?
Пытаться осуществлять синхронную передачу с неизвестеой частотой МК +-10%? Оптимист. Мне как-то тоже пришлось сопрягать некварцованный МК (для меня такие штуки как серпом - по Фаберже) , так из 10 устройств заработало одно. Пришлось играться частотами. До сих пор вспоминаю с отвращением.
Кварц стоит центов 10..15 ... Стоимость времени у нас нулевая ( время = деньги ) , а геморр на свою... голову тоже не в счет.
СпойлерМне кажется: "Зачем делать хорошо, если можно абы как - и так сойдет" - она и есть та национальная идея, которую безуспешно пока ищут ваши и наш - правители.
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 5
Зарегистрирован: Ср авг 04, 2010 18:30:26

Сообщение akori »

[uquote="Jack_A",url="/forum/viewtopic.php?p=3115163#p3115163"]Нормальная постановка вопроса: я знаю, как рекомендовано, но так делать не буду. Почему у меня не работает ?
Пытаться осуществлять синхронную передачу с неизвестеой частотой МК +-10%? Оптимист. Мне как-то тоже пришлось сопрягать некварцованный МК (для меня такие штуки как серпом - по Фаберже) , так из 10 устройств заработало одно. Пришлось играться частотами. До сих пор вспоминаю с отвращением.
Кварц стоит центов 10..15 ... Стоимость времени у нас нулевая ( время = деньги ) , а геморр на свою... голову тоже не в счет.
СпойлерМне кажется: "Зачем делать хорошо, если можно абы как - и так сойдет" - она и есть та национальная идея, которую безуспешно пока ищут ваши и наш - правители.
[/uquote]

по вашей логике можно вообще не парится, а купить у китайцев сразу готовую железку за 10 баксов...
Общие рассуждения про так надо жить и что надо все правильно делать, я и без вас могу на любую тему кому угодно задвинуть. Могу но не буду :tea:
Реклама
Сверлит текстолит когтями
Сообщения: 1186
Зарегистрирован: Пт авг 21, 2009 03:22:12

Сообщение bolek »

[uquote="akori",url="/forum/viewtopic.php?p=3116430#p3116430"]...
Общие рассуждения про так надо жить и что надо все правильно делать, я и без вас могу на любую тему кому угодно задвинуть. Могу но не буду :tea:[/uquote]
Что-то я не пойму, у кого проблема с неработающим RS-485 - у тебя или у Jack_A?
Он тебе дал конкретный совет - поставь кварц, а ты пальцы гнешь да еще на него же наезжаешь - не тот совет дал, не нравится он тебе.
Его совет правильный, 99% таких проблем как у тебя, связаны с
- несовпадающей скоростью
- отсутствием согласования линии
Ну а ты можешь продолжать стоять в дурацкой позе: все делать неправильно, удивляться что не работает и ждать феечку с волшебной палочкой.
Реклама
akl
Друг Кота
Сообщения: 4463
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

akori
Думаю, что эта строчка некорректна, т.к. вместо UCSRC идёт обращение к UBRRH и устанавливается огромный делитель.

Код: Выделить всё

UCSRC = 1<<UCSZ0|1<<UCSZ1;
Посмотрите внимательно в DS порядок обращения к регистру UCSRC с помощью бита URSEL
UCSRC = (1<<URSEL)....;
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб ноя 04, 2017 19:21:12

Сообщение slyubez »

Апну-ка я эту тему.
Уже пару месяцев пытаюсь заставить работать систему из семи устройств, соединенных линией через RS485 и питающихся от общего блока питания 12В. Внутри каждого устройства стоят стабилизаторы 7805 и микросхемы MAX485EPA+ и их аналоги. Одно из устройств ведущее и имеет внутри себя неотключаемый терминатор. В идеале ведущее устройство поочередно опрашивает каждое из ведомых, получая от него ответное мяу. Когда к линии подключены первые два устройства - все хорошо, но стоит нагрузить линию остальными, в линии появляется мусор. Изначально монтажники вообще сделали линию алюминиевой витой парой с кучей скруток, с ответвлениями и без должного согласования. Вначале заменил неисправные микросхемы 485, благо что они в панельках. Затем расставил перемычки подключения терминаторов и переключил провода таким образом, чтобы структура линии была корректной, без отводов и с терминаторами. Не помогло... Заменил интерфейсную пару на отдельный неэкранированный медный кабель 1х2х0,5 (витая пара); общая длина порядка 50 метров - тоже не помогло. Питание в порядке. Но выяснилась очень интересная вещь. Беру в пятницу свой ноутбук со свистком USB-RS485, чтобы посмотреть обмен, подключаю в середине линии (питание ноутбука от его собственного аккумулятора), перезапускаю ведущее устройство - и система начинает работать нормально, обнаруживая все устройства. Затем просто вытаскиваю свисток из USB - опять появляется мусор. Поискал схемы таких свистков и обнаружил, что в них есть отдельный терминатор и резисторы подтяжки проводов А и В по питанию. Пробовал терминировать ближайший контроллер, благо это делается джампером - бесполезно. Хочу послезавтра попробовать воткнуть в контроллер подтягивающие резисторы 2,2 кОм на питание. Насколько я видел, контроллеры таких резисторов не содержат; завтра посмотрю на резервном контроллере. Посмотрю, может это что-то даст, и при этом система не сгорит.
PS Забыл. Скорость обмена 9600 бод.
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб ноя 04, 2017 19:21:12

Сообщение slyubez »

Насколько я видел, контроллеры таких резисторов не содержат; завтра посмотрю на резервном контроллере.
Да, действительно, на контроллере такой подтяжки к питанию нет. Вскрыл свой свисток, посмотрел его - вот на нем действительно подтяжка есть резисторами 2,2К, и при этом терминатор не смонтирован, что хорошо. Завтра попробую подцепить резисторы на ноги MAX485 и посмотреть результат.
Открыл глаза
Сообщения: 77
Зарегистрирован: Сб ноя 04, 2017 19:21:12

Сообщение slyubez »

[uquote="slyubez",url="/forum/viewtopic.php?p=4385493#p4385493"]Завтра попробую подцепить резисторы на ноги MAX485 и посмотреть результат.[/uquote]
Попробовал. Всё заработало, не потребовалось никаких дополнительных манипуляций и матерных заклинаний. Буду теперь знать, что причиной проблем вполне может быть отсутствие подтяжки линии RS485 к питанию.
Ответить

Вернуться в «Цифровая техника»