Ir ao conteúdo
  • Cadastre-se
Marcio Relvas

Pic reiniciando ao tocar no pino

Recommended Posts

Eu sou novo em pic e estou fazendo um circuito para a empresa onde trabalho já que ainda usam temporizadores analogicos, com a programação não tenho problema nenhum simulei no proteus e tudo ok, o problema é que quando eu toco com uma chave de fenda por exemplo em qualquer pino de entrada do borne KRE o micro reinicia, e agora estou com medo de apresentar esse circuito e depois dar problemas de interferencia tipo de reles ou motores, enfim alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Marcio Relvas,

Como norma, nunca deixe pinos de um microprocessador em estado de alta impedância, isto é, em aberto.

Sempre use resistores para ligar ao positivo ou ao terra.

Uma dica é sempre configurar os pinos sem uso como se fossem saída.

Capriche na filtragem de ruído, usando capacitores adequados.

E principalmente tome muito cuidado com ruidos induzidos por grandes variações de corrente próximo à sua placa ou aos fios de alimentação.

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Marcio Relvas,

Como norma, nunca deixe pinos de um microprocessador em estado de alta impedância, isto é, em aberto.

Sempre use resistores para ligar ao positivo ou ao terra.

Uma dica é sempre configurar os pinos sem uso como se fossem saída.

Capriche na filtragem de ruído, usando capacitores adequados.

E principalmente tome muito cuidado com ruidos induzidos por grandes variações de corrente próximo à sua placa ou aos fios de alimentação.

Paulo

Configurar como saida??? não seria como entrada e liga direto ao GND, eu configuro como entrada e ligo direto no GND!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta, eu percebi que essa instabilidade é maior no pino do MCLR que eu configurei como IO e coloquei um botão, e as vezes quando eu ligo a alimentação essa entrada é acionada sozinha, alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigocirilo,

Eu prefiro como saída, pois posso deixar em aberto, e elimino qualquer possibilidade de algum ruído causar alguma interrupção doida, e me facilita o layout da placa.

Pode fazer como entrada e ligar ao terra também, mas sempre complica um pouco o layout.

@Marcio Relvas,

Esse caso acontece muito. Poste o esquema do que está ligado nesse pino MCLR.

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta, eu percebi que essa instabilidade é maior no pino do MCLR que eu configurei como IO e coloquei um botão, e as vezes quando eu ligo a alimentação essa entrada é acionada sozinha, alguma sugestão?

você usou resistores de pull-down ou pull-up ????

 

@rodrigocirilo,

Eu prefiro como saída, pois posso deixar em aberto, e elimino qualquer possibilidade de algum ruído causar alguma interrupção doida, e me facilita o layout da placa.

Pode fazer como entrada e ligar ao terra também, mas sempre complica um pouco o layout.

Quer dizer que posso configurar como saida e deixar em aberto??

 

Mas ainda tenho duvidas sobre deixar sem configurar e deixar em aberto também....se causará mesmo algum tipo de ruido!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigocirilo,

Deixar sem configurar pode te dar dores de cabeça enormes... Nem pense nisso. Se for para algo simples, de uso caseiro, tudo bem, não existem grandes riscos. Mas profissionalmente,monde se algo der errado existem danos financeiros, ou ainda pior, pessoas podem se machucar, temos sempre de minimizar qualquer chance de algo dar errado.

Deixar em aberto, só se estiver configurado como saîda !

voce pode inadvertidamente configurar uma porta toda como entrada , mesmo que queira usar apenas 1 pino, e imagina que em algum exato momento que voce esteja habilitando uma interrupção de mudança de nível justamente um pino em aberto pega um ruído e gera uma interrupção, e o seu programa pode estar feito esperando interrupção apenas em um determinado pino, vai pensar que foi ele, e vai fazer tudo errado !

Nunca sabemos o funcionamento interno do compilador.... Se voce programar apenas em Assembler, a chance de dar algo errado diminui bastante, mas com linguagens de alto nível nunca sabemos o que esperar.

Claro que a decisão final sempre é sua, o risco também, e a responsabilidade também kkkkk, quer mesmo correr riscos ???????

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigocirilo,

