30.05.2015, 15:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от fsmoke
|
работаю в крупной, очень известной конторе по производству железок
|
в гОВЕНЕ?
|
|
|
|
30.05.2015, 15:28
|
|
Прописка
Регистрация: 06.07.2010
Сообщений: 140
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от jump
|
в гОВЕНЕ?
|
не угадал
|
|
|
|
30.05.2015, 15:39
|
|
Гражданин KAZUS.RU
Регистрация: 17.02.2015
Сообщений: 636
Сказал спасибо: 182
Сказали Спасибо 229 раз(а) в 134 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от fsmoke
|
Я так понял все они одинаковые - только фичами отличаются всякие защиты, дуплекс полудуплекс, питание. Ноги у всех одинаковые.
Тогда следующий вопрос - видел в инете разные схемы подключения у разных вендоров, которые работают с 485. Например у наших девайсов написано, что параллельно на клеммы A B надо сажать какое-то согласующее сопротивление в 620 Ом - для чего это? Может это зависит от длины линии. У других производителей нарисованы сопротивления только с одной стороны - типа терминаторы какие-то. Как правильно и с чем это едят? И, кстати, какая должна быть правильная обвязка вокруг этих микрух.
|
Драйверы все разные, но для тех кто понимает эту разницу.
По поводу терминаторов... Вот некрасиво посылать вас читать статьи по интерфейсу, но если бы вы это сделали самостоятельно то этот вопрос не задавали. А ведь на русском все давным давно расписано. В двух словах терминаторы ставят на окончаниях линий связи. При больших расстояниях 485 не рекомендуется топология звезды.
Насчёт обвязки. В связи со сферой применения обсуждапмого интерфейса основная проблема в жизни выгорание драйверов из-за перенапряжений вызванных молниями. Если все узлы вашей сети будут в пределах жилого помещения и протяженность линии связи будет малой, то можете по поводу защиты не заморачиваться.
|
|
|
|
30.05.2015, 15:46
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,558
Сказал спасибо: 182
Сказали Спасибо 3,155 раз(а) в 2,041 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
если расстояние до 10 метров - нихрена это все не нужно.
все эти терминаторы, растяжки и правильные провода нужны когда помехи вокруг, ддлина линии большая, скорость высокая
посоветую на каждой плате разместить резисторы смещения - две штуки. а запаять их только на одной например. или на каждой но впаять их не 1ком а по 100 ком - это надежнее. я лично всегда так делаю
таким образом если чо - шина не словит доп. помех и постоянно надежно находится в уровне логического ноля
так же везде ставяться терминаторы а запаивается терминатор только в начале и конце. или ставится джампер и включается только в самом конце.
но повторюсь - терминатор нужен при тяжелых условиях. если все рядом и скорость 9600 - оно нах не надо
вот схема = rfs - как раз смещение. на жаргоне - растяжка
вобщем на каждой плате делаешь три резистора как слева на схеме а впаиваешь только rfs две штуки
Последний раз редактировалось индюк; 30.05.2015 в 15:48.
|
|
|
|
30.05.2015, 15:54
|
|
Прописка
Регистрация: 06.07.2010
Сообщений: 140
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от индюк
|
если все рядом и скорость 9600
|
а если все рядом, а скорость высокая ~1мбит например?
|
|
|
|
30.05.2015, 15:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
fsmoke, если так задолбались подскажу. Есть такие штуки как PolyZen и подобные. PolyZen собствено на USB заточены, но идея стоящая.
|
|
|
|
30.05.2015, 15:58
|
|
Гражданин KAZUS.RU
Регистрация: 17.02.2015
Сообщений: 636
Сказал спасибо: 182
Сказали Спасибо 229 раз(а) в 134 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Терминатор часто делается на всех устройствах, но один его конец выводится на клеммы,чтобы при необходимости можно было при помощи перемычки включить его.
|
|
|
|
30.05.2015, 15:58
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,558
Сказал спасибо: 182
Сказали Спасибо 3,155 раз(а) в 2,041 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от fsmoke
|
а если все рядом, а скорость высокая ~1мбит например?
|
ну наверно терминатор пригодится. все равно он на плате уже есть. если плату по правилам сделать всетаки
чо обсуждать то???? епрстэ.......... собери платы по всем правилам а там начинай посылать и смотри на ошибки
не ошибается тот кто ничо не делает
|
|
|
|
03.06.2015, 23:17
|
|
Прописка
Регистрация: 06.07.2010
Сообщений: 140
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Начал таки ковыряться, но пока в протеусе и без прерываний на pic16f690 т.к. их у меня много - и уже столкнулся с какой то ерундой
проглатывается последний символ и стоповый бит
код простейший(пока на коленке - чуть чуть начал бить на файлики)
main.c:
Код:
|
#include ‹xc.h›
#include "rs485.h"
#define _XTAL_FREQ 20000000
//External oscillator 20Mhz
#pragma config FOSC = HS
//WDT disabled
#pragma config WDTE=OFF
//Power-up Timer Enable bit
#pragma config PWRTE=ON
//MCLR pin function is MCLR
#pragma config MCLRE=OFF
// code protect
#pragma config CP=OFF
//data protect
#pragma config CPD=OFF
//Brown-out Reset Selection bits
#pragma config BOREN=ON
//Internal External Switchover bit
#pragma config IESO=OFF
//Fail-Safe Clock Monitor Enabled bit
#pragma config FCMEN=OFF
void main()
{
OSTS = 1;
SCS = 0;
TRISA0 = 1;
//pull ups
nRABPU = 0;
ANSEL = 0;
ANSELH = 0;
init_485();
#if 0
//1000000
BRG16 = 1;
BRGH = 1;
//SPBRGH:SPBRG = 4
SPBRGH = 0;
SPBRG = 4;
#else
//~9600
BRG16 = 0;
BRGH = 0;
//SPBRGH:SPBRG = 32
SPBRGH = 0;
SPBRG = 32;
#endif
if (!RA0)
{
while (1)
{
const uint8_t a[] = {'H','e','l','l','o'};
send_array_485(a, sizeof(a));
__delay_ms(1000);
}
}
else
{
//implement receiver here
}
return;
} |
rs485.h:
Код:
|
#ifndef RS485_H
#define RS485_H
#define RS485_DIR_SW B4
//FIXME temp
typedef unsigned char uint8_t;
void init_485();
void send_byte_485_int(uint8_t b);
void send_array_485(uint8_t const * st, uint8_t len);
#endif /* RS485_H */ |
rs485.c:
Код:
|
#include ‹xc.h›
#include "rs485.h"
#define CAT(x,y) x ## y
#define XCAT(x,y) CAT(x,y)
void init_485()
{
XCAT(TRIS, RS485_DIR_SW) = 0;
SYNC = 0;
SPEN = 1;
CREN = 1;
TXEN = 1;
}
// Writes a character to the serial port
void send_byte_485(uint8_t b)
{
XCAT(R, RS485_DIR_SW) = 1;
send_byte_485_int(b);
while(!TXIF);
XCAT(R, RS485_DIR_SW) = 0;
}
void send_byte_485_int(uint8_t b)
{
// wait for previous transmission
while(!TXIF);
TXREG = b;
}
void send_array_485(uint8_t const * st, uint8_t len)
{
XCAT(R, RS485_DIR_SW) = 1;
while (len--)
send_byte_485_int(*st++);
while(!TXIF);
XCAT(R, RS485_DIR_SW) = 0;
} |
|
|
|
|
03.06.2015, 23:29
|
|
Прописка
Регистрация: 06.07.2010
Сообщений: 140
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
понятно что если вставить задержку,к примеру 100мс, перед выключением RS485_DIR_SW то все ок, но не хотелось бы опираться на какие то магические числа - или все же без этого не обойтись??
Добавлено
Взял, ради прикола, какую то библиотеку от ардуино - посмотрел как там сделано - там задержка 1 мс - поставил у себя 1мс - попрежнему все работает. Кто нибудь объясните мне теоретическую суть этой задержки. И различается ли она для разных микросхем?
Последний раз редактировалось fsmoke; 03.06.2015 в 23:54.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:08.
|
|