TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jeremylf en 12 de Septiembre de 2011, 01:21:45

Título: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 12 de Septiembre de 2011, 01:21:45
Estoy usando un PIC12F683 a 20Mhz con su ADC a Fosc/32 para obtener el valor mas bajo del TAD (1.6us, segun datashet). Entonces, cada 1.6us obtengo un nuevo valor de la conversion ADC, esto significa que cada segundo tendria 1000000/1.6 = 625000 muestras, esto quiere decir que mi maxima frecuencia de muestreo seria de 625000 muestras por segundo??? O estoy mal?

GRacias!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 12 de Septiembre de 2011, 01:30:19
Olvide decir que lo estoy usando a 8 bits, no 10 bits  :P (supongo que con 8 bits ira un poco mas rapido no?)
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 12 de Septiembre de 2011, 01:41:26
Bueno a cabo de enterarme que el TAD es el tiempo de conversio de un solo bit. Entonces, si solo quiero una resolucion de 8 bits, entonces el tiempo para un byte sera de 8 x 1.6 = 12.8us. Entonces, mi frecuencia de muestreo sera de 1 000 000 / 12.8 = 78125 muestras por segundo, esta bien ? =/
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: MerLiNz en 12 de Septiembre de 2011, 07:30:28
para 8 bits probablemente sean 9TAD, por ejemplo para 10bit son 11TAD y para 12bit 14TAD. Ahora no te olvides de sumarle el TACQ (tiempo acquisicion) este tiempo para tu pic suele ser 1.4us minimo, lo normal es aumentarle algo para obtener buenas lecturas, y tambien depende de la impedancia de la fuente.

Quedaria 9Tad+2Tacq=11Tad= 17.6us total
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 12 de Septiembre de 2011, 10:35:37
Si el un solo canal, el tiempo de adquisición es para la primer muestra, después ya no. Acuérdense que la señal debe ser de banda limitada, y menor a la mitad de la frecuencia de muestreo máxima.

F= 1/ (~15us (9TAD) + tiempo en cargar el dato al buffer (buffer[k] o *Ptr++) + tiempo en controlar posición dentro del bucle (for, while, etc...) )



Saludos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 12 de Septiembre de 2011, 15:45:01
Mi aplicacion usa la audiofrecuencia (20khz maximo), en wikipedia he leido (http://es.wikipedia.org/wiki/Frecuencia_de_muestreo) que para esta frecuencia es mas que suficiente una frecuencia de muestreo de 40000 y creo que el 12f683 estaria llegando al rededor de 55000 aprox (con todos los calculos que has propuesto suky) o estoy haciendo algo mal ?

Gracias por la ayuda!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 12 de Septiembre de 2011, 17:33:20
No, esta bien. Depende de lo que realices la frecuencia de muestreo debe ser bien establecida, en ese caso yo lo controlo con el timer2, por ejemplo.


Saludos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 13 de Septiembre de 2011, 02:34:45
Bueno, en este caso lo hago por polling solamente. Hago una captura de 79 datos (es la matriz mas grande que puedo crear de 8 bits en el CCS) y luego los proceso. Gracias por la ayuda.
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: MerLiNz en 13 de Septiembre de 2011, 12:27:16
porque es la matriz mas grande que puedes crear? Viene limitado? o estas limitado por la memoria del micro?
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 13 de Septiembre de 2011, 12:29:28
porque es la matriz mas grande que puedes crear? Viene limitado? o estas limitado por la memoria del micro?

Es un 12F  ;-)


Saludos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 13 de Septiembre de 2011, 15:13:17
Claro, el 12F683 tiene 128 bytes de RAM. Entonces, a parte de los 4 bytes aprox. que ya tengo creados como locales (dentro del main), en el CCS solo me permite crear una matriz de bytes (int8) global de hasta 92 como maximo.

Código: [Seleccionar]
int8 Matriz[92];

void main (void)...

Con esto mi RAM esta en 80%; a esta matrix ya no le puedo poner mas de 92.

Por otro lado, aun puedo crear otra matriz global mas de hasta 25 bytes. con esto mi RAM si se va al 100%.

