TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: Goodfrey en 02 de Enero de 2013, 16:51:06

Título: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 02 de Enero de 2013, 16:51:06
Buenas tardes, Saludos desde Venezuela.

Para empezar  bien el año y poder culminar mis estudios de grado, estoy empezando a desarrollar un dispositivo eliminador de ruido externo con un dsPIC30F4013, el mismo estará en la capacidad de almacenar los datos que serán leídos desde el ADC del dsPIC en una memoria MMC/SD para su posterior envió de forma inalámbrica a través de un xBee S1 a otro dispositivo que será el receptor y que estará en la capacidad de reconstruir dichos datos y dar una señal óptima para su posterior reproducción.

El Problema es el siguiente, siempre he manejado solamente PIC Serie 16 y saltar al dsPIC me tiene un poco confundido, sobre todo en el lenguaje a utilizar para grabar el dato en la memoria MMC/SD, leyendo en el foro encontré el tema en el que se desarrolla una librería exclusiva para manejar dicha memoria, pero solo con pic serie 18 entonces esa misma librería me sirve para utilizarla en el dsPIC.

Que programa es el más óptimo para manejar la dicho dsPIC, C30, CCS o MikroC_dsPIC, este último es el que noto que tengo las librerías necesaria para manejar la memoria, actualmente necesito de su colaboración para el manejo de la memoria ya que necesito tanto escribir en ella como leer la información, pero no sé cuáles son los tiempos que se manejan el de escritura de un dato, etc.

Conforme desarrolle dicho prototipo estaré poseteando los avances que esté realizando, Pero necesito su colaboración para decidir qué tipo de lenguaje es el mejor para manejar el dsPIC30F4013 y las librerías para manejar la MMC/SD.

Gracias por su Colaboración.
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Suky en 02 de Enero de 2013, 22:12:09
Hola. Tengo entendido que los 3 compiladores implementan librarias para MMC/SD  :roll: Personalmente utilizaría C30 o XC16. Tiempos, vas a tener que experimentar, porque agregar datos a un archivo depende de la librería y las configuraciones que se hagan


Saludos!
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: willynovi en 03 de Enero de 2013, 00:03:12
Como te dice Suky, yo me inclinaria por el lado del C30, y tienes algunos ejemplos de mismo Microchip que te pueden ayudar.

Estuve viendo algo y creo que la librería que tienes que usar para el manejo de una memoria es la "FSIO.h"
Yo uso mucho el Microchip Libraries for Applications (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784), ahí tienes varios ejemplos.
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Suky en 03 de Enero de 2013, 09:09:04
FSIO seria para la implementación de un sistema de archivos, luego queda la parte que maneja el hardware, o sea la comunicación con la memoria. Hay 3 opciones, SPI, bit a bit y PMP. Por aquí se puede ver como se arma el proyecto para C18 usando SPI, para los demás compiladores es casi igual, solo que no se usa salloc:

http://www.micros-designs.com.ar/aplicaciones-avanzadas-en-c18/


Saludos!
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 03 de Enero de 2013, 11:18:01
Gracias por las repuestas... se que tengo que empezar a probar para medir los tiempos de ejecución en la escritura y lectura en la memoria...

Estuve programando en MikroC_dsPIC y ok conecto con la MMC/SD sin problemas y creo los archivos y todo, Pero debo tomar los valores del adc y grabarlos en la memoria, estuve configurando el adc a su mayor capacidad de conversión con un pll a 80 mhz pero cuando lo pongo a funcionar nada me graba como 100 datos en un segundo... y eso no es para nada rápido y necesito la mayor adquisición de datos para poder reconstruir la señal lo mas parecida posible a la original...

Por esa razon trato de ver en cual lenguaje es mas rapido el grabado de datos en la MMC/SD se que en el foro esta la librería en CCS para PIC 18F pero no me sirve debido a que tengo que aplicarle los Filtros Digitales a esa señal que tomo del adc....

