top of page

CONTADOR DE UN DIGITO-PIC18F4550-MPLAB IDE XC8-NIVEL BASICO

El presente proyecto tiene como finalidad crear un contador de un dígito con un microcontrolador PIC18F4550, puesto que las aplicación de este contador son ilimitadas por ejemplo: contador de pelotas, pollos, botellas, cajas, ect. Ya que la necesidad humana de cuantificar las cosas nos lleva crear periféricos como los Display de 8 segmentos cátodo común.

Aunque en el mercado existen infinidad de periféricos nosotros utilizaremos un display cátodo común, ademas agregaremos un transistor NPN 2N2222 con la finalidad de energizar al display cuando se requiera; este ultimo se encontrara conectado al Puerto D del microcontrolador PIC 18F4550 como se muestra a continuación:

Imagen 3.0 - Contador de un digito simulado en Proteus 8

La imagen 3.0 nos indica que el display se encuentra conectado de manera directa al puerto D del micro, recordemos que el display es muy sensible y podríamos terminar queman dolo, lo que recomiendo es que pongamos resistencias de 220 ohm (sera mas que suficiente como protección).

Ahora veamos la forma en como esta dispuesto el sistema nos lleva a plantearnos un pregunta ¿como enviar los bit adecuados para formar cada dígito? ; bueno, de acuerdo con la siguiente tabla la tabla N° 3.1:

Imagen 3.1 - Tabla de Bits

Nos entrega la respuesta, puesto que el PORT D es un registro de 8 bits y nuestro display es de Cátodo común, debemos enviar un 0x3F hexadecimal para genera el 0, ya que representa :

0011 1111 y así sucesivamente hasta completar los 9 dígitos.

Con la finalidad de mostrar un numero a la vez cada 200ms podremos utilizar una condicional if {} y un array con los diferentes números hexadecimales para cada dígito, no es la única manera de solucionarlo.

Analizando el programa :

#include <xc.h> #include "INICIALIZASISTEMA.h" #include "DELAY.h" // SUB PROGRAMA DE RETARDO

// CONSTANTES:

const unsigned char Display[16] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79,0x71};

// CODIGO HEXADECIMAL QUE REPRESENTA 0, 1 ,2 ,3 ,4 , 5, 6 ,7 ,8 ,..... unsigned char contador=0; // Variable que se usará para contar

// PROGRAMA PRINCIPAL:

int main(void) { TRISD=0;// El puerto D es entradas TRISA=0; PORTAbits.AN0=1; // salida PORTD=Display[contador]; // Coloca en el puerto B el contenido de la tabla

// BUCLE: while(1){ // Bucle infinito condición siempre verdadera!! MsDelay(150); // Espera medio segundo PORTD=Display[contador]; // Coloca en el puerto B el contenido de la tabla contador++; // Incrementa el contador if(contador>15) // Contador = 15? contador=0; // Entonces contador es 0 } return 0; }

// SUB-PROGRAMA RETARDO:

void MsDelay (unsigned int itime){ unsigned int i; unsigned int j; for (i = 0; i < itime; i++) { for (j = 0; j < 165; j++) { } } }

EL proyecto a sido un exito, hemos logrado enviar por el pueto D la combinacion adecuado y exponer al numero un determinado tiempo para proceguir con el siguiente numero, veamos de manera física el funcionamiento:

Por ultimo, agradezco la atención, si tienen alguna consulta, no duden en ponerse en contacto con nosotros que gustosamente responderemos a sus inquietudes.

Éxitos, hasta pronto.....


About Me.

I'm a paragraph. Click here to add your own text and edit me. I’m a great place for you to tell a story and let your users know a little more about you.

  • Black Facebook Icon
  • Black Instagram Icon
  • Black Twitter Icon
Never Miss a Post!
bottom of page