Reproductor WAV con PIC18F25K50 y CEXduino?

0
0

Recientemente encontré un proyecto PIC 18F WAV Player: PCM via PWM (XC8) y decidí proponerlo a mis alumnos como proyecto para el curso Diseño Digital con Microcontroladores (Universidad Distrital, Facultad de Ingeniería 2016-I).  El proyecto documenta antecedentes de desarrollos similares con PIC’s y herramientas de desarrollo anteriores.  El reto era adaptarlo al PIC18F25K50 de las CEXduino/nano y trabajar con XC8.  Ayer hicieron su presentación y los resultados fueron excelentes! Felicitaciones y muchas gracias por su interés y entusiasmo!

Pero serán ellos mismos quienes  compartan sus resultados y expliquen el proyecto respondiendo a este post las siguientes preguntas:

  1. Cuales fueron las modificaciones principales hechas al código del proyecto de referencia para que opere en CEXduino?
  2. Cómo se maneja un display LCD gráfico tipo Nokia 5110 con CEXduino o CEX nano? Existen librerías recomendadas y cómo se integran al proyecto?
  3. Cómo se simula este LCD en Proteus?  A partir de cual versión?
  4. Cómo se conecta una tarjeta SD, microSD, a CEX duino y cuales son las dificultades con los diferentes tipos de memorias y sus tamaños?
  5. Cómo se simula en Proteus la SD?  Tipos soportados?  Cómo se manejan las imágenes de memoria SD en proteus y para qué?
  6. Por qué necesito utilizar un File System ?  Cuál?  Cómo se integra al proyecto?
  7. Es posible leer la SD sin usar un file system?
  8. Cómo se puede generar audio por PWM en un micro y que tiene que ver con PCM y con WAV?
  9. Por qué se usan dos conexiones SPI, una generada por hardware y otra por software? Por qué no se usa una sola con diferente Slave Select? Cuál se asigna a cada periférico y por qué?
  10. Cuál es la calidad del sonido en el proyecto, de qué depende y cómo se puede mejorar?

Favor al responder citar el número de la pregunta y el tema de la misma.  Gracias!

  • You must to post comments
0
0

5. Cómo se simula en Proteus la SD?  Tipos soportados?  Cómo se manejan las imágenes de memoria SD en proteus y para qué?

si bien al querer probar si el el MCU esta reconociendo la SD, en proteus se puede generar una simulación con el siguiente componente

SD CARD, que posee un VSM model dll : MMC.dll donde usted escoge si quiere que la SD sea reconocida por una secuencia SPI. si es asi necesita un archivo con extensión MMC (multimedia Card)  para poder ser reconocida, ahora ese tipo de extensiones no son comunes por lo tanto si usted tiene un audio .WAV necesita crear una imagen MMC para que lo pueda reconocer

hay que tener en cuenta que

para eso se necesita un programa llamado WINIMAGE:

winimage es un programa que se utiliza para modificar imágenes creadas por programas de copia de discos, ahora también permite crear imagenes basados en un File system que puede ser  FAT 12/16 o FAT 32

en este video se hará un tutorial de como poder crear una imagen MMC para utilizarla en una simulación en proteus.

 

 

 

 

 

  • You must to post comments
0
0

Respuesta a la pregunta

Cómo se maneja un display LCD gráfico tipo Nokia 5110 con CEXduino o CEX nano? Existen librerías recomendadas y cómo se integran al proyecto?

 

Hecha por

alumno:Juan Pablo Oviedo Perdomo

codigo: 20131005084.

curso: Diseño Digital con Micro controladores.( DDuC)

https://docs.google.com/document/d/1LXmO_QyiV71MgN9FiMCXqiUEagE0l_ovBMFbIfsc7Ss/edit

  • You must to post comments
0
0
  1. Como se puede generar audio a través de PWM en un micro y que tiene que ver con PCM y WAV?

Para la correcta reproducción de audio via PWM necesitamos una implementación adecuada tanto de Hardware como de Software.

HardWare: Para la reproducción de audio es necesario usar un filtro activo entre la salida de PWM y el parlante a utilizando para este caso un amplificador de audio como el LM386

SoftWare: Para el software tenemos que decidir la frecuencia de PWM a utilizar que deberá ser lo más alta posible para una mejor reproducción de audio esto se logra a través de la fórmula dada en el datasheet del PIC a utilizar y a través de esta elegir correctamente los valores a cargar en los registros de PR2 y el preescaler de TIMER2 teniendo en cuenta que deberá ser una resolución de 8 bits (los que maneja el archivo de audio WAV ) y no de 10 bits.

Para definir el periodo de trabajo bastará con asignar los bits menos significativos que se reciben de la comunicación serial del archivo al archivo WAV a CCP1CON<5,4> y los bits más significativos a CCPR1L, esto es posible debido a que la configuración para la lectura de WAV se maneja a través de bits que permite un más fácil manejo en los registros del PIC.

Tener en cuenta que debe ocurrir una interrupción generada por el archivo WAV para poder configurar el PWM en el siguiente código usado para PIC18F25k50 se ilustra esto.

En donde la interrupción generada por el archivo WAV está en el TIMER1

 

void PWM_Initialize(void){ //16MHz/2^8 = 62.5kHz

   

   T2CON = 0x00;

   PR2 = 0x3F;

   TMR2 = 0x00;

   PIR1bits.TMR2IF = 0;

   T2CONbits.TMR2ON = 1;

   

   //PWM1

   CCP1CON = 0x3C;     //Ciclo Útil 50%

   CCPR1L = 0x1F;

   

   //PWM2

   CCP2CON = 0x3C;     //Ciclo Útil 50%

   CCPR2L = 0x1F;

   

   PIR1bits.TMR1IF = 0;

   PIR1bits.TMR2IF = 0;   

}

 

void Timer1_Initialize(void){

   T1CONbits.RD16 = 1;         //Modo 16bits

   T1CONbits.TMR1CS = 0x00;    // Fosc/4

   

   TMR1H = 0;

   TMR1L = 0;

   

   //Interrupciones

   INTCONbits.GIE = 1; // Interrupción Habilitada

INTCONbits.PEIE = 1; // Interrupcion de perifericos Habilitada

PIR1bits.TMR1IF = 0; // Borrado de la Bandera de interrupcion

   

   T1CONbits.TMR1ON = 1;

}

 

//Interrupcion——————