Necesito una orientación sobre este tema...
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 03 de Enero de 2013, 11:26:36
Voy a explicar mejor lo que tengo que hacer...

Por Medio del ADC tomo los valores provenientes de la voz humana para posteriormente aplicarle un filtro digital y tratar de dejar la señal lo mas limpia de ruido posible.

El Sistema tiene que guardar por seguridad dicha señal en la memoria MMC/SD para posteriormente enviarlos a través del Modulo xBEE a otros dispositivos de forma inalámbrica...

Tuve varios problemas a la hora de enviar los datos por el xbee, cuales fueron? bueno al tomar el valor del adc y enviarlos directamente al xBee la velocidad de muestreo del dsPIC, es muy grande para este dispositivo y el mismo se reinicia a cada rato, y pierdo los datos de dicha señal.

Por eso tuve que implementar el guardado de datos en la MMC/SD para enviar dichos datos por paquetes...

Pero Antes tengo que filtrarlos digitalmente para luego enviarlos por el xBEE.

Entonces MikroC_dsPIC me funciona bien pero noto de tarda demasiado grabando los datos... y eso no me conviene para nada...

Por eso les pregunto que lenguaje si CCS o C30 me conviene para manejar tanto la librería para la MMC/SD como los Filtros Digitales, los cuales son estrictamente necesarios para poder realizar dicho proyecto...

