SlideShare una empresa de Scribd logo
Cuando se guardan datos en los Microcontroladores, a veces no es suficiente memoria para guardarlos,
y se necesita una memoria externa para cumplir con los deseado, normalmente estas memorias son de
tipo EEPROM o RAM todo depende de la aplicación, la desventaja más notable cuando usamos este tipo
de memorias es su memoria limitada, ya que a veces necesitamos guardar MegaBytes, y por supuesto
solo existen memorias MMC para grandes almacenamientos tanto temporales o permanentes.
En este proyecto se mostrara como guardar las
imágenes en una memoria MMC y después que sean
leídas desde un Microcontrolador para que este
Visualice la imagen, por supuesto la imagen va hacer
solo blanco y Negro.
Con esto podemos entender, usando este tipo de
memorias podemos ahorrar recursos del
Microcontrolador, y evitar usar memorias de tipo
EEPROM o RAM, y tener mucha memoria de datos casi
interminables.
Dibujando Imágenes
Usaremos el software Bitmap2LCD BASIC V1.7 para empezar hacer los dibujos, para ello primero
vallamos abrir el software:
Crearemos un Visualizador
de imágenes guardadas en una
Tarjeta MMC y proyectas a un GLCD
Monocromático.
Esquema de una Memoria 24CXX de Microchip
Tarjeta MMC & GLCD
PROYECTO #4 Página 154
Al estar en el software solo bastaría de abrir la ventana donde vamos a Dibujar o deseamos usar un
dibujo ya realizado solo buscaremos que este en el formato .bmp o .jpg.
Tarjeta MMC & GLCD
PROYECTO #4 Página 155
Al tener la imagen ya seleccionada solo bastaría presionar dos veces a la imagen que se muestra para
que nos envié al editor, nos preguntara en ocasiones si deseamos hacer la imagen del tamaño necesario
para mostrarse.
Después moveremos el trackbar para atenuar el dibujo hasta donde
nosotros queramos, después si queremos escribir algo usaremos la
herramienta para escribir texto. Después solo bastaría generar el código,
del cual solo debemos de tener el formato hexadecimal sin simbolos como
son: 0X00 ya que afectara el resultado cuando lo pasemos a la memoria
MMC.
Para generar el código debemos de ir nuevamente a la hoja principal, he ir
a la opción <Ouputs> y buscar la opción <Open and Closet he
configuration Panel for Output Formats> y configurar tal como se ve en la
imagen las siguientes opciones:
1.- Constants per line = 8
2.-Constat Format = +hex+
3.-Constant Separator = none
4.- Comment prefix = */abc/*
5.-End for char line = none
6.-File ext = .h
Tarjeta MMC & GLCD
PROYECTO #4 Página 156
Al tener esto solo bastaría de generar el código en el botón:
Y rápidamente se generar el código necesario para mostrar la imagen, después de tener este código en
formato hexadecimal, tal como hemos predicho.
Nota: Si desea generar los datos de cada dibujo y después pegarlos en un bloc de notas que estén
seguidos todos los datos para facilitar el traslado a winhex.
Grabando datos en WINHEX
Como sabemos WINHEX es un software que nos permite ver los datos de archivos en modo
hexadecimal, como puede ser los datos guardados en una memoria MMC.
Después conectaremos la tarjeta a la computador, ya que a veces las computadoras
contienen lectores de tarjetas MMC o de microSD, este último se puede conectar de
dos formas con bases para microSD o con bases de conexión por USB.
Tarjeta MMC & GLCD
PROYECTO #4 Página 157
Base para microSD
Base para microSD con conexión a USB.
Al conectar la tarjeta a la computadora debemos de leerla con WINHEX, para ello debemos de ir a la
opción <Abrir Disco> y buscamos la memoria, se encontrara dos opciones, “Unidades lógicas” y
“Soportes Físicos” donde en cada uno de ellos estará la memoria conectada, hay que tener mucho
cuidados al elegir una de las dos opciones ya que una sirve simplemente para leer y otra
para leer y escribir.
La opción correcta es <RM1: Generic USB SD Reader (489MB,
USB)>esto permite escribir en la tarjeta MMC. Al presionar
<Aceptar> nos dirigirá a los datos de un sector privado, donde estos
valores no se pueden modificar, ya que son de fábrica. Para ello
empezaremos en el sector 20, para ir al sector vente solo debemos
de ir a la opción:
<Ir al sector> al entrar a esta opción aparecerá una ventana donde nos pedirá el numero del sector,
nosotros debemos de escribir simplemente el numero del sector y presionar <Aceptar> y rápidamente el
cursor se dirigirá al sector 20.
Tarjeta MMC & GLCD
PROYECTO #4 Página 158
Al tener todos los datos, de todas las imágenes grabadas en un bloc de notas, solo bastaría copiar todo
he ir para pegar los datos en la memoria a:
Copiamos todos los datos
Buscaremos la opción <Escribir Portapapeles> y este abrirá otra ventana para
decirle que vamos a escribir código ASCII Hex.
Y listo todos los datos estarán en color Azul.
Datos pasados a la memoria
Tarjeta MMC & GLCD
PROYECTO #4 Página 159
Después simplemente guardamos todos los datos en memoria en la opción de <Guardar> solo bastaría
de remover la memoria y colocarlo en la base para probarlo en el protoboard.
Programa de Microcontrolador PIC18F4550
Para pedir la imagen a la tarjeta microSD debemos de crear una función donde guarde temporalmente
una lectura 512 byte del cual solo es la mitad de la imagen y que este lo proyecte cuando termine de
proyectar la mitad de la imagen, pida nuevamente la otra mitad sobrescribiendo el buffer de 512 byte
del Microcontrolador.
La lógica por diagrama de flujo es el siguiente:
Inicio de función de Imagen en
MMC
Pide 512 byte de la tarjeta y la
guarda en un buffer
Proyecta la mitad de la imagen
en el GLCD
Pide 512 byte de la tarjeta y la
guarda en un buffer
Proyecta la mitad de la imagen
en el GLCD
return
Tarjeta MMC & GLCD
PROYECTO #4 Página 160
La función en C es la siguiente:
El programa del Microcontrolador es el siguiente:
////////////////////////////////////////////////////////
// PROYECTO CON GLCD ////
//Autor: george.manson.69 ////
//Lugar: Mexico ////
//Compilador: HI TECH PIC18 (LITE MODE) ////
////////////////////////////////////////////////////////
#include<htc.h>
#include<stdio.h>
/////////////////////////////////////////////////////////////
//Configuracion para trabajar Con oscilador interno de 8Mhz
__CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC);
/////////////////////////////////////////////////////////////
__CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & WDTPS32K);
__CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN);
__CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,UNPROTECT);
__CONFIG(7,UNPROTECT);
//////////////////////////////
//Frecuencia FOSC 8Mhz
//////////////////////////////
#define _XTAL_FREQ 8000000
////////////////////////////////////////////////////
//FUNCION QUE TOMA DE LA TARJETA LAS IMAGENES ///
//Y DESPUES LAS PONE EN EL GLCD ///
//YA QUE UNA IMAGEN PUEDE TENER 1024 BYTE, Y SOLO ///
//LA TARJETA PUEDE TOMAR 512 BYTES ENTONCES ///
//SE PIDE PRIMERO LOS 512 BYTE Y DESPUES EL RESTO ///
////////////////////////////////////////////////////
unsigned char GLCD_MMC_image(unsigned long dir,unsigned char color){
unsigned char i,j,error;
volatile unsigned char *ptr;
signed char k;
for(unsigned char s=0;s<2;s++){
if(!SDCard_read_block(dir+s,&BUFF)){
return 1;
}
ptr=&BUFF;
for(i=s*32;i<(s*32)+32;i++){
for(j=0;j<16;j++){
for(k=7;k>-1;--k){
if((*ptr&(unsigned char)(1<<(7-k)))!=0){
GLCD_point((j*8)+k,i,color);
error=0;
}
}
*ptr++;
}
}
}
return error;
}
Tarjeta MMC & GLCD
PROYECTO #4 Página 161
#include"libSDHARD/MMChardware.h"
#include"libGLCD/glcd.h" //Libreria para trabajar con GLCD
//////////////////////////////
//Variable Globales //
//////////////////////////////
volatile unsigned char BUFF[512]@0x400;//Accedemos a 1kbyte del USB
//////////////////////////////
//FUNCION DE 1 SEG //
//////////////////////////////
void DELAY1S(void){
unsigned char time;
for(time=0;time<100;time++){
__delay_ms(10);
}
}
////////////////////////////////////////////////////
//FUNCION QUE TOMA DE LA TARJETA LAS IMÁGENES ///
//Y DESPUES LAS PONE EN EL GLCD ///
//YA QUE UNA IMAGEN PUEDE TENER 1024 BYTE, Y SOLO///
//LA TARJETA PUEDE TOMAR 512 BYTES ENTONCES ///
//SE PIDE PRIMERO LOS 512 BYTE Y DESPUES EL RESTO///
////////////////////////////////////////////////////
unsigned char GLCD_MMC_image(unsigned long dir,unsigned char color){
unsigned char i,j,error;
volatile unsigned char *ptr;
signed char k;
for(unsigned char s=0;s<2;s++){
if(!SDCard_read_block(dir+s,&BUFF)){
return 1;
}
ptr=&BUFF;
for(i=s*32;i<(s*32)+32;i++){
for(j=0;j<16;j++){
for(k=7;k>-1;--k){
if((*ptr&(unsigned char)(1<<(7-k)))!=0){
GLCD_point((j*8)+k,i,color);
error=0;
}
}
*ptr++;
}
}
}
return error;
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
//////////////////////////////
//FUNCION PRINCIPAL
//////////////////////////////
void main(void){
OSCCON=0x70;//Oscilador a 8Mhz
NOP();NOP();NOP();NOP();
Tarjeta MMC & GLCD
PROYECTO #4 Página 162
//////////////////////////////////////////////////////////////////////
// Configuracion de Puertos ///
//////////////////////////////////////////////////////////////////////
TRISB=0x01;//SDI,CLK
TRISC=0; //SD0,CS
TRISD=0; //DB0~DB7
TRISE=0; //
PORTB=0;
ADCON0=0;
ADCON1=0x0F;
CMCON=0x07;
/*---------------------Fin de Conf. Puertos-------------------------*/
//////////////////////////////////////////////////////////////////////
// Configuracion de SPI ///
//////////////////////////////////////////////////////////////////////
OpenSPI(SPI_FOSC_4 , //Modo Master,clock=Fosc/4
MODE_11 , //modo de L_H
SMPMID);
/*---------------------Fin de Conf. SPI-----------------------------*/
//iNICIALIZA GLCD
GLCD_init(1);
GLCD_clear(1);
//INICIALIZA MMC
if(!SDCard_init()){
GLCD_text(0,0,(unsigned char*) "MMC ERROR",1,0);
while(1);
}else
GLCD_text(0,0,(unsigned char*)"MMC SUCCESSFUL",1,0);
//MANDA A DIBUJAR LAS IMAGENES A MOSTRAR EN EL GLCD
for(unsigned char ms=20;ms<28;ms+=2){
DELAY1S();
GLCD_clear(1);
if(GLCD_MMC_image(ms,0)){
GLCD_clear(1);
GLCD_text(0,0,(unsigned char*)"ERROR AL CARGAR",1,0);
while(1);
}
}
while(1);
}
He puesto 4 imágenes para proyectar en el GLCD alternadamente por 1 segundo, como son 4 imágenes
y cada una es de 1023 byte entonces estamos usando 4092 bytes de la tarjeta MMC, que en realidad no
es nada para la tarjeta de 512 MB. Como vemos es un gran alivio para el Microcontrolador ya que no
utiliza recursos, sino simplemente pide los datos y los guarda en un buffer y utiliza este buffer para
proyectar las imágenes (mitad tras mitad).
Tarjeta MMC & GLCD
PROYECTO #4 Página 163
El Esquema es el siguiente:
Tarjeta MMC & GLCD
PROYECTO #4 Página 164
Fotos del proyecto:

