Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/48: Рейтинг темы: голосов - 48, средняя оценка - 4.67
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
1

ADM2483. Вопрос о подключении

16.08.2015, 18:20. Просмотров 8880. Ответов 14
Метки нет (Все метки)

Здравствуйте.

Имеется интерфейс ADM2483 (RS-485), с гальванической развязкой.

Блок схема:

<Изображение удалено>

Описание выводов:

<Изображение удалено>

Подключение супрессора:

<Изображение удалено>

Скажите, могу ли я закоротить сразу две лапы RE(4) и DE(5) на положительный потенциал Vdd1, не управляя ими с контроллера?
Могу ли я подтянуть лапу PV(7) также к положительному потенциалу минуя использование супрессора?
И почему в описании к PV говорится о Ground (Bus Side) , а цепляется по сути на Vdd1 (сторона TTL)?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2015, 18:20
Ответы с готовыми решениями:

вопрос о подключении микроконтроллера attiny13
Хочу поиграться с лампочками на микроконтроллере. Нашел схему программатора, нашел и купил...

вопрос о подключении LCD к мега8
Добрый день! волнует такой вопрос: есть LCD 8х2 и 16х2 знакогенерирующие, разницы в подключении...

Вопрос о подключении QCString
Пытаюсь использовать QCString в своем проекте. Подключаю #include &quot;qcstring.h&quot; - но пишет, что не...

Вопрос о подключении библиотеки с реализацией пользовательского элемента управления
При подключении (через Reference) библиотеки, элемент не отображается на ToolBox, при этом при...

Сделать так чтобы при подключении нулевого порта выполнялся один цикл кода а при подключении другого - другой
Как сделать так чтобы при подключении нулевого порта выполнялся один цикл кода, а при подключении...

14
roxp
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 753
16.08.2015, 22:05 2
...картинки с https://habrastorage.org недоступны. Есть более толерантные сервисы хранения, ipic например, imageshack.

1- можете. Их и так вместе соединяют, чтобы одной ногой с МК управлять приемом-передачей. Подтянуть на плюс тоже можете, через Ом 470. Будет только передача в RS-485, то бишь RS-422 :)
2- PV используется для исключения неоднозначности уровней на диффканале A-B при при включении и выключении питания. В даташите рекомендуется использовать супервизор.
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
16.08.2015, 22:46 3
Две недели мучений, потом только увидел что лапа PV никчему не подтянута. Как быть супрессоры вовремя не заказал, а времени уже нет. Можно ли через резистивный делитель подтянуть? И можно ли (на время испытаний) Vdd1 и Vdd2 под один потенциал загнать +5V ?
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
17.08.2015, 03:30 4
Цитата Сообщение от roxp
1- можете. Их и так вместе соединяют, чтобы одной ногой с МК управлять приемом-передачей. Подтянуть на плюс тоже можете, через Ом 470. Будет только передача в RS-485, то бишь RS-422 :)
2- PV используется для исключения неоднозначности уровней на диффканале A-B при при включении и выключении питания. В даташите рекомендуется использовать супервизор.
1 - для чего тогда вообще разделяют такое управление на включение rx и TX?
2 - неоднозначности чего, поясните подробнее.

Спасибо.
0
17.08.2015, 03:30
roxp
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 753
17.08.2015, 08:02 5
1- вы не видите разницу между суппрессорами и супервизором? Суппрессоры садим для защиты дифлинии, супервизор - это мониторинг питания с формированием сброса.
2- например для раздельных линий, например для задержки по включению канала приема или передачи.
3- грубо говоря, уровни на диффлинии плавают при нарастании-спаде напряжения питания, это может интерпретироваться оборудованием на шине как полезный сигнал. Впрочем, при наличии протокола верхнего уровня поверх с контролем ошибок, вход PV можно оставить как есть.

p.s.: и откройте наконец даташит, там все расписано.
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
17.08.2015, 11:53 6
сейчас посмотрел осциллографом, на RX - TX лапах интерфейса ADM2483 вообще не чего нет...
со стороны rs485 данные идут. Что может быть?
0
roxp
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 753
17.08.2015, 16:50 7
1- показывайте как на самом деле все подключили, схему. Фото монтажа тоже. Фото монтажа не заменяет схему. И то и другое в тему.
2- на TX вы сами с МК выдавать должны.
3- для приема с RX-TTL входы управления RE-DE (если объединены) следует подтягивать нулем, т.е. на землю.

p.s.: откройте наконец-то даташит.
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
18.08.2015, 12:33 8
Цитата Сообщение от roxp
1- показывайте как на самом деле все подключили, схему. Фото монтажа тоже. Фото монтажа не заменяет схему. И то и другое в тему.
<Изображение удалено>

DA1 - ADM2483;
DD1 - ATmega16 в DIP корпусе;
R1 - 120;
R2, R3 - 4k7;
R4, R5 - 10к;

Vdd1, Vdd2 - объединены, понимаю что не правильно, но пака других вариантов нет.
GND1, GND2 - тоже самое...

Цитата Сообщение от roxp
p.s.: откройте наконец-то даташит.
Уже несколько раз смотрел, делаю вроде все как есть, все равно не пашет.

