Autor Tema: VELOCIDAD DE MUESTREO ADC MEMORIA SD/MMC 18F452  (Leído 1564 veces)

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

Desconectado bily

  • PIC10
  • *
  • Mensajes: 13
VELOCIDAD DE MUESTREO ADC MEMORIA SD/MMC 18F452
« en: 26 de Enero de 2010, 12:16:05 »
HOLA ESTIMADOS.
ESPERO QUE ME AYUDEN.

Me encuentro trabajando con el compilador Mikroc. estoy trabajando con un pic18f452 y un cristal de 24 Mhz. y una memoria SD/MMC.
Mi programa realiza la tarea de muestrear tres senales analogicas y almacenarlas en la Memoria SD/MMC. El problema que tengo es en la velocidad. La idea es almacenar 300 muestras en un segundo.. Hasta el momento solamente he logrado almacenar 100 muestras en 15 segundos.. he cambia de cristal y el problema sigue sin solucion.
Ya he intentado de todo para optimizar el programa. talvez este cometiendo algun error en la programacion.
Talvez alguien ya lo ha solucionado, espero que me ayuden.. Gracias a todos.
ESTE ES EL CODIGO


#include <built_in.h>
//VARIABLES ADC TRES CANALES
int Var1,Var2,Var3;
int j;
int ECG1,ECG2,ECG3;
//unsigned int ECG1,ECG2,ECG3;
//unsigned short Data1[3],Data2[3],Data3[3];
//*/*/*/*/*/*/*/*/*/*/*/*/*/*
char
DatoMmc1[6],DatoMmc2[6],DatoMmc3[6];
char EnvioMmc[18];  //18 int
//VARIABLES PARA FAT16
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*+
 //ContenidoArchivo[16] = "XX HOLTER_ECG";
char
NombreArchivo[20] = "HOLTERTXT"; // NOMBRE DE MI ARCHIVO
unsigned short
 tmp, caracter, loop;
unsigned long
 i, size;
char Buffer[512];
//******************************************************************************
//*-*-*-*-* CREAMOS UN NUEVO ARCHIVO Y ESCRIBIMOS DATOS EN EL -*-*-*-*-*-*-*-*-
//******************************************************************************
void M_Create_New_File()
  {
  Mmc_Fat_Assign(&NombreArchivo,0xA0);//No encuentre el archivo, entonces cree el archivo
  Mmc_Fat_Rewrite(); // BORRAR el archivo y empezar con los nuevos datos
//******************************************************************************
//                            ADQUISICION DE DATOS
//******************************************************************************
          for(loop = 1; loop <= 100; loop++)
          {
// ADQUISICION Y ENVIO A FAT16
          ECG1=ADC_Read(0);//LEEMOS DEL CANAL0
                                                                                  //Data1[1]=Hi(ECG1);//ALMACENAMOS 8 BITS ALTO
                                                                                  //Data1[2]=Lo(ECG1); // 8 BITS BAJO
          ECG2=ADC_Read(1);//CANAL1
                                                                                  //Data2[1]=Hi(ECG2);
                                                                                  //Data2[2]=Lo(ECG2);
          ECG3=ADC_Read(2);//CANAL2
                                                                                  //Data3[1]=Hi(ECG3);
                                                                                  //Data3[2]=Lo(ECG3);
      //convertimos a estring
          IntToStr(ECG1, DatoMmc1);
          IntToStr(ECG2, DatoMmc2);
          IntToStr(ECG3, DatoMmc3);
      //CONCATENAMOS LAS TRES SEÑALES ECG

          strcat(EnvioMmc,DatoMmc1);  //strncat
          strcat(EnvioMmc,DatoMmc2);
          strcat(EnvioMmc,DatoMmc3);

          Mmc_Fat_Write(EnvioMmc,18); //     char unsigned  //18
           
          }
  }
//----------------------------MI PROGRAMA PRINCIPAL-----------------------------
void main()
     {
//******************************************************************************
//                      CONFIGURAMOS NUESTRO ADC
//******************************************************************************
     ADCON1=0x80;//CONFIGURAMOS ENTRADAS ANALOGICAS Y Vref
     TRISA=0xFF;//TODOS LOS BITS DEL PUERTO A SON ENTRADAS ANALOGICAS
//******************************************************************************
//               PUERTOS DE SENALIZACION Y CONTROL PLAY Y STOP
//******************************************************************************
     PORTB = 0; //PUERTO B PARA SEÑALIZACION
     TRISB = 0; // TODOS D' SALIDA
//******************************************************************************
//                         UNICAMENTE PARA MONITOREO
//******************************************************************************
     Usart_Init(19200); //ACTIVAMOS NUESTRO PUERTO SERIAL A 19200 BAUDIOS
     Delay_100ms();
//******************************************************************************
//                        INICIAMOS LA LIBRERIA FAT
//******************************************************************************
     Spi_Init_Advanced(MASTER_OSC_DIV64, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
// use fat16 quick format instead of init routine if a formatting is needed
    if (!Mmc_Fat_Init(&PORTC, 2))
       {
//                  REINICIALIZAMOS (SPI) A LA VELOCIDAD MAS ALTA
        Spi_Init_Advanced(MASTER_OSC_DIV4, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);

              PORTB = 0x02;//LED DEINICIO
//******************************************************************************
//                             CREAMOS EL ARCHIVO
//******************************************************************************
        M_Create_New_File();
//******************************************************************************
//                 MONITOREO Y SENALIZACION DE TERMINACION
//******************************************************************************
             PORTB=0x00; //LED DE INICIO OFF
             Usart_Write('T'); //ENVIAMOS AL USART
             Usart_Write('E');
             Usart_Write('R');
             Usart_Write('M');
             Usart_Write('I');
             Usart_Write('N');
             Usart_Write('A');
             Usart_Write('D');
             Usart_Write('0');
        }
     else {
       PORTB=0x01;//FALLA NO SD/MMC
     }
     //PRUEBA DE TERMINACION
     PORTB = 0x04;//PROCESO TERMINADO
}

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: VELOCIDAD DE MUESTREO ADC MEMORIA SD/MMC 18F452
« Respuesta #1 en: 26 de Enero de 2010, 12:20:47 »
Hola, podrias almacenar las muestras en un buffer temporal y cuando llege a 512 bytes ahi recien lo escribis en la tarjeta.

Saludos !