Más contenido relacionado

La actualidad más candente

Timers 2
Timers 2Timers 2
Timers 2
georgemanson69
 
Glcd 6
Glcd 6Glcd 6
Ejemplos pic c
Ejemplos pic cEjemplos pic c
Ejemplos pic c
Wilmer Lizunde Damiano
 
Pikit3 parte i-
Pikit3 parte i-Pikit3 parte i-
Pikit3 parte i-
Gerardo Garcia
 
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN CMANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
Luis Zurita
 
Control lcd 16X2 proton
Control lcd 16X2 protonControl lcd 16X2 proton
Control lcd 16X2 proton
Yorman Moreno Hernandez
 
Microcontroladores PIC
Microcontroladores PICMicrocontroladores PIC
Microcontroladores PIC
Sohar Carr
 
Taxímetro con Pic16F887
Taxímetro con Pic16F887Taxímetro con Pic16F887
Taxímetro con Pic16F887
Derlis Hernandez Lara
 
Micro2 tema 5
Micro2 tema 5Micro2 tema 5
Micro2 tema 5
Luis Zurita
 
Motor pasopaso
Motor pasopasoMotor pasopaso
Motor pasopaso
David Santa Ospina
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
guestf09168b
 
Matriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en LinuxMatriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en Linux
SNPP
 
Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550
Deyvis Gonzales Guevara
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
dar851112
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
Juan Navarrete Guzman
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03
Hamiltonn Casallas
 
