Página 1 de 1

RS485 trancando a operação do programa!

MensagemEnviado: 13 Nov 2008 15:06
por buiz
Olá amigos,

Seguinte, estou na metade do desenvolvimento de um equipamento e me deparei com o seguinte problema:

Tenho alguns menus num display LCD que são alterados por 02 teclas na rotina principal do meu programa, e no TIMER01 tenho uma comunicação RS485 em constante operação.

O problema é que a comunicação esta trancando os menus e dando Bugs na mostragem do display, enquanto não chega dado na porta serial não consigo mudar de menu, assim que chega tudo volta a funcionar.

Ja desabilitei a comunicação e tudo funciona perfeitamente.

Teria alguma solução para isso, se é que alguem entendeu o que esta acontecendo pois é meio dificil de explicar.

Um abraço, Buiz.

MensagemEnviado: 13 Nov 2008 15:25
por Sergio38br
boas, vc esta programando em que linguagem? qual é o periodo de interrupção de teu timer?

{ ]'s
Sergio

MensagemEnviado: 13 Nov 2008 16:22
por RobL
Você está com um problema de distribuição de tarefas.
Alguém está ocupando muito tempo. Esta rotina deve ser dividida a fim de atender as demais.
Procure usar flags (pequenas rotinas )para atender interrupções, e numa rotina principal, já fora da interrupção, verifique esses flags.
Sua comunicação não precisa ficar esperando dados chegar, isto deveria ser feito por interrupção.
Dei alguns palpites, pois não tenho a menor idéia do seu programa.

MensagemEnviado: 14 Nov 2008 07:08
por buiz
Ok, estou programando em C, meu programa se baseia em uma central que recebe informações de 10 pontos diferentes, ou seja 1 mestre e 10 escravos.

Então na realidade são 02 firmwares que estou desenvolvendo, o do mestre e dos escravos.

O mestre chama o escravo e aguarda ele responder, se o escravo não responder ele passa para o proximo.

Vou dar uma analizada nas resposta e ver se acho alguma solução, qualquer coisa eu posto aqui.

Veleu!

MensagemEnviado: 14 Nov 2008 07:40
por Paulo
buiz escreveu:Ok, estou programando em C, meu programa se baseia em uma central que recebe informações de 10 pontos diferentes, ou seja 1 mestre e 10 escravos.

Então na realidade são 02 firmwares que estou desenvolvendo, o do mestre e dos escravos.

O mestre chama o escravo e aguarda ele responder, se o escravo não responder ele passa para o proximo.

Vou dar uma analizada nas resposta e ver se acho alguma solução, qualquer coisa eu posto aqui.

Veleu!


Buiz,

O RobL já disse tudo...O tratamento da sua serial deve ser feito através de interrupção para evitar esse problema que vc está tendo. Com relação ao tmr out de comunicação com os escravos, existe várias maneiras de se resolver isso, uma delas é vc colocar um cont para ser incrementado na sua interrupção de tmr, daí a cada transmissão sua vc zera ele e depois vc fica no seu loop normal, caso vc receba alguma coisa, blz vc desconsidera ele, caso não, vc fica no loop sempre olhando ele, daí quando chegar na sua contagem limite, significa que o escravo não respondeu, daí vc pula para o processo escravo. Como disse, existem diversas maneiras de se fazer isso, essa não é a melhor forma do ponto de vista de desempenho, mas foi só para te dar uma idéia.


Até +...
Paulo D.

MensagemEnviado: 14 Nov 2008 17:27
por buiz
Ok,

Valeu a todos pelas dicas, vou dar uma olhada com mais calma e ver se acho a solução.

Um abraço e um ótimo final de semana a todos!