PIC16F877A no funciona correctamente: parpadeo del led y problema de visualización de 7 segmentos

2

Estoy tratando de controlar una pantalla de 7 segmentos usando PIC16F877A. Estoy programando mi PIC con una réplica de PICKIT 3.

Estoy cargando mi código hexadecimal usando el software PICKIT 3 y MPLABX IDE. No tengo ningún problema mientras subo mi código, solo cuando configuro mi circuito.

Noté que solo el pin B1 está funcionando. Hice un circuito de LED de parpadeo y aún obtengo B1 pin alto cuando configuro D0 pin alto. Estoy usando condensadores de cristal de 4 MHz y 0.1 uF. También subí archivos hexadecimales de Internet, pero siempre me estoy drogando de B1.

Estoy usando 4MHZ Crystal con condensadores de 0.1 uF. ¿Debo cambiar los condensadores con 15 pF?

Mi código:

#include <16F887.h>    
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4m,oscillator) 
#define Dig1 PIN_D0
#define Dig2 PIN_D1
#define rfid PIN_D2
#define reset PIN_A1
#use fast_io(b)
#use fast_io(d)

static const int digit[10]= { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110,
                              0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111 };

void display(unsigned char value)
{
    static char tens = 0;
    char dig = (tens) ? (value / 10) : (value % 10);
    dig = digit[dig];
    output_high((tens) ? Dig2 : Dig1);
    output_b(dig);                    
    output_low((tens) ? Dig1 : Dig2);
    tens = !tens;
}

void main() 
{
   char sayi = 0;

   output_b(1);
   output_d(0b11111100);
   output_b(0b11111100); 

   set_tris_b(0x00); 
   set_tris_d(0b11111100);

   while(1)
   {
     display(sayi);

     if(input(rfid) == 0)
     {
        sayi++;    
        if(sayi == 100)
    {
      sayi = 0;
    } 
     }
     delay_ms(30);     


   }
}

Mi esquema:

HojadedatosdePIC16F877A: enlace

Circuito de la vida real:

    
pregunta Emre Badem

1 respuesta

0

De una revisión rápida del hardware, veo dos problemas:

  1. Valores incorrectos del condensador de carga de cristal:

      

    Estoy usando 4MHZ Crystal con condensadores de 0.1 uF. ¿Debo cambiar los condensadores con 15 pF?

    Sí , usted debe reemplazar esos capacitores. 0.1uF no es el valor correcto y es posible que el cristal no comience a oscilar en absoluto al usarlos, o puede que solo funcione de forma intermitente, lo que lleva a un comportamiento extraño (como usted describe).

    El valor requerido del condensador también depende del cristal específico, pero es probable que su valor sugerido de 15pF esté lo suficientemente cerca.

  2. Faltan capacitores de desacoplamiento de potencia

    No es fácil rastrear completamente el cableado en la foto, pero parece estar suministrando alimentación al PIC a través de ambos conjuntos de pines de alimentación (pines 11 & 12 y 32 & 31 ). Bien, eso es correcto. Algunas personas (erróneamente) suministran energía solo a través de un conjunto de pines de alimentación y, a veces, ven problemas extraños e intermitentes (especialmente al cambiar grandes cargas de salida).

    Sin embargo, también debe agregar los condensadores de desacoplamiento recomendados (que generalmente son 0.1uF) a todos los pines de alimentación Vdd. No veo ningún condensador de desacoplamiento de potencia en su tablero. Por lo tanto, agregue dos capacitores de 0.1uF: uno entre los pines 11 & 12 y otro entre los pines 32 & 31 . Cada condensador debe estar cerca del IC PIC. De nuevo, es posible que veas problemas extraños e intermitentes sin ellos.

[Nota: no he revisado su código; solo estoy resaltando los problemas de hardware más visibles, que pueden ser la causa de sus síntomas.]

    
respondido por el SamGibson

Lea otras preguntas en las etiquetas