Deixar sem configurar pode te dar dores de cabeça enormes... Nem pense nisso. Se for para algo simples, de uso caseiro, tudo bem, não existem grandes riscos. Mas profissionalmente,monde se algo der errado existem danos financeiros, ou ainda pior, pessoas podem se machucar, temos sempre de minimizar qualquer chance de algo dar errado.

Deixar em aberto, só se estiver configurado como saîda !

voce pode inadvertidamente configurar uma porta toda como entrada , mesmo que queira usar apenas 1 pino, e imagina que em algum exato momento que voce esteja habilitando uma interrupção de mudança de nível justamente um pino em aberto pega um ruído e gera uma interrupção, e o seu programa pode estar feito esperando interrupção apenas em um determinado pino, vai pensar que foi ele, e vai fazer tudo errado !

Nunca sabemos o funcionamento interno do compilador.... Se voce programar apenas em Assembler, a chance de dar algo errado diminui bastante, mas com linguagens de alto nível nunca sabemos o que esperar.

Claro que a decisão final sempre é sua, o risco também, e a responsabilidade também kkkkk, quer mesmo correr riscos ???????

Paulo

Não Paulo eu entendi, o que eu faço é configurar como entrada e aterrar ao GND, Pelo que você disse há duas maneiras de fazer, uma é essa que eu faço (dificulta o layout da PCI) a outra é Configurar como saida e deixar o pino flutuando (sem conexão nenhuma no circuito) certo??

 

eu sempre configuro hehe, ou você acha que vou moscar fii...kkkkkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigocirilo,

 

kkkkk gostou dessa né fio rsrsrsr

 

Isso mesmo, eu prefiro fazer como saída e deixar em aberto. Se um dia tiver de fazer alguma gambiarra prá corrigir algo, não vou ter de ficar cortando trilha, isolar pino, nada desse tipo, basta soldar algo no pino e pronto, viva a gambiarra !

 

Uma vez fiz uma plaquinha de display, e o cara do layout fez em dupla façe, e usou a façe dos componentes para colocar em curto os pinos.

 

Depois de tudo pronto e montado, 100 peças, me pediram para modificar o programa, e queriam colocar dois Leds a mais, ligando direto nos pinos...

 

Mas os pinos não usados estavam todos aterrados, e como o projetista fez tudo curto-circuitado pela parte de cima, com o componente soldado dava um trabalho dos infernos para dessoldar, a única solução foi cortar o pino direto na solda, e levantar ....

 

Depois disso nunca mais usei os pinos em curto-circuito.

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aphawk, vivendo e aprendendo com você hehehe...

 

Entendi melhor e configurar como saida e deixar aberto, vou tomar isso como pratica para mim...]

 

Mas uma duvida em relação a portas não usadas... usemos o exemplo do LCD que usa o pinos D0, D1, D2, D4~D7 o pino D3 não foi usado para nada, deverei configura-lo como saida ( no caso tudo como saida) ou posso deixar sem configurar, minha duvida é esse pino D3 poderia afetar algo somente no PORTB  ou poderia afetar outras coisas dentro do pic??

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigocirilo,

Não entendí .... eu sempe achei que no caso de usar com 8 bits todos os pinos do display servem para alguma coisa.... bom, se não usa mesmo, deixe com saída sim. Melhor prevenir.... se voce não configurar nada, vai depender do Reset por hardware e também do compilador não resolver "assumir" alguma coisa de configurar alguma coisa no hardware por conta própria... e isso são coisas fora de nosso controle.

Existem alguns casos famosos de bugs de compiladores, um bug que era bem famoso era quando voce configurava uma interface I2C por software, e escolhia dois pinos , um de cada port, para fazer o SDA e o SCL; de repente dava uns paus esquisitos e ninguém sabia o motivo.... depois de algum tempo, descobriram que o compilador, em alguns trechos de programa, "achava" que os dois pinos só poderiam pertencer a um mesmo port, e configurava o SCL sempre no mesmo Port que foi configurado o SDA, apenas mudando o bit usado.......

Com isso quero dizer o seguinte : Já é bem difícil a gente utilizar um programa de terceiros, como um compilador, assumindo que tudo nele funciona, certo ? E se a gente ainda deixar de garantir que A NOSSA PARTE não tenha nenhuma possibilidade de arrumar mais problemas, vamos ficar doidos procurando agulha no palheiro !!!

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

...E se a gente ainda deixar de garantir que A NOSSA PARTE não tenha nenhuma possibilidade de arrumar mais problemas...

Muito boa colocação sobre compiladores(principalmente na linguagem de alto nível)!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou usando o PIC 16F648A e realmente parece que o pino RA5( MCLR) mesmo configurado como IO está muito sensivel, se eu coloco um fio longo nele, sempre que eu encosto a chave de fenda nos outros pinos o pic executa a função da entrada do RA5 (iniciar o temporizador) ou simplesmente reseta o micro e o desplay lcd fica todo aceso e travado, eu estou pensando em habilitar o master clear e liga-lo ao Vdd e usar outro pino que está solto e configurado como saida, o que vocês acham?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Marcio Relvas,

Minha opinião : usar esse pino como I/O é sinal de desespero kkkk, use apenas se não tiver nenhum outro sobrando, ou se ele for utilizado apenas para saída.

Verifique se voce tem um capacitor de 100nF muito próximo aos pinos de alimentação e GND do Pic. E em paralelo com ele eu costumo usar um eletrolitico de 47uF . Isso ajuda bastante na filtragem em geral.

E use esse pino Mclr como um verdadeiro Reset, usando um resistor, um capacitor e um diodo de sinal, tudo conforme indica o datasheet.

Paulo

@aphawk, entendi,, tudo que pudermos configurar, melhor fazer do que deixar para o compilador, certo?

Certíssimo ! Pelo menos todos os pinos de I/O devem ser configurados, e aqueles não usados devem ser deixados como saída para evitar surpresas.

Eu ainda vou mais longe : quando faço algo profissionalmente, eu configuro o hardware interno , mesmo que não use !

Por exemplo, configuro o Timer0, mas dou um comando de Stop nele ; crio os vetores de interrupção e neles faço um Reset, só para garantir que não vou ter problemas. Faço a mesma coisa nos outros timers, nos comparadores, e garanto desabilitar as interrupções externas que nunca deveriam ocorrer. Dizem que quando o compilador inicia ele deixa tudo já desabilitado prá gente, mas quem faz isso mesmo é o Reset de alimentação. Eu prefiro não confiar, então eu mesmo configuro e deixo tudo parado.

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Marcio Relvas,verifica se a opção LVP esta desabilitada,caso tenha que usar gravação com baixa tensão(LVP ON),deixe esta pino como entrada e aterre ele.

O PIC 18F4550/2550 apresentam este problema mesmo com LVP desabilitado,eu sempre 'inutilizo' o pino deixando como entrada e aterrando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigocirilo,

 

É o que voce entendeu mesmo.

 

No caso dos AVR's : Eu inicializo os 3 timers, crio os vetores de interrupção, mas dou um comando de STOP para eles. Assim, não poderia ter nenhuma interrupção deles, e se tiver, é alguma interferência externa, algum ruído, enfim, algo que eu não preví, e não posso deixar o programa andar se teve algo esquisito, então mando reinicializar tudo e começar de novo do zero. Inicializo o comparador analógico também, inicializo o conversor A/D, inicializo a interface serial, isso tudo faço o mesmo procedimento dos timers.

Depois configuro os I/O's , tudo o que eu não vou usar eu coloco como saída.

E por último, desabilito todas as formas possíveis de interrupção externa nos pinos, exceto aquele que eu vou mesmo utilizar.

 

Não quero deixar coisas "assumidas" pelo compilador, eu quero ter o controle total, da mesma maneira que eu faria se ainda programasse em Assembler, entendeu ?

 

