Proyecto4

12
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

Transcript of Proyecto4

Page 1: Proyecto4

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

Page 2: Proyecto4

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.

Page 3: Proyecto4

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

Page 4: Proyecto4

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.

Page 5: Proyecto4

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.

Page 6: Proyecto4

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

Page 7: Proyecto4

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

Page 8: Proyecto4

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 & PLL POSTDIV2 & CPUDIV1 & USBOSC); /////////////////////////////////////////////////// ////////// __CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BOR V45 & 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;

}

Page 9: Proyecto4

Tarjeta MMC & GLCD

PROYECTO #4 Página 161

#include"libSDHARD/MMChardware.h" #include"libGLCD/glcd.h" //Libreria para trabajar c on 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,unsi gned 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();

Page 10: Proyecto4

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).

Page 11: Proyecto4

Tarjeta MMC & GLCD

PROYECTO #4 Página 163

El Esquema es el siguiente:

Page 12: Proyecto4

Tarjeta MMC & GLCD

PROYECTO #4 Página 164

Fotos del proyecto: