Envío Gratis en compras mínimas de $1200 mxn Enviamos a toda la Republica Mexicana
Buscar

Librería Mod DISP – MPLAB X

El MOD display se trata de un módulo en el que se encuentra un arreglo de 4 displays de 7 segmentos de ánodo común, que ya cuenta con los transistores para multiplexar, así como las resistencias limitadoras de corriente. Esto facilita su uso y reduce las conexiones necesarias para utilizarlo.


Declaración de pines

El MOD display es un dispositivo que cuenta con 13 pines. Uno de ellos es para la alimentación de los transistores, sin embargo, los restantes deben declarase al inicio del proyecto, y puede ser cambiados por el usuario con las siguientes líneas.

//Declaración de pines del MOD DISPLAY -- MODIFICAR AL GUSTO SI ES NECESARIO
#define MILLARES    LATDbits.LD7
#define CENTENAS    LATDbits.LD6
#define DECENAS     LATDbits.LD5
#define UNIDADES    LATDbits.LD4
//Puerto para mostrar la numeracion - CAMBIAR AL GUSTO SI ES NECESARIO
#define PUERTO      LATB

Nota: En el programa principal deben configurarse los pines del puerto B o el utilizado como salidas digitales.

 


Funciones

  • DISPLAY(x)

Mostrar un número entero de hasta 4 dígitos: Esta función tiene como parámetro de entrada el valor a mostrar. Para ello se hace uso de la técnica del multiplexeo, así como la separación de dígitos, permitiendo mostrar números entre 0 y 9 999, es útil para mostrar los valores medidos por algún sensor o mostrar el valor de algún contador. (Si se manda un “15” o un número que no sea de 4 cifras se completará con ceros a la izquierda y se mostrará un “0015”).

Por ejemplo:

DISPLAY(9073);
  • DIGITO(x,y)

Mostrar un dígito en una posición definida. De igual manera hace uso de la técnica del multiplexeo, pero ya no se realiza la separación de dígitos, dejando esta tarea al usuario, es útil para el desarrollo de relojes con el MOD display. Esta función tiene 2 parámetros de entrada, el dígito y la posición, el dígito debe ser entre 0 y 9. Por otro lado, la posición debe ser un número entre 1 y 4 como se explica en la siguiente tabla:

 

Posición

Digito

1

Unidades

2

Decenas

3

Centenas

4

Unidades de millar

 

Por ejemplo:

DIGITO(9,4);
DIGITO(0,3);
DIGITO(7,2);
DIGITO(3,1);

 


Conexiones (Miuva 18 / PIC 18F46K22)

Las conexiones mencionadas en la librería pueden observarse en la siguiente ilustración, pero pueden cambiarse según lo requiera el usuario. ES IMPORTANTE QUE EL PIN “A” DEL MOD DISPLAY ESTÉ CONECTADO CON EL PIN “0” DEL PUERTO UTILIZADO.

Este ejemplo está basado en la tarjeta de desarrollo Miuva 18 que cuenta con el PIC 18F46k22 pero podrá ser utilizada en cualquier otra de nuestras tarjetas de la serie Miuva.

Mod DISPLAY

Miuva 18

A

B0

B

B1

C

B2

D

B3

E

B4

F

B5

G

B6

DP

B7

D1

D4

D2

D5

D3

D6

D4

D7

 

 

 


Código de ejemplo (Miuva 18 / PIC 18F46K22)

Nota: Es importante incluir la librería después de declarar la frecuencia del oscilador en el programa principial.

#include <xc.h>

//Configuracion de los fusibles
#pragma config PLLDIV = 2, CPUDIV = OSC1_PLL2, USBDIV = 2
#pragma config FOSC = HSPLL_HS, FCMEN = OFF, IESO = OFF
#pragma config PWRT = OFF, BOR = OFF, VREGEN = OFF
#pragma config WDT = OFF
#pragma config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF
#pragma config STVREN = ON, LVP = OFF, ICPRT = OFF, XINST = OFF

//Frecuencia del oscilador
#define _XTAL_FREQ 48000000
//Librerias
#include "Display_libreria.h"

//Variables globales
int contador = 1950;

void main(void) {
    //Declarar pines del puerto B y puerto D como salidas digitales
    TRISB = 0x00;
    TRISD = 0x00;
    //Limpiar puerto B y puerto D
    LATD = 0x00;
    LATB = 0x00;
    //Configuramos interrupciones del PIC
    INTCONbits.GIE_GIEH = 0; //Deshabilitamos interrupciones globales
    INTCONbits.PEIE_GIEL = 0; //Deshabilitamos interrupciones periféricas
    RCONbits.IPEN = 0; // apagamos prioridades
    T0CONbits.TMR0ON = 0; //Apagamos módulo de TIMER0
    //Configuramos fuentes de interrupción
    INTCONbits.TMR0IE = 1; //Habilitamos interrupción por desbordamiento
    INTCONbits.TMR0IF = 0; //Limpiamos bandera de interrupción del TMR0
    //Configuramos módulo TMR0
    T0CONbits.T08BIT = 0; //Seleccionamos registro de 16 bits
    T0CONbits.T0CS = 0; //Fuente de reloj viene de FOSC
    T0CONbits.PSA = 0; //Activamos preescaler
    T0CONbits.T0PS = 0b111; //Preescala seleccionada de 1:256
    TMR0 = 28035; //Valor de inicio del timer 0 para interrupcion cada 800 ms
    T0CONbits.TMR0ON = 1; //Encendemos módulo de TIMER0
    INTCONbits.GIE_GIEH = 1; //habilitamos interrupciones globales
    INTCONbits.PEIE_GIEL = 1; //habilitamos interrupciones periféricas
    
    while(1){
        //Formas para mostrar un numero
        
        //CON UNA VARIABLE
        DISPLAY(contador);
        
        //////////PRIMERA FORMA CON LA FUNCION DISPLAY
        //DISPLAY(72350);
        
        ////////SEGUNDA FORMA CON LA FUNCION DIGITO
        //DIGITO(7,4); 
        //DIGITO(2,3);
        //DIGITO(3,2);
        //DIGITO(5,1);
    }
    return;
}

void __interrupt() myISR(){ //Funcion de interrupciones, my interruption service rutine
    if(INTCONbits.TMR0IF == 1){ //Estructura if, preguntamos activación de la bandera del timer1
        contador++; //Iniciamos el conteo ascendente
        if (contador > 9999) contador = 0;
        TMR0 = 28035; //Valor de inicio del timer 0 para interrupciones cada 800 ms
        INTCONbits.TMR0IF = 0; //Limpiamos bandera de interrupcion  
        } 
    return;
}

 

 


Funcionamiento

 

 


Descarga de archivos

Descargar librería