Pelo menos, agindo assim, fica bem mais fácil debugar um hardware inteiro, por exemplo, na rotina que eu faço um Reset em caso de alguma interrupção doida, eu mando ligar um pino de saída onde coloquei um monoestável que acende um led por 1 segundo. Em paralelo com o Led, eu coloco um Buzzer. Se  eu escutar esse buzzer, só pode ser alguma anomalia no hardware, algum ruído, algo que com certeza interferiu no funcionamento normal do processador. 

 

Eu gosto de deitar e dormir, não quero ficar tendo de passar noite em claro procurando resolver um problema que não existiria se eu tivesse mais cuidado , entendeu ?

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aphawk

 

Eu gosto de deitar e dormir, não quero ficar tendo de passar noite em claro procurando resolver um problema que não existiria se eu tivesse mais cuidado , entendeu ?

LOL,mais uma frase que ja me aconteceu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

@vtrx,

 

KKKKKK pois é .... eu também já passei por isso, e não foi só uma ou duas vezes.... e é este o motivo de estarmos hoje aqui neste Fórum, com a nossa experiência que tivemos no passado, para auxiliar os novos profissionais da área. 

 

Infelizmente o mundo hoje pensa assim : se conselho fosse bom, não seria de graça....  e não escutam muito o que a gente fala !

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@aphawk,  eu fico muito grato por vocês ajudarem com o vosso conhecimento e situações ja enfrentadas por vocês...

 

Mas diga-me uma coisa, vamos usar de exemplo o meu codigo de "dimmer" que debatemos em outro topico, Naquele codigo eu usei a interrupção externa pra ler a passagem por zero e o timer0 para  dar o pulso no MOC que por sua vez acionava o triac. Usei o conversor A/D, para ler dois sensores e só, o resto ficou ali no main mesmo..

 

Configurei todas as portas usadas e não usadas..... Então o que mais eu poderia fazer para prevenir possíveis bugs???

 

Att.

 

Rodrigo 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigocirilo,

 

voce tem de pensar em tudo que está dentro do PIC.

 

Por exemplo, existem outros pinos que podem gerar interrupções externas ? Sim ? Então desabilite elas ! 

 

Existem outros pinos que voce não usa para nada ? Sim ? Então ponha tudo como saída !

 

Tem outros Timers ? Sim ? Então inicialize e mande parar. 

 

Inicialize a interface serial, apenas para deixar ela configurada, desabilite as interrupções dela, e não use ela. 

 

Agora, fora do PIC :

 

voce "colou" um capacitor de disco cerâmico de 100nF e em paralelo a ele um capacitor eletrolítico de 47uF a menos de 1 centímetro dos pinos de alimentação e terra do PIC ?

 

O circuito de Reset, voce montou ele como indicado, com os três componentes ?

 

O regulador de tensão, está com uma boa filtragem na entrada e na saída ?

 

 

Isso é o que me veio agora de cabeça kkkk

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Por exemplo, existem outros pinos que podem gerar interrupções externas ? Sim ? Então desabilite elas ! 

 

Não, todas as outras entradas do portB que poderiam gerar INT_EXT estão como entrada aterrados (ja havia feito antes de você dar a dica de configurar como saida!)

 

 

Existem outros pinos que voce não usa para nada ? Sim ? Então ponha tudo como saída !

 

Ja coloquei tudo como entrada, como disse ja havia feito (projetos futuros ou se tiver que fazer alguma alteração farei como saida/aberto.)

 

 

Tem outros Timers ? Sim ? Então inicialize e mande parar. 

 

Inicialize a interface serial, apenas para deixar ela configurada, desabilite as interrupções dela, e não use ela. 

 

Tem o timer 1 e 2 sem usar!!, deverei inicia-lo e no MAIN como se fosse usa-lo e  dentro da função do referido timer  eu o desabilito ??

 

E em relação a interface serial.. mesma coisa, habilito e dentro da função eu desabilito??

 

Agora, fora do PIC :

 

voce "colou" um capacitor de disco cerâmico de 100nF e em paralelo a ele um capacitor eletrolítico de 47uF a menos de 1 centímetro dos pinos de alimentação e terra do PIC ?

 

O circuito de Reset, voce montou ele como indicado, com os três componentes ?

 

