PIC resetando

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

PIC resetando

Mensagempor lpagano » 08 Jul 2007 06:45

Pessoal,

Seguinte, fiz um relógio simples no PIC. Funciona legal, mas de vez em quando ele reseta do nada. Pode ser depois de 2 minutos ligado, 10 minutos, 30, 1 hora, 5 horas, etc, ou seja, não tem momento para acontecer isso.
Já fiz de tudo no programa, watchdog desabilitado, tensão de alimentação em 5 volts, mas mesmo assim ele dá reset.

O MCLR dele está com um resistor de 10k em série com um diodo 1N4148 no 5 volts, ou seja, aquela configuração padrão.

Alguém pode dar alguma dica para resolver isso?
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor kubiak » 08 Jul 2007 07:01

Ipagano,

Apenas um Palpite.....

Existe Ruído na Fonte? dê uma olhada!!!

voce Declarou nos FUSES

#FUSES BROWNOUT

As vezes eu esqueço e ele fica com problemas semelhante!!
kubiak
Bit
 
Mensagens: 37
Registrado em: 11 Out 2006 19:28
Localização: São Paulo - Brasil

Mensagempor lpagano » 08 Jul 2007 07:37

Kubiak,

Bem lembrado, veja abaixo as declarações dos fusíveis (o programa foi feito em C do CCS):

#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG

O caso é que depois de umas mudanças no programa (de contagem em segundos para contagem em minutos) esse reset começou a acontecer.

Também acontece o travamento do PIC após o reset, ou seja, quando ele reseta, o PIC para de contar os minutos e horas, mas se eu entrar numa função que fiz de acerto dos minutos e horas ele passa a funcionar normalmente.

Valeu!
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor leoabubauru » 13 Jul 2007 00:24

Coloque uma função para verificar o motivo do reset usando os bits sinalizadores de reset e colocando o resultado num buzzer, por exemplo (Watch Dog: um bip, Brownout: 2 bips e assim por diante). Dá uma olhada no DS para verificar o uso correto deles. Com isso você será capaz de descobrir o motivo do reset e atacar direto na fonte. Faço isso em meus programas e ajuda bastante... A funão dever ser a primeira coisa a aparecer no soft.


Veja código exemplo:


#include <16F628A.h>
//#device ICD=TRUE // Diretiva para uso do depurador ICD2 br
#fuses INTRC_IO, WDT, NOMCLR, PUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD
#use delay(clock=4000000,restart_wdt)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1, stream=PC, restart_wdt, parity=N, bits=8 )


//Definicoes
#byte PIR1 = 0x0C // Registrador de PERIPHERAL INTERRUPT REQUEST
#byte PIE1 = 0x8C // Registrador de PERIPHERAL INTERRUPT ENABLE
#byte PCON = 0x8E // Registrador de POWER CONTROL


//Bits de controle
#bit BOR = PCON.0
#bit POR = PCON.1


