Gracias a los interesados por ayudar. Si he logrado capturar datos y guardarlos pero no los captura a 44us. Este es el codigo del programa.
char filename[]="LARVOMTRTXT";
unsigned sec,hsec,loop;
unsigned short t;
unsigned char ch1,ch2,flag,choice,ret_status,car[2],sound[10], txt[12];
unsigned long file_size,i,rec_size, usec;
void Get_Sound()
{
unsigned long Vin, Vdec, Vfrac;
unsigned char op[12];
unsigned char i,j;
unsigned float conv=1.243902;
Vin= Adc_Read(0); //Read from channel 0 (AN0)
Vin= Vin*conv;
Vdec= Vin;
LongToStr(Vdec,op); //Convert Vdec to string in "op"
//Remove leading blanks
j=0;
for(i=0;i<=11;i++)
{
if(op!=' ') //if a blank
{
sound[j]=op;
j++;
}
}
sound[j]=0x0D; //Add carriage-return
j++;
sound[j]=0x0A; //Add line-feed
j++;
sound[j]='\0';
}
void initmmc()
{
//Initialise the Spi bus
Spi_Init_Advanced(MASTER_OSC_DIV4,DATA_SAMPLE_MIDDLE,CLK_IDLE_LOW,LOW_2_HIGH);
//Initialise the SD card bus
while(Mmc_Init(&PORTC,2));
//Initialise the FAT file system
while(Mmc_Fat_Init(&PORTC,2));
rec_size=0;
}
void init_timer()
{
//PROGRAMAR MODULO Timer1 5ms a 40MGHz
TRISD.F7=0;
// Set Interrupt Enable bits
PIE1.TMR1IE = 1; // bit 0 TMR1 Ovewflow Interrupt Enable
INTCON = 0xC0; // Set GIE, PEIE
// Timer1 Registers: Prescaler=1:1; TMR1 Preset=65492; Freq=22,727.27273Hz; Period=44.00 µs
T1CON.T1CKPS1 = 0; // bits 5-4 Prescaler Rate Select bits
T1CON.T1CKPS0 = 0; // bit 4
T1CON.T1OSCEN = 1; // bit 3 Timer1 Oscillator Enable Control: bit 1=on
T1CON.T1SYNC = 1; // bit 2 Timer1 External Clock Input Synchronization Control bit: 1=Do not synchronize external clock input
T1CON.TMR1CS = 0; // bit 1 Timer1 Clock Source Select bit: 0=Internal clock (FOSC/4) / 1 = External clock from pin T13CKI (on the rising edge)
T1CON.TMR1ON = 1; // bit 0 enables timer
TMR1H = 0xFE; // preset for timer1 MSB register
TMR1L = 0x48; // preset for timer1 LSB register
PIR1.TMR1IF = 0; // clear TMR1IF
PIE1.TMR1IE = 1; // enable Timer1 interrupt
}
void interrupt()
{
initmmc();
Mmc_Fat_Assign(&filename,0x80); //Assign the file
Mmc_Fat_Rewrite(); //Clear
Mmc_Fat_Write("# SOUND DATA SAVED AT 22KHZ \r\n",43);
if(PIR1.TMR1IF==1)
{
usec++;
//Read the sound from A/D converter, format and save
Mmc_Fat_Append();
Get_Sound();
Mmc_Fat_Write(sound,9);
TMR1H = 0xFE;
TMR1L = 0X48;
PIE1.TMR1IE = 1;
PIR1.TMR1IF = 0; //apago fuente de interrupcion
if (usec == 22720)
{
usec=0;
sec++;
PORTD.F7 = !PORTD.F7;
if (sec == 60)
{
PIE1.TMR1IE = 0;
INTCON.TMR0IE = 0;
}
}
}
}
void main()
{
//Configure A/D converter
TRISA=0XFF;
ADCON1=0X80, //Use AN0, Vref=+5V
TRISD.F7=0;
PORTD.F7 = 0;
TRISB.F0=1;
TRISB.F1=1;
hsec=0;
sec=0;
usec=0;
loop=0;
Spi_Init_Advanced(MASTER_OSC_DIV4,DATA_SAMPLE_MIDDLE,CLK_IDLE_LOW,LOW_2_HIGH);
while(1)
{
if (PORTB.F0==1) // IF SW1 IS PUSH
{
init_timer();
}
}
}
Esta version solo captura un dato y ya. Tengo otra version del programa donde no uso el timer1, uso "delay_us(44)"; esta version captura datos pero no cada 44us.
char filename[ ] = "LARVOM01TXT";
unsigned int usec,sec,hsec,loop;
unsigned short t;
unsigned char ch1,ch2,flag,choice,ret_status,car[2],sound[10], txt[12];
unsigned long file_size,i,rec_size;
void Get_Sound()
{
unsigned long Vin, Vdec, Vfrac;
unsigned char op[12];
unsigned char i,j;
unsigned float conv=1.243902;
Vin= Adc_Read(0); //Read from channel 0 (AN0)
Vin=Vin*conv;
Vdec= Vin; //Decimal Part
LongToStr(Vdec,op); //Convert Vdec to string in "op"
//Remove leading blanks
j=0;
for(i=0;i<=11;i++)
{
if(op!=' ') //if a blank
{
sound[j]=op;
j++;
}
}
sound[j]=0x0D; //Add carriage-return
j++;
sound[j]=0x0A; //Add line-feed
j++;
sound[j]='\0';
}
void initmmc()
{
//Initialise the Spi bus
Spi_Init_Advanced(MASTER_OSC_DIV4,DATA_SAMPLE_MIDDLE,CLK_IDLE_LOW,LOW_2_HIGH);
//Initialise the SD card bus
while(Mmc_Init(&PORTC,2));
//Initialise the FAT file system
while(Mmc_Fat_Init(&PORTC,2));
rec_size=0;
}
void main()
{
//Configure A/D converter
TRISA=0XFF;
ADCON1=0X80, //Use AN0, Vref=+5V
TRISD.F7=0;
PORTD.F7=0;
TRISB.F0=1;
TRISB.F1=1;
hsec=0;
sec=0;
usec=0;
loop=0;
initmmc();
flag=0;
while(1)
{
if (PORTB.F0==1) // IF SW1 IS PUSH
{
Mmc_Fat_Assign(&filename,0x80); //Assign the file
Mmc_Fat_Rewrite(); //Clear
Mmc_Fat_Write("# SOUND DATA SAVED AT 22KHZ \r\n",43);
//Read the sound from A/D converter, format and save
while(1)
{
Mmc_Fat_Append();
Get_Sound();
Mmc_Fat_Write(sound,9);
Delay_us(45);
}
}
} // end of while
}