Обсуждаем цифровые устройства...
Ответить

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

Сб май 27, 2017 13:18:40

Добрый день!

помогите заставить работать связку МК 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(;;)
}
 

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

Сб май 27, 2017 21:08:06

А почему у Вас дифференциальная пара притянута к питанию и земле резисторами? Резистор должен быть один 120 Ом между А и В

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

Вс май 28, 2017 10:14:59

Эм... я когда собирал информацию по протоколу, наткнулся на вот эту статью
Раздел 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>

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

Вс май 28, 2017 12:08:55

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

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

Вт май 30, 2017 02:24:45

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


по вашей логике можно вообще не парится, а купить у китайцев сразу готовую железку за 10 баксов...
Общие рассуждения про так надо жить и что надо все правильно делать, я и без вас могу на любую тему кому угодно задвинуть. Могу но не буду :tea:

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

Вт май 30, 2017 04:42:34

...
Общие рассуждения про так надо жить и что надо все правильно делать, я и без вас могу на любую тему кому угодно задвинуть. Могу но не буду :tea:

Что-то я не пойму, у кого проблема с неработающим RS-485 - у тебя или у Jack_A?
Он тебе дал конкретный совет - поставь кварц, а ты пальцы гнешь да еще на него же наезжаешь - не тот совет дал, не нравится он тебе.
Его совет правильный, 99% таких проблем как у тебя, связаны с
- несовпадающей скоростью
- отсутствием согласования линии
Ну а ты можешь продолжать стоять в дурацкой позе: все делать неправильно, удивляться что не работает и ждать феечку с волшебной палочкой.

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

Вт май 30, 2017 05:49:23

akori
Думаю, что эта строчка некорректна, т.к. вместо UCSRC идёт обращение к UBRRH и устанавливается огромный делитель.
Код:
UCSRC = 1<<UCSZ0|1<<UCSZ1;

Посмотрите внимательно в DS порядок обращения к регистру UCSRC с помощью бита URSEL
UCSRC = (1<<URSEL)....;

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

Вс мар 12, 2023 19:11:59

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

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

Пн мар 13, 2023 19:12:45

Насколько я видел, контроллеры таких резисторов не содержат; завтра посмотрю на резервном контроллере.

Да, действительно, на контроллере такой подтяжки к питанию нет. Вскрыл свой свисток, посмотрел его - вот на нем действительно подтяжка есть резисторами 2,2К, и при этом терминатор не смонтирован, что хорошо. Завтра попробую подцепить резисторы на ноги MAX485 и посмотреть результат.

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

Вт мар 14, 2023 18:21:49

Завтра попробую подцепить резисторы на ноги MAX485 и посмотреть результат.

Попробовал. Всё заработало, не потребовалось никаких дополнительных манипуляций и матерных заклинаний. Буду теперь знать, что причиной проблем вполне может быть отсутствие подтяжки линии RS485 к питанию.
Ответить