Si queres saber como funcionan realmente los microcontroladores te sugiero que siempre busques el datasheet o el reference manual (segun fabricante)
El pic que voy a utilizar, va a ser uno sencillo, para empezar (para bajar al máximo el costo). Empecé las pruebas con el PIC 16f628a y con el 16f877a.
Ahi es donde te equivocas, esos micros ya son bastante viejitos, y hay muchos mas nuevos que salen mucho menos y con mas prestaciones.
setup_adc_ports(AN0_AN1_AN3)
Los pines pueden ser setear como digitales y analogicos, algunos micros poseen la libertad de elegir de forma independiente cual entrada es analogica o digital, otros no.Por ejemplo el PIC16F877A:
https://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf (Pag. 128 del documento o 130 del PDF)
Tenes una tabla, donde podes ver todas las opciones de poner a digital o analogico, como ves no todas las combinaciones son posibles.
Otros micros permiten su seleccion individual.
setup_adc(ADC_CLOCK_INTERNAL). Tiempo de conversión del ADC.
No, eso gobierna el reloj del ADC. El ADC no convierte en un solo ciclo, sino que se toma unos cuantos.. 12 exactamente. En el datasheet que te pase. Pagina 132 del documento podes ver un diagrama de los tiempos del ADC.
Correctamente seria asi:
- Seleccionas el canal,
y el capacitor empieza a cargarse, si tenes una carga grande en la entrada del ADC entonces tenes que esperar antes de iniciar la conversion, debido a que necesitas espera que el capacitor llegue al voltaje correcto, si no es demasiada la carga entonces no hay problema. Este tiempo se conoce como Tiempo de Adquisicion, este PIC solo tiene un solo ciclo
- Envias a convertir, se desconecta la entrada y se usa la tension del capacitor para la medida, 1 bit a la vez.
Algunos PICs mas avanzados poseen Tiempo de Adquisicion configurables, asi que cuando le das a convertir, solo se toman ciertos ciclos antes de desconectar y comenzar a convertir.
¿Es posible setear la frecuencia de muestreo? Bajarla al mínimo, no necesito una alta latencia, únicamente con tener
Si... en realidad la frecuencia de muestreo las das vos... si lo haces apenas termina el ADC de convertir el otro entonces es la velocidad del ADC quien rige el muestreo.. Pero podrias tranquilamente usar un Timer que cada tanto active el ADC, luego en la interrupcion del ADC guardaras el dato..
La duda GRAVE acá es, ¿cómo hago con los 3 canales? ¿Existe alguna manera de que la interrupción se produzca cuando tengo los 3 valores disponibles? Por lo que leí de la hoja de datos, los ADC de estos PICs tiene un solo circuito de conversión, por lo que hace un canal por vez. Por lo que vi, en estos PICs tampoco existen los mecanismos del tipo DMA, lo cual ayudaría bastante.
Varias preguntas, lo voy a responder en orden:
Varias formas de solucionar lo de los 3 canales, pero principalmente: contarlos.... Si usas el Timer arriba como te comente, entonces que la primer entrada convierta el canal 0, luego el 1, luego el 2 y ahi entregue los datos o ejecute lo que vos quieras... Y vuelva a comenzar.
Si lo haces con la interrupcion del ADC entonces es lo mismo.
No, no tienen FIFO estos PICs en el ADC.
No, los PIC16 no tienen DMA, CREO que la gama de PIC24 y dsPIC ya comienzan a tener DMA. Y algunos PIC18 tambien... como:
http://ww1.microchip.com/downloads/en/DeviceDoc/PIC18LF24-25K42-Data-Sheet-40001869D.pdfLo que yo quiero es que la interrupción salte cuando se complete la conversión de los 3 canales. No me sirve usar un sub índice global, que se modifique por cada interrupción del ADC. O sea, si yo interrumpo una vez, aumento el índice y después leo otro canal haciendo uso del mismo, sería una solución. Pero a mi no me sirve, porque estaría comparando dos valores de corriente y tensión (valores que muestreo) de dos instantes de tiempo "distintos", debido a que en el medio entre interrupción e interrupción del ADC, hay otras interrupciones de otros dispositivos.
Capaz que tengo un mal concepto, y la interrupción salta cuando están los 3 canales listos, y sólo tengo que setear el canal y leer cada uno, todo en el mismo handler. En fin, me gustaría que me ayuden un poco con estos dos puntos en los que flaqueo.
Muchas gracias.
Entonces cometiste un error. El comenzar con esos microcontroladores antes de definir los requerimientos del proyecto.
Los unicos que conozco de los Microchip que pueden realizar lo que comentas son dsPIC y no se si algun PIC24 (ya que son muy parecido)
Los dsPIC tienen la posibilidad no solo de realizar un scan de canales, sino que ademas pueden realizar un sampling de varios canales y luego convertirlos uno por uno.
http://ww1.microchip.com/downloads/en/devicedoc/70183d.pdf (Pag. 69 tenes una version un poco mas grafica)
Ojo que el documento del ADC de los dsPIC es general!
Estos PICs solo tiene 1 ADC, hay algunos que poseen 2 ADC, tambien tienen DMA.
Podes usar esta herramienta para encontrar lo que te parezca razonable:
https://www.microchip.com/maps/Microcontroller.aspxPD: Es media lenta..