Supervisão de pino

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Supervisão de pino

Mensagempor Nik » 09 Ago 2007 17:58

Olá pessoal,

Estou com uma dúvida aqui: Num projeto que eu fiz, o nível de um pino deveria descer e depois subir, gerando alguns pulsos. Mas às vezes ocorre que ele desce e não sobe mais, o que causa muitos problemas. É destinado a acionar um servo-motor, e por causa disso o bicho não roda.

Questão: Pensei em supervisionar o pino por ele mesmo, ou seja, toda vez que ele for comandado para mudar de estado, fazer a leitura do pino, e caso não esteja correto, comandar novamente até ele chegar no nível certo. Isso é POSSÍVEL? Quando eu fizer a leitura, ele não vira um input e entra em alta-impedância?


Valeu
Nik
Bit
 
Mensagens: 42
Registrado em: 07 Nov 2006 06:04

Mensagempor brasilma » 09 Ago 2007 19:00

Olá Nik,

Depende da instrução que for utilizada, isto porque as portas dos '51 possuem em sua estrutura, um latch que aciona posteriormente o transistor de saída.

Então algumas instruções trabalham com o conteúdo de saída deste latch e outras com o valor presente no pino.

Isto ocorre pois caso vc tenha um transitor na configuração emissor comum (emissor ligado ao GND) conectado a um pino, e escreva nessa saída "1", e posteriormente tente lê-la, veria um "0", para evitar isso o controlador lê a saída do latch que está acionando o transistor de saída do processador.

Para verificar isto faça um teste simples, escreva um "1" em um pino que esteja com um pull-down externo, e depois tente lê-lo com um mov e na sequencia execute uma operação lógica com ele e compare os resultados.

Abraços,
MArcos.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor Nik » 10 Ago 2007 09:45

Valeu Marcos,

Fiz o teste aqui e realmente funciona, porém vi na descrição do hardware que o teste tem que ser feito com a instrução jnb ou jb, que fazem a leitura do pino, e não do latch.

Para testar, fiz o seguinte:

setb P1.3
jnb P1.3,$-1

e

clr P1.3
jb P1.3,$-1

E tudo rodou legal. Para confirmar se o teste é válido, inverti a condição de teste:

setb P1.3
jb P1.3,$-1

e

clr P1.3
jnb P1.3,$-1

Nesse caso a rotina ficava presa nesse ponto, pois verificava que a condição era contrária ao valor do pino e voltava a testar.


Agora vou fazer uns testes estressantes para confirmar se o problema realmente desapareceu o posto os resultados.


Abraços
Nik
Bit
 
Mensagens: 42
Registrado em: 07 Nov 2006 06:04

Mensagempor Nik » 16 Ago 2007 09:58

Pois é pessoal,

Estou aqui novamente para dar um retorno sobre o problema. Infelizmente as soluções adotadas de nada adiantaram, e o problema persiste, o seja, o pino que deveria ir para nível alto, não vai, mesmo eu tendo criado um loop, após o comando de setar o pino, que lê o valor e retorna ao comando caso esteja com valor errado.

Não entendo como esse problema pode continuar a ocorrer....
Nik
Bit
 
Mensagens: 42
Registrado em: 07 Nov 2006 06:04

Mensagempor brasilma » 16 Ago 2007 10:37

Olá Nik,

Quando a coisa é assim "macabra" o problema pode ser outro.

Faça uma rotina o mais simples possivel e de preferência em assembler para testar (se já não estiver fazendo);

Lembrar que a capacidade de fornecer corrente "1" dos controladores é "miserável" = 60uA (portas 1,2,3) e 800uA (porta 0) , já em sorver "0" 1,6mA (portas 1, 2, 3) e 3,2mA (porta 0).

Abraços,
MArcos.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra


Voltar para 8051

Quem está online

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

x