PIC18F25K22 & XC8: Controlar dispays de 7 segmentos usando el integrado 74HC595 - Dos digitos ánodo común

Saludos! Hace un par de publicaciones comparti mi board "PIC18BT MCE Development Board" y tambien mi version de board para controlar displays de 7 segmentos de 1.8 pulgadas "Modulo BIG7SEG 2Display" asi que hoy toca ver un ejemplo usando ambas tarjetas.

Sponsor: PCBWay
Empresa manufacturera de PCBs y ensambles ubicada en China, con ya varios años en el mercado. Esta empresa nos permite realizar prototipos rápidos para nuestros desarrollos a medida., pero también permite realizar grandes producciones para proyectos comerciales. A continuación algunas características, si deseas saber mas o adquirir un servicio te recomiendo revisar su página.
  • Servicio de PCBs por tan solo $5 (USD) las 10 unidades, de 1 o 2 caras.
  • Cada nuevo miembro recibe un bono de $5(USD), más servicio express de 24Hs o 48Hs.
  • Servicio de ensamblado de PCBs por $30(USD)
  • Fabricación de esténcil, componentes y mas.
Lo primero a considerar, es que la PIC18BT MCE Development Board tiene un microcontrolador PIC18F25K22 y el regulador de voltaje utilizado es un uA78M05 por lo tanto la tarjeta y perifericos trabajan a 5 volts, ademas para el modulo de 7 segmetos tiene displays de ánodo común colocados de forma normal (recomiendo checar laspublicaciones de cada tarjeta para entender lo que estoy comentando), en otras puclicaciones mostrare que sucede al invertir un displays e incluso si los cambiamos por cátodo común.

Circuito:
Para ilustrar el circuito vamos ala siguiente imagen, ya que voy a utilizar tarjetas que ya he mostrado anteriormente en el blog solo mostrare a grandes rasgos como conectar estos modulos. Lo que si debo mencionar es que para las pruebas he alimendado la tarjeta del microcontrolador con el PICkit3 atravez del puerto ICSCP, para el modulo de los displays he usado un eliminador externo que me entrega 5.5volts ya que es lo que me recomienda usar el fabricante para que estos displays trabajen adecuadamente.


Código:
Como ya habia dicho en otros posts sobre este modulo de displays he tomado la idea de Settorezero, por lo tanto tambien debo dra credito a su codigo ya que he utilizado su version para PICs, claro he realizado un par de adecuaciones para que funcione con la board que he creado y algunos cambios dentro de la libreria (claro esta no me podre a comprar cauno de los cambios, mejor dejo el codigo final que estoy utilizando). 

Algo que si es importante recalcar, es la modificacion de los pines enj donde estan conectados cada uno de los segmentos del display al driver 74HC595, asi que para mi version queda de la siguiente forma.


Una vez especificado esto, he creado los archivos "Display7seg_74HC595.h" y "Display7seg_74HC595.c" en donde se almacena todo el codigo principal para el control del modulo de displays. Quiero suponer que llegado a este punto ya se sabe como funciona un 74HC595, asi que procedera a decir que el el codigo enviamos los datos en un formato MBS a LBS (Osea el mas significativo primero), por lo tando las declaraciones para cada segmento quedan de la siguiente forma:
#define SEG_A 0b00010000  
#define SEG_B 0b00001000  
#define SEG_C 0b00000001
#define SEG_D 0b00000100 
#define SEG_E 0b00000010  
#define SEG_F 0b01000000 
#define SEG_G 0b10000000  
#define SEG_P 0b00100000
Los numeros o letras se forma en el array con el nombre de "uint8_t digits[]", simplemente usamos una OR para unir todos los bits, como el display usado es de anodo comun necesitamos invertir los datos para funcione adecuadamente (tal vez en un futuro realice una version en donde soporte tambien catodo comun simplemente seleecionando algun #define, de momento se tendria que quitar la tilde "~" de cada numero), por lo mientras para la version de anodo comun tenemos.
uint8_t digits[]={         
    (uint8_t)~(SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F),      //  0=0
    (uint8_t)~(SEG_B|SEG_C),                                                         //  1=1
    (uint8_t)~(SEG_A|SEG_B|SEG_D|SEG_E|SEG_G),                 //  2=2
    ... (completo en Display7seg_74HC595.h)
    }; 
 Lo de mas del codigo creo que es comprendible con el ejemplo disponible para descargar, ademas que he agregado comentarios para saber que es lo que realiza cada funcion, conforme avance a las prueba ire haciendo modificaciones a la libreria de momento solo soporta 2 displays.

En este pundo creo que ya deberias saber como crear un proyecto, configurar bits, declarar entradas y salidas,configurar el oscilador, bueno hacer los primeros pasos con un microcontrolador, asi que ire directo al ejemplo, donde muestro la forma de mandar los datos al modulo de display.

La funsion "SYSTEM_Process()" se manda a llamar desde el main, lo primero que hacemos es limpiar o apagar todos los displays, seguido de la forma para mostar las letras y por ultimo un conteo realizado con un pequeño ciclo for.

Vídeo:
Aquí un par de videos mostrando diferentes configuraciones del modulo de displays de 7 segmentos, la primera prueba tiene losdos displays soldadas de forma normal (los puntos del displays quedan en la parte de abajo).


Para la segunda prueba he invertido el display de lado izquierdo, sin modificar el codigo y funciona adecuadamente (recomiendo ver la informacion del modulo para saber como se ha soldado). 


Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.


Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

Links:

Publicar un comentario

0 Comentarios