Transceiver RS-485

Componentes, Dispositivos, Equipamentos, etc...

Moderadores: 51, guest2003, Renie

Transceiver RS-485

Mensagempor jeff » 26 Fev 2009 13:20

Boa Tarde pessoal,
estou precisando usar um transceiver RS485 de 3.3V para interfacear com um ARM, nunca usei RS485, mas acabei escolhendo o SN65HVD10 da TI, por acaso tem alguem do forum que usa ele? Pergunto pq nao sei como interfacear ele com o ARM, olhei o datasheet mas nao tem nenhum circuito de exemplo.
Se alguem puder me dar uma ajuda, agradeço muito.
Abraços,
Jeff
jeff
Byte
 
Mensagens: 389
Registrado em: 20 Out 2006 10:14
Localização: Uberlândia/MG

Mensagempor xultz » 26 Fev 2009 14:18

Já usei exatamente este cara com LPC2106. É muito simprão, basta ligar o TX no TX, o RX no RX, e interligue os pins RE e DE e liga numa GPIO. Quando você quiser transmitir, coloca a GPIO em nível alto, e manda bala, quando terminar, coloca em nível baixo que ele fica em estado de recepção. Obviamente, RS485 não permite full duplex, um tem que transmitir por vez.
Se não ficou claro, pergunta aí que explico melhor.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: Transceiver RS-485

Mensagempor polesapart » 26 Fev 2009 14:34

jeff escreveu:Boa Tarde pessoal,
estou precisando usar um transceiver RS485 de 3.3V para interfacear com um ARM, nunca usei RS485, mas acabei escolhendo o SN65HVD10 da TI, por acaso tem alguem do forum que usa ele? Pergunto pq nao sei como interfacear ele com o ARM, olhei o datasheet mas nao tem nenhum circuito de exemplo.
Se alguem puder me dar uma ajuda, agradeço muito.
Abraços,
Jeff


Jeff,

O R você liga no RX da uart, o D no TX. Os pinos RE e DE você liga juntos e a um pino qualquer do ARM com função GPIO. Pode ser interessante colocar um pull-down em torno de uns 10k.

Ai funciona assim: Voce define nivel lógico 0 neste pino usando ele como saída (ou deixa ele em tristate, se tiver o pull-down), e recebe os dados da 485 normalmente. Quando voce quiser transmitir, terá que colocar um nivel alto no pino e aguardar a saída estabilizar (uns 200ns deve estar bom). Aí você envia os bytes normalmente, com cuidado pra não causar um overrun na FIFO da uart. Quando você enviar todos os bytes, você aguarda a uart encerrar a transmissão (geralmente aguarda por um flag de transmit buffer empty) e tira o nível lógico alto do pino, o que vai te permitir ler da porta novamente.

Tem como separar o RE e DE de modo que você receba o eco do que for transmitido pela 485 mas isto na prática não serve pra muita coisa, pois não te garante que os demais drivers na rede receberam os dados.
Avatar do usuário
polesapart
Byte
 
Mensagens: 477
Registrado em: 19 Nov 2007 12:56
Localização: Curitiba

Mensagempor xultz » 26 Fev 2009 17:08

200ns? De onde você tirou este valor? :P
Ler o que transmitiu é interessante para saber se teve colisão, mas isso só é necessário se o protocolo possibilitar a ocorrência de colisão, caso contrário é desnecessário mesmo.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor polesapart » 26 Fev 2009 17:27

xultz escreveu:200ns? De onde você tirou este valor? :P


Zoiei no scope uma rampa de uns 80ns que ocorria quando comutava o enable do bicho, e "arredondei" o valor pra cima hahaha. Mas isto foi com outro transceiver.

Lembro que num firmware que vc me passou tinha algo parecido mas não lembro o valor, talvez este transceiver precise de mais ou menos, sei eu. Naquele firmware ainda uso o mesmo valor e ignoro qual seja :D

xultz escreveu:Ler o que transmitiu é interessante para saber se teve colisão, mas isso só é necessário se o protocolo possibilitar a ocorrência de colisão, caso contrário é desnecessário mesmo.


Quem dera 485 tivesse uma parte elétrica mais elaborada, tipo um CAN :P

Um amigo me descreveu o seguinte cenário: com muitos dispositivos (leia-se muitos resistores na rede, já que cada transceiver tem uma resistência interna considerável) e um cabo longo, quando você inverte a polaridade próximo a uma ponta do barramento e lê o eco pelo mesmo transceiver, pode ter a impressão que o bit foi enviado corretamente, porém se alguém faz a mesma coisa lá na outra ponta do barramento, pode enxergar a inversão feita lá, juntamente com os dispositivos próximos. Ele me disse que o resultado é que alguns dispositivos catavam corretamente ou um ou outro, enquanto que outros acusavam framing error ou outra coisa qualquer.

Eu nunca testei isto empiricamente, mas devido a esta possibilidade ainda não tive vontade de implementar detecção de colisão no 485, mesmo num caso em que isto me pareceu interessante (o que fiz foi arbitrar prioridade para dois mestres, eles "negociam" qual deles vai ser o mestre de barramento, pois na verdade eles entravam em operação em momentos diferentes).

Espero não precisar ter mestres simultâneos tão cedo :P
Avatar do usuário
polesapart
Byte
 
Mensagens: 477
Registrado em: 19 Nov 2007 12:56
Localização: Curitiba

Mensagempor helton » 26 Fev 2009 19:23

csma/cd numa rede 485 ?...

acho que mestre escravo ainda mais garantido...

Mas eu lembro de ter visto algo parecido em alguma apostila de 80C51....
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC

Mensagempor jeff » 02 Mar 2009 15:49

Muito obrigado pessoal,
Abraços
jeff
Byte
 
Mensagens: 389
Registrado em: 20 Out 2006 10:14
Localização: Uberlândia/MG


Voltar para Componentes\Equipamentos Eletrônicos

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x