Ir ao conteúdo
  • Cadastre-se
joelTGA

PIC pic 12f629 tem horas quando ligo ou reseto ele trava com todos os digitos acesos

Posts recomendados

galera é o seguinte eu fiz aqui um codigo com o pic 12f629 usando oscilador interno e comunicacao SPI com o max 7219 e 4 displays 7 segmentos. acontece que tem horas quando ligo ou reseto ele trava com todos os digitos acesos, ai so retirando a alimentacao pra funcionar de novo. alguem me ajuda

#define contmais button(&gpio, 4, 1, 0)
#define contmenos button(&gpio, 5, 1, 0)

// Software SPI module connections
sbit SoftSpi_SDI at GP0_bit;
sbit SoftSpi_SDO at GPIO;
sbit SoftSpi_CLK at GP1_bit;

sbit SoftSpi_SDI_Direction at TRISIO0_bit;
sbit SoftSpi_SDO_Direction at TRISIO;
sbit SoftSpi_CLK_Direction at TRISIO1_bit;

//MAX7219
sbit MAX7219_CS at GP2_bit;
sbit MAX7219_CS_Direction at TRISIO2_bit;

int i;
///////////////////////////////////////////////
//////////Funções do MAX7219///////////////////
//////////////////////////////////////////////
//Inicia a comunicacao SPI e configura o chip MAX7219
void MAX7219_Init()
{
 MAX7219_CS_Direction = 0;

 ///pic12f629///
 CMCON = 0x07;

 //////////////

 Soft_SPI_Init();

 MAX7219_CS = 0;
 Soft_SPI_write(0x09);
 Soft_SPI_write(0xff); //Code B
 MAX7219_CS = 1;

 //Configura a luminosidade do display(0-15)
 MAX7219_CS = 0;
 Soft_SPI_write(0x0a);
 Soft_SPI_write(0x0f);  //intensity
 MAX7219_CS = 1;

 //Configura o numero de displays escaneados(0-7)
 MAX7219_CS = 0;
 Soft_SPI_write(0x0b);
 Soft_SPI_write(0x04);  //scan limit
 MAX7219_CS = 1;

 MAX7219_CS = 0;
 Soft_SPI_write(0x0c);
 Soft_SPI_write(0x01);  //ShutDown
 MAX7219_CS = 1;

 MAX7219_CS = 0;
 Soft_SPI_write(0x00);
 Soft_SPI_write(0xff);
 MAX7219_CS = 1;
}

//Escreve um numero no display
void MAX7219_putNumber(char *number)
{
  char i=0,dp=0;
  char len = strlen(number);

  MAX7219_CS = 0;
  Soft_SPI_write(0x09);
  Soft_SPI_write(0xff); //CodeB
  MAX7219_CS = 1;

  for(i=4; i > 0; i--)
  {
    MAX7219_CS = 0;
    Soft_SPI_Write(i);

     if(number[len-1]=='.')
      {
      dp = 0x80;
      i++;
      }
     else if(number[len-1]==' ' || number[len-1]==0 || len==0)
      {
      Soft_SPI_Write(0x7f);
      dp = 0;
      MAX7219_CS = 1;
      }
     else if(number[len-1]=='-')
      {
      Soft_SPI_write(10);
      dp = 0;
      MAX7219_CS = 1;
      }
     else
      {
      Soft_SPI_Write((number[len-1] - '0') | dp);
      dp = 0;
      MAX7219_CS = 1;
      }

     if(len > 0) len--;
  }


}


void main()
{
unsigned int cont=0;
char txt[7];
bit flag1, f1;

trisio4_bit=1;
gp4_bit=0;

MAX7219_Init();


while(1)
{
//----------mais--------------------------
if((contmais) && flag1 ==1)
{
flag1=0;

}

if((!contmais) && flag1 ==0)
{
flag1=1;
 cont++;
}// fim mais

/*------------menos------------------------
if((contmenos) && f1 ==1)
{
f1=0;

}

if((!contmenos) && f1 ==0)
{
f1=1;
 cont--;
}//fim menos */


 IntToStr(cont, txt);
 MAX7219_putNumber(txt);

}
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comumente esse problema é do hardware, pode ser alguma interferência. Poste foto da montagem e o diagrama.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como estão os fuses? O que devia acontecer? Um capacitor no reset e no botão lhe cai bem. Verifique e reverifique sua montagem

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Isadora Ferraz  consegui resolver o problema eu estava usando oscilador interno de 16Mhz eu passei pra 4 ai parou de travar . pensa em uma dor de cabeça que me deu por causa disso kk obrigada pela ajuda

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@joelTGA ,

 

Provavelmente isso ocorre porque o seu circuito de Reset não é o sugerido .... o "oficial" usa um resistor, um capacitor e um diodo ..... 

 

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

×
×
  • Criar novo...