void interrupt ISR(void){

   

   /****Interrupcion TMR1*****/

   if((PIE1bits.TMR1IE)&&(PIR1bits.TMR1IF)){

       TMR1H = TMR1H_Preload;

       TMR1L = TMR1L_Preload;

 

       Set_Duty_PWM1(WAV_L_BUFF[pWAVOUT]);

       ++pWAVOUT;

       pWAVOUT &=WAV_BUFFER_MASK;

       

       if(pWAVOUT == pWAVIN){       //buffer vacio

           //Deshabilitar TMR1 Interrupt

           PIE1bits.TMR1IE = 1;

       }

       PIR1bits.TMR1IF = 0;

   }

}

 

void Set_Duty_PWM1(unsigned char Duty1){

   CCPR1L = Duty1>>2;

   CCP1CON &=0b11001111;

   CCP1CON |=(Duty1<<4)&0b00110000;

}

 

void set_sampling_rate(unsigned long rate)

{

unsigned long preload;

preload = 65536 – ( 4000000 / rate );

TMR1H_Preload = (unsigned char)(preload>>8);

TMR1L_Preload = (unsigned char)(preload & 0x00FF);

}

 

void wav_putc(unsigned char c)

{

// Esperamos hasta que el buffer tenga un slot vacio

while (((pWAVIN+1) & WAV_BUFFER_MASK)==pWAVOUT);

WAV_L_BUFF[pWAVIN] = c;

pWAVIN = (pWAVIN + 1) & WAV_BUFFER_MASK; //

PIE1bits.TMR1IE = 1;

}

 

Para la reproducción de audio se usan archivos .WAV debido a que este tipo de archivos están almacenados usando PCM o modulación por ancho de pulso esto hace que los archivos .WAV sean archivos de compresión sin pérdidas y sea posible reproducirlos sin necesidad de un codec de audio lo que hace posible su reproducción vía PWM.

  • You must to post comments
0
0

1. Cuales fueron las modificaciones principales hechas al código del proyecto de referencia para que opere en CEXduino?

Las modificaciones principales se encuentran en el siguiente link:

https://drive.google.com/open?id=1bHf0hnMoDOy8fUXM84VX1peevyixx0aJ4aWOl5neU24

 

  • You must to post comments
0
0
  1. Porque se usan 2 conexiones SPI, una generada por Hardware y otra por Software? porque no se usa una sola con diferente SLAVE select? Cual se asigna a cada periférico y porque?

Se usa de esta manera debido a la diferencia en la tasa de baudios que cada periférico maneja, por esto, al ser tan diferentes sus velocidades de transferencia practico manejrlo como un SPI SLAVE, el SPI generado por software es bastante más lento que el SPI de hardware, por lo que se implementa en la LCD que es solo de escritura y maneja una tasa de transferencia más baja, por su parte la memoria SD al comunicarse pasar datos que necesitan una mayor tasa de baudios como lo son los archivos de audio se implementa a través de un SPI generado por software capaz de mantener una alta velocidad de transferencia entre el periférico, en este caso la SD, y el microcontrolador

  • You must to post comments
0
0

RESPUESTA WAV-NOMBRE: DIEGO ALEJANDRO BARRAGÁN VARGAS

CÓDIGO:20121005113

 

 

  • Cuáles fueron las modificaciones principales hechas al código del proyecto de referencia para que opere en CEXduino?

 

Las modificaciones principales realizadas al código para que opere en Cexduino con el pic18f25k50 son las siguientes:

Se observó cada clase y se visualizó que había un registro que cambiaba en general, el cuál era SSPCON1 que se usa en el PIC 18F4553 por el registro SSP1CON1 en el PIC18F25K50.

Se implementaron los fusibles de configuración del PIC18F25K50 para el correcto funcionamiento de su posterior simulación e implementación práctica.

De igual forma para compilar el código se compiló con la última versión de C del MPLABX IDE VS 3.20, la cuál es la versión 1.37 para XC8, porque en las anteriores versiones generaba error, porque no entendía las funciones de algunos archivo .h, tal es el caso de la clase diskio.h y pff.h.

Se implementó una copia del archivo para dejar  el código original para la simulación y la copia para el posicionamiento del bootloader del cexduino como lo explicado en el siguiente link:

 

https://docs.google.com/document/d/16y8fLdDysW8oqdDBG1-P-mITxkTxTKnbBjePcFhVkCc/edit?pref=2&pli=1#

 

Después se observó, entendió y analizó el funcionamiento de cada parte del código entendiendo las funciones realizadas por cada clase del código, teniendo en cuenta  también la separación de los relojes de la lcd con el socket, porque mientras el socket fue programado con hadware, el lcd fue programado con software.

Cabe recalcar también que se tuvo en cuenta la posición de cada pin del PIC18F4553 respecto al PIC18F25K50, para fortuna nuestra como son de la gama PIC18F, la variación al implementar cada pin es mínima y gracias a ello se pudo dejar la conexión del lcd y socket con el pic intacta, facilitando el análisis de este.

 

El montaje en general se puede observar en la siguiente figura:

IMAGEN 1

  1. Cómo se maneja un display LCD gráfico tipo Nokia 5110 con CEXduino o     CEX nano? Existen librerías recomendadas y cómo se integran al proyecto?

Una de las ventajas del enlace otorgado por el profesor que  es:

http://trinirobotics.com/?p=969

Es que tenía ya una librería hecha del lcd Nokia 5110 para PIC18F, lo cual facilitó bastante la manera de entenderlo y de implementarlo, porque la base principal de todo lcd  son las instrucciones que permiten borrar la pantalla, escribir y leer en ella, como de igual forma posicionar en la pantalla de este las letras, el código .h de la librería es:

#ifndef _LCD3310                                                                                                                                                                                                                                     #define _LCD3310                                                                                                                                                                                                                                      #define LCD_CLK              LATAbits.LATA5 // LATAbits.LATA0                                                                                                                                                #define LCD_DATA         LATAbits.LATA3 // LATAbits.LATA1                                                                                                                                                  #define LCD_DC              LATAbits.LATA2 // LATAbits.LATA2                                                                                                                                    #define  LCD_CE                  LATAbits.LATA1 // LATAbits.LATA3                                                                                                                                                              

#define  LCD_RESET       LATAbits.LATA0 // LATAbits.LATA5                                                                                                                                                 #define LCD_TRIS()          TRISA &= 0b11010000                                                                                                                                                                           #define BIT7 0b10000000                                                                                                                                                                                                         #define BIT6 0b01000000                                                                                                                                                                                                                       #define BIT5 0b00100000                                                                                                                                                                                                                 #define BIT4 0b00010000                                                                                                                                                                                                                  #define BIT3 0b00001000                                                                                                                                                                                                         #define BIT2 0b00000100                                                                                                                                                                                                         #define BIT1 0b00000010                                                                                                                                                                                                            #define BIT0 0b00000001                                                                                                                                                                                                        #define LCD_TCMD            0                                                                                                                                                                                                                        #define LCD_TDATA       1                                                                                                                                                                                                                   unsigned char lcd_str_width(const unsigned char *c);                                                                                                                                                         void lcd_send(unsigned char a, unsigned char cmd);                                                                                                                                                           void lcd_init(void);                                                                                                                                                                                                                             void lcd_test(void);                                                                                                                                                                                                                             void lcd_clear(void);                                                                                                                                                                                                                               void lcd_gotoxy(unsigned char x, unsigned y);                                                                                                                                                                       void lcd_putch(unsigned char c);                                                                                                                                                                                                 void lcd_puts(const char *s);                                                                                                                                                                                                          void lcd_puts2(char *s);                                                                                                                                                                                                                    void lcd_clear_line(unsigned char y);                                                                                                                                                                                         void lcd_text(unsigned char x, unsigned y, const char *s);                                                                                                                                               #endif          // _LCD3310

En este .h se puede observar la selección de los puertos A para cada función que van a desempeñar respectivamente.

Luego de generar el .h se procede a generar el archivo .c en donde se especifica la función creada del .h y se procede a  asignarle la correspondiente función.

Hay que tener en cuenta que los pines que colocan en esta por el PIC18F4553 sirven también para los pines del PIC18F25K50 y para implementar esta lcd en cexduino o cexnano basta con colocar los fusibles, generar la copia para implementar la dirección del bootloader y de igual forma dejar el código original para la simulación, teniendo lo siguiente:

IMAGEN 2

IMAGEN 3

Las librerías recomendadas a usar son las que  recomienda descargar  Microchip, sin embargo uno mismo puede generar sus propias librerías teniendo en cuenta los registros que el controlador de la lcd entiende por las funciones básicas de borrado, escritura, lectura y posicionamiento en la pantalla de la lcd. De igual forma el display Nokia 5110/3310 (también conocido como el PCD8544) es un LCD grafico de 48×84 pixeles monocromático que trabaja a 3.3v lo cual permite adaptarlo al nivel de tensión que aporta la tarjeta CEXduino, usando el protocolo SPI. Contiene cuatro leds en cada uno de sus cuatro lados permitiendo iluminación en la pantalla, consume poca potencia, cuenta con una velocidad de transferencia máxima de 4 Mbits/s y contiene ocho pines (esto se puede observar en la ilustración 3).

Cabe aclarar que para la conexión del display al pic es necesario el uso de unas librerías adecuadas las cuales son:

#include <xc.h>                                                                                                                                                                                                                                                   #include “lcd3310.h”                                                                                                                                                                                                                                            #include “config.h”      //Configuración de los fusibles

Como se comentó anteriormente funciones adicionales al pic se colocan en el archivo.C.

  1.   Cómo se simula este LCD en Proteus?  A partir de cual versión?

Para simular el display nokia 5110 en proteus se deben añadir las librerías .h que incluye la lcd5110.h de Nokia con la <xc.h> que es una librería general que se recomienda incluirla.

IMAGEN 4

Las librerías están disponibles para las versiones:

-Proteus v6.9 SP5

-Proteus v7.2 SP2

-Proteus v7.4 SP3

-Proteus v7.5 SP3

-Proteus V7.6

Para obtener las librerías deben ingresar al siguiente link: http://www.8051projects.net/download-d217-nokia-3310-lcd-proteus-model.html

Teniendo la librería de la lcd5110 de Nokia se procede a simular siguiendo los pasos:

  1.    Se abre Proteus.

IMAGEN 5

2.     Se crea un proyecto nuevo

IMAGEN 6

3.   Se le indica el pic a utilizar (en nuestro caso pic18f25k50) y  posteriormente se le indica la versión de compilador.

IMAGEN 7

4.    En la ventana de componentes se escoge el display Nokia5110.

IMAGEN 8

5.    Se conecta el display a los puertos seleccionados.

IMAGEN 9

6.   Se presiona dos veces  al PIC18F25K50  en la simulación para luego colocarle el .HEX.

IMAGEN 10

7.    Se corre la simulación y se observa al PIC funcionando con la visualización de la lcd.

IMAGEN 11

  1. Cómo se conecta una tarjeta SD, microSD, a CEX duino y cuales son las dificultades con los diferentes tipos de memorias y sus tamaños?

En mi caso cabe aclarar que tuve inconvenientes con las memorias de 4GB en adelante, esto surgió porque estas memorias tienen una tecnología HS, que las hacen incompatibles con el formato de lectura del socket que se compró en mactrónica el cuál es el mostrado en la siguiente figura:

IMAGEN 12

La tarjeta SD, con la micro SD se conectan por medio del socket, para luego ser detectadas más adelante por el cexduino, la conexión de la tarjeta SD es la mostrada en la siguiente figura:

IMAGEN 13

Donde se puede observar la conexión de la misma, la simulación en proteus de este dispositivo se muestra a continuación:

IMAGEN 14

En esta ilustración de la simulación se puede observar que el socket que lleva la tarjeta SD se conectó a la MCU teniendo en cuenta los datos de entrada y salida con el CLK y el CS por medio del puerto RB, principalmente por RB0, RB1, RB3 y una conexión por el puerto C a RC6, respectivamente, teniendo en cuenta que estos son respectivamente en el cexduino MOSI, MISO, CLK Y TX respectivamente como se muestra a continuación:

IMAGEN 15

  1. Cómo se simula en Proteus la SD?  Tipos soportados?  Cómo se manejan   las imágenes de memoria SD en proteus y para qué?

En proteus la SD se simula teniendo en cuenta un archivo .FAT, pero que al final de su descripción tenga .mcc, para que pueda ser reconocido por el programa, en mi caso trabajé con la sd genérica que proporciona proteus la cual es:

IMAGEN 16

Para que no aparezca error en proteus se tiene que tener en cuenta lo siguiente:

Primero: Implementar la SD como se ilustra en la siguiente figura:

IMAGEN 17

Segundo: Se coloca en Proteus y se da doble click sobre la figura de la SD:

IMAGEN 18

Tercero: Se busca la imagen.mcc y se selecciona.

Cuarto: Se implementa todo el proyecto y se procede a observar antes de insertar la SD y luego de insertarla.

IMAGEN 19

Con lo cual se observa que el .mcc colocado en la simulación sirve, para hacer una similitud con el mundo real, en la que se muestra la detección de la SD por parte del pic, es decir que el ¿para qué de la imagen? Se resuelve demostrando que la imagen  hace como el  .FAT de la parte práctica a implementar.

  1.  Por qué necesito utilizar un File System ?  Cuál?  Cómo se integra al proyecto?

Un sistema de archivos (o «filesystem») es un medio para organizar los datos que se espera se mantengan después que un programa haya terminado, al proporcionar procedimientos para almacenar, recuperar y actualizar dichos datos, así como gestionar el espacio disponible en el dispositivo(s) que lo contiene. Un sistema de archivos organiza los datos de una manera eficiente y está sintonizado con las características específicas del dispositivo.

Dentro de este sistema se encuentra la extensión .FAT, por lo que es necesario utilizar el Fyle System, este se integra al proyecto por medio del formato introducido a la SD, para que esta sea detectada por el socket y posteriormente se puedan leer los archivos .WAV.

  1.  Es posible leer la SD sin usar un file system?

No es posible, porque como se dijo anteriormente el formato que lee nuestro proyecto es con la extensión .FAT y de igual forma aquí es donde viene nuestras canciones para ser escuchadas.

  1.   Cómo se puede generar audio por PWM en un micro y que tiene que ver con PCM y con WAV?

Una aplicación de la modulación PWM es intentar reproducir un archivo de audio digital tipo WAV usando módulo PWM del PIC como un DAC (Digital-Analog Converter) incorporado, que consiste basicamente en cambiar el valor del Dutty dependiendo de los datos recibidos.

El primer aspecto es decidir la frecuencia PWM a usar. Una cuestión importante es conseguir que dicha frecuencia  sea lo más alta posible, para distanciarla de las frecuencias de la señal de audio a reproducir   La frecuencia PWM viene dada por:

 

 

F_pwm = F_osc / (4*PRE*(PR2+1))

Previamente en la memoria microSD se encuentra grabado un archivo de audio digital tipo WAV con las siguientes caracteristicas (48 KHz, 8 bits, mono).

El proceso siguiente consta de 4 etapas las cuales son:

Muestreo: Consiste tomar muestras (medidas) del valor de la señal n veces      por segundo, con      lo que tendrán n niveles de tensión en un segundo.

Cuantificación: Por eso en la cuantificación se asigna un determinado valor discreto a cada uno de los niveles de tensión obtenidos en el muestreo.

Codificación: En la codificación, a cada nivel de cuantificación se le asigna un código binario distinto, con lo cual ya tenemos la señal codificada y lista para ser transmitida.

Recuperación de la señal analogica: En la recuperación se realiza un proceso inverso, con lo que la señal que se recompone se parecerá mucho a las originales, si bien durante el proceso de cuantificación, debido al redondeo de las muestras a los valores cuánticos, se produce una distorsión conocida como ruido de cuantificación. En los sistemas normalizados, los intervalos de cuantificación han sido elegidos de tal forma que se minimiza al máximo esta distorsión, con lo cual las señales recuperadas son una imagen casi exacta de las originales.

A este proceso se le conoce como Modulación por impulsos codificados PCM.

  1. Por qué se usan dos conexiones SPI, una generada por hardware y otra por software? Por qué no se usa una sola con diferente Slave Select? Cuál se asigna a cada periférico y por qué?

Como se explicó en la entrega del proyecto se usan dos conexiones SPI por los PWM, ya que el SPI solo cuenta con una conexión PWM generada por HADWARE y la idea es que cada uno de los módulos sea independiente en su reloj, porque si se dejan los dos con el mismo reloj puede haber unos más rápido que el otro generando inconsistencias notorias en la velocidad de los dos, ya que pueden haber varios errores que se notarán posteriormente en la aplicación ya sea en el audio emitido por nuestros componente o la visualización en la pantalla generado por lo errores.

  1. Cuál es la calidad del sonido en el proyecto, de qué depende y cómo se puede mejorar?

La calidad emitida en el proyecto que realicé con mis compañeros es buena y esto se debe a que nos apoyamos de un parlante que teníamos disponible en ese momento, sin embargo con mi grupo también realizamos un amplificador con un LM386, el cual nos mostró una calidad de sonido deficiente, de aquí se concluye que dependiendo la calidad del amplificador con su debido filtrado se puede generar una señal exquisita para el oído humano o una señal con un alto grado de ruido que puede generar inconvenientes con las posibles distorsiones que puede causar.

 

 

 

 

 

  • You must to post comments
0
0
  1. Cual es la calidad de sonido del Proyecto? de qué depende y como se puede mejorar?

La calidad de audio es baja debido a limitaciones propias de una arquitectura de 8 bits como la que se utiliza en el proyecto, los archivo .WAV debido a tienen un formato de compresión sin pérdidas son de una alta calidad de audio, sin embargo para que esto tenga como minimo calidad de CD es necesario su grabacion y reproduccion en 16 bits por esto la calidad de audio reproducido no es buena sin embargo para intentar mejorar su calidad en PIC18 se podría intentar mejorar el filtrado de PWM para eliminar ruido, o optar por un microcontrolador más robusto de una arquitectura de 16 o incluso 32 bits para lograr una gran mejoría en la calidad del audio reproducido.

  • You must to post comments
0
0

Pregunta #4 del  Examen Final

 

Diseño digital con microcontroladores

Manuel Romero Peña

20132005988

 

Pregunta #2: Cómo se maneja un display LCD gráfico tipo Nokia 5110 con CEXduino o CEX nano? Existen librerías recomendadas y cómo se integran al proyecto?

El uso del display LCD NOKIA sobre la tarjeta CEX DUINO, se implementa bajo el uso del protocolo de comunicación SPI, para este caso mediante la conexión de SPI SOFTWARE; debido a que solo se desea escribir en el LCD, ya que si se compara SPI por HARDWARE,  la velocidad de comunicación de Software es menor, entonces para no ocupar la otra conexión que se implementaría para un tarea que requiera mayor transferencia de datos, se usa SPI por  SOFTWARE.

Ahora para la implementación del lcd, este se conecta mediante los pines del Puerto A del Microcontrolador PIC18F25K50, que se encuentra instalado en la tarjeta CEX DUINO v1.4 la cual permite alimentar el LCD directamente gracias a que posee un pin de alimentación de 3V,  adicionalmente  esta se encuentra alimentada por el  PC y se puede grabar directamente con la placa sin necesidad de hacer uso del PICKIT 3, todo esto por medio del puerto USB gracias a la implementación de BOOTLOADER que permite configurar ciertos parámetros para la utilización de la tarjeta CEX DUINO.

Imagen 1

Para la escritura del LCD, es necesario entender el funcionamiento de ingreso los datos a este:

PIN D/C (DATA COMAND): este pin se puede configura en dos estados, alto y bajo:

  • Para el estado bajo, permite iniciar la escritura en el LCD
  • Para el estado alto, permite almacenar los bits de entrada en la RAM

Luego de que cada byte es recibido, la dirección a la cual asigna el valor llegado incrementa una posición, permitiendo que el próximo byte de escritura sea guardado.

PIN SCE: Para este pin, cuando se encuentra en nivel alto, las señales de reloj no tiene efecto alguno en la comunicación SPI, la Comunicación SPI se inicia siempre y cuando se detecte un flanco de bajada por parte de SCE.

PIN RESET: Cuando este pin se habilita se detiene todo tipo de transmisión de datos, y se limpian todo los registros, la utilización de este pin se hace cada vez que trasmite  un byte de información y se reciba.

PIN DIN: Este pin,  es la entrada de los datos que se desea visualizar, en otras palabra, en SPI es el PIN MOSI (MASTER OUTPUT SLAVE INPUT).

Ahora  que ya se tiene la lógica de funcionamiento del LCD, se procede a implementar en código, Para este caso a se dispone de ciertas librerías que realizan esta lógica para el funcionamiento del LCD, lo único faltante es integrarlo al código, para nuestro caso se dispone de un librería ya creada por Armstrong Subero, la cual consiste de un .h (Header), archivo el cual define los puertos de salida del microcontrolador e inicializa funciones que luego, en el archivo .C se definirán.

 

Imagen 2

 

Ahora en el Archivo .C se define la forma de los caracteres ascii que se emplean para escribir en el LCD, se definen las funciones declaradas en el archivo .h

 

Imagen 3

Imagen 4

Cuando se escribe en el lcd, existe una clase de base datos donde se encuentran definidos los caracteres que usan, estos se definen a partir del ordenamiento de la tabla de valores ascii, es decir que a la hora de definirse, estos se escriben en el orden de la tabla ascii  definida, lo que implica que si se define un carácter donde en medio de dos caracteres ya existentes, esto genera una incoherencia de caracteres a la hora de visualizar el contenido, puesto que los valores de los caracteres ya definidos después de la definición del nuevo carácter se corren una posición abajo de la tabla, lo cual hace que tomen el valor del carácter siguiente.

 

Si se desea definir un nuevo carácter es muy recomendable hacerlo después de la última definición de caracteres, y considerando la tabla de valores ascii, se asume el símbolo el cual designa según el listado de valores ascii, y se diseña el carácter a partir de un arreglo matricial de unos y ceros, como se muestra a continuación:

Imagen 5

La construcción de dicho  arreglo, se hace girando momentáneamente el rectángulo a la izquierda que define el tamaño del carácter, se escribe unos para representar los puntos que se quieren visualizar en el carácter y ceros como el fondo de este. Seguidamente se procede a devolver el giro del rectángulo se comienza a definir la palabra en binario que define el renglón, seguidamente se escriben en hexadecimal estas palabras para mayor compresión en el código así:

Imagen 6

 

Otra forma de definir un carácter, es sobre uno ya existente, es decir que solo se realizar un cambio en la definición de dicho carácter ya existente mediante la utilización de unos y ceros, teniendo en cuenta que el carácter a modificar, no se utilizara después en algún momento. A continuación una simulación donde se muestra una carita feliz hecha a partir de una modificación a un carácter previamente definido.

 

Imagen 7

 

REFERENCIAS

 

 

 

  • You must to post comments
0
0

 

  1. Cómo se puede generar audio por PWM en un micro y que tiene que ver con PCM y con WAV?

Para poder generar una señal cualquiera a partir de PWM es necesario hacer que una variación en la amplitud de la señal represente una variación en el ciclo útil de una señal de PWM. En nuestro caso, si queremos usar un microcontrolador para manejar la información de la señal de audio, las variaciones en amplitud de dicha señal deben ser cuantificadas debido al hecho de que al ser el microcontrolador un sistema digital las señales solo se pueden trabajar en forma discreta y cuantizada. Al hablar de cuantificación nos referimos al hecho de asignar un número finito de niveles de amplitud que puede tomar las muestras de una señal.

Para entender este proceso primero debemos hablar de que es PAM. La PAM es una técnica en la cual una señal, en nuestro caso, una señal de audio, es muestreada en intervalos de tiempo iguales para generar una señal discreta que representa a la señal original. Las señales PAM pueden ser de dos tipos: señales PAM de muestreo natural, en las cuales la señal de muestreo son un tren de pulsos rectangulares, y las señales de PAM de muestreo plano en las cuales la señal de muestreo es un tren de impulsos. A continuación ilustramos estos dos tipos de PAM. Señal PAM con muestreo natural y Señal PAM con muestreo plano

Ahora, habiendo entendido que es PAM podemos entender que es PCM. La PCM o modulación por codificación de pulsos es en esencia una conversión analógica a digital de tipo especial en donde la información contenida en las muestras de la PAM, de la señal de audio original, está  representada mediante palabras digitales. A continuación se muestran las señales típicas de un sistema PCM. Forma de onda en un sistema PCM

Habiendo aclarado estos conceptos resta explicar cómo se usó el microcontrolador para generar la señal de audio, correspondiente a la información almacenada en un archivo WAV, por medio del PWM. Los ficheros WAV hacen uso del PCM  para digitalizar las señales de audio analógicas, es decir los bytes almacenados dentro del fichero son las palabras de codificación asignadas a las muestras PAM del audio original, además de los bytes de cabecera que contienen la información del archivo, como el nombre y la tasa de muestreo, entre otros. La longitud del código en bits que representan las muestras pueden ser de 16, en cuyo caso se les denomina WORD (palabra), o de 8 que como ya sabemos se denomina BYTE; el audio almacenado puede ser stereo o mono y la tasa de muestras por segundo puede ser de 44100 o de 11025.

Puesto que el microcontrolador que usamos en este curso es de 8 bits es necesario que el archivo WAV con el cual se trabaje cumpla con una longitud de código de un byte, que el audio sea mono y por último que la tasa  sea de 11025 muestras/segundo; todo esto con el fin  de que podamos pasar los bytes de datos leídos del archivo WAV directamente al registro CCPRxL, el cual controla de ciclo útil de la señal PWM generada por el módulo CCPx y así conseguir que la información del audio quede determinada por el ancho de pulso, además de eso las variaciones de dicho ancho deben hacerse a una velocidad cercana  a la velocidad con la que se realizó la grabación de las muestras de audio para así obtener un tasa cercana a 11025 muestras/segundo, de lo contrario si no se cumple con esto último la reproducción sonará más rápida o más lenta.

Ahora, no solo basta con obtener la señal PWM, luego de ello se debe realizar un filtrado que genere una señal analógica semejante a la del audio que se grabó en un principio en el fichero WAV. Para saber cómo se debe diseñar este filtro se aprovechará el hecho de que para una señal cuadrada periódica el ciclo útil determina su valor promedio y podríamos idealmente reconstruir la señal si después del filtro se obtienen los valores promedio variantes en el tiempo  producto de las variaciones del ciclo útil de la señal PWM generada. Del análisis de Fourier sabemos que una señal puede representarse de la siguiente manera: Serie de Fourier

Donde el primer término representa el valor promedio de la señal, que en nuestro caso es la señal de PWM, por lo tanto se debe realizar un filtro cuya frecuencia de corte sea lo más cercano a 0Hz y así eliminar en lo posible las componentes armónicas representadas por la sumatoria en la expresión anterior, de aquí el hecho de que el filtro deba ser un pasa bajos. A continuación se ilustra el proceso de generar audio con PWM a partir de un archivo WAV. Generación de audio con PWM a partir de un fichero WAV.

Referencias

[1] Tutoriales PIC- http://picfernalia.blogspot.com.co/2012/06/aplicacion-audio-con-pwm.html

[2] PIC 18F WAV Player: PCM via PWM (XC8)- http://trinirobotics.com/?p=969

[3] Simple Arduino audio samples –  http://highlowtech.org/?p=1963

[4] Couch Leon – Sistemas de comunicaciones digitales y analógicos, séptima edición, 2008, México, Pearson Educación – Pág. 128 a 138

 

  • You must to post comments
0
0

2. Cómo se maneja un display LCD gráfico tipo Nokia 5110 con CEXduino o CEX nano? Existen librerías recomendadas y cómo se integran al proyecto?

RESPUESTA A LA PREGUNTA EN EL SIGUIENTE ENLACE:

https://docs.google.com/document/d/1kp5k5iAUMm18ujYgjvjWS3S_dcWFjKitUUlikBHkeSM/edit

  • You must to post comments
0
0

Pregunta número 3: ¿Cómo se simula está LCD en Proteus?, ¿a partir de qué versión?

Respuesta:

El LCD gráfico Nokia 5110 es un display de 48×58 que funciona por medio del controlador PCD8544. La memoria está dispuesta en una matriz que consiste de seis filas (desde Y = 0 hasta Y = 5) y 84 columnas (desde X = 0 hasta X = 84), para acceder a un espacio de memoria el usuario debe especificar ambas posiciones en código.

Para simular el LCD en Proteus se deben seguir los pasos que se describen a continuación, en este caso se usará la versión 8.3.

  1. Abrir Proteus VSM y crear un nuevo proyecto. La tarjetas CEXduino y nano hacen uso del PIC18F25K50, para agregar el PIC al entorno de simulación desde el principio se hace lo siguiente:

A partir de aquí se da clic en siguiente hasta que aparezca una ventana donde se dá la opción de crear un Firmware Project

Se da clic en Create Firmware Project, posteriormente se selecciona la familia de microcontrolador que se va a usar, en este caso PIC18, luego se selecciona el Microcontrolador PIC18F25K50, y por último se añade el compilador con el que se está trabajando, en este caso XC8. Realizado lo anterior, se da clic en siguiente y luego en finalizar. Al terminar aparecerá el entorno de simulación con el PIC18F25K50.

  1. Esta versión de Proteus cuenta con el display Nokia 5110, se agrega al proyecto buscando el modelo en la familia de componentes, que se abre haciendo clic en la “P” que se encuentra en la parte izquierda de la interfaz de simulación.

En el código del proyecto final se especifican los pines que se necesitan para conectar la LCD y el PIC.

//Configuración pines LCD

#define LCD_SCLK LATAbits.LA6
#define LCD_SDIN LATAbits.LA3
#define LCD_DC LATAbits.LA2
#define LCD_SCE LATAbits.LA1
#define LCD_RES LATAbits.LA0

Los pines de la LCD que en la imagen anterior no se encuentran conectados, se configuran de la siguiente manera, cabe aclarar que en el simulador no es necesario. El pin LED, que cumple la función de iluminar la pantalla desde la parte de atrás (back-light), en el simulador no realiza esta acción

VCC -> VSS del microcontrolador

GROUND -> VDD del microcontrolador

LED -> VSS

Ahora, se ingresa el .hex en el microcontrolador, se configura el oscilador, en este caso es de 16MHz.

En el siguiente enlace se encuentra esta misma respuesta, incluye pantallazos.
Respuesta pregunta tres

  • You must to post comments
0
0

Cuales fueron las modificaciones principales hechas al código del proyecto de referencia para que opere en CEXduino?

Basados en el esquemático de la board CEXduino 1.3 (relacionado en el siguiente link)  empleado para el desarrollo del proyecto, se ubican adecuadamente los pines a utilizar correspondientes a los puertos PORTA y PORTB respectivos a la conexión SPI para el módulo SD (MicroSD) y para dedicar unos pines a la conexión del display LCD  gráfico (también con conexión SPI) y además se configura el pin de RC2 (o RC1) para salida de PWM. Gracias a la versatilidad de las tarjetas de desarrollo CEX por su operación eficiente del bootloader por USB y, como resultado, en su facilidad y rapidez de ejecución, las conexiones se pudieron realizar de manera óptima llevando a cabo pocos o ningún cambio al código base en materia de configuración de pines. Las modificaciones realizadas en código se relacionaron más con la migración de PIC debido a que el PIC18F4550 posee 40 pines mientras que el PIC18F25K50 posee 28, lo importante es tener en cuenta los valores adecuados de voltaje (3V) requeridos para operar el módulo SD fundamentalmente. Personalmente realizamos una modificación al código original dedicando el pin del PIC18F25K50 correspondiente al Slave Select del protocolo SPI por convención ubicado en RA5 y no en RC6 como lo sugiere el código base para el PIC18F4550 aunque su funcionamiento sea el mismo, y reubicando este pin previamente usado por el display LCD gráfico a otro disponible en el PORTA.


Cómo se maneja un display LCD gráfico tipo Nokia 5110 con CEXduino o CEX nano? Existen librerías recomendadas y cómo se integran al proyecto?

El manejo del display LCD gráfico Nokia 5110 posee gran aplicación para un buen uso, su operación en la tarjeta CEXduino se desarrolla con facilidad ya que se pueden configurar los 8 pines de este LCD directamente en cualquiera de los puertos PORTA o PORTB, las conexiones llevadas a cabo para concordar con el código base fueron:

Pin LCD Pin CEXduino
1: RST (reset) A4 (RA0)
2: CE (chip enable) A2 (RA1)
3: DC (Data / Command) A1 (RA2)
4: DIN (data in) A0 (RA3)
5: CLK (clock) D7 (RA6)
6: VCC 5V
7: LIGHT (back light) potenciometro
8: GND GND

Existe en el código base una librería para la operación del display LCD gráfico, su operación es fácil de usar y bastante intuitiva, aunque no emplea una funcionalidad de desarrollo de gráficos custom para toda la pantalla, estos se pueden obtener en líneas de a 8 pixeles de alto y hasta 84 de ancho (tener en cuenta el direccionamiento adecuado) generando byte tras byte en binario para formar las figuras predeterminadas de altura de 8 pixeles, el funcionamiento se explica con claridad en el datasheet del display en la sección 13 Tabla 6

Imagen Ilustrativa


Cómo se simula este LCD en Proteus?  A partir de cual versión?

El display LCD gráfico se puede simular en Proteus desde la versión 8.3 (SP2) según la información encontrada en los foros. su simulación no es complicada ya que solo consiste en realizar la conexión adecuada con el microcontrolador usado (o tarjeta de desarrollo usada)  y utilizar el código adecuado para su operación. los pines de VCC, GND y LIGHT no son necesarios conectaros ya que en el respectivo orden los dos primeros hacen parte de los Power Rails predefinidos en Proteus VSM a 5V y 0V, y el pin de LIGHT no se hace necesario para el funcionamiento del LCD en Proteus

 

  • You must to post comments
0
0

A continuación les comparto el link donde encontraran respuestas a algunas preguntas acerca del Reproductor WAV:

Cómo se maneja un display LCD gráfico tipo Nokia 5110 con CEXduino o CEX nano? Existen librerías recomendadas y cómo se integran al proyecto?

Cómo se simula este LCD en Proteus? A partir de cual versión (encontraran el link para descargar las librerías necesarias para la simulación)

Cómo se puede generar audio por PWM en un micro y que tiene que ver con PCM y con WAV?

Como se simula la SD en proteus ?

¿Cómo se conecta una tarjeta SD, microSD, a CEX duino y cuales son las dificultades con los diferentes tipos de memorias y sus tamaños?

Cuáles fueron las modificaciones principales hechas al código del proyecto de referencia para que opere en CEXduino?

https://1drv.ms/w/s!AjRoMUhdDLsWin9XMjKrbpbtvmVF

Mi grupo de trabajo y yo, en calidad de estudiantes de Ingeniería Electrónica de la Universidad Distrital Francisco José de Caldas, agradecemos a la comunidad CEX por permitirnos usar las tarjetas de desarrollo CEXDUINO para el aprendizaje y posterior desarrollo de proyectos.
Son excelentes herramientas que ofrecen posibilidades que otras tarjetas de desarrollo no tienen.

Sergio Siabato Villa.
Código: 20102005090

  • You must to post comments
0
0

Texto completo en este enlace.

  1. Las principales modificaciones hechas al código del proyecto fueron la adaptación de la frecuencia de operación del MCU de 48Mhz a 16Mhz, esto afecta en el hecho de que el cálculo de la frecuencia usada para operar el módulo SPI es diferente, afecta la velocidad de lectura de la tarjeta de memoria, como también la generación de la señal de salida que se produce por PWM. Específicamente se necesita cambiar los valores de PR2 (periodo del  TIMER2), como el factor de preescaler (1,4, ó 16) de este mismo timer usado paca los módulo MSSP y PWM , el TIMER0 (que se usa para darle los valores de PWM con interrupciones),
  2. Un display gráfico LCD como el del Nokia 5110 puede ser usado en proyectos tanto educativos como profesionales sin mucho esfuerzo, este display está adaptado para uso en prototipado (se puede montar en protoboard sin problema) y se maneja por comunicación serial SPI el cual puede ser manejado con PIC/CEXduino mediante mediante módulos de comunicación serial de hardware (MSSP: Master Syncronous Serial Port) o simplemente software (mediante una técnica conocida como bit bagging); Precisamente existen librerías open source que permiten integrar código reusable en proyectos en XC8 para controlar de una manera sencilla varios comandos que se le envían al visualizador.
  3. Este LCD puede ser simulado en proteus mediante modelos de terceros desde la version 6.9 SP5 pero puede ser usado como modelo integrado en el mismo modelo desde la version 8.
  4. La targeta SD/microSD se puede conectar mediante un lector de tarjetas SD/microSD que usa con comunicación serial SPI, esta comunicación tiene la ventaja de que utiliza relativamente pocos cables/puertos para conectar al CEXduino. Las dificultades que podría tener el uso de las tarjetas pueden ser:
  • El tamaño: depende del lector que se utiliza puede tener compatibilidad con tarjetas microSD, miniSD o SD mediante el uso de adaptadores, en este caso es mas recomendable hacer el prototipado con un lector de SD (la grande), ya que permite usar cualquiera de los tamaños mediante estos adaptadores.
  • La tecnología: Se pudo constatar que en el proyecto muchos compañeros tuvieron problemas para usarlas en los lectores SD adquiridos con algunas tarjetas (la mayoría de capacidad mayor a 4GB) que al parecer eran de tecnología SDHC o SDXC, esta dificultad es causada por compatibilidad de hardware (el lector de tajetas), ó por el uso de una librería Petit FAT antigua que no soporte por ejemplo FAT32, extFAT.
  • You must to post comments
0
0

10.¿Cuál es la calidad del sonido en el proyecto, de qué depende y cómo se puede mejorar?

 

la calidad del sonido del proyecto es en general baja,  depende especialmente de un buen filtro pasa bajos,la razón de esto es que principalmente lo que escuchamos como sonido en este proyecto son señales digitales de PWM con un nivel medio de voltaje filtradas de tal manera que toman la forma de su voltaje medio y este voltaje medio depende de el archivo .WAV que está en la memoria SD.

El Filtro debe ser selectivo tal que sólo escuchemos lo que podemos escuchar, el rango de audio del oído humano va de 20Hz a 20KHz tal que construir un filtro pasabajos a 20 kHz que sea por lo menos de orden 2 para evitar algún tipo de distorsión en el audio final.

Si se desea aún mayor calidad en el sonido se debe cambiar a una arquitectura de microcontrolador de 16 o de más bits ya que, la limitante principal está en los posibles valores que puede tomar el ciclo útil del PWM que en una arquitectura de 8 bits solo llega a 256 posibles valores de ciclo útil a tomar, a diferencia de arquitecturas más complejas con más bits que poseen muchos más valores para el ciclo útil del PWM.

desarrollo de preguntas->https://docs.google.com/document/d/1V7M8Oj7lqR1R_b1l3BSlqKifm80HvDpENytjOx5P5Is/edit?usp=sharing

  • You must to post comments
0
0

-Cuales fueron las modificaciones principales hechas al código del proyecto de referencia para que opere en CEXduino?

-Cómo se maneja un display LCD gráfico tipo Nokia 5110 con CEXduino o CEX nano? Existen librerías recomendadas y cómo se integran al proyecto?