//Implementação de Subrotinas
void main ()
{
long TMR_DEBOUNCE;

int i,j,RESET;

// Salva a causa do RESET antes de limpar o WDT e setar
// os bits no registro de STATUS (ver no datasheet os bits /TO e /PD).
// Algumas funções do CCS resetam o WDT quando é gerado o código asm.
RESET = restart_cause();

delay_ms(10); // Evita inicialização errada do pino /MCLR (Warning 0033)



// Configurações do microcontrolador
setup_wdt(WDT_2304MS);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
enable_interrupts(GLOBAL); // setup interrupts
setup_comparator(NC_NC_NC_NC);
setup_uart(9600, PC);


// configura o I/O
set_tris_a(0b00110011);
set_tris_b(0b11001111);

// inicializa os ports
porta = 0x00; // limpa porta
portb = 0x00; // limpa portb

FLAGS = FLAGS2 = j = 0;

// Se inicilização OK, varre uma vez os LEDs em sequência e, depois, pisca os dois
// juntos. Se foi RESET, indica a falha com o LED VERMELHO e sinal sonoro.
switch (RESET)
{
case NORMAL_POWER_UP:
{
j=0;

// Pisca na sequência
OUT_LED_APROVADO = ON;
delay_ms(100);
OUT_LED_APROVADO = OFF;
OUT_LED_REPROVADO = ON;
delay_ms(100);
OUT_LED_REPROVADO = OFF;

// Pisca os dois juntos
delay_ms(200);
OUT_LED_APROVADO = ON;
OUT_LED_REPROVADO = ON;
delay_ms(100);
OUT_LED_APROVADO = OFF;
OUT_LED_REPROVADO = OFF;
delay_ms(100);
OUT_LED_APROVADO = ON;
OUT_LED_REPROVADO = ON;
delay_ms(100);
OUT_LED_APROVADO = OFF;
OUT_LED_REPROVADO = OFF;
delay_ms(100);
OUT_LED_APROVADO = ON;
OUT_LED_REPROVADO = ON;
delay_ms(100);
OUT_LED_APROVADO = OFF;
OUT_LED_REPROVADO = OFF;

}
break;
case WDT_TIMEOUT: j=1; break;
case BROWNOUT_RESTART: j=2; break;
}

for (i=0;i<j;++i)
{
OUT_LED_REPROVADO = ON;
OUT_BUZZER = ON;
delay_ms(50);
OUT_LED_REPROVADO = OFF;
OUT_BUZZER = OFF;
delay_ms(50);
}

BOR = POR = ON; // Reseta os flags do PCON REGISTER para detectar próximos RESETs

while(true)
{
restart_wdt();
.
.
.
}
} // main()
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor lpagano » 04 Set 2007 19:38

Pessoal,

Relembrando esse tópico, hoje eu verifiquei que, ao ascender a luz da sala em que o PIC está montado, ele reseta. Ascendi a luz várias vezes e o PIC resetou todas as vezes.

A alimentação do PIC é com uma fonte variável (LM317) bem filtrada e o PIC recebe o clock da rede elétrica para fazer um sincronismo.

A rede da minha casa é 220 V (127 bifásico).

Valeu!
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor Rota » 04 Set 2007 20:03

Que coincidencia,
estou montando um cronometro regressivo, a base de tempo tambem pelos 60Hz da rede. Quando ascendia a lampada (fluorescente), as vezes o cronometro parava, mudava os numeros. Depois de muito apanhar, descobri que o problema éra os resistores de pull-down das teclas, que estava muito alto (10K), baixei para 560R , tudo esta funcionando perfeitamente. programei o cronometro para 10min, e fique ligando-desligando o interruptor até zerar o cronometro, perfeito sem problemas.
Não tem algum pino configurado como entrada, que esta em aberto, ou com impedancia muito alta?
Rota
Byte
 
Mensagens: 116
Registrado em: 16 Nov 2006 21:29

Mensagempor lucaszampar » 04 Set 2007 20:14

Coloque um resistor de 10K em pull-up com o pino de reset e um Capacitor de 100nF entre o mesmo pino de RESET e o terra.
Se não resolver, substitua o capacitor anterior por um eletrolitico de 10uF.
Avatar do usuário
lucaszampar
Byte
 
Mensagens: 105
Registrado em: 11 Out 2006 22:30
Localização: Limeira - SP

Mensagempor lpagano » 04 Set 2007 20:57

Rota,
Realmente a minha lâmpada também é fluorescente compacta (reator eletrônico).
Vou fazer a mesma coisa que você fez e depois aviso o que virou.
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor andre_luis » 05 Set 2007 07:35

Aterra a carcaça do cristal
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor EDSONCAN » 05 Set 2007 08:37

Troca a lampada e o reator por uma lampada incandescente???
Brincando.

Não quero falar mal de microchip, mas nao havia esse tipo de problema nas series antigas.

Troquei um PIC16f628 por um antigo PIC16f84 e os problemas de ruido somem.

Edson
EDSONCAN
Word
 
Mensagens: 876
Registrado em: 11 Out 2006 14:11

Mensagempor otavio luiz » 05 Set 2007 09:35

como voce fez o coplamento do AC no pic, eu colocaria um resistor em séire e um capacitor a terra pra eliminar as altas frequencias do 60hz.
Lembre-se, zona de Fresnel não é nenhuma franquia de puteiro.
Avatar do usuário
otavio luiz
Byte
 
Mensagens: 257
Registrado em: 11 Out 2006 13:56
Localização: Barretos - SP, terra de Peão

Mensagempor RobL » 05 Set 2007 09:55

Deve estar em um protoboard cheio de fios (antenas para todas as direções).
Em um protoboard, procure usar um 78L05 em cima da alimentação da CPU, com cap de 100nF na entrada e saída, mesmo que sua fonte seja regulada. Não esquecer o capacitor de 100nF entre o pino Vdd e Vss.
Proteja todas as entradas com um capacitor de 10nF ou até 100nF conforme o caso.
Em um proto board coloque vários fios de sua referência para o negativo da fonte (negativo do 78L05) onde deve estar o negativo da fonte de bem curto.
O negativo do pino da CPU deve ir diretamente para o negativo do regulador da forma mais curta possível.
Demais correntes não podem competir com o Vss da CPU, devem seguir caminhos diferentes até a referência do regulador.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor Rota » 05 Set 2007 11:08

No meu caso, a interferencia vinha pelo ar, pois alimentei com uma bateria de 12V e o problema persistia (apesar do cronometro estar parado, pois não tinha os 60Hz, conforme eu ascendia a lampada, o display mudava os numeros, zerava etc etc), e o micro não travava, éra como se eu estivesse pressionando alguma tecla. Como o Robl disse sobre os capacitores, eu tinha colocado capacitores de 100nF nas entradas, o problema foi resolvido, porem como as teclas estão multiplexadas, o ruido sumio, só que o teclado não funcionava (talves se eu baixasse o valor funcionaria). Tente isolar o problema, se o ruido esta vindo pelo ar, terra ou mar e ataque ele.
Rota
Byte
 
Mensagens: 116
Registrado em: 16 Nov 2006 21:29

Mensagempor fabim » 05 Set 2007 11:21

acho estranho esses panes que os PIC apresentam.

Eu tenho um circuitinho pra rede eletrica.
Fonte capacitiva de 60mA, um receptor 433mhz, relezinho.

funciona a mais de ano na minha casa e nunca deram pau nenhum.

Uso o PIC12F629.

E pra circuito de controle de perifericos, mesma coisa. nunca me deu esse tipo de problema. Apesar que meus sistemas , são todos caixa metálica, fonte de trafo com compartimento separado, reles bem separados das trilhas de dados etc.. Deve ser por isso.

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor lpagano » 05 Set 2007 15:05

Pessoal, seguinte:

Esse PIC estava num protoboard e agora está em placa. Na época do protoboard dava o mesmo problema.

O que estive pensando hoje é que para programar o PIC (uso ICSP) tem uma chave que fica fora da placa com um monte de fios a uns 5 cm da placa, inclusive o do RESET. Após essa chave eles vão para o programador e de lá para a porta serial do micro. Hoje a noite vou tentar ligar ele com esse cabo desconectado do programador.

No caso dos 60Hz da rede para fazer o sincronismo dos sinais, vou ver num osciloscópio como esse sinal fica quando eu ligo a lâmpada, se bem que o trafo é um filtro para baixa frequência, mas sabe lá o que acontece. Os 60Hz também passam por um transístor que transforma em onda quadrada (0 - 5V).

Para fazer o PIC funcionar eu liguei um cristal de 4MHz.

Como é um protótipo, não sei se haverá problemas na montagem final, já que irei instalar o circuito em ambiente externo, mas pensei no caso de um "fusquinha" ou uma Honda "Turuna" ou "CG" antiga passar perto com aqueles platinados batendo!!!

PS: nada contra quem tem fusca ou motos Honda antigas. Até gosto, mas tem que estar funcionando bem :lol:
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Próximo

Voltar para PIC

Quem está online

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

x