TIAGO FELIPE DA CUNHA E CASTRO
01/05/2024 17:17:03
Boa tarde,
Eu estou desenvolvendo um projeto com comunicação modbus, e não estou conseguindo avançar na parte da comunicação com os periféricos.
Eu rodo o programa exemplo das aulas com a UART via USB, usando o mbpoll e o programa roda normalmente. O que acontece que eu adquiri um RS485 click 6, e olhando o esquemático do mesmo ele utiliza os pinos RB0 e RE0 simultaneamente como lógica de nivel alto e baixo para transmissao / recepção respectivamente, o RB0 é utilizado pela biblioteca LCD, entao o que eu fiz foi desativar a biblioteca LCD e rodar o dispositivo, mesmo assim, não fecha a comunicação mbpoll, colocando o analisador de sinais, na UART via USB eu consigo enxergar todos os sinais e estão todos com a lógica de acordo com o visto em aula, porém, quando coloco o click6 não tenho nenhum sinal nem de recepção nos pinos RC6. Tentei trocar o click por um conversor TTL do arduino mas continuo sem sinal nenhum.
Por favor solicito saber o que faço para que o programa rode com um desses conversores para poder avançar com o meu projeto. Abaixo coloco a foto da comunicação com o analisador quando no modo UART-USB para alguma analise, mas entendo que está igual a da aula, com a exceção que utilizo outros pinos
Desde já agradeço
TIAGO FELIPE DA CUNHA E CASTRO
15/05/2024 21:06:39
Oi prof. Fernando,
Obrigado pelas explicações, eu já havia jumpeado os pinos RE e DE para utiliza-los apenas com uma GPIO, mas nao tinha funcionado, notei através do analisador que no meu código o pino responsável pelo controle iniciava em nível logico alto, e não deveria pois para inicio do programa o slave deveria ficar em modo de recepção.
Modifiquei o início do programa usando a função MBReceive e a comunicação passou a funcionar normalmente para recepção e transmissão, como na USB_UART nao precisa dos pinos de controle, nao dava problema.
Apenas uma duvida, porque no meu caso que estou utilizando uma biblioteca da microgenios eu precisei colocar o pino de controle em nivel baixo inicialmente e no que eu vi das suas aulas não era necessário? porque no meu caso o pino de controle iniciava em nivel alto?
att
FERNANDO SIMPLICIO DE SOUSA
15/05/2024 14:42:05
Olá Tiago,
Primeiramente verifique se há como jumpear os pinos DE e RE do seu módulo RS485 para que possa utilizar apenas uma única GPIO do PIC para controle da direção da comunicação. Caso não seja possível, garanta que ambos pinos estejam sendo setados como saída para que possa realizar as ativações em 1 e em 0. Na biblioteca Modbus existe uma folha chamada mb_serial.c. Nela há uma função que define qual é a GPIO de controle do RS485.
void MBTransmit_On_RS485( void )
{
TRISC.TRISC0=0;
LATC.RC0=1;
}
void MBReceive_On_RS485( void )
{
while (TXSTA1.TRMT == 0) ;
TRISC.TRISC0=0;
LATC.RC0=0;
}
Uma escolha é comprar esse conversor TTL <> RS485 da figura abaixo, ele é vendido no mercado livre. Através desse conversor você não precisa se preocupar com o chaveamento dos pinos de direção do RS485.