Ir ao conteúdo
  • Cadastre-se

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);

}
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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...