Espero Sus Sugerencias... Gracias...
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: willynovi en 03 de Enero de 2013, 14:53:36
Entiendo la necesidad de usar la memoria externa, pero.... como sabes que la limitación de velocidad la tienes en el programa? Puede ser que la misma tarjeta de memoria te esté limitando la transferencia.
No tengo experiencia con tarjetas de memoria, pero se que tienes tasas de transferencia máximas.
Por ejemplo las tipo SD tienen clases, en este link podes ver detalles SD Association defines Speed Class standards (https://www.sdcard.org/developers/overview/speed_class/)
Quizas la que es para tu aplicación debe ser UHS?

Las de menor transferencia son de 2Mb/segundo y las de mayor pueden llegar a 20Mb/segundo

Calculaste que transferencia necesitas en tu aplicación?
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: willynovi en 03 de Enero de 2013, 15:05:34
Encontré algunos datos de memorias, son típicos y quizas haya que ver en particular cual es tu caso.
Fuente: Memory Cards Tutorial (http://www.hardwaresecrets.com/article/Memory-Cards-Tutorial/35/5)

MMC
    Available Capacities (MMC): 32 MB, 64 MB and 128 MB
    Available Capacities (RS-MMC): 128 MB, 256 MB and 512 MB
    Available Capacities (MMC+): 256 MB, 512 MB and 1 GB
    Read speed (MMC and RS-MMC): 2 MB/s
    Read speed (MMC+): 11 MB/s
    Write speed (MMC): 1 MB/s
    Write speed (RS-MMC): 2 MB/s
    Write speed (MMC+): 7 MB/s
    Voltage: 2.7 V to 3.6 V
    Power Consumption: < 33mA (read), < 35mA (write) and < 50µA (standby)
    Length (MMC): 1.26 in (32 mm)
    Length (RS-MMC): 0.71 in (18 mm)
    Width: 0.94 in (24 mm)
    Height: 0.05 in (1.4 mm)
    Weight: 0.05 oz max (1.5 g max)
    Operating temperature: -25º C to 85º C (-13º F to 185º F)
    Storage  temperature: -40º C to 85º C (-40º F to 185º F)
    Shock: 1000G max
    Vibration: 15G peak-to-peak max
    Humidity: 8% to 95%

    For more information: http://www.mmca.org/

SD
    Available Capacities: 32 MB, 64 MB, 128 MB, 256 MB, 512 MB and 1 GB
    Voltage: 2.7 V to 3.6 V
    Power Consumption: < 33mA (read), < 35mA (write) and 100µA (standby)
    Read speed: 12 MB/s
    Write speed: 1x = 150 KB/s, 32x = 4.8 MB/s, 40x = 6.0 MB/s
    Length (SD): 1.26 in (32 mm)
    Width (SD): 0.94 in (24 mm)
    Height (SD): 0.082 in (2.1 mm)
    Weight (SD): 0.070 oz max (2 g max)
    Length (MiniSD): 0.85 in (21.5 mm)
    Width (MiniSD): 0.79 in (20 mm)
    Height (MiniSD): 0.055 in (1.4 mm)
    Weight (MiniSD): 0.035 oz max (1 g max)
    Operating temperature: -25º C to 85º C  (-13º F to 185º F)
    Storage  temperature: -40º C to 85º C  (-40º F to 185º F)
    Shock: 1000G max
    Vibration: 15G peak-to-peak max
    Humidity: 8% to 95%

    For more information: http://www.sdcard.org
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 03 de Enero de 2013, 16:48:57
Actualmente estoy utilizando esta memoria...

(http://cellphoneshop.com/yswimages/12trmeca1.jpg)

Estoy Tratando de contrar las especificaciones tecnicas de la misma...
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: willynovi en 03 de Enero de 2013, 17:05:29
Si es exactamente esa misma de la imagen, alcanzo a ver que tiene el simbolito de Clase 4, quizás por ahí podes saber que velocidad te soporta.
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 03 de Enero de 2013, 17:26:38
Si es exactamente esa misma de la imagen, alcanzo a ver que tiene el simbolito de Clase 4, quizás por ahí podes saber que velocidad te soporta.

Si VI que es Class C4 ahora cuales serian las velocidades porque indagando un poco mas creo que es una Memoria SDHC de 4GB y que usa el sistema FAT32 aunque creo que soporta FAT16 y FAT32

Aqui creo que hay unas especificaciones de escritura y lectura espero sean los correctos...
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: willynovi en 03 de Enero de 2013, 17:41:57
Si es clase 4 creo que significa que tenes una velocidad de escritura garantizada de 4mb/segundo.

EDITO: Aunque creo que deberías hacer un cálculo de que tasa de transferencia necesitas, así ya sabes por donde encarar el tema y buscar el hard/soft que se adapte a tu necesidad. Creo que te evitarias muchas pruebas y errores  ;-)
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 03 de Enero de 2013, 18:19:09
Si es clase 4 creo que significa que tenes una velocidad de escritura garantizada de 4mb/segundo.

EDITO: Aunque creo que deberías hacer un cálculo de que tasa de transferencia necesitas, así ya sabes por donde encarar el tema y buscar el hard/soft que se adapte a tu necesidad. Creo que te evitarias muchas pruebas y errores  ;-)

Entiendo pero necesito un poco mas de colaboracion con respecto a este tema porque hasta los momentos tengo que ver como logro programar la SD si en CCS C30 o MikroC_dsPIC
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Suky en 03 de Enero de 2013, 19:39:36
No pasa por el tipo de memoria, sino como se implementa el programa y también es como esta implementada la librería. Lo mejor , para aumentar la velocidad, es escribir buffers de 512 bytes (un sector).

Yo acabo de probar la función Mass Storage (Librería de Microchip), utilizando SPI a 20MHz, y copiar un archivo de 2Mbyte a la memoria demora 25seg, y copiar de la memoria a la PC 10seg. O sea, para escribir lo hace a ~80kB/s.

Debes elegir un compilador que tenga el código fuente la librería como para estudiarla y ver cual es la mejor forma de implementarla. Además tener algo de conocimiento de como funcionan las memorias como para saber que elegir  ;-)


Saludos!
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 04 de Enero de 2013, 08:33:53
No pasa por el tipo de memoria, sino como se implementa el programa y también es como esta implementada la librería. Lo mejor , para aumentar la velocidad, es escribir buffers de 512 bytes (un sector).

