Ir ao conteúdo

Posts recomendados

Postado

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

}
}

 

  • Membro VIP
Postado

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
Postado

@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

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...