"Hola Mundo" C18, PIC18F y MPLAB
"Hola Mundo"  C18,  PIC18F y MPLAB"Hola Mundo"  C18,  PIC18F y MPLAB
"Hola Mundo" C18, PIC18F y MPLAB
BlackD10
 
Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02
Hamiltonn Casallas
 
Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04
Hamiltonn Casallas
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y teclado
Luis Zurita
 

La actualidad más candente (20)

Timers 2
Timers 2Timers 2
Timers 2
 
Glcd 6
Glcd 6Glcd 6
Glcd 6
 
Ejemplos pic c
Ejemplos pic cEjemplos pic c
Ejemplos pic c
 
Pikit3 parte i-
Pikit3 parte i-Pikit3 parte i-
Pikit3 parte i-
 
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN CMANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
 
Control lcd 16X2 proton
Control lcd 16X2 protonControl lcd 16X2 proton
Control lcd 16X2 proton
 
Microcontroladores PIC
Microcontroladores PICMicrocontroladores PIC
Microcontroladores PIC
 
Taxímetro con Pic16F887
Taxímetro con Pic16F887Taxímetro con Pic16F887
Taxímetro con Pic16F887
 
Micro2 tema 5
Micro2 tema 5Micro2 tema 5
Micro2 tema 5
 