Yo acabo de probar la función Mass Storage (Librería de Microchip), utilizando SPI a 20MHz, y copiar un archivo de 2Mbyte a la memoria demora 25seg, y copiar de la memoria a la PC 10seg. O sea, para escribir lo hace a ~80kB/s.

Debes elegir un compilador que tenga el código fuente la librería como para estudiarla y ver cual es la mejor forma de implementarla. Además tener algo de conocimiento de como funcionan las memorias como para saber que elegir  ;-)


Saludos!


25 segundos eso es una eternidad porque necesito almacenar datos de la voz en esa memoria... imagina perder tanto tiempo la calidad de audio es desfavorable...

ahora eh visto códigos echos en mikroc_dspic donde realizan un reproductor de mp3 a 44000 hz y la lectura la hacen directamente sobre la MMC/SD por que se debe entonces esa diferencia tan grande de tiempo para la escritura...

Aquí les dejo el pdf a ver si me pueden ayudar....

Reproductor de Mp3 dsPIC (http://www.mikroe.com/downloads/get/621/en_article_c_dspic_03_09.pdf)

y aquí algunos ejemplos de youtube...

Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: MGLSOFT en 04 de Enero de 2013, 09:10:24
En ese caso, porque no usar un dispositivo especializado en vez de renegar con librerias de distintos lenguajes, y sacarle la carga de las transacciones al PIC ??

Aqui un chip dedicado:

http://www.ghielectronics.com/catalog/product/340 (http://www.ghielectronics.com/catalog/product/340)

(http://www.ghielectronics.com/images/alfat_concept.png)

Estas son las velocidades de transferencias prometidas por este chip:

Citar
● Up to 4000 KBytes/sec file access speed on SD cards.
● Up to 4000 KBytes/sec file access speed on USB (with ULPI HS PHY).
● Up to 1000 KBytes/sec file access speed on USB Full Speed (no ULPI HS PHY).
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Suky en 04 de Enero de 2013, 09:22:35
La idea de MGLSOFT es muy buena si necesitas mejores tiempos, sino evalua la opción de trabajar la comunicacion PMP (nunca la mire), o utilizar otro micro que lo permita (Los STM32F he visto que tienen el periferico dedicado, SDIO-4bits).

Para leer es mucho más rapido, mejorando las librerias de Microchip se puede hacer un reproductor de video (http://www.micros-designs.com.ar/reproductor-avi-con-pic32-skp32/), lo mismo seguramente se puede hacer para la escritura para mejorar tiempos. Pero hay que dedicarle tiempo y estudiarlo, lo bueno es que se tiene el codigo fuente para eso. (Que entiendo que en mikroC no)

Saludos!
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 04 de Enero de 2013, 10:25:04
La idea de MGLSOFT es muy buena si necesitas mejores tiempos, sino evalua la opción de trabajar la comunicacion PMP (nunca la mire), o utilizar otro micro que lo permita (Los STM32F he visto que tienen el periferico dedicado, SDIO-4bits).

Para leer es mucho más rapido, mejorando las librerias de Microchip se puede hacer un reproductor de video (http://www.micros-designs.com.ar/reproductor-avi-con-pic32-skp32/), lo mismo seguramente se puede hacer para la escritura para mejorar tiempos. Pero hay que dedicarle tiempo y estudiarlo, lo bueno es que se tiene el codigo fuente para eso. (Que entiendo que en mikroC no)

Saludos!

La Broma es que a esos datos que adquiera por el dsPIC tengo que aplicarle los Filtros FFI o IIR para eliminarles el ruido y dejar solo la frecuencia de la voz, por eso implemento dicho dispositivo, la broma tambien es que con el control cambiario que existe en venezuela se hace muy dificil comprar en dolares en el exteriro y los pocos dolares que nos dan estan a bolivar oficial en 4.30 y el dolar en el mercado negro esta en 17 bs por dolar es una exageracion... pero bueno tratare de implementar algo para el manejo de dicha memoria... por que el dsPIC va a trabajar bajo una frecuencia de 80 mhz la velocidad no deberia ser el problema...

BUeno Pienso yo....
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: willynovi en 04 de Enero de 2013, 11:25:12
... estuve configurando el adc a su mayor capacidad de conversión con un pll a 80 mhz pero cuando lo pongo a funcionar nada me graba como 100 datos en un segundo... y eso no es para nada rápido y necesito la mayor adquisición de datos para poder reconstruir la señal lo mas parecida posible a la original...

Es para grabar voz? Que muestreo quieres hacer y con que profundidad de bits, o sea, con que calidad?

Quizas estas pretendiendo usar mayor calidad de la que necesitas y de la que necesitas.

Y haciendo unos números, calidad de audio digital: 44,1 khz en 16bits y stereo
44100 × 16 × 2 = 1411200 bits por segundo = 1411,2 kbit/seg -> 176 kbytes/seg

Si hice bien las cuentas y no interpreto mal el resultado, con una velocidad de transferencia de 0,2 Mb por segundo tiene que alcanzar. Pero según los cálculos de Suky, 0,08 Mb/seg se quedan cortos  :oops:

No estoy al tanto del tratamiento de señales (DSP) quizas se puede hacer alguna compresión antes de enviarla por el XBee.
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: MGLSOFT en 04 de Enero de 2013, 11:29:08
Aquí también hay ese tipo de control (seguramente lo copiaron de alli) y te preguntan el apellido y el segundo nombre de tu tatarabuela materna, mas la edad, lugar y hora justa en que murió, antes de poder llenar una planilla para poder comprar un solo dolar.

Yo compro afuera por medio de mi tarjeta Visa y me funciona bien.
En el resumen luego lo transformo a pesos, del mercado legal, no el paralelo.

El tema del control cambiario, bien mirado, es bueno.
Y este método que te comento, no afecta al control cambiario, porque en realidad no sale la divisa nunca de tu país, ya que es un pago hecho en el banco donde el vendedor cobra su monto.

Seguramente allí deberías poder hacerlo así, con una tarjeta de crédito tuya o de alguien que te haga el favor...
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 04 de Enero de 2013, 12:10:35
... estuve configurando el adc a su mayor capacidad de conversión con un pll a 80 mhz pero cuando lo pongo a funcionar nada me graba como 100 datos en un segundo... y eso no es para nada rápido y necesito la mayor adquisición de datos para poder reconstruir la señal lo mas parecida posible a la original...

Es para grabar voz? Que muestreo quieres hacer y con que profundidad de bits, o sea, con que calidad?

Quizas estas pretendiendo usar mayor calidad de la que necesitas y de la que necesitas.

Y haciendo unos números, calidad de audio digital: 44,1 khz en 16bits y stereo
44100 × 16 × 2 = 1411200 bits por segundo = 1411,2 kbit/seg -> 176 kbytes/seg

Si hice bien las cuentas y no interpreto mal el resultado, con una velocidad de transferencia de 0,2 Mb por segundo tiene que alcanzar. Pero según los cálculos de Suky, 0,08 Mb/seg se quedan cortos  :oops:

No estoy al tanto del tratamiento de señales (DSP) quizas se puede hacer alguna compresión antes de enviarla por el XBee.

Calculos aun no he echo pero segun una frecuencia razonable de uno 10 khz estaria bien para hacer las pruebas... lo que necesito es que me grabe suficientes muestras para que el audio se reprodusca normal sin tanta perdida de calidad....
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: willynovi en 04 de Enero de 2013, 12:56:30
10000 hz x 8 bits x 2 (stereo) = 160000 bits/seg -> 20000 bytes/seg -> 20 kbytes/seg

creo que la tasa que alcanzó Suky es suficiente como para ir probando  ;-)
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 31 de Enero de 2013, 18:42:13
Amigos Necesito orientacion con respecto al registro del ADC ADCON3 que los valores de los datos

SAMC<4:0> y ADCS<5:0> no aparecen en su totalidad y necesito saber cuales son sus valores para poder realizar los calculos necesarios para obtener el muestreo de la señal.

(http://img277.imagevenue.com/img.php?image=661835226_1_122_26lo.JPG)

Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Suky en 31 de Enero de 2013, 18:50:17
 :roll: No necesitas tener representado todos sus valores, sabes que SAMC va desde 0 a 31, y ADCS desde 0 a 63.
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 31 de Enero de 2013, 19:31:34
:roll: No necesitas tener representado todos sus valores, sabes que SAMC va desde 0 a 31, y ADCS desde 0 a 63.

Bueno Realize los siguientes Calculos para su maxima conversion de datos...

TAD = 667ns
TCY = 4/Fosc = 4/80mhz = TCY = 50ns
ADCS<5:0> = 2*(TAD/TCY) - 1
ADCS<5:0> = 2*(667ns/50ns) - 1
ADCS<5:0> =~ 26

POR LO QUE EL NUEVO TAD ES

TAD = TCY/2 * (ADCS +1)
TAD = 50ns/S * (26+1)
TAD = 675ns

ahora lo que no tiendo es lo siguiente:

Este TAD es la frecuencia con que el convertidor realiza valga la redundancia la conversion del dato...

Si coloco SSRC<2:0> = 111; para que se autoconvierta y SAMC <4:0> = 00001; para que sea solo un 1  TAD entonces la frecuencia de muestreo seria

Tmuestreo = TAD + TCO = 1 TAD + 14 TAD = 15

Frecuencia de Muestreo es = 1 / (15 * 675 ns)
Frecuencia de Muestreo = 98.76 kHZ aproximadamente

Quiere decir que para 80 mhz puedo tener mas casi 1.500.000 muestras...

Por favor Alguien que me corriga los calculos si me equivoco.
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 04 de Febrero de 2013, 12:19:55
Amigos Tengo un Inconveniente con el código...

Estoy realizando pruebas de interrupciones y ese tipo de cosas para luego hacer el almacenamiento de datos en la mmc/sd

Estoy usando MikroC_dsPIC V5.1 debido a que actualmente es la que me proporciona las librerías más sencillas para el almacenamiento de datos en la MMC/SD

El Inconveniente presentado es cuando se están configurado el ADC, El Timer y la MMC/SD

El mismo cuando finaliza de configurar automáticamente vuelve a hacerlo es decir se configura 2 veces antes de empezar a realizar las acciones...

Voy a explicarlo mejor....

Aquí está el código


Código: [Seleccionar]
sbit LCD_RS at LATB5_bit;
sbit LCD_EN at LATB4_bit;
sbit LCD_D4 at LATB3_bit;
sbit LCD_D5 at LATB2_bit;
sbit LCD_D6 at LATB1_bit;
sbit LCD_D7 at LATB0_bit;

sbit LCD_RS_Direction at TRISB5_bit;
sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB0_bit;

sbit Mmc_Chip_Select           at LATF0_bit;
sbit Mmc_Chip_Select_Direction at TRISF0_bit;

char filename[14] = "OPE00X.TXT";
const LINE_LEN = 43;
char file_contents[LINE_LEN] = "XX MMC/SD FAT16 library by Anton Rieckertn";
unsigned short loop, loop2;
unsigned long  i, size;

char Buffer[512];
char VALOR;



void BORRAR (){
  Lcd_Cmd(_LCD_CLEAR);
}

void CONF_ADC(){
  Lcd_Out(1,1,"CONF. ADC");
  Delay_MS(750);
  ADPCFG = 0xFBFF;
  ADCHS  = 0x000A;
  ADCSSL = 0x0400;
  ADCON1 = 0x8046;
  ADCON2 = 0x0000;
  ADCON3 = 0x011A;
  BORRAR();
}

void CONF_TIM(){
  Lcd_Out(1,1,"CONF. INT");
  DELAY_MS(750);
  SR      = 0x0000;
  CORCON  = 0x0000;
  INTCON1 = 0x0000;
  INTCON2 = 0x0000;
  IFS0    = 0x0000;                // BANDERA DE INTERRUPCIONES, TM3, ADIF, ADIF
  IFS1    = 0x0000;
  IFS2    = 0x0000;
  IEC0    = 0x0880;                // ADC, TIMER3 Interrupt Enable
  IEC1    = 0x0000;
  IEC2    = 0x0000;
  IPC0    = 0x1000;
  IPC1    = 0x0000;
  IPC2    = 0x1000;
  IPC3    = 0x0000;
  IPC4    = 0x0000;
  IPC5    = 0x0000;
  IPC6    = 0x0000;
  T3CON   = 0x8030;
  TMR3    = 0;
  PR3     = 39062;
  BORRAR();
}

void CONF_MMC(){
  Lcd_Out(1,1,"CONF. MMC/SD");
  DELAY_MS(750);
 
  SPI1_Init_Advanced(_SPI_MASTER, _SPI_8_BIT, _SPI_PRESCALE_SEC_1, _SPI_PRESCALE_PRI_64,
                    _SPI_SS_DISABLE, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_HIGH, _SPI_ACTIVE_2_IDLE);
                   
if (!Mmc_Fat_Init()) {

     SPI1_Init_Advanced(_SPI_MASTER, _SPI_8_BIT, _SPI_PRESCALE_SEC_1, _SPI_PRESCALE_PRI_4,
                      _SPI_SS_DISABLE, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_HIGH, _SPI_ACTIVE_2_IDLE);

    Lcd_Out(1,1,"MMC/SD CONEXT");
    DELAY_MS(750);
    BORRAR();
  }
  else {
    Lcd_Out(1,1,"MMC/SD DESCONEXT"); 
    DELAY_MS(750);
    BORRAR();
    }
  BORRAR();
}

void NEW_FILE(){
  filename[5] = 'A';
  Mmc_Fat_Set_File_Date(2005,6,21,10,35,0);
  Mmc_Fat_Assign(&filename, 0xA0);
  Mmc_Fat_Rewrite();
  Lcd_Out(1,1,"ARCHIVO CREADO");
  DELAY_MS(750);
  BORRAR();
  for(loop = 1; loop <= 99; loop++) {
    file_contents[0] = loop / 10 + 48;
    file_contents[1] = loop % 10 + 48;
    Mmc_Fat_Write(file_contents, LINE_LEN-1); // write data to the assigned file
  }
  Lcd_Out(1,1,"Fin de Escritura");
  DELAY_MS(750);
  BORRAR();

}

void ADC1Int() org 0x2A {

  VALOR = ADCBUF0;
  LATD = ~PORTD;
/*  filename[5] = 'A';
  Mmc_Fat_Assign(&filename, 0xA0);
  Mmc_Fat_Write(VALOR, LINE_LEN-1);
  Lcd_Out(1,1,"Fin de Escritura");*/
  IFS0 = 0x0000;                           // Limpia las Banderas.
}

void CONFIG (){
  Lcd_Out(1,1,"CONFIGURACION");
  DELAY_MS(1000);
  BORRAR();
  CONF_MMC();
  NEW_FILE();
  CONF_ADC();
  CONF_TIM();
}


void main() {
  TRISB = 0xFFFF;
  TRISD = 0;
  Lcd_Init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
  CONFIG();


  while(1);
}

El Entra en el siguiente ciclo...

Código: [Seleccionar]

  CONF_MMC();
  NEW_FILE();
  CONF_ADC();
  CONF_TIM();

Configura la MMC, Crea un archivo nuevo y graba dentro del mismo, Luego configura el ADC y por Ultimo configura las Interrupciones...

Ahora todo esto lo estoy visualizando en la LCD 16x2 y la misma me muestra que cuando termina de configurar el timer vuelve otra vez a configurar la MMC y todo de nuevo...

Al Final cuando lo hace 2 veces es que se queda esperando las interrupciones que genera el adc por el desbordamiento del TIMER 3

Si Alguien me pudiera ayudar a ver que estoy haciendo mal se lo agradecería.
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 05 de Febrero de 2013, 16:50:36
Amigos tengo un problema con el código...

Cuando voy a iniciar la Memoria MMC/SD la configuración del mismo se reinicia 2 veces... y no entiendo porque el código del post anterior es el que estoy utilizando:::

Gracias por la respuesta...
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: PalitroqueZ en 07 de Febrero de 2013, 00:40:01
Goodfrey hay 2 sugerencias (sugerencias porque ninguna de las 2 las he probado,)

la primera es implementar un buffer circular con una memoria de alta capacidad y velocidad, donde sea suficiente la relación de muestras capturadas vs muestras procesadas, de esta forma haces independiente la velocidad del micro, del procesamiento de datos.

la segunda (y dependiendo de tu situación de la tesis) es que pidas una cotización en plus electronic y ellos te traigan de afuera el chip que necesites.

Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 07 de Febrero de 2013, 10:30:51
Goodfrey hay 2 sugerencias (sugerencias porque ninguna de las 2 las he probado,)

la primera es implementar un buffer circular con una memoria de alta capacidad y velocidad, donde sea suficiente la relación de muestras capturadas vs muestras procesadas, de esta forma haces independiente la velocidad del micro, del procesamiento de datos.

la segunda (y dependiendo de tu situación de la tesis) es que pidas una cotización en plus electronic y ellos te traigan de afuera el chip que necesites.



Gracias por la respuesta amigo PalitroqueZ actualmente cambie la forma de almacenamiento de datos, ahora voy a utilizar una memoria ISD1420 para guardar los datos y luego procesarlas por el dsPIC y enviarla inalambricamente al otro dispositivo por medio del xBEE
Título: Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
Publicado por: Goodfrey en 07 de Marzo de 2013, 12:05:22
Buenos Días.

Nuevamente vengo con una duda con respecto al codigo que estoy desarrollando, actualmente utilizo el compilador MikroC_dsPIC para realizar la tesis, mi pregunta es la siguiente.

Necesito grabar los datos leidos del adc de 12 bit del dsPIC30F4013 y guardar estos datos en una memoria MMC/SD, la libreria MMC del compilador utiliza la opcion Mmc_Write_Sector, el cual como saben graba un sector de la memoria un arreglo de 512 bytes.

pero el adc me arroja un valor de 12 bits por lo que tengo que dividir dicho dato en 2 bytes para poder guardarlo en la memoria, generalmente si realizo el siguiente codigo...

Código: [Seleccionar]

unsigned long  w;
unsigned int voz;
unsigned long lsb,msb;

        for(w = 0; w < 512, w++)
        {
         voz = ADC1_Read(10);
         lsb = (voz / 16);
         msb = voz >> 8;
         Buffer[w] = msb;
         w++;
         Buffer[w] = lsb;
         UART2_Write(msb);
         UART2_Write(lsb);
         }

cuando envia los datos por el UART me muestra para 5 voltios en el lsb = 0xFF y para el msb = 0x0F, y en la memoria me deberia guardar los siguientes caracteres correspondiente a los codigo Ascii de dicho valor hexadecimal, pero no sucede si no me guarda unos valores raros en la memoria.

mi duda es porque si los valores de lsb y msb son los exactos por que no me guarda los datos que realmente son, espero me ayuden con este problema...

Gracias.