Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

30/11/2013 #1

Avatar de Gustavo.gmb

[APORTE] Contador 0 a 99 con PIC16F84A y display
Buenas a todos, quería aportarles este humilde trabajillo que hice recientemente, el cual se puede aplicar a cualquier proyecto que necesite un contador de 0 a 99 para visualizar algo.

Les dejo todos los archivos necesarios, no es la gran cosa, pero estoy seguro que a alguien le servirá
30/11/2013 #2

Avatar de solaris8

no se achique amigo, todo aporte es bueno y seguramente ayudara a otro, a realizar su proyecto.....
buen trabajo!!!
30/11/2013 #3


No es humilde porque tambien cuenta. Muchas gracias por compartir!
01/12/2013 #4

Avatar de jamesoro

pues gracias men, pues yo hace como 8 años hice un programita muy pequeño para ayudar con eso de los pic y aun me dan gracias y eso que pense que solo yo lo usaria
03/11/2015 #5


Contador 0 - 99
Buen día.

Estoy diseñando un contador 0-99 en BASIC ascendente y descendente con display y he logrado un contador hasta 9, ascendente.
No sé cómo implementar las funciones para lograr un contador hasta 99.

Adjunto diagrama y el código. Su interés es muy importante a fin de culminar este proyecto.

Progama en PicBasic Pro:

Código:
define Osc 4        ' Define el oscilador para un cristal de 4 Mhz.
        
        @device mclr_off 'apago MCLR
        trisa = %11110000
        trisb = %11110000 ' hace salidas solo los bits mas bajos
        numero var byte
        bot var porta.0
        flag var bit
        encerar:
        numero = 0
        display:
        portb = numero
        if bot = 0 then aumentar
        pause 80
        flag = 0
        goto display
        aumentar:
        if flag = 1 then goto display
        flag = 1
        if numero = 9 then encerar
        numero = numero + 1
        goto display
        end
Imágenes Adjuntas
Tipo de Archivo: jpg 0-99.jpg (141,6 KB (Kilobytes), 28 visitas)
03/11/2015 #6
Moderador

Avatar de D@rkbytes

Necesitas crear lo siguiente:
Crear una variable del tipo Byte 0 a 255. (Para el contador)
Otras dos variables del tipo Byte. (Una para las decenas y otra para las unidades)
Dos rutinas, una para incrementar y otra para decrementar la variable.
Una rutina para multiplexar los displays. Te recomiendo usar interrupción por desborde del Timer 0.

El procedimiento:
En el bucle principal del programa verificarás el estado de los pulsadores.
Tendrás un limite y un desborde, el tope será al incrementar y el desborde al decrementar la variable.
Cuando incrementas, no debes permitir que la variable pase de 99
Y al decrementar, no debes permitir que ocurra el desborde, porque al bajar de 0 la variable retornará a 255.

Posteriormente separas la variable "Contador" en decenas y unidades usando la instrucción "DIG"
A continuación realizas la mutiplexación de los displays. (No importando el orden para mostrar los dígitos)
Es decir, no tiene importancia si muestras primero las unidades y luego las decenas.
Lo que si es importante es el lugar donde se colocan. (Decenas en el display del lado izquierdo y unidades del lado derecho)

Espero sepas como se realiza el sistema multiplex en displays de 7 segmentos.
Este proceso lo harás durante el desborde del Timer 0, dando un corto tiempo de encendido a cada display para mostrar los dígitos.

No es complicado y el código en Basic tampoco lo es.

Nota:
Si usas la instrucción "LookUp" te puedes ahorrar el decodificador 7447.
Con esta instrucción puedes ir tomando los valores de las decenas y las unidades para obtener los bits de encendido de los segmentos de los displays.
Con esto se usa una tabla de valores para cada tipo de display. (Ánodo o cátodo común)
El valor obtenido lo mandas al puerto B y así compactas el circuito. La desventaja es que se usan 7 pines.
04/11/2015 #7


Aquí te dejo la función que te ha dicho el compañero, si no usas funciones no importa, lo importante es la tabla "LookUp". El primer byte de la tabla corresponde al cero y la correspondencia de los bit con los segmentos es la siguiente:
byte.0 = a
byte.1 = b
"
"
byte.6 = g
byte.7 = h

'Retorna valor: Byte
'Numero a mascara tipo digito display 7 segmentos
'numero = numero a procesar (0 a 9)
'_get7seg, retorna la mascara de los segmentos a activar
Function _get7seg(_numero As Byte) As Byte
_get7seg = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x80), _numero
End Function

Si te decides a usar dígitos multiplexados los pasos para imprimir en el display son los siguientes:

Apagas dígitos.
Cargas el puerto con el nuevo valor a mostrar.
Iluminas el digito que corresponde.
Antes de realizar más cambios en el display esperar 1mSeg.
Repetir el proceso para el siguiente digito.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.