O regulador de tensão, está com uma boa filtragem na entrada e na saída ?

 

 

Paulo

Não colei os capacitores hehehe, pois quando coloquei somente 1 na entrada do regulador ja parou a interferência ( quando estava alimentado por fonte)   ja está anotado para futuras alterações.

 

o Circuito de reset achei interessante, para você ter um retorno se houver um reset interno certo?? 

 

O regulador está com a filtragem ceramico de 100nf  na entrada e um eletrolitico de 1000uf na saida.. Ja anotei também para implementar futuramente!!! 

 

Putz que aula heim, hj vejo o quão ruim foi meu curso de eletrônica hehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rodrigocirilo,

 

Não é uma aula, é uma "coletânea" de dicas.... isso não se aprende mesmo nem na faculdade, é o tal de "bom senso" que a gente vai adquirindo.

 

 

Abre parêntesis :

 

Curso de eletrônics, faculdade, universidade .... tirando muito poucas exceções, não conseguem preparar o aluno para a nossa profissão. No final das contas, quem faz o aluno hoje é ele mesmo !  Internet está aí, tem de tudo nela, só precisa ter um pouco de boa Leitura de inglês. Hoje, esses cursos só te dão um simples Diploma.... o conhecimento, o preparo, vai depender muito de voce, meu amigo.

 

Aliás, eu falo toda hora : Diploma só me pediram uma vez no meu primeiro emprego, e nunca mais ... nem o CREA eu pago, só paguei no primeiro ano, depois briguei 3 anos na Justiça com esse "Conselho" , tudo maneiras de tirar o teu dinheiro só Deus sabe prá quê..... finalmente eles desistiram de me cobrar.

 

Fecha parêntesis....

 

 

Não sei como se faz a inicialização e a "parada"  em C, mas o que voce falou quando aos timers e a serial é o que tem de ser feito.

 

Sempre coloque os capacitores cerâmicos perto dos CI's , seja PIC, seja regulador, eles são a garantia contra interferência de alta frequência, afinal todo trecho de circuito é uma antena em potencial. 

 

Os eletrolíticos são a parte mais "pesada" da filtragem, e sempre coloque um de bom valor pertinho da entrada do regulador, por exemplo 470uF, e espalhe alguns na saída , entre os outros CI's que vão ser alimentados na saída do regulador.  Na saída do regulador não use valores tão grandes, 1000 uF é muito alto, pode até dar instabilidade no regulador. Eu uso um de 100 uF bem colado na saída, um de 47 uF no microcontrolador, e espalho alguns outros ao longo da placa de circuito impresso, mas de valores baixos, tipo de 22 uF até 100 uF.

 

Se tiver muita carga de corrente nos pinos do Pic, coloque um de valor maior bem pertinho, tipo 100 a 470 uF, em vez do de 47 uF para casos em gerais.

 

O fato de usar um capacitor alto na entrada do regulador não desobriga voce a fazer uma boa filtragem na parte de pot6encia da fonte, digo logo na saída dos diodos retificadores. Nesse ponto tem de ter um bom e grande capacitor eletrolítico de baixa ESR.

 

O circuito de Reset indicado para um Power-On Reset, é um resistor e um capacitor, mas use também um diodo de sinal em antiparalelo com o resistor, para acelerar a descarga do capacitor quando desliga.

 

Eu uso o Watchdog para fazer um Reset por software, não é a mesma coisa de fazer um verdadeiro Reset por hardware, mas nada te impede de montar um circuitinho de um monoestável, também ligado no pino de Reset do Pic, e usar uma saída do PIC para fazer o acionamento dele, esta é com certeza a melhor solução. Um velho 555 dá conta disto tranquilo.

 

Na vida profissional, tudo isso acrescenta custos..... e muitas vezes vem um ***** de um gerente dizer que "o custo vai aumentar muito" ..... faz parte da vida voce ter de fazer algum produto que não seja perfeito como voce gostaria, por motivos comerciais.

 

Aliás ..... voce vai encontrar muitos incompetentes pela frente kkkkkkkk, estão saindo muitos das faculdades nos últimos 10 anos..... vai se acostumando !

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×