Autor Tema: Ayuda con memoria EEPROM o RAM  (Leído 2592 veces)

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

Desconectado agperojo

  • PIC10
  • *
  • Mensajes: 4
Ayuda con memoria EEPROM o RAM
« 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.
« Última modificación: 26 de Noviembre de 2009, 09:22:56 por agperojo »

Patoso

  • Visitante
Re: Ayuda con memoria EEPROM o RAM
« Respuesta #1 en: 29 de Diciembre de 2009, 15:10:27 »

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.  :-/

Desconectado agperojo

  • PIC10
  • *
  • Mensajes: 4
Re: Ayuda con memoria EEPROM o RAM
« Respuesta #2 en: 18 de Febrero de 2010, 14:17:49 »
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

Patoso

  • Visitante
Re: Ayuda con memoria EEPROM o RAM
« Respuesta #3 en: 02 de Marzo de 2010, 14:39:23 »

Un placer haber sido de ayuda :)