Espelhar serial.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Espelhar serial.

Mensagempor baltazar » 21 Jan 2008 16:34

Olá senhores!

Estou com o seguinte problema aqui:

Tenho um equipamento controlado por 3 microcontroladores que se comunicam serialmente, além de outra interface serial com o computador, coisa do tipo:

PC <=> A <=> B <=> C

Acontece que na tentativa de conseguir o melhor desempenho possível em cada parte do equipamento, praticamente cada canal serial opera com uma velocidade diferente, e isso nunca foi problema, até que se fez necessária a comunicação direta do "PC" com o dispositivo "C"...

A alternativa mais fácil que vejo é alterar as taxas de transmissão(em tempo de execução) para a menor delas, fazendo com que os dispositivos "A" e "B" apenas repassem o que receberem. Terminado o processo os canais seriais voltam a operar em suas velocidades normais. Algum problema em relação a isso?

Porém tive uma outra idéia maluca aqui que nunca vi em lugar nenhum e imagino que nem seja possível, mas vamos lá!

A idéia consiste em "espelhar" os pinos TX e RX dos dispositivos "A" e "B", por exemplo:

O pino RX1 de "A"(TX do PC) seria espelhado no pino TX2 do próprio "A"(RX de "B") e assim sucessivamente até que o byte enviado pelo PC chegue ao dispositivo "C" e vice-versa.

Assim eu "eliminaria" os canais seriais de "A" e "B".

Doideira né?! Eu sei...rsss

O problema é que isso toma tempo, tornando impossível o sincronismo da comunicação serial, mas minha pergunta é:

Esse processo não seria possível com clocks muito altos e taxas de transferência muito baixas? Só a título de curiosidade mesmo...

Abraços!
baltazar
Bit
 
Mensagens: 42
Registrado em: 10 Nov 2006 18:47

Mensagempor chipselect » 21 Jan 2008 20:50

deve ter inúmeras soluções...

uma delas é utilizar controle de fluxo (RTS/CTS ou Xon/Xoff)

numa situação dessas com controle de fluxo, o PC mandaria dados pro A, o A mandaria pro B, mas supondo que o canal entre o B e o A seja mais lento, o A "setaria" o controle de fluxo entre ele e o PC (que está afobado pra socar bytes na serial), inibindo o envio até que o canal entre o A e o B ficasse livre...

se o que eu entendi do seu hw estiver correto (o A tem uma serial pro PC e uma serial pro B, o B iden pro A e pro C), não haveria mudança de hw, só de sw se usar xon/xoff.

obs: se for possível utilizar pequenos buffers de dados, isso iria otimizar muito a comunicação serial, desde que o pic tenha recursos para isso.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 22 Jan 2008 09:16

A solução acima é a mais indicada.

Mas, se seu HW não previu esses sinais, uma possibilidade seria ( dependendo do Handshake do seu protocolo ) adotar um tempo entre bytes transmitidos decrescentes do PC até o último periférico. Por exemplo, 5ms pro PC, 2ms pro A, 1ms pro B e assim por diante.

Lembrando; Interrupção por RX é uma boa prática.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor LeandroPIC » 22 Jan 2008 11:15

o melhor a fazer é uma rede rs485,onde o PC é o MESTRE, ou se todos estiverem na mesma placa vc faz um conversor RS232 para I2C e aplica I2C sendo o MESTRE o PC.

É bom vc usar um protocolo que trabalhe em barramento, ai se precisar vc converter para outro padrão.
Avatar do usuário
LeandroPIC
Byte
 
Mensagens: 163
Registrado em: 06 Jul 2007 12:19


Voltar para PIC

Quem está online

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

cron

x