Entnoces, los 4 primeros locales, mas la matriz global de 92 bytes, mas la otra matriz global de 25 bytes, dan 121 bytes en total. No se que hara CCS con los otros 7 bytes que faltan (128 - 121), pero debe ser por que algunas variables son globales y otras son locales y quiza esto influya.

Tampoco se porque no puedo crear una sola matriz que tenga 117 (92+25) bytes, talves sea por la version quien sabe. Mi version CCS es la 4.112.

Bueno, salu2.
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 13 de Septiembre de 2011, 15:51:22
Además esta el tema de los bancos. 92 bytes son lo máximo consecutivos.


Saludos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 13 de Septiembre de 2011, 17:10:07
... 92 bytes son lo máximo consecutivos.
En que parte del datasheet esta eso?  :lol:
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: MerLiNz en 13 de Septiembre de 2011, 17:34:32
eso depende, en el c18 se puede editar los bancos y ponerlos todos como 1 unico banco.
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: AKENAFAB en 13 de Septiembre de 2011, 17:37:46
... 92 bytes son lo máximo consecutivos.
En que parte del datasheet esta eso?  :lol:

En el mapa de memoria de datos.

Que para ese pic indica que es de 96 , y otro banco de 32 , en total 128 de RAM .

Saludos!

Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 13 de Septiembre de 2011, 21:37:23
eso depende, en el c18 se puede editar los bancos y ponerlos todos como 1 unico banco.

Por favor, hay que saber diferenciar entre distintas arquitecturas, compiladores, etc... Esa mezcla que hiciste, mortal!  :mrgreen:

Aquí lo que comento, que pasa en los 12F y 16F....





Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 13 de Septiembre de 2011, 23:55:53
Aja! 96! Y por que el ccs solo me permite hacer una matriz de 92 bytes solamente? Tambien, el bendito ccs no puedo juntar de alguna forma los dos bancos para tener solo una matriz de 128 bytes o almenos 120 talves..??

Gracias a todos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: MerLiNz en 14 de Septiembre de 2011, 07:46:18
no has pensado en pasarte al 18f?
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 14 de Septiembre de 2011, 10:14:40
Aja! 96! Y por que el ccs solo me permite hacer una matriz de 92 bytes solamente? Tambien, el bendito ccs no puedo juntar de alguna forma los dos bancos para tener solo una matriz de 128 bytes o almenos 120 talves..??

Gracias a todos!

Seguramente crea variables de uso propio de CCS. CCS no permite crear un arreglo mayor al que permite el hardware, sé por comentacios de Richi que hay compiladores que solucionan esta discontinuidad (creo que entredí bien  :mrgreen:), pero CCS no.


Saludos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: jeremylf en 14 de Septiembre de 2011, 13:52:40
Vaya, Gracias suky.

NetLinz, mas que nada es creo por que quiero un pic de 8 pines solamente  :lol:
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: igaspar33 en 06 de Octubre de 2011, 20:38:32
Hola, un saludo a todos  :)  me gustaria preguntar un poco mas sobre la frecuncia de muestreo en un PIC. Estoy haciendo un proyecto con el PIC16F88 (soy nuevo en esto jeje). Se trata de leer una señal analogica por el ADC de 10-bits y despues enviarla a un dispositivo Bluetooth a traves del UART. Mi rpblema es que no he podido fijar a 1kHz la Frecuencia de muestreo del ADC estuve checando el datasheet pero no comprendo como fijarla, podrian ayudarme??  les adjunto mi codigo de MikroC para alguna sugerencia.

Código: [Seleccionar]
  OSCCON = 0b01111110; //8MHz oscilador interno
  ANSEL = 0;   
  TRISB = 0;
  CMCON = 0x00;

  TXSTA.SYNC= 1;
  UART1_Init(19200);  //inicializa UART
  Delay_ms(100);  //epera para  UART se estanilice

 ANSEL = 0b10000010;           //Configure analog AN1 and inputs and Vref

 do{
         if ( UART1_Data_Ready() )       //Revisar si UART esta listo
         {
             in = UART1_read();          //Se lee el UART
                 
             if ( in == 'i' )            //Inico de tranmision de datos
                { while( in != 'p' )  //espera caracter de inicio de transmision
                  { outADC = Adc_Read(1);      //Captura de datos del ADC_1
                    Delay_us(900);          // delay para cambiar la Fs = Hz
                   out = outADC  8 ;       //pasa valor del ADC ala variable del UART
                    UART1_Write( out );     // Envio de datos via UART
                    in = UART1_read();
                    if ( in == 'p' )            //espera caracter de Fin de transmision de datos
                    { UART1_Write_Text(FIN);}
                   }
                }
         }
    }
while(1);
}

Gracias de ante mano
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 06 de Octubre de 2011, 21:39:14
Podes usar un timer para fijar el periodo de inicio de conversión.


Saludos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: igaspar33 en 07 de Octubre de 2011, 16:40:03
Hola Suky muchas gracias por atender  :-/ ,
Si he escuchado que lo hacen con el timmer  a traves de interrupciones, sin embargo no se como hacerlo podrias mostrarme algun ejemplo?? o alguna referencia de donde lo hagan??

Algo mas estuve leyendo que la velocidad de la comunicación serial PIC-Bluetooth cambiara mi frecuencias de muestreo de los datos recibidos en Bluetooth, esto es cierto??
Cuantas muestras por segundo podre enviar si uso 9600 baudios??

Gracias

Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 07 de Octubre de 2011, 17:07:57
Utiliza el buscador, debe existir infinidad de ejemplos del uso del timer  ;-)


Saludos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: MerLiNz en 07 de Octubre de 2011, 18:24:25
Hola Suky muchas gracias por atender  :-/ ,
Si he escuchado que lo hacen con el timmer  a traves de interrupciones, sin embargo no se como hacerlo podrias mostrarme algun ejemplo?? o alguna referencia de donde lo hagan??

Algo mas estuve leyendo que la velocidad de la comunicación serial PIC-Bluetooth cambiara mi frecuencias de muestreo de los datos recibidos en Bluetooth, esto es cierto??
Cuantas muestras por segundo podre enviar si uso 9600 baudios??

Gracias



suponiendo que para enviar el resultado del ADC utilices 2bytes, pues 600 muestras por segundo. El tema es que el USART tiene tambien algunos bits para control, como el bit start, end bit... Asi que serian algo menos, pero aproximado 600.
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: Suky en 07 de Octubre de 2011, 18:35:41
Cada bit demora: 1/9600 = 104.2us. Cada Byte enviado tiene 1 start + 1 stop, entonces por cada Byte el tiempo es 1.042ms. Despreciando el tiempo necesario para leer el buffer y cargar el dato a enviar, máximo podrás enviar 960 bytes por segundo, pero si cada muestra es de 10-bits entonces podrás enviar máximo 480 Muestras. Se puede aumentar mucho la velocidad de Uart hasta 115200.


Saludos!
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: MerLiNz en 07 de Octubre de 2011, 18:37:47
Cada bit demora: 1/9600 = 104.2us. Cada Byte enviado tiene 1 start + 1 stop, entonces por cada Byte el tiempo es 1.042ms. Despreciando el tiempo necesario para leer el buffer y cargar el dato a enviar, máximo podrás enviar 960 bytes por segundo, pero si cada muestra es de 10-bits entonces podrás enviar máximo 480 Muestras. Se puede aumentar mucho la velocidad de Uart hasta 115200.


Saludos!

creo que si el UART es por hardware solo envia de 8 en 8 bits no? (9 si se pone control de paridad).
Título: Re: PIC12F683 y su frecuencia de muestreo maxima (ADC)
Publicado por: igaspar33 en 09 de Octubre de 2011, 19:13:16
Gracias Suky y MerLiNZ,

Revisare en la pagina sobre las interrupciones y el timer. Y asi es el UART en el PIC16F88 es por hardware y solo tomo 8 bits de los 10 del ADC para enviarlos. aumentare la velocidad del UART a 19200 bauds, y checare haber que pasa, y si es que logro fijar la frec. de muestreo, y les cuento. 
Gracias