-Cómo se simula este LCD en Proteus?  A partir de cual versión?

-Cómo se conecta una tarjeta SD, microSD, a CEX duino y cuales son las dificultades con los diferentes tipos de memorias y sus tamaños?

-Cómo se simula en Proteus la SD?  Tipos soportados?  Cómo se manejan las imágenes de memoria SD en proteus y para qué?

-Por qué necesito utilizar un File System ?  Cuál?  Cómo se integra al proyecto? Cómo se puede generar audio por PWM en un micro y que tiene que ver con PCM y con WAV?

-Cuál es la calidad del sonido en el proyecto, de qué depende y cómo se puede mejorar?

Todas las respuestas a estas preguntas en el siguiente link:

https://docs.google.com/document/d/19Vaj3JyITHfhxL6TRCtyd49Nv3bEk_efUbkz7AeCycA/edit?usp=sharing

Agradecimientos al curso de Microcontroladores que permitieron una dinámica de trabajo muy acertada, en especial a la iniciativa de CEX.com.co la cual nos brindó todas las herramientas de trabajo para lograr el curso,  al facilitarnos de forma gratuita el uso de las Board CEX, con ellas se lograron llevar al cabo múltiples  proyectos con un funcionamiento óptimo y de calidad.

 

 

  • You must to post comments
0
0

Bayron Alexis Cardenas Espitia .20132005045

  • ¿Por qué necesito utilizar un File System? ¿Cuál? ¿Cómo se integra al proyecto?
  • ¿Es posible leer la SD sin usar un FileSystem?

 

Un File System o Sistema de Archivos, es un medio para organizar, almacenar, recuperar y actualizar los datos dentro de un dispositivo de almacenamiento. Este sistema de archivos organiza los datos de una manera eficiente y está sincronizado con las características del dispositivo. [1]

Existen diferentes tipos de sistemas de archivos, dentro de los más comunes encontramos:

 

  • exFAT Sistema de archivos de Microsoft optimizado para unidades flash
  • ext2, ext3 and ext4 (Second, Third and Fourth Extended FileSystem respectively)
  • NTFS Sistema de archivos utilizado por Windows
  • Entre otros

 

Para el manejo de un dispositivo de almacenamiento SD desde un Microcontrolador se puede o no disponer de un Sistema de archivos pero el utilizarlo u obviarlo incide de manera directa en la facilidad de manejo del dispositivo y en la cantidad de memoria utilizada para dicho propósito además de que no cualquier equipo va a poder acceder a la información dentro de la memoria por falta de un formato.

 

El FileSystem nos proporciona métodos para acceder, procesar y guardar información en un dispositivo de almacenamiento y establece estándares para realizar dichos procesos para que el contenido de la memoria sea accesible en equipos como PCs, Tablets, etc. Si lo que se desea es no utilizar un sistema de archivos se pueden crear desde el micro métodos para escribir, leer y en general para interactuar con la tarjeta de memoria; pero todo ello implica un gasto excesivo de memoria RAM en el micro ya que se deben de procesar un mayor número de instrucciones (mayor tiempo de retardo para acceder y modificar el contenido de la memoria SD) que si se usase un FileSystem además de que se requeriría de un programa especial en el equipo que vaya a acceder al contenido de la memoria; que maneje el mismo formato con que ha sido escrita. [2]

 

Generalmente los micros, en especial los de la familia de 8 bits poseen un tamaño de memoria muy limitado y es por ello que se hace indispensable el uso de sistemas de archivos ya que además de hacer más fácil y rápida la comunicación con dispositivos de almacenamiento, también ocupan muy poca memoria en el micro. Para el caso del proyecto de Reproductor WAV se utilizó un FileSystem por los motivos mencionados anteriormente, de no hacerlo así se habría presentado un gran problema en el manejo de los bloques de memoria de la tarjeta SD y la velocidad de adquisición del audio se habría tornado más lenta (perdiendo calidad) a parte de que el gasto de memoria en el PIC sería mayor; incluso cuando el 18F25K50 es uno de los micros más actuales de la familia de 8 bits que dispone de más cantidad de RAM y velocidad de procesamiento.

 

El sistema de archivos utilizado fue FAT16 para el manejo de los bloques de 512 bytes de la memoria SD. Ya con un formato establecido en la memoria se requirió la utilización de una librería que permitiera interactuar con esta. La librería utilizada fue la PetitFAT que es un módulo de sistemas de archivos para micros de 8 bits. Está escrita en cumplimiento a la norma ANSI C y se puede integrar en micros de capacidad limitada. [3]

 

  • Características de la PetitFAT:

 

  • Bajo consumo de RAM (44 kb área de trabajo + pila)
  • El código ocupa poca memoria (2 a 4 kb)
  • Permite formatos FAT12, FAT16 y FAT32
  • Entre otras

 

Algunas de las funciones que proporciona son:

 

  • pf_mount: Montar un volumen
  • pf_open: Abrir un archivo
  • pf_write: Escribir un archivo
  • pf_read: Leer un archivo
  • pf _lseek: Mover a la lectura/escritura del puntero
  • pf_opendir: Abrir un directorio
  • pf_readdir: Leer un archivo de directorio

 

Para agregar esta librería a un proyecto de MPLAB X solo se deben de seguir dos sencillos pasos:

 

  1. Para agregar el archivo pff.h se da click derecho sobre Header Files dentro del proyecto al cual se desea cargar la librería, click en Add Existing Item, se busca el archivo ppf.h dentro de la carpeta SRC del archivo descargado y finalmente click en Select
  2. Para agregar el archivo pff.c se procede de manera similar, solo que se hace click en Source Files/ Add Existing Item, se busca el archivo pff.c dentro de la carpeta SRC del archivo descargado y finalmente click en Select

 

Referencias

 

  • ArchLinux, FileSystem (Artículo en español)

           https://wiki.archlinux.org/index.php/File_systems_(Espa%C3%B1ol)

  • Electrical Engineering, Is It possible to use an SD card without a FileSystem?

           http://electronics.stackexchange.com/questions/113430/is-it-possible-to-use-an-sd-card-without-a-file-system

  • Electronic Lives Mfg (Blog for electronic enthusiast), Software Section, Petit FAT File System Module

          http://elm-chan.org/fsw/ff/00index_p.html

 

 

 

  • You must to post comments
0
0

5. Cómo se simula en Proteus la SD?  Tipos soportados?  Cómo se manejan las imágenes de memoria SD en proteus y para qué?

Respuesta en —— > CÓMO SIMULAR SD EN PROTEUS VSM

  • You must to post comments
Showing 20 results
Your Answer

Please first to submit.