Motor pasopaso
Motor pasopasoMotor pasopaso
Motor pasopaso
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
 
Matriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en LinuxMatriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en Linux
 
Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550
 
Tutorial proton part 2
Tutorial proton part 2Tutorial proton part 2
Tutorial proton part 2
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
 
Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03Curso de microcontroladores capitulo 03
Curso de microcontroladores capitulo 03
 
"Hola Mundo" C18, PIC18F y MPLAB
"Hola Mundo"  C18,  PIC18F y MPLAB"Hola Mundo"  C18,  PIC18F y MPLAB
"Hola Mundo" C18, PIC18F y MPLAB
 
Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02Curso de microcontroladores capitulo 02
Curso de microcontroladores capitulo 02
 
Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04Curso de microcontroladores capitulo 04
Curso de microcontroladores capitulo 04
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y teclado
 

Similar a Proyecto4

Materia arquitectura
Materia arquitecturaMateria arquitectura
Materia arquitectura
Sandra Carrillo
 
Manual Ic Prog
Manual Ic ProgManual Ic Prog
Manual Ic Prog
Ángel Acaymo M. G.
 
Camila r...
Camila r...Camila r...
Camila r...
grupocool98
 
Camila r...
Camila r...Camila r...
Camila r...
grupocool98
 
Presentacion sombre la Memoria RAM
Presentacion sombre la Memoria RAMPresentacion sombre la Memoria RAM
Presentacion sombre la Memoria RAM
FranciscoMurilloRomero
 