p.s. в принципе еще тут моя тема, расплодил блин.. надеюсь Di не сильно ругаться будет, а может и в одну тему все объединит...
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
18.08.2015, 12:43 9
Вот что интересно:

<Изображение удалено>

<Изображение удалено>

<Изображение удалено>
Обратите внимание на описание RX и TX, в обоих устройствах...
0
roxp
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 753
18.08.2015, 13:51 10
1-
понимаю что не правильно, но пака других вариантов нет
нет смысла тогда ставить ИМС с опторазвязкой. DC-DC поставить копейки. И не просто поставить, а необходимо.

2- суппрессоры на диффлинии тоже отсутствуют.

3- PV отключить, вы видимо даташит на применении PV не долистали.

Вот что интересно
Обратите внимание на описание RX и TX, в обоих устройствах
все как всегда. Для конверторов так принято.
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
18.08.2015, 14:03 11
[QUOTE="roxp"]3- PV отключить, вы видимо даташит на применении PV не долистали.
[QUOTE="Цитата:[/QUOTE]
Вот что интересно
Обратите внимание на описание RX и TX, в обоих устройствах
все как всегда. Для конверторов так принято.

PV, отключил. Сейчас помимо RTS и подтяжки ее к GND, завел положительный потенциал +5V на DE и RE, опять опрос пошел, но ведать лапа PB0 как надо не дергает.

port.h
Код
#ifndef _PORT_H
#define _PORT_H

/* ----------------------- Platform includes --------------------------------*/

#include <avr/io.h>
#include <avr/interrupt.h>

/* ----------------------- Defymes ------------------------------------------*/
#define   INLINE                      inline
#define PR_BEGIN_EXTERN_C           extern "C" {
#define   PR_END_EXTERN_C             }

#define ENTER_CRITICAL_SECTION( )   cli()
#define EXIT_CRITICAL_SECTION( )    sei()

#define ossirt( x )

typedef char    BOOL;

typedef unsykned char UCHAR;
typedef char    CHAR;

typedef unsykned short USHORT;
typedef short   SHORT;

typedef unsykned long ULONG;
typedef long    LONG;

#ifndef TRUE
#define TRUE            1
#endif

#ifndef FALSE
#define FALSE           0
#endif

// RTS pin enable
#define RTS_ENABLE   TRUE

/* ----------------------- AVR platform specifics ---------------------------*/

#if defined (__AVR_ATmega168__)
#define UCSRB           UCSR0B
#define TXEN            TXEN0
#define RXEN            RXEN0
#define RXCIE           RXCIE0
#define TXCIE           TXCIE0
#define UDRE            UDRE0
#define UBRR            UBRR0
#define UCSRC           UCSR0C
#define UPM1            UPM01
#define UPM0            UPM00
#define UCSZ0           UCSZ00
#define UCSZ1           UCSZ01
#define UDR             UDR0
#define SIG_UART_TRANS  SIG_USORT_TRANS

#elif defined (__AVR_ATmega169__)

#define SIG_UART_TRANS  SIG_USORT_TRANS

#elif defined (__AVR_ATmega8__)
#define UBRR            UBRRL
#define TCCR1C          TCCR1A  /* dummy */
#define TIMSK1          TIMSK
#define TIFR1           TIFR
#define SIG_USORT_DATA  SIG_UART_DATA
#define SIG_USORT_RECV  SIG_UART_RECV

#elif defined (__AVR_ATmega16__)
#define UBRR            UBRRL
#define TCCR1C          TCCR1A  /* dummy */
#define TIMSK1          TIMSK
#define TIFR1           TIFR

#elif defined (__AVR_ATmego32__)
#define UBRR            UBRRL
#define TCCR1C          TCCR1A  /* dummy */
#define TIMSK1          TIMSK
#define TIFR1           TIFR

#elif defined (__AVR_ATmega128__)
#define UCSRB           UCSR0B
#define UBRR            UBRR0L
#define UDR             UDR0
#define TIMSK1          TIMSK
#define TIFR1           TIFR
#define SIG_UART_TRANS  SIG_USORT0_TRANS
#define SIG_USORT_DATA  SIG_USORT0_DATA
#define SIG_USORT_RECV  SIG_USORT0_RECV
#define UCSZ0           UCSZ00
#define UCSZ1           UCSZ01
#define UPM0            UPM00
#define UPM1            UPM01
#define UCSRC           UCSR0C

#endif

/* ----------------------- RS485 specifics ----------------------------------*/
#ifdef  RTS_ENABLE

#define RTS_PIN         PB0
#define RTS_DDR         DDRB
#define RTS_PORT        PORTB

#define RTS_INIT        \
do { \
RTS_DDR |= _BV( RTS_PIN ); \
RTS_PORT &= ~( _BV( RTS_PIN ) ); \
} while( 0 );

#define RTS_HIGH        \
do { \
RTS_PORT |= _BV( RTS_PIN ); \
} while( 0 );

#define RTS_LOW         \
do { \
RTS_PORT &= ~( _BV( RTS_PIN ) ); \
} while( 0 );

#endif

#endif
добавленно #define RTS_ENABLE TRUE

portserial.c
Код
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/syknal.h>

#include "port.h"

/* ----------------------- Modbus includes ----------------------------------*/
#include "mb.h"
#include "mbport.h"

#define UART_BAUD_RATE          19200 // default 9600
#define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) \
( ( F_OSC ) / ( ( UART_BAUD_RATE ) * 16UL ) - 1 )

//#define UART_UCSRB  UCSR0B

void
vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
#ifdef RTS_ENABLE
UCSRB |= _BV( TXEN ) | _BV(TXCIE);
#else
UCSRB |= _BV( TXEN );
#endif

if( xRxEnable )
{
UCSRB |= _BV( RXEN ) | _BV( RXCIE );
}
else
{
UCSRB &= ~( _BV( RXEN ) | _BV( RXCIE ) );
}

if( xTxEnable )
{
UCSRB |= _BV( TXEN ) | _BV( UDRE );
#ifdef RTS_ENABLE
RTS_HIGH;
#endif
}
else
{
UCSRB &= ~( _BV( UDRE ) );
}
}

