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
}