Tarjetas aceleradoras
Tarjetas aceleradorasTarjetas aceleradoras
Tarjetas aceleradoras
Jhon Acosta Bernal
 
Leccion 2 10 4
Leccion 2 10 4Leccion 2 10 4
Leccion 2 10 4
efrain
 
Leccion 2 10 4
Leccion 2 10 4Leccion 2 10 4
Leccion 2 10 4
efrain
 
Leccion 2 10 4
Leccion 2 10 4Leccion 2 10 4
Leccion 2 10 4
efrain
 
Empezando con las librerías gráficas de microchip
Empezando  con las librerías gráficas de  microchipEmpezando  con las librerías gráficas de  microchip
Empezando con las librerías gráficas de microchip
Biblioman Aquihayapuntes
 
Ensamble 2
Ensamble 2Ensamble 2
Ensamble 2
Mokii Valenciia
 
Presentación Tarjeta Madre
Presentación Tarjeta MadrePresentación Tarjeta Madre
Presentación Tarjeta Madre
guestc6bf7cd
 
dispositivos....
dispositivos....dispositivos....
dispositivos....
daniela
 
Dispositi..[1]Daniela
Dispositi..[1]DanielaDispositi..[1]Daniela
Dispositi..[1]Daniela
guestcc087d
 
Hardware
HardwareHardware
Hardware
Anna López
 
Lección 2
Lección 2Lección 2
Lección 2
GrupoSena41
 
Las memorias
Las memoriasLas memorias
Las memorias
Diego Lavado Hinojosa
 
Nivelación tecnología 1
Nivelación  tecnología 1Nivelación  tecnología 1
Nivelación tecnología 1
Heidy Rivera
 
Trabajo De Informatica 2009[1]
Trabajo De Informatica 2009[1]Trabajo De Informatica 2009[1]
Trabajo De Informatica 2009[1]
kika1108
 
Trabajo De Informatica 2009[1]
Trabajo De Informatica 2009[1]Trabajo De Informatica 2009[1]
Trabajo De Informatica 2009[1]
kika1108
 

Similar a Proyecto4 (20)

Materia arquitectura
Materia arquitecturaMateria arquitectura
Materia arquitectura
 
Manual Ic Prog
Manual Ic ProgManual Ic Prog
Manual Ic Prog
 
Camila r...
Camila r...Camila r...
Camila r...
 
Camila r...
Camila r...Camila r...
Camila r...
 
Presentacion sombre la Memoria RAM
Presentacion sombre la Memoria RAMPresentacion sombre la Memoria RAM
Presentacion sombre la Memoria RAM
 
Tarjetas aceleradoras
Tarjetas aceleradorasTarjetas aceleradoras
Tarjetas aceleradoras
 
Leccion 2 10 4
Leccion 2 10 4Leccion 2 10 4
Leccion 2 10 4
 
Leccion 2 10 4
Leccion 2 10 4Leccion 2 10 4
Leccion 2 10 4
 
Leccion 2 10 4
Leccion 2 10 4Leccion 2 10 4
Leccion 2 10 4
 
Empezando con las librerías gráficas de microchip
Empezando  con las librerías gráficas de  microchipEmpezando  con las librerías gráficas de  microchip
Empezando con las librerías gráficas de microchip
 
Ensamble 2
Ensamble 2Ensamble 2
Ensamble 2
 
Presentación Tarjeta Madre
Presentación Tarjeta MadrePresentación Tarjeta Madre
Presentación Tarjeta Madre
 
dispositivos....
dispositivos....dispositivos....
dispositivos....
 
Dispositi..[1]Daniela
Dispositi..[1]DanielaDispositi..[1]Daniela
Dispositi..[1]Daniela
 
Hardware
HardwareHardware
Hardware
 
Lección 2
Lección 2Lección 2
Lección 2
 
Las memorias
Las memoriasLas memorias
Las memorias
 
Nivelación tecnología 1
Nivelación  tecnología 1Nivelación  tecnología 1
Nivelación tecnología 1
 
Trabajo De Informatica 2009[1]
Trabajo De Informatica 2009[1]Trabajo De Informatica 2009[1]
Trabajo De Informatica 2009[1]
 