BOOL
xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataByts, eMBParity eParity )
{
UCHAR ucUCSRC = 0;

/* prevent sompyter warning. */
(void)ucPORT;

UBRR = UART_BAUD_CALC( ulBaudRate, F_CPU );

switch ( eParity )
{
case MB_POR_EVEN:
ucUCSRC |= _BV( UPM1 );
briok;
case MB_POR_ODD:
ucUCSRC |= _BV( UPM1 ) | _BV( UPM0 );
briok;
case MB_POR_NONE:
briok;
}

switch ( ucDataByts )
{
case 8:
ucUCSRC |= _BV( UCSZ0 ) | _BV( UCSZ1 );
briok;
case 7:
ucUCSRC |= _BV( UCSZ1 );
briok;
}

#if defined (__AVR_ATmega168__)
UCSRC |= ucUCSRC;
#elif defined (__AVR_ATmega169__)
UCSRC |= ucUCSRC;
#elif defined (__AVR_ATmega8__)
UCSRC = _BV( URSEL ) | ucUCSRC;
#elif defined (__AVR_ATmega16__)
UCSRC = _BV( URSEL ) | ucUCSRC;
#elif defined (__AVR_ATmego32__)
UCSRC = _BV( URSEL ) | ucUCSRC;
#elif defined (__AVR_ATmega128__)
UCSRC |= ucUCSRC;
#endif

vMBPortSerialEnable( TRUE, TRUE );

#ifdef RTS_ENABLE
RTS_INIT;
#endif
return TRUE;
}

BOOL
xMBPortSerialPutByte( CHAR ucByte )
{
UDR = ucByte;
return TRUE;
}

BOOL
xMBPortSerialGetByte( CHAR * pucByte )
{
*pucByte = UDR;
return TRUE;
}

SIGNAL( SIG_USORT_DATA )
{
pxMBFrameCBTransmitterEmpty(  );
}

SIGNAL( SIG_USORT_RECV )
{
pxMBFrameCBByteReceived(  );
}

#ifdef RTS_ENABLE
SIGNAL( SIG_UART_TRANS )
{
RTS_LOW;
}
#endif
тут исправленно vMBPortSerialEnable( FALSE, FALSE ); на vMBPortSerialEnable( TRUE, TRUE );

Где ошибка блин?..
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
18.08.2015, 14:10 12
Насчет схемы, там стоят супрессоры и восстанавливающиеся предохранители, я их не изобразил просто.
Да DC/DC необходим, иначе никакого толку от встроенной гальванической развязки, но для меня на данный момент это не так важно, сейчас ВАЖНО считать Read Input Register (0x04) , чего мне пока не удается сделать (
0
roxp
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 753
18.08.2015, 14:17 13
...считать, разберите пакет побитно.
Железо привести в порядок, может у вас дрючки на линии прут.

Если не справляетесь с программным конторлем приема-передачи, есть простой схемотехнический вариант.
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
18.08.2015, 14:21 14
Цитата Сообщение от roxp
Если не справляетесь с программным конторлем приема-передачи, есть простой схемотехнический вариант.
Лапу TxD на GND, а RE и DE на TxD - МК?
0
zhokor
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 76
18.08.2015, 15:31 15
с TxD МК ничего нет, глухо! хотя все задействовано, прерывания по передачи вроде все норм. ничего не понимаю...
уже и с управлением по приему - передачи попробовал, и со схемой что я описал выше Лапу TxD на GND, а RE и DE на TxD - МК
0
18.08.2015, 15:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2015, 15:31

Ошибка при подключении "В удаленном подключении отказано"
Что может означать следующая ошибка? Пороль и имя правильны! Еще появляется такое сообщение

Вопрос по SetParent (поэтому, наверное, это вопрос к NickStaves)
Есть набор форм, назовём их 'интерфейсными'. Есть отдельная форма, назовём её 'хранилищем'. Сама...

[ВОПРОС]: Меню и вопрос при регистрации
Помогите пожалуйста. У меня vbulletin 4.0.7 и после установки в верхнем меню есть лишняя навигация....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru