TODOPIC

FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: NANO1985 en 04 de Octubre de 2010, 17:02:47

Título: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: NANO1985 en 04 de Octubre de 2010, 17:02:47
amigosssss.... luego de leer un post de suky sobre ADC quise hacer una prueba con el ADC del 18F4550,... el circuito que monte es: alimentacion general 3.3v, 18F4550, con un cristal de 20Mhz, memoria Ramtrom FM24V10 (http://www.ramtron.com/files/datasheets/FM24V10_ds.pdf), se interconecta mediante bus I2C y se caracteriza por "no delay write"  ;-) y luego una micro SD en el bus SPI.... la señal alterna ingresa y se acopla a un capacitor, luego le sumo un nivel de continua igual a la mitad de la maxima excursion... y de aqui derecho al AN0 del ADC interno del micro.-
la idea es ingresar primero una señal de 50Hz y tratar de digitalizarla, obteniendo la mayor cantidad muestras por segundos posible, almacenando cada dato de 10bits en la ramtrom y luego de finalizar la adquisicion, se parsarian los datos de la ramtrom a la micro SD para su futuro analisis.... o lo que sea que se quieran hacer con los datos...
pero no se que ocurre.... por ejemplo.... esta es una señal de 50Hz con 1v de pìco aproximadamente.-
la configuracion del micro es la siguiente:

 ADCON1=0b00001110;  // habilita solamente AN0;
 ADCON2=0b10000000;  // configura ADC,    0TaD y Fosc/2

y la rutina de conversion y almacenamiento es en la ramtrom es la siguiente:

I2C_Init(1000000);   // configura la velocidad del reloj bus I2C
Direccion=0;            // inicializa posicion d mmoria flash
CS_RAMTROM=0;     // habilita memoria serial

///// inicializa el bus i2c y ESCRITURA EN MEMORIA ///////////////////

for (i=1;i<=200;i++)
{
  buffer = ADC_Read (0);
  ADC_MSB0 = Hi(buffer);
  ADC_LSB0 = Lo(buffer);
  ADD_H = Hi(Direccion);
  ADD_L = Lo(Direccion);
  I2C_Start();
  I2C_Wr(0b10100000);      // se direciona el dispositivo, modo escritura
  I2C_Wr(ADD_H);             // se manda primera parte de la direccion de memoria pagina 1
  I2C_Wr(ADD_L);              // se manda segunda parte de la direccion de memoria pagina1
  I2C_Wr(ADC_MSB0);       // graba MSB canal 0
  I2C_Wr(ADC_LSB0);       // graba LSB canal 0
  I2C_Stop();
  Direccion=(Direccion+2); //incrementa x2 posicion d memoria
  }

la secuencia es simple.... y como resultado luego de trasferir todos los datos a la Micro SD obtengo ésto...

(http://img201.imageshack.us/img201/6130/dibujofca.png) (http://img201.imageshack.us/i/dibujofca.png/)

como se ve, aproximadamente en 200 muestras tomadas, entraron aproximadamente 3 periodos de senoidal de 50Hz, es decir, 66.6 muestras por cada periodo completo, y el tiempo entre muestra y muestra es de aproximadamente 300.3 uS.... lo cual es muy lento para obtener una buena definicion de la curva.
otra cosa extraña es ese salto que se ve periodicamente.... la verdad sin palabras...

Acá va otra prueba , cambiando la configuracion del ADC...

 ADCON1=0b00001110;  // habilita solamente AN0;
 ADCON2=0b10110110;  // configura ADC,    16TaD y Fosc/64

y la le deje la misma rutina de conversion... lo resultados son los siguientes....

(http://img541.imageshack.us/img541/436/dibujo2if.png) (http://img541.imageshack.us/i/dibujo2if.png/)

como se vé.... se tomaron nuevamente 200 muestras.... pero el salto extraño se hizo mas notorio y la cantidad e muestras por cada perioro sigue siendo de 66.6 muetras....

alguien me puede orientar en que me estoy confundiendo?
saludos a todos!  8) German







Título: Re: digitalizar señal de 50hz con PIC
Publicado por: ema en 04 de Octubre de 2010, 17:10:06
Nano, es bastante raro... pero me parece que esos tiempos sin muestras se deben a la interface I2C que cada tanto el FM24V10 ocupa el bus y no te deja buscar nuevas muestras. Te recomiendo que lo vayas debugeando con un puerto, por ejemplo RS232.

Saludos
Título: Re: digitalizar señal de 50hz con PIC
Publicado por: NANO1985 en 04 de Octubre de 2010, 17:14:25
Nano, es bastante raro... pero me parece que esos tiempos sin muestras se deben a la interface I2C que cada tanto el FM24V10 ocupa el bus y no te deja buscar nuevas muestras. Te recomiendo que lo vayas debugeando con un puerto, por ejemplo RS232.

Saludos

vos me decis que en vez que guardarlo en la ramtrom lo mande por RS 232 a un terminal en la Pc y vea la continuidad de valores?? si es asi voy a tomar tu idea y voy a efectuar esta prueba ya mismo.
 
y la otra cosa.... sera posible bajar aun mas el tiempo entre muestra y muestra?
Título: Re: digitalizar señal de 50hz con PIC
Publicado por: Suky en 04 de Octubre de 2010, 17:20:22
Son 200 valores de 16-bits, 400 bytes, puedes guardarlos en un buffer y luego mandarlo a la PC (Por la velocidad de muestreo). Para ver que es lo que falla, memoria o conversor  ;-)

Que velocidad de I2C usas?


Saludos!
Título: Re: digitalizar señal de 50hz con PIC
Publicado por: NANO1985 en 04 de Octubre de 2010, 19:19:14
Son 200 valores de 16-bits, 400 bytes, puedes guardarlos en un buffer y luego mandarlo a la PC (Por la velocidad de muestreo). Para ver que es lo que falla, memoria o conversor  ;-)

Que velocidad de I2C usas?


Saludos!

probe usando una velocidad de clock de 100Khz, 400Khz y 1Mhz y siempre se genera el mismo inconveniente.-
Título: Re: digitalizar señal de 50hz con PIC
Publicado por: Nocturno en 05 de Octubre de 2010, 02:02:23
Al principio también pensé que podía deberse a una saturación del I2C, pero me he fijado bien en las capturas y el primer fallo se produce tan sólo después de haber capturado 8 muestras, por lo que no creo que sea eso.

Ambas ondas comienzan más o menos en el mismo ángulo, ¿tienes puesto algún trigger o ha sido casualidad?
¿Tienes la posibilidad de mirar con un osciloscopio la señal que está leyendo el pin analógico del PIC, a ver si también está distorsionada?
Título: Re: digitalizar señal de 50hz con PIC
Publicado por: NANO1985 en 05 de Octubre de 2010, 02:58:57
Al principio también pensé que podía deberse a una saturación del I2C, pero me he fijado bien en las capturas y el primer fallo se produce tan sólo después de haber capturado 8 muestras, por lo que no creo que sea eso.

Ambas ondas comienzan más o menos en el mismo ángulo, ¿tienes puesto algún trigger o ha sido casualidad?
¿Tienes la posibilidad de mirar con un osciloscopio la señal que está leyendo el pin analógico del PIC, a ver si también está distorsionada?


hola manolo.... mira la señal de la entrada esta bien... no posee trigger ni nada.... la verifique con el osciloscopio....la misma provee de un simple generador de señales...
el salto ese se produce casi aproximadamente a 64 muestras (primer senoidal) y se repite periodicamente... es muy extraño...
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: Nocturno en 05 de Octubre de 2010, 04:45:27
Nano, ¿es posible que la representación gráfica esté al revés?
Si fuera así, sí puedo entender que el buffer se ha llenado al llegar a 64 y se produce la primera discontinuidad.
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: ema en 05 de Octubre de 2010, 10:02:24
vos me decis que en vez que guardarlo en la ramtrom lo mande por RS 232 a un terminal en la Pc y vea la continuidad de valores?? si es asi voy a tomar tu idea y voy a efectuar esta prueba ya mismo.

Probaste esto?

Saludos
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: NANO1985 en 05 de Octubre de 2010, 11:18:09
vos me decis que en vez que guardarlo en la ramtrom lo mande por RS 232 a un terminal en la Pc y vea la continuidad de valores?? si es asi voy a tomar tu idea y voy a efectuar esta prueba ya mismo.

Probaste esto?

Saludos

estoy en esto... ya termino de ensamblar la interfaz serie... y hago una prueba con el puerto serie...
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: pablomanieri en 05 de Octubre de 2010, 11:21:23
Estás usando alguna interrupción?
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: NANO1985 en 05 de Octubre de 2010, 16:14:06
Estás usando alguna interrupción?

no uso nincun tipo de inteerrupcion.
Nano, ¿es posible que la representación gráfica esté al revés?
Si fuera así, sí puedo entender que el buffer se ha llenado al llegar a 64 y se produce la primera discontinuidad.


manolo , no entendi lo de la grafica al reves....
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: Suky en 05 de Octubre de 2010, 16:51:38
Nano, ¿es posible que la representación gráfica esté al revés?
Si fuera así, sí puedo entender que el buffer se ha llenado al llegar a 64 y se produce la primera discontinuidad.


manolo , no entendi lo de la grafica al reves....

Que los primeras muestras sean de derecha a izquierda  ;-)
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: Nocturno en 05 de Octubre de 2010, 17:44:37
Exacto, justo como dice Suky.

Y lo de la interrupción también es una posibilidad seria. ¿No será que se te ha escapado y está activada?, ¿quizás el watchdog?
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: NANO1985 en 05 de Octubre de 2010, 21:50:50
Exacto, justo como dice Suky.

Y lo de la interrupción también es una posibilidad seria. ¿No será que se te ha escapado y está activada?, ¿quizás el watchdog?

voy a verificar ésto.... no consegui el queridisimo MAX233 para hacer la interfaz serial a 3.3v.... asi que voy a ingeniarmelas para ver el tema de las interrupciones y /o watchdog...
gracias hemanos por la colaboracion...
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: ema en 06 de Octubre de 2010, 09:27:54
otra opción es guardar todas las muestras, al menos mas de 64 en un buffer y despues pasarlas por I2C, ahi también te vas a dar cuenta si esto sucede porque se esta ocupando el I2C.

Saludos

P/D: Para RS232 a 3.3v, el driver se llama MAX3232.
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: NANO1985 en 06 de Octubre de 2010, 12:31:45
otra opción es guardar todas las muestras, al menos mas de 64 en un buffer y despues pasarlas por I2C, ahi también te vas a dar cuenta si esto sucede porque se esta ocupando el I2C.

Saludos

P/D: Para RS232 a 3.3v, el driver se llama MAX3232.

esto de guardar las muestras en un buffer lo hice.... es decir, defini un vector tipo "char" de 400 bytes (ya que por cada conversion requiero de 2 bytes)....
1)- realizo la conversion y almacenamiento en el vector....
2)- al finalizar al almacenamientos de los valores en el vector, hice la secuencia de pasar los 400 bytes a la ramtrom y continua la discontinuidad aproximadamente cada 64 muestras...
me estoy volviendo loco ya... por dios.... que pasaaaaaaaaaaaa  :5]
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: pablomanieri en 06 de Octubre de 2010, 12:34:41
No se estará colgando el pic por un instante justo cada 64 muestras.  :shock:. El wdt está desactivado?
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: Suky en 06 de Octubre de 2010, 13:05:26
esto de guardar las muestras en un buffer lo hice.... es decir, defini un vector tipo "char" de 400 bytes (ya que por cada conversion requiero de 2 bytes)....
1)- realizo la conversion y almacenamiento en el vector....
2)- al finalizar al almacenamientos de los valores en el vector, hice la secuencia de pasar los 400 bytes a la ramtrom y continua la discontinuidad aproximadamente cada 64 muestras...
me estoy volviendo loco ya... por dios.... que pasaaaaaaaaaaaa  :5]

Si fuera el wdt el micro se resetearia y no se obtendría ese resultado, yo lo descarto. Lo que tampoco me gusta es la forma de la señal, para nada senoidal, y lo estas probando con un generador de señales, no es cierto?

Guardar en un buffer y mandar todo a la vez no prueba nada, ya que estas haciendo lo mismo que muestrear y enviar, peor con menos tiempo entre envío de datos. Lo que habría que hacer es, tomar los 400 valores y observarlos. No tienes un debug como para ver las variables del microcontrolador?

Saludos!
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: ema en 06 de Octubre de 2010, 13:24:37
Solo por curiosidad, que tipo de variable es "Direccion".

Saludos
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: Nocturno en 06 de Octubre de 2010, 13:35:26

Si fuera el wdt el micro se resetearia y no se obtendría ese resultado, yo lo descarto. Lo que tampoco me gusta es la forma de la señal, para nada senoidal, y lo estas probando con un generador de señales, no es cierto?

Saludos!

A mí me da la impresión de que la segunda captura sí es senoidal, aunque está interrumpida.
Es curioso porque la frecuencia de la interrupción se corresponde exactamente con la frecuencia de la señal capturada, por lo que estoy pensando que no es un problema de un buffer en el PIC. Ya sería casualidad que el buffer estuviera saturando a la misma frecuencia de la señal capturada.
¿Has probado a capturar señales con otra frecuencia?, ¿se produce la discontinuidad también a partir del dato nº 64 o en el ángulo de la señal donde se está produciendo ahora?
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: NANO1985 en 06 de Octubre de 2010, 17:31:48
Solo por curiosidad, que tipo de variable es "Direccion".

Saludos

direccion es short....  luego haciendo HI(direccion) y LO(direccion) separo el registro en 2 bytes para poder enviarlo por i2c a la ramtrom...
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: ema en 06 de Octubre de 2010, 18:48:11
A ver, te aclaro que nunca use MikroC... pero Direccion no deberia ser "unsigned short".

Otra prueba puede ser usar el adc en 8 bits, de modo que dirección solo se incremente de a una posición, porque me da curiosidad que solo hayan 64 muestras, lo que ocuparia 128 direciones...

Saludos
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: NANO1985 en 06 de Octubre de 2010, 23:17:18
extraña mente el problema estaba en el tipo de declaracion de la variable del buffer que usaba!!!
tenia que ser unsigned int! y todo se solucionooooooo!!! veanlo ustedes mismos!!

unsigned int ADC_MSB0=0, ADC_LSB0=0;
unsigned int ADD_L=0, ADD_H=0, Direccion=0, buffer=0; todo funciono de maravillas!!!!!!  :mrgreen:

(http://img708.imageshack.us/img708/5715/dibujopvh.jpg) (http://img708.imageshack.us/i/dibujopvh.jpg/)

un millon de gracias a todos los que colaboraron con esta duda!
la onda que intrudoje al ADC posee un periodo de 50Hz y en cada ciclo poseen 11 picos mas de aproximadamente 1Khz de frecuencia.... voy a efectuar varias pruebas al respecto...

Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: ema en 07 de Octubre de 2010, 01:04:51
Me alegro Nano...  :-/ :-/

Al final resulto que al no ser unsigned, la variable iba de -128 a 127 y cuando la concatenabas solo mostraba 128 valores, osea del 0 a 127 (64 muestras)...

Saludos
Título: Re: digitalizar señal de 50hz con PIC - extraña falla -
Publicado por: NANO1985 en 07 de Octubre de 2010, 01:25:09
Me alegro Nano...  :-/ :-/

Al final resulto que al no ser unsigned, la variable iba de -128 a 127 y cuando la concatenabas solo mostraba 128 valores, osea del 0 a 127 (64 muestras)...

Saludos

asi es hermano!!! un abrazo!! y mil gracias por la ayuda! saludos a todos.... de todas formas voy a seguir haciendo puebas y subiendo avances...