Página 1 de 1

Programa Morrendo !!! esta é boa !!!

MensagemEnviado: 09 Out 2007 23:28
por marcospaf
fala ai pessoal , tenho um super problema , talvez até ajude a outras pessoas.

bom vamos lá.

Eu ja programo pic a bastante tempo , porem notei que em determinadas aplicações o PIC TRAVA MESMO , mesmo tendo o wdt ele não volta, fica travado.

Eu só verifiquei este fenômeno quando uso comunicação , ou seja numa rs485 por exemplo.

Hoje mesmo eu fiz um ensaio , vamos la :

eu possuo um pic 16f628a , com 4 entradas , uma saida .

esta saída é o controle envia da 485 , ou seja quando o pino está em nivel 0 esta recebendo e quando esta em nivel 1 esta enviando.

todas as entradas estão com optoacopladores .

o que eu fiz , eu gerei uma condição de entrada que não acontece normalmente , praticamente impossivel . fiquei gerando pulsos numa destas entradas . Toda vez que gero um pulso eu gero uma transmissão!!!

comecei a gerar pulsos muitos rapidos e teve uma hora que o pic travou mesmo , não reiniciava por watchdog.

existe algo para isso?? bom ja escutei em falar em preencher toda a memoria de programa com goto$ porem não sei se funciona , estou aberto a sugestões !!!

abração

MensagemEnviado: 10 Out 2007 07:58
por guest2003
Ola,

Existem varios porens nas suas colocacoes...

Quando voce diz que o PIC "travou" voce esta querendo dizer que ele parou de comunicar certo ? (pois pela descricao do seu circuito esta eh a unica forma de verificar isso) de uma lida na parte da UART do datasheet... pois se houver erro de frame / overrun / etc a serial "congela" e so volta a vida apos ser reiniciada... neste caso seu WDT nao vai atuar, pois tudo esta normal, apenas a serial "congelou"

Sugestao, implemente um LED piscando numa saida qquer, e faca o mesmo teste, e veja se quando o PIC trava o LED tambem para de funcionar...

outra coisa que as vezes passa desapercebido pelo pessoal... o simple fato de "usar" o WDT nao quer dizer que ele vai funcionar... onde o CLRWDT vai ser colocado deve ser bem pensado, caso contrario o programa pode travar e o WDT nao resetar...

eh isso...

MensagemEnviado: 10 Out 2007 08:04
por ze
passei por algo assim tbém. travava mesmo. nem por wdog recuperava (=seu). Mas era só qdo ligava. Acho que tinha esquecido de habilitar BOR e PWRTEN.

fiz assim:
__CONFIG(PROTECT & INTIO & PWRTEN & WDTEN & BOREN & MCLRDIS);

verifique principalmente seu MCRDIS. Se MCRENable, confira circuito de reset.
(Isso foi para o PIC12F629, 16f628 tem algo semelhante)

MensagemEnviado: 10 Out 2007 12:57
por marcospaf
guest2003 escreveu:Ola,

Existem varios porens nas suas colocacoes...

Quando voce diz que o PIC "travou" voce esta querendo dizer que ele parou de comunicar certo ? (pois pela descricao do seu circuito esta eh a unica forma de verificar isso) de uma lida na parte da UART do datasheet... pois se houver erro de frame / overrun / etc a serial "congela" e so volta a vida apos ser reiniciada... neste caso seu WDT nao vai atuar, pois tudo esta normal, apenas a serial "congelou"

Sugestao, implemente um LED piscando numa saida qquer, e faca o mesmo teste, e veja se quando o PIC trava o LED tambem para de funcionar...

outra coisa que as vezes passa desapercebido pelo pessoal... o simple fato de "usar" o WDT nao quer dizer que ele vai funcionar... onde o CLRWDT vai ser colocado deve ser bem pensado, caso contrario o programa pode travar e o WDT nao resetar...

eh isso...


fala ai cara bom veja só este pic apenas transmite , nunca recebe então creio eu que não existe a possibilidade de acontecer erro por comunicação.

o wdt é colocado em lugar correto sem problema nenhum , ele realmente morre na comunicação e volta apos ser resetado.

agora eu não sabia que se houver um erro de frame ele trava , isso nunca aconteceu comigo , com erro de frame meus programas ignoram mas nunca travaram.

O que eu sei é que é relacionado a comunicação , e que trava. ele para de enviar dados pela usart. impressionante agora posso ver se ele continua operando , isso é facil vou verificar !!!

MensagemEnviado: 10 Out 2007 12:59
por marcospaf
lellis escreveu:passei por algo assim tbém. travava mesmo. nem por wdog recuperava (=seu). Mas era só qdo ligava. Acho que tinha esquecido de habilitar BOR e PWRTEN.

fiz assim:
__CONFIG(PROTECT & INTIO & PWRTEN & WDTEN & BOREN & MCLRDIS);

verifique principalmente seu MCRDIS. Se MCRENable, confira circuito de reset.
(Isso foi para o PIC12F629, 16f628 tem algo semelhante)


fala ai cara , é eu nem to progrando em C to em baixo nivel mesmo assembly mesmo assim acontece , não sei porque.

eu só habilito o pwrten mas nunca habilitei o bor, vou experimentar, mas valeu pela dica eu te aviso se funcionar !!! valeu cara !!!

MensagemEnviado: 10 Out 2007 15:10
por marcospaf
gostaria de acrescentar o seguinte.

no config eu estou com o power up habilitado e o bor desabilitado , e master clear tb desabilidado.

agora uma pergunta será que mesmo o master clear estando desabilitado eu devo fazer algum tipo de proteçÃo neste pino??? eu acredito que não mas aceito sugestões.

abraços a todos

MensagemEnviado: 10 Out 2007 16:59
por ze
nunca deixe pino voando. principalmente se for entrada. se não usar, terra nele.

MensagemEnviado: 20 Out 2007 11:06
por Nik
Eu tive muitos problemas com pinos ligados diretamente ao vcc ou gnd.
Acontece que o uC entrava em latch-up, ou seja, os dois transistores internos ligados do pino para o vcc e gnd entravam em condução, e praticamente ocorria um curto na fonte.
Só consegui descobrir que era isso porque o 78L05 que alimentava o pic começava a esquentar muito. Ele aparentemente travava e nem o WDT conseguia destravar. Só desligando e religando a fonte.

O problema foi resolvido colocando resistores de 4K7 a 10k em TODOS os pinos do PIC.