Autor Tema: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013  (Leído 10844 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #15 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



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).
« Última modificación: 04 de Enero de 2013, 09:20:25 por MGLSOFT »
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #16 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, 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!
No contesto mensajes privados, las consultas en el foro

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #17 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, 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....

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #18 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.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #19 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...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #20 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....

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #21 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  ;-)
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #22 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.




Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #23 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.
No contesto mensajes privados, las consultas en el foro

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #24 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.

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #25 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.

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #26 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...

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #27 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.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #28 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

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Comunicacion Inalambrica, MMC/SD, dsPIC30F4013
« Respuesta #29 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.