Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal!

 

Sou novo aqui no Clube do Hardware.

 

Tenho disponível um kit PEX-30 (diagrama em anexo) que utiliza o microcontrolador PIC16F877A.

 

Estou tendo problemas para fazer 2 displays funcionarem por meio da multiplexação. Tentei realizar a simulação no PROTEUS (em anexo) e também não funcionou 

 

Não consigo fazer com que o PORTB envie os sinais necessários para fazer o display funcionar. O código de referência está na aula 16 do seguinte curso:  

 

 

 

 

Segue código: 

 

#define MENOS PORTA.F0
#define MAIS PORTA.F1
#define DIGIT1 PORTB.F7
#define DIGIT2 PORTA.F2
#define DIGIT3 PORTA.F3

 

int CENTENA,DEZENA,UNIDADE,Cnt = 0;

int Display(int no);
void changeCount();


void main()
{
    CMCON=0x07;
    TRISA=0b00000011; // Configura RA0 e RA1 como entradas
    TRISB=0b00000000; // Configura PORTB como saídas
    DIGIT2 = 1; // Desabilita Digito2
    DIGIT3 = 1; // Desabilita Digito3

 while(1)
    {
    changeCount();

 

    // Digito das CENTENAS
    CENTENA = (Cnt/100)-((Cnt%100)/100);   // 253 , 253 e 100 = 53, 0,53 ("2")
    PORTB = Display(CENTENA); // Envia para PORTB
    DIGIT1 = 0;           // Liga Display1
    delay_ms(5);          // Aguarda 5 milisegundos
    DIGIT1 = 1;           // Desliga Display1

 

    // Digito das DEZENAS
    DEZENA = (Cnt%100);  //53   , 5,3 , 3  ,   0,3
    DEZENA = (DEZENA/10)-((DEZENA%10)/10);   // "5"
    PORTB = Display(DEZENA); // Envia para PORTB
    DIGIT2 = 0;           // Liga Display2
    delay_ms(5);          // Aguarda 5 milisegundos
    DIGIT2 = 1;           // Desliga Display2

 

    // Digito das UNIDADES
    UNIDADE=Cnt%10;
    PORTB=Display(UNIDADE);    //Envia para PORTB
    DIGIT3=0;              //habilita digito 3(unidade)
    delay_ms(5);           //aguarda 5 milisegundos
    DIGIT3=1;              //desabilita digito 3(unidade)
    }  // Fim do While

}   // Fim do Void Main

 

    //esta função acha o bit pattern(matrix de bits) para ser enviado
    //para o PORTB e mostrar um número no display de 7 segmentos.O número
    //é passado como um argumento para a função.


    int Display(int no)
      {
      int Pattern;
      int SEGMENTO[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};
      Pattern=SEGMENTO[no]; //para retornar o Pattern
      return(Pattern);
      } //end função


      void changeCount()
{
      while(MAIS == 1)
      {
              Cnt = Cnt + 1;
              delay_ms(180);
              if(Cnt > 999) Cnt = 99;
      }
      while(MENOS == 1)
      {
               Cnt = Cnt - 1;
               delay_ms(180);
               if(Cnt < 1) Cnt = 0;
      }
}

 

Segue diagrama no proteus, diagrama do display, manual da PEX-30 e arquivos do MikroC e Proteus (zipados).

 

Preciso de uma luz!!!

 

Abraço!

proteus - contador - pic16f877a.pdfBuscando informações...

PEX-30-Diagrama Display.pdfBuscando informações...

MANUAL_PEX_30_MAXIM_LAB.pdfBuscando informações...

Contador.zipBuscando informações...

 

 

 

  • Membro VIP
Postado

permita-me...

-tem gente (tipo eu) que não gosta de baixar links externos ao forum. Em compensação tem gente que baixa de boa. Aguarde-as

-descreva e publique (na página do forum) capturas do que ocorreu (pra que eu veja se consigo te ajudar)

-devo te sugerir que use interrupção por timer

-também sugiro que indexe uma tabela de "desenhos" do display e que esta esteja na flash

unsigned char const SEGMENTO[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18};

por enquanto é isso...

Visitante
Este tópico está impedido de receber novas respostas.

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!