Página 1 de 1

Interrupções

MensagemEnviado: 26 Fev 2007 08:25
por alessandro
Há algum tempo venho observando um problema relacionado a interrupção. É um problema que me incomoda quando aparece, talvez alguém aqui ja teve a mesma experiência e pode me explicar se isto esta certo:

Configuro um interrupção de 16bits
Seleciono a interrupução para iniciar em 65534 e com T1_internal, ou seja não vai gastar muito tempo para ficar ciclando.

Mas o interessante é que quando faço isso, as linhas de comando continadas no while(true) não são executadas, "o display não escreve" a "serial não recebe dados".

Por que acontece isso? Não sobra tempo para as linhas de comando abaixo do while?

Já tive esse problema com CCS e agora estou com o mesmo problema com o C18.



Alessandro

MensagemEnviado: 26 Fev 2007 08:59
por Fábio Pereira
Olá Alessandro,

O comportamento que você está descrevendo é absolutamente normal. O seu timer está gerando uma interrupção a cada duas contagens. Com isso, a CPU não terá tempo de executar o programa principal porque quando ela termina de processar uma interrupção, outra já está pendente.

De fato, você provavelmente esteja perdendo diversas interrupções durante o processamento de cada interrupção.

Qual a razão para você querer que o timer gere interrupções com intervalo tão pequeno ?

Até +

MensagemEnviado: 26 Fev 2007 09:38
por alessandro
Olá Fabio,

Tenho um aplicação na qual efetuo o controle de dois canais de trigger e em um determinado tempo de cada trigger, efetuo a leitura do canal do AD. Como o sinal não é tão estável "biológico" preciso coletar uma quantidade considerável de leituras para efetuar uma média. Após isso é enviado para o computador para ser tratado via LabView. Realizando os testes com a quantidade de leituras + contas realizadas na rotina, o sistema esta levando 4 segundos para se atualizar.

Deixei as leituras do AD e os trigger na interrupção e fora dela a matemática e envio de dados via serial.

Na tentativa de deixar mais rápida a rotina, diminui o contador de timer_1, e ai deu no que deu. As leituras são feitas mas não são enviadas mais para o computador.

Talvez seja um aviso para que passe para um uC mais potente, mas ficamos tentando melhorar o que ja esta funcionando...

Então, se as interrupções forem em cascata, não sobra tempo mais para nada pelo que entendi.

O que acha melhor? Trocar realmente de uC, uso um 16F88 20MHz.

Grato,



Alessandro