TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: agperojo en 26 de Noviembre de 2009, 09:15:25
-
Buenas,
Necesito una ayuda en cuanto al escribir/leer de la EEPROM o de la RAM. El problema está en que debo realizar un muestreo de una señal, con un dsPiC30F6010, recibida de un micrófono y guardarla en una de las 2. Estube mirando en el Familiy Reference Manual sobre la RAM y sobre la EEPROM y veo que no tengo ni idea ni entiendo como realizarlo. Cada muestra ocupa 10 bits según me indica el manual, por lo que pierdo 6 bits de mano por cada conversión. Os dejo el código que tengo para haceros mejor a la idea de lo que querría realizar.
#include <p30f6010.h>
#define TAM 51200
void Desplazavector(int vector[],int tam)
{
int i;
for(i=tam-1;i>=0;i--)
{
vector[i-1]=vector[ i ];
}
}
void Inicializavector(int vector[], int tam)
{
int i;
for(i=0;i<tam;i++)
{
vector[ i ]=0;
}
void TMR3Config()
{
TMR3=500; /*10KHZ*/
PR3=0;
T3CONbits.TCKPS=0; /*Prescaler 1/1*/
}
void ADConfig()
{
ADCON1bits.SSRC=2; /*Utilizar Timer3 para realizar la conversión*/
ADCON1bits.ASAM=1; /*Siguiente conversión se realiza en cuanto termina la anterior*/
ADCON1bits.SAMP=1; /*Al menos un S&H está muestreando*/
ADCON2bits.SIMP=17; /*Una interrupción para cada 16 muestreos*/
ADCHSbits.CH0SA=5; /*Utilizo AN5 como entrada analógica para el muestreo*/
IFS0bits.ADIF=0; /*Borro la bandera de interrupción*/
IEC0bits.ADIE=1; /*Habilito interrupción*/
}
void _ISR _ADCInterrupt()
{
int vector[51200]; /*Declaro un vector de tamaño el máximo de muestras que podría guardar en la EEPROM*/
IFS0bits.ADIF=0; /*Borro la flag de nuevo*/
vector[0]=ADCBUF0; /*Guardo la muestra en la primera posición del vector*/
/*Necesito escribir éste vector en la memoria interna del dspic para su posterior lectura*/
Desplazavector(vector,TAM); /*Desplazo el valor a la derecha para no pisarlo en el siguiente muestreo*/
}
int main()
{
int entrada[TAM];
Inicializavector(entrada,TAM);
while(1)
Idle();
}
Realizo 16 conversiones por interrupción para optimizar el problema que tengo con lo de los 10bits. Sólo necesito saber que instrucciones debería utilizar para poder guardar ese vector sin pisar nada importante en la memoria y las instrucciones también para poder leerlas en un futuro.
Un saludo, y muchisimas gracias de antemano.
P.D.: Sé que podré guardar solo como máximo 5,12s voz, pero eso no es problema.
-
No es que yo pueda servirte de mucha ayuda... pero he encontrado un tema que puede interesarte
http://www.todopic.com.ar/foros/index.php?topic=1708.msg11326#msg11326
Ahí tienes un código que parece funcionar y maneja la EEPROM de tu dspic precisamente ;)
Cuidado con la dirección que le pones!
Un saludo. :-/
-
Gracias por la ayuda aportada. Tengo que mirarlo, y en cuanto lo pruebe os comentaré. De momento lo he dejado de lado para seguir con otras cosas que debo hacer en ese mismo proyecto.
Un saludo
-
Un placer haber sido de ayuda :)