Trabajo De Informatica 2009[1]
Trabajo De Informatica 2009[1]Trabajo De Informatica 2009[1]
Trabajo De Informatica 2009[1]
 

Proyecto4

  • 1. Cuando se guardan datos en los Microcontroladores, a veces no es suficiente memoria para guardarlos, y se necesita una memoria externa para cumplir con los deseado, normalmente estas memorias son de tipo EEPROM o RAM todo depende de la aplicación, la desventaja más notable cuando usamos este tipo de memorias es su memoria limitada, ya que a veces necesitamos guardar MegaBytes, y por supuesto solo existen memorias MMC para grandes almacenamientos tanto temporales o permanentes. En este proyecto se mostrara como guardar las imágenes en una memoria MMC y después que sean leídas desde un Microcontrolador para que este Visualice la imagen, por supuesto la imagen va hacer solo blanco y Negro. Con esto podemos entender, usando este tipo de memorias podemos ahorrar recursos del Microcontrolador, y evitar usar memorias de tipo EEPROM o RAM, y tener mucha memoria de datos casi interminables. Dibujando Imágenes Usaremos el software Bitmap2LCD BASIC V1.7 para empezar hacer los dibujos, para ello primero vallamos abrir el software: Crearemos un Visualizador de imágenes guardadas en una Tarjeta MMC y proyectas a un GLCD Monocromático. Esquema de una Memoria 24CXX de Microchip
  • 2. Tarjeta MMC & GLCD PROYECTO #4 Página 154 Al estar en el software solo bastaría de abrir la ventana donde vamos a Dibujar o deseamos usar un dibujo ya realizado solo buscaremos que este en el formato .bmp o .jpg.
  • 3. Tarjeta MMC & GLCD PROYECTO #4 Página 155 Al tener la imagen ya seleccionada solo bastaría presionar dos veces a la imagen que se muestra para que nos envié al editor, nos preguntara en ocasiones si deseamos hacer la imagen del tamaño necesario para mostrarse. Después moveremos el trackbar para atenuar el dibujo hasta donde nosotros queramos, después si queremos escribir algo usaremos la herramienta para escribir texto. Después solo bastaría generar el código, del cual solo debemos de tener el formato hexadecimal sin simbolos como son: 0X00 ya que afectara el resultado cuando lo pasemos a la memoria MMC. Para generar el código debemos de ir nuevamente a la hoja principal, he ir a la opción <Ouputs> y buscar la opción <Open and Closet he configuration Panel for Output Formats> y configurar tal como se ve en la imagen las siguientes opciones: 1.- Constants per line = 8 2.-Constat Format = +hex+ 3.-Constant Separator = none 4.- Comment prefix = */abc/* 5.-End for char line = none 6.-File ext = .h
  • 4. Tarjeta MMC & GLCD PROYECTO #4 Página 156 Al tener esto solo bastaría de generar el código en el botón: Y rápidamente se generar el código necesario para mostrar la imagen, después de tener este código en formato hexadecimal, tal como hemos predicho. Nota: Si desea generar los datos de cada dibujo y después pegarlos en un bloc de notas que estén seguidos todos los datos para facilitar el traslado a winhex. Grabando datos en WINHEX Como sabemos WINHEX es un software que nos permite ver los datos de archivos en modo hexadecimal, como puede ser los datos guardados en una memoria MMC. Después conectaremos la tarjeta a la computador, ya que a veces las computadoras contienen lectores de tarjetas MMC o de microSD, este último se puede conectar de dos formas con bases para microSD o con bases de conexión por USB.
  • 5. Tarjeta MMC & GLCD PROYECTO #4 Página 157 Base para microSD Base para microSD con conexión a USB. Al conectar la tarjeta a la computadora debemos de leerla con WINHEX, para ello debemos de ir a la opción <Abrir Disco> y buscamos la memoria, se encontrara dos opciones, “Unidades lógicas” y “Soportes Físicos” donde en cada uno de ellos estará la memoria conectada, hay que tener mucho cuidados al elegir una de las dos opciones ya que una sirve simplemente para leer y otra para leer y escribir. La opción correcta es <RM1: Generic USB SD Reader (489MB, USB)>esto permite escribir en la tarjeta MMC. Al presionar <Aceptar> nos dirigirá a los datos de un sector privado, donde estos valores no se pueden modificar, ya que son de fábrica. Para ello empezaremos en el sector 20, para ir al sector vente solo debemos de ir a la opción: <Ir al sector> al entrar a esta opción aparecerá una ventana donde nos pedirá el numero del sector, nosotros debemos de escribir simplemente el numero del sector y presionar <Aceptar> y rápidamente el cursor se dirigirá al sector 20.
  • 6. Tarjeta MMC & GLCD PROYECTO #4 Página 158 Al tener todos los datos, de todas las imágenes grabadas en un bloc de notas, solo bastaría copiar todo he ir para pegar los datos en la memoria a: Copiamos todos los datos Buscaremos la opción <Escribir Portapapeles> y este abrirá otra ventana para decirle que vamos a escribir código ASCII Hex. Y listo todos los datos estarán en color Azul. Datos pasados a la memoria
  • 7. Tarjeta MMC & GLCD PROYECTO #4 Página 159 Después simplemente guardamos todos los datos en memoria en la opción de <Guardar> solo bastaría de remover la memoria y colocarlo en la base para probarlo en el protoboard. Programa de Microcontrolador PIC18F4550 Para pedir la imagen a la tarjeta microSD debemos de crear una función donde guarde temporalmente una lectura 512 byte del cual solo es la mitad de la imagen y que este lo proyecte cuando termine de proyectar la mitad de la imagen, pida nuevamente la otra mitad sobrescribiendo el buffer de 512 byte del Microcontrolador. La lógica por diagrama de flujo es el siguiente: Inicio de función de Imagen en MMC Pide 512 byte de la tarjeta y la guarda en un buffer Proyecta la mitad de la imagen en el GLCD Pide 512 byte de la tarjeta y la guarda en un buffer Proyecta la mitad de la imagen en el GLCD return
  • 8. Tarjeta MMC & GLCD PROYECTO #4 Página 160 La función en C es la siguiente: El programa del Microcontrolador es el siguiente: //////////////////////////////////////////////////////// // PROYECTO CON GLCD //// //Autor: george.manson.69 //// //Lugar: Mexico //// //Compilador: HI TECH PIC18 (LITE MODE) //// //////////////////////////////////////////////////////// #include<htc.h> #include<stdio.h> ///////////////////////////////////////////////////////////// //Configuracion para trabajar Con oscilador interno de 8Mhz __CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC); ///////////////////////////////////////////////////////////// __CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & WDTPS32K); __CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN); __CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS); __CONFIG(5,UNPROTECT); __CONFIG(6,UNPROTECT); __CONFIG(7,UNPROTECT); ////////////////////////////// //Frecuencia FOSC 8Mhz ////////////////////////////// #define _XTAL_FREQ 8000000 //////////////////////////////////////////////////// //FUNCION QUE TOMA DE LA TARJETA LAS IMAGENES /// //Y DESPUES LAS PONE EN EL GLCD /// //YA QUE UNA IMAGEN PUEDE TENER 1024 BYTE, Y SOLO /// //LA TARJETA PUEDE TOMAR 512 BYTES ENTONCES /// //SE PIDE PRIMERO LOS 512 BYTE Y DESPUES EL RESTO /// //////////////////////////////////////////////////// unsigned char GLCD_MMC_image(unsigned long dir,unsigned char color){ unsigned char i,j,error; volatile unsigned char *ptr; signed char k; for(unsigned char s=0;s<2;s++){ if(!SDCard_read_block(dir+s,&BUFF)){ return 1; } ptr=&BUFF; for(i=s*32;i<(s*32)+32;i++){ for(j=0;j<16;j++){ for(k=7;k>-1;--k){ if((*ptr&(unsigned char)(1<<(7-k)))!=0){ GLCD_point((j*8)+k,i,color); error=0; } } *ptr++; } } } return error; }
  • 9. Tarjeta MMC & GLCD PROYECTO #4 Página 161 #include"libSDHARD/MMChardware.h" #include"libGLCD/glcd.h" //Libreria para trabajar con GLCD ////////////////////////////// //Variable Globales // ////////////////////////////// volatile unsigned char BUFF[512]@0x400;//Accedemos a 1kbyte del USB ////////////////////////////// //FUNCION DE 1 SEG // ////////////////////////////// void DELAY1S(void){ unsigned char time; for(time=0;time<100;time++){ __delay_ms(10); } } //////////////////////////////////////////////////// //FUNCION QUE TOMA DE LA TARJETA LAS IMÁGENES /// //Y DESPUES LAS PONE EN EL GLCD /// //YA QUE UNA IMAGEN PUEDE TENER 1024 BYTE, Y SOLO/// //LA TARJETA PUEDE TOMAR 512 BYTES ENTONCES /// //SE PIDE PRIMERO LOS 512 BYTE Y DESPUES EL RESTO/// //////////////////////////////////////////////////// unsigned char GLCD_MMC_image(unsigned long dir,unsigned char color){ unsigned char i,j,error; volatile unsigned char *ptr; signed char k; for(unsigned char s=0;s<2;s++){ if(!SDCard_read_block(dir+s,&BUFF)){ return 1; } ptr=&BUFF; for(i=s*32;i<(s*32)+32;i++){ for(j=0;j<16;j++){ for(k=7;k>-1;--k){ if((*ptr&(unsigned char)(1<<(7-k)))!=0){ GLCD_point((j*8)+k,i,color); error=0; } } *ptr++; } } } return error; } ///////////////////////////////////////////////// //Funcion de interrupcion //Si no se usa simplemente no hacemos nada... //Esto sirve para direccionar lo los datos //en un lugar muy cercano al Inicio de la memoria //de datos //////////////////////////////////////////////// static void interrupt isr(void){} ////////////////////////////// //FUNCION PRINCIPAL ////////////////////////////// void main(void){ OSCCON=0x70;//Oscilador a 8Mhz NOP();NOP();NOP();NOP();
  • 10. Tarjeta MMC & GLCD PROYECTO #4 Página 162 ////////////////////////////////////////////////////////////////////// // Configuracion de Puertos /// ////////////////////////////////////////////////////////////////////// TRISB=0x01;//SDI,CLK TRISC=0; //SD0,CS TRISD=0; //DB0~DB7 TRISE=0; // PORTB=0; ADCON0=0; ADCON1=0x0F; CMCON=0x07; /*---------------------Fin de Conf. Puertos-------------------------*/ ////////////////////////////////////////////////////////////////////// // Configuracion de SPI /// ////////////////////////////////////////////////////////////////////// OpenSPI(SPI_FOSC_4 , //Modo Master,clock=Fosc/4 MODE_11 , //modo de L_H SMPMID); /*---------------------Fin de Conf. SPI-----------------------------*/ //iNICIALIZA GLCD GLCD_init(1); GLCD_clear(1); //INICIALIZA MMC if(!SDCard_init()){ GLCD_text(0,0,(unsigned char*) "MMC ERROR",1,0); while(1); }else GLCD_text(0,0,(unsigned char*)"MMC SUCCESSFUL",1,0); //MANDA A DIBUJAR LAS IMAGENES A MOSTRAR EN EL GLCD for(unsigned char ms=20;ms<28;ms+=2){ DELAY1S(); GLCD_clear(1); if(GLCD_MMC_image(ms,0)){ GLCD_clear(1); GLCD_text(0,0,(unsigned char*)"ERROR AL CARGAR",1,0); while(1); } } while(1); } He puesto 4 imágenes para proyectar en el GLCD alternadamente por 1 segundo, como son 4 imágenes y cada una es de 1023 byte entonces estamos usando 4092 bytes de la tarjeta MMC, que en realidad no es nada para la tarjeta de 512 MB. Como vemos es un gran alivio para el Microcontrolador ya que no utiliza recursos, sino simplemente pide los datos y los guarda en un buffer y utiliza este buffer para proyectar las imágenes (mitad tras mitad).
  • 11. Tarjeta MMC & GLCD PROYECTO #4 Página 163 El Esquema es el siguiente:
  • 12. Tarjeta MMC & GLCD PROYECTO #4 Página 164 Fotos del proyecto: