PIC18F25K22 & XC8: Librería para pantalla Nokia5110


Anteriormente les había comentado que andaba probando la pantalla Nokia5110, toco el turno de dejarles por así decirle una primera versión de mi librería pensada para el compilador XC8 (Debo comentar que el firmware original lo vi en un repositorio de GitHub, desconozco por que el enlace que tenia guardado esta roto, pero posiblemente fue por alguna actualización, busque todo sus repositorios y encontré esto "ir a enlace"), bueno la librería que encontré esta pensada para arduino pero reutilice su código, modifique y agregue otras partes para poder trabajar con el compilador XC8, y aquí les comparto mi resultado.

Circuito:
En un principio la librería estaba para usarse en los pines SPI del microcontrolador (Fue el vídeo e información que compartí anteriormente) analizando algo de la comunicación SPI me fue posible realizar una función para emularlo por así decirlo, para poder utilizar cualquier pin del microcontrolador, claro siempre y cuando sirva como entrada o salida, por el momento solo he probado con el PIC18F25K22 que es el único que tengo a la mano que trabaja a 3.3V ya que no me quise meter en líos al acoplar los voltajes (mi intención solo era probar la librería para la pantalla).

El circuito básico para manejar la pantalla es el siguiente:


Código:
Para el demo es algo muy sencillo, una imagen de inicio, seguido de un par de textos y por ultimo un contador automático de 4 dígitos, debo comentar que para acceder a toda la información al final he dejado el enlace de descarga, bueno aquí main del demo para la librería:
/*******************************************************************************
*
* Control de LCD Nokia 5110
*
*******************************************************************************
* FileName: main.c
* Processor: PIC18F25K22
* Complier: XC8 v1.30
* Author: Pedro Sánchez (MrChunckuee)
* Blog: http://mrchunckuee.blogspot.com/
* Email: mrchunckuee.psr@gmail.com
* Description: Probando libreria para LCD Nokia5110, para cambiar la
* distribucion de pines modificar en PCD8544.h
*******************************************************************************
* Rev. Date Comment
* v1.00 20/02/2016 Creación del firmware
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <pic18f25k22.h>
#include "Config_FusesPIC.h" //Only here
#include "PCD8544.h"
#define _XTAL_FREQ 8000000
extern const unsigned char EYR_ImageLogo[];
unsigned char DISPLAY_COUNT[4];
unsigned int ACC;
void MCU_Init(void);
void Delay_ms(unsigned int t);
void MCU_MensajeInicio(void);
void MCU_DisplayUpdate(void);
void main(void){
MCU_Init();
EYRLCD_Init();
EYRLCD_Clear();
Delay_ms(10);
ACC=0;
MCU_MensajeInicio();
while(1){
ACC++;
if (ACC>1234){
DISPLAY_COUNT[0]='0';
DISPLAY_COUNT[1]='0';
DISPLAY_COUNT[2]='0';
DISPLAY_COUNT[3]='0';
ACC=0;
}
itoa(DISPLAY_COUNT, ACC, 10);
MCU_DisplayUpdate();
Delay_ms(100);
}
}
void MCU_Init(void){
ANSELA=0x00; //all digital
ANSELB=0x00; //all digital
ANSELC=0x00; //all digital
OSCCONbits.IRCF=0b110; //Fosc=8MHz
TRISB=0x00; //PORTB output
}
void Delay_ms(unsigned int t){
unsigned int j;
for(j=0;j<t;j++){
__delay_ms(1);
}
}
void MCU_MensajeInicio(void){
//Mensaje de inicio
EYRLCD_Bitmap(EYR_ImageLogo, 0, 0);
Delay_ms(3000);
EYRLCD_Clear();
EYRLCD_WriteString("Libreria LCD", 0, 0);
EYRLCD_WriteString("Nokia 5110", 0, 9);
EYRLCD_WriteString("Contador", 0, 18);
EYRLCD_WriteString("MrChunckuee", 0, 27);
EYRLCD_WriteString("MPLABX & XC8", 0, 36);
Delay_ms(3000);
DISPLAY_COUNT[0]='0';
DISPLAY_COUNT[1]='0';
DISPLAY_COUNT[2]='0';
DISPLAY_COUNT[3]='0';
EYRLCD_Clear();
}
void MCU_DisplayUpdate(void){
EYRLCD_Clear();
EYRLCD_WriteString("Conteo:", 0, 0);
if (ACC<10){
EYRLCD_GotoXY(0, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[0]);
}
else if (ACC>=10 && ACC<100){
EYRLCD_GotoXY(0, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[0]);
EYRLCD_GotoXY(10, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[1]);
}
else if(ACC >=100 && ACC<1000){
EYRLCD_GotoXY(0, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[0]);
EYRLCD_GotoXY(10, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[1]);
EYRLCD_GotoXY(20, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[2]);
}
else if(ACC>=1000){
EYRLCD_GotoXY(0, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[0]);
EYRLCD_GotoXY(10, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[1]);
EYRLCD_GotoXY(20, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[2]);
EYRLCD_GotoXY(30, 10);
EYRLCD_WriteByte(DISPLAY_COUNT[3]);
}
}
Video:
Aquí un vídeo del circuito en acción: 
 

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.

Publicar un comentario

0 Comentarios