in ,

Voltímetro USB NeoTeo

¿Necesitas un voltímetro para el ordenador? NeoTeo te acerca la solución que estabas esperando. Con visualizador gráfico y detector de tensiones máximas y mínimas (con retención), este instrumento puede ser ampliado hasta obtener 10 canales de medición simultánea. Es decir, puedes lograr completar un sistema de monitoreo de tensiones muy útil para tu taller de experimentación. Con conectividad USB y una pequeña aplicación en el ordenador, puedes llevar este voltímetro a donde vayas y realizar las mediciones que necesites. Está alimentado por baterías, fuente externa o por el propio puerto USB. Aquí tienes el principio de tu próximo laboratorio hecho a tu exclusiva medida y construido por ti mismo.

Un voltímetro actual y moderno dista mucho de aquel primitivo instrumento de d’Arsonval que deslumbraba al mundo de la física durante el siglo XIX. Hoy, el manejo del ordenador se ha hecho tan cotidiano y habitual para el practicante del arte electrónico que todas las herramientas que necesita para trabajar las encuentra allí: circuitos, tutoriales, diagramas, explicaciones, foros, páginas Web, (NeoTeo, por supuesto), simuladores de circuitos, osciloscopios y toda clase de herramientas útiles para desplegar su actividad. Sin embargo, hay ocasiones en las que desearíamos estructurar las aplicaciones ya existentes según nuestras necesidades; es en ese momento cuando nos enfrentamos con un ejecutable infranqueable: tú debes adaptarte a un software, él no se adaptará a ti. Por esto, te presentamos lo que aparenta ser un simple y sencillo voltímetro, pero que en su corazón guarda la posibilidad de construir todo un laboratorio de mediciones organizado a tu medida y necesidad.

El voltímetro es el instrumento base para las mediciones en electrónica

A partir de un voltímetro, todos los instrumentos de medición son posibles y mucho mejor aún si podemos elegir el instrumento final que deseamos construir. Es decir, aprendiendo a manejar los valores de fondo de escala, cualquier aplicación será posible. Por ejemplo, la corriente eléctrica que circula por una resistencia de bajo valor (shunt) nos ofrecerá una tensión que se podrá medir y que será proporcional a la corriente que esté circulando por la mencionada resistencia. De este modo, funciona un amperímetro. En consecuencia, si ya poseemos un voltímetro y un amperímetro, podremos calcular la potencia absorbida por un circuito. Además, con el agregado de un visualizador, será mucho más intuitivo el manejo y más sencilla la atención en el comportamiento de un sistema. Bastará con una rápida mirada sobre la pantalla del ordenador para saber si algún parámetro de funcionamiento ha cambiado durante el transcurso del tiempo que tú decidas. Basta de palabras, obsérvalo en acción midiendo tensiones entre 0 y 5Volts.

Este importante desarrollo tiene dos partes fundamentales bien definidas: el hardware con su correspondiente programación y el programa o software hecho en Visual Basic que funciona en el ordenador. El hard, tal como vimos en el video y en el circuito, posee muy pocos componentes. Tan sólo bastará con el cristal oscilador para el 18F2550, unos pocos capacitores de filtrado, un LED indicador de funcionamiento y el potenciómetro que utilizaremos para la práctica inicial. A la programación del PIC la realizamos, como siempre, a través de un conector ICSP (In Circuit Serial Programming) y aprovecharemos las posibilidades de conexión USB que nos ofrece el 18F2550, con los 10 conversores de analógico-digital que posee este microcontrolador. Si decides hacerle algunos pequeños cambios al hard y utilizar un 18F4550, la cantidad de entradas analógicas posibles se expande a 13. La corriente absorbida por el circuito implementado, con el LED incluido, es menor a 40mA, por lo que la alimentación desde el puerto USB es totalmente segura en lo que a consumo se refiere.

Circuito básico para ensayar las conexiones y el funcionamiento inicial

Para asegurarnos que ningún error fortuito provoque un exceso de tensión en la línea de 5Volts de nuestro circuito (que provienen del ordenador), hemos colocado el diodo D1. ¡Importante! Este diodo debe tener la menor caída de tensión posible en directa (Vforward) para no alterar los valores obtenidos en la medición y mantener la máxima exactitud posible con este sencillo circuito, es decir, sin apelar al uso de referencias de tensión ultra estables. Aquí la referencia es la tensión de alimentación proveniente del USB, por lo tanto, mientras más cercana esté la alimentación del PIC a los 5Volts, mayor será la exactitud en la medición. Si estás seguro de tu trabajo y ya has logrado un funcionamiento confiable, puedes obviar el uso de D1 y colocar allí un puente. Si en cambio utilizas una fuente de alimentación externa, será conveniente anular la alimentación desde USB y pasar a tener un suministro externo de energía en los 5Volts. Este concepto es muy importante para obtener precisión en las mediciones.

En estas pruebas iniciales, en las que la tensión medida es la misma que alimenta el circuito, no existirá posibilidad alguna de tener tensiones elevadas y riesgosas en cercanías del PIC que puedan pasar al ordenador a través del puerto USB. Más adelante, cuando expandamos la escala del voltímetro, este riesgo es real y debemos tomar precauciones para que no ocurran accidentes “desagradables”. R1 y D2 proporcionan el RESET inicial al sistema mientras que R2 polariza el LED de indicación de funcionamiento. Todo muy sencillo en la parte del hardware.

El programa que se carga dentro del PIC posee una estructura básica muy elemental, si es que sabemos separarlo en partes y entenderlo por bloques. Si deseamos interpretar todo de un solo trago, las cosas se pondrán complejas; en cambio, hacerlo por partes nos será muy útil para saber por qué suceden las cosas e incluso para realizar este trabajo en otros lenguajes de programación. El PIC hará lo mismo en la misma secuencia, sólo que en el idioma que mejor sepas interpretar tú. Por eso es muy importante conocer los bloques fundamentales que formarán el programa dentro del PIC:

  • Definir el dispositivo y la frecuencia de reloj (DEVICE)
  • Declarar las características del convertidor Analógico – Digital, ADIN (bits de resolución, tiempos de captura)
  • Definir las variables a utilizar dentro del programa (SYMBOL y DIM)
  • Definir cuántas entradas analógicas utilizaremos mediante los registros ADCON.
  • Iniciar el lazo principal de funcionamiento del programa.
  • Dentro de un contador de eventos (lazo FOR – NEXT), tomar muchas mediciones de la entrada analógica a controlar (ADIN) y luego promediar la sumatoria de las mediciones, sin perder el contacto USB (USBPOLL).
  • Transformar mediante procesos matemáticos el valor obtenido en un número con dos decimales y cargarlos por separado en distintos Bytes del Buffer (los enteros en un Byte y los decimales en otro Byte).
  • Transmitir la cadena de Bytes (USBOUT)
  • Reiniciar el ciclo del programa.

Como puedes ver, en tan sólo nueve pasos puedes lograr el funcionamiento de un voltímetro dentro de un microcontrolador PIC. El circuito “útil” para realizar mediciones hasta 5Volts sería tan sencillo como el siguiente:

Circuito propuesto para el Voltímetro NeoTeo

Este circuito mostrado, multiplicado por “n” veces y visualizado en “n” cuadros gráficos, nos puede ser útil, por ejemplo, en un sistema de carga y control de múltiples celdas de baterías de Litio-Ion. Recordemos que la carga de una batería Litio-Ion requiere de un tiempo específico y condiciones especiales que pueden tener un monitoreo completo mediante un sencillo circuito como el presentado. Además, el analizador gráfico incorporado en la aplicación del ordenador te permitirá ver la curva de carga de la batería (y de descarga, según tu circuito final) y de ese modo conocer a la perfección el estado de la batería. Si observas el gráfico siguiente (que ya habrás visto en muchos sitios) comprenderás la importancia de saber “qué sucede dentro” de una celda Litio-Ion durante la primera hora y media de carga. Este es uno de los tantos ejemplos de aplicación del voltímetro NeoTeo y de la importancia que tiene, en este caso, el cuadro gráfico que incorpora el software del ordenador.

Curva de carga de una batería Litio-Ion

El programa en Visual Basic
La graficación en el ordenador (de mesa o portátil) de lo que nuestro voltímetro sea capaz de medir es otra parte fundamental del montaje de esta semana. Por supuesto que también será un desarrollo simple y efectivo con el objeto de presentar el funcionamiento del diseño que tú luego podrás acomodar a tu gusto estético y a tu personalidad. En el gráfico que te mostramos a continuación puedes ver que la interfaz gráfica es muy simple de organizar y de “clonar” en caso de que decidas utilizar múltiples entradas analógicas y en consecuencia ejecutes múltiples voltímetros. Realizar un sistema integrado entre un microcontrolador PIC y un programa en VB6 no es una tarea sencilla cuando no se poseen las herramientas necesarias, pero en este caso ya tienes toda la aplicación armada y sólo debes copiar y repetir lo que ya está hecho y funcionando para obtener múltiples voltímetros en una sola interfaz y ampliar así las posibilidades del instrumento mostrado.

El programa desarrollado posee las características típicas de cualquier ejemplo en Visual Basic: un formulario donde se ejecutan las instrucciones y una interfaz visual donde se sucederán los resultados obtenidos a partir de las mediciones. En el formulario tendremos la clásica distribución de procedimientos habituales (Load, Unload, Timers, botones) a los que se sumarán los procedimientos específicos del funcionamiento en USB (OnPlugged, UnPlugged, OnRead y algunos más), en los que escribiremos todo el código necesario para que la aplicación funcione de manera exitosa. Generaremos las variables que sean necesarias (las declararemos públicas en un formulario específico) y desarrollaremos el arte de mostrar y procesar los datos que vayan llegando a través del puerto USB que correspondan a los datos de tensión que el hardware esté detectando.

Los elementos que componen la interfaz gráfica propuesta

Por supuesto que las partes destacadas del programa no serán las etiquetas, ni el Timer que actualiza el reloj, ni los colores que utilicemos en el diseño, sino que estarán formadas, como siempre, por conjuntos de instrucciones muy específicas y concretas. En el procedimiento llamado OnRead, se procede a la lectura del buffer de entrada y los dos bytes obtenidos (que provienen del PIC) se muestran en las etiquetas de mayor tamaño, en las que se muestra la lectura en tiempo real. En el listado podrás encontrar, además, el sencillo pero eficaz arreglo para visualizar en forma constante dos dígitos a la derecha del punto decimal.

Mientras el programa se desarrolla, el Timer2 se encarga de actualizar de manera constante los valores en las variables que corresponderán a los registros mínimos y máximos que visualizaremos en tamaño más pequeño arriba de los dos únicos botones de comandos que tiene la interfaz. Cuando el botón “Captura” (Command1) es pulsado, los valores comienzan a compararse de manera muy sencilla. Tomemos como ejemplo el valor máximo: si la tensión medida (en tiempo real) es mayor al valor almacenado en la variable que contenía el valor máximo (hasta ese momento), la variable adoptará ese nuevo valor mayor. Si en cambio el valor en tiempo real (que mide el hardware e ingresa por el buffer) es menor, lo ignora y continúa la secuencia del programa. Por supuesto que la rutina para el valor mínimo es la misma pero atenderá sólo los valores menores a la medición en tiempo real. Por último, el botón “Limpiar” se encarga de ocultar (cambiando el color) los dígitos y retorna a la situación de constante igualación de las variables con la medición en tiempo real.

El cuadro gráfico (Picture Box) está resuelto en muy pocas líneas, todas comentadas, en las que podrás encontrar la forma de alterar los valores de velocidad de barrido de la línea que indica el nivel de tensión medido. También podrás modificar la amplitud que tomará la mencionada línea dentro del gráfico. Esto será de suma utilidad cuando decidas avanzar hacia un siguiente paso de reforma y modificación de la escala del voltímetro para poder utilizarlo en otras aplicaciones con posibilidad de medir tensiones mayores.

Reformas y ampliaciones
Para aumentar la escala de medición de cualquier voltímetro, hacen falta tan sólo dos resistencias para lograr un funcionamiento eficiente y, por sobre todo, lineal del voltímetro, esto es, sin verse afectado por desviaciones o errores introducidos por circuitos electrónicos reales y no ideales, como puede ser un amplificador operacional en configuración de seguidor de tensión. Por lo tanto, tienes dos posibilidades efectivas y concretas, de acuerdo al circuito en el que quieras aplicar el trabajo de este voltímetro: una de las posibilidades es una aplicación dedicada donde sólo lo utilizarás para monitorear una tensión de salida de una fuente de 12Volts, 5Volts o 9 Volts, donde las variaciones sean de algunos pocos Volts hacia arriba o hacia abajo. En este caso, bastará con la utilización de un circuito divisor resistivo ajustable para resolver la situación.

Un sencillo divisor resistivo te brindará linealidad y no introducirá errores en la medición

Observa que la resistencia total equivale a un 100%, mientras que la que queda aplicada a la entrada del microcontrolador será del 10% del valor total. De este modo sencillo, pasas a tener un voltímetro de 50Volts de fondo de escala. También se puede aplicar con otras combinaciones de valores para obtener otros valores de fondo de escala; esto se realiza “jugando” con los ajustes en el divisor resistivo ubicado a la entrada del PIC. Si en cambio deseas una cobertura amplia con un mínimo de error en las mediciones, podrías utilizar un amplificador operacional con muy bajo valor de offset, alimentado por una tensión mayor a los 5Volts que entrega el puerto USB. Esta es la segunda opción que tienes de uso del voltímetro y, para lograrla, deberás realizar un circuito que posea resistores (en el divisor resistivo) al 1% de tolerancia y componentes de elevada performance, como el amplificador operacional OP07. Antes de pensar en esta segunda opción, observa la exactitud lograda con sólo dos resistencias y luego resuelve si la complejidad de la segunda opción valdrá la pena.

Es decir, si deseas transformar este versátil instrumento en un voltímetro de alta gama, con una precisión comparable a los más caros del mercado, debes ajustar muchas variables que se encuentran en la vida real que no sólo desembocarán en una construcción compleja y costosa sino que necesitarás componentes muy específicos, como amplificadores de instrumentación de alta impedancia de entrada y un muy bajo nivel de offset (desviación o deriva). Nosotros te dejamos los programas para las dos versiones, de 0 a 5Volts y de 0 a 50Volts, con la recomendación de tener el máximo cuidado en la alimentación al PIC y al puerto USB del ordenador. Si esos son “detalles” que tienes bajo buen resguardo, te invitamos a experimentar este instrumento que estamos seguros que no te defraudará. Este voltímetro no llega para derrocar al noble y versátil multímetro, sino que te lo presentamos para que puedas desarrollar tus propios sistemas de medición con visualización gráfica. Disfrútalo y crea a partir de él. Las herramientas están servidas.

Reportar

¿Qué te pareció?

Escrito por Mario

59 Comments

Leave a Reply
    • Hola Falke,

      Pues creo que en el código pone que la frecuencia de muestreo es 1/100us y la resolución de 10 bits (si estoy equivocado que me corrija el maestro).

      Si estoy en lo cierto ahí va mi pregunta: Se puede conseguir mayor resolución?

      Gracias!

      • No, yo es que me he hecho un detector de metales y me interesaría medir las variaciones más leves (que no sean ruido). Ya me he interesado por conversores A/D por separado. A ver si me traen las muestras jajaja.

        Lo del osciloscopio ya lo solucioné con esto:
        http://www.zeitnitz.de/Christian/scope_en

        Se baja uno el programilla y con un cable que conecte con la entrada analógica de audio y, asegurandote que le metes entre 1 y -1 V ( usease ayudandote de un divisor de tension mismamente) ya lo tienes.

        Esto me trae a la cabeza otra pregunta para Mario… en lugar de usar divisores de tension es posible usar algo que "corte" los volts a cierta cantidad? una especie de función ‘mínimo’. Por ejemplo aquí mínimo(x,1):
        Vinput Voutput
        0.2 0.2
        0.5 0.5
        0.7 0.7
        1 1
        1.2 1
        1.5 1
        20 1

      • Hola amigos ! :))

        Es tal como te dice Dows, amigo Falke.
        Utilizamos una resolución de 10bits (la que trae el 18F2550) a una frecuencia de muestreo de 1/100uS. Correcto. El circuito no pretende mayor resolución. Es un voltímetro elemental para jugar un poco con USB y esas cosas 😉

        @Dows: Para mayor resolución puedes usar un 18F2553 que es igual que el 2550 pero trae conversores AD de 12bits. Luego existen un par de modelos de dsPIC33F…. que traen resoluciones de hasta 16bits en los conversores, pero el salto es muy grande y tú deberías evaluar si se justifica.
        Lo del recortador, si es que lo entendí bien, lo solucionas colocando dos diodos en serie polarizados en directa a GND en la entrada de tensión, junto a una resistencia limitadora. Si en cambio lo que deseas no es recortar sino "atenuar" la tensión a los valores que mencionas, debieras utilizar algún tipo de ALC (Automatic Level Control) para no perder las "crestas" de una posible señal variable en amplitud.
        Recortar es sencillo con diodos. Atenuar es algo más elabordo con circuitos de control automático de nivel.

        Saludos a ambos !!!
        Gracias por acompañarnos siempre !

      • Ah, conocer la jerga ayuda muchísimo para poder buscar información! Probaré además con el pic de 12b de resolución (será mi primer proyecto con un pic).

        Gracias de nuevo!!!

    • Has usado el software de MATLAB amigo? trae un excelente osciloscopio el cual usa la entrada de audio de la PC para recibir las señales a medir. Te lo recomiendo mucho.

  1. Aportazo Mario, grande.
    Me gustaria saber si se podria adaptar este proyecto al proyecto de iluminacion que anteriormente habias propuesto.
    Seria ideal saber en que estado de carga esta la bateria y asi obtener una idea de como se comporta la bateria con respecto al sistema de iluminación (cuanto consume, etc).
    Lo otro es que asi como podemos medir el voltaje hay alguna forma de saber cuanto amperes se esta consumiendo, a futuro para incorporarlo como especie de medidor de consumo para nuestro hogar.
    Bueno, gracias de nuevo Mario, por este tremendo proyecto.

    PD: Los soft en visual basic tienen un sello personal, que no te vayan a llevar los de Microsoft para hacerle el GUI al proximo windows. jejej..

    • Hola Kniffe!

      Este circuito es ideal para ese tipo de aplicaciones de cargadores de baterías y fuentes de alimentación. Con una netbook y un cable USB puedes monitorear cómodamente el desempeño de muchas tensiones. En las baterías, como bien dices, para saber su comportamiento y en las fuentes de alimentación para poder "ver" como las cargas pueden afectar las tensiones de salida. La combinación del medidor con el graficador está muy interesante y plantea la expansión a aplicaciones tremendas. Por ejemplo, para hacer un log del comportamiento de las baterías de una UPS comercial y que los datos se carguen en una hoja Excel para su posterior estudio y análisis estadístico.
      Dejando volar la imaginación las posibilidades son enormes. 🙂

      Respecto al amperímetro recuerda que tenemos éste publicado en NeoTeo:
      http://www.neoteo.com/lmp8601-amperimetro-0-5a-diy.neo

      Algo que hace algún tiempo tengo ganas de hacer es un cosímetro o cofímetro. Sería un instrumento muy útil también para optimizar el consumo energético. Tal vez algún día tengamos tiempo para lograrlo.

      ¿No engaño a nadie con el soft en VB6? jajajaa !!! Me gusta jugar con ese programa y a veces me salen cosas agradables. Espero que este sea uno de esos casos.

      Gracias amigo por estar con nosotros!
      Saludos cordiales! :))

  2. Saludos Mario, felicitandote por tus proyectos semanales; dos preguntas. La primera que software utilizas para la realizacion de los esquemas; porque parece que si fuera hecho en MSPAINT y la segunda pregunta es los software de aplicacion que tu realizas; para el caso de la realizacion de algun producto de comercializacion implicaria problemas con Microsoft? ya que son dueños del producto Visual BASIC; porque fuera ideal realizarlos con los widgets de devCpp

    • Hola amigo!

      Para los esquemas utilizo un programa que se llama sPlan y en el caso del Visual Basic estás en lo cierto. Yo utilizo el Visual Basic 6, "versión Working Model", que es de uso libre y gratuito (si buscas en la web podrás encontrarlo) y que tiene la posibilidad de crear todo un proyecto pero no te permite generar un archivo ejecutable.

      Es decir, en el VB6 "comprado" puedes al final del trabajo, lograr un archivo .EXE para, como tú dices, comercializar la aplicación si lo deseas. En el caso nuestro, esto no es posible. Por eso en la carpeta donde coloco el soft para que prueben el desarrollo del voltímetro no hay un archivo ejecutable sino un montón de archivos que entre todos, puedes usarlo con la versión gratuita del Visual Basic 6 y además puedes reformarlo a tu gusto y necesidad.
      Si les dejara sólo un EXE, no podrían reformar la aplicación. Estarían cautivos de lo que les doy y nada más.

      Saludos !

    • Hola ChUkIsLuKis !

      Al menos hay un mensaje alentador en tu post: "aún no sé"
      Eso significa que todavía hay esperanzas de que lo hagas. Ojalá sea pronto !

      Gracias por estar con nosotros ! :))

  3. Hola Mario:

    Fabuloso articulo, muy pratico, didactico y aplicativo a muchas cosas. El firware esta excelente y facil de entender, ademas con los comentarios en cada instruccion ayuda a entender cada linea del programa, gracias por estas cosas de tanta calidad.
    Tengo una duda, en el programa del pic se coloca un cristal de 48 para esta comunicacion USB, pero el el hardware se coloca un cristal de 20Mhz, esto no se afecta de alguna manera el programa? y si coloco un cristal por ejemplo de 38Mhz que ocurriria?

    Un hit completo este articulo, 😀 Un abrazo desde colormbia y espero que ya estes mejor de esa toz.

    • Hola Yesbond !

      Por suerte estamos mejorando la salud amigo ! :))

      Te explico lo del cristal: En el WinPic800, que es el programa que uso para grabar los PIC, en la solapa de "Configuración" (hay 3: Código, Datos, Config) donde dice "Oscillator Selection", tienes la posibilidad de elegir con qué cristal trabajarás. Si la despliegas, verás que puedes usar cristales desde 4Mhz hasta 48Mhz. Una vez que seleccionas el cristal allí, el PLL se encarga del resto para lograr los 48Mhz necesarios para el USB.
      Entre las opciones disponibles no hay 38Mhz. De 24 salta a 40.

      Yo recomiendo siempre utilizar ese soft para programar los PIC.

      Saludos amigo ! Un abrazo !

  4. jejejejejeje gracias un interesante articulo

    pero tengo una duda si quisiera usarlo con otro dispositivo tendria que quitar el conector usb o agregar mas cableado?.

    • Hola mindmaster !

      La idea también puede ser armar un dispositivo portátil aprovechando la alimentación que nos provee el puerto USB. Son tan pocos componentes que pueden caber en una pequeña caja plástica que ya tenga el conector USB incorporado. Algo así como un pendrive, hecho por tí, pero que contenga el voltímetro en su interior.
      Con un ordenador móvil, sólo bastará con conectarlo al puerto y proceder a realizar mediciones.

      Observa ésto:
      http://mundogeek.net/archivos/2006/05/28/oso-de-peluche-usb/

      En cada patita del osito podrías colocar cada salida de cable (positivo y negativo) para las mediciones. Colócaselo en las patitas, ¡no vayas a colocárselo en el trasero! jajajajaa !!!

      Saludos!

  5. Hola Mario.
    Cuando lei el titulo de tu nuevo trabajo pense por un momento que se trataba de una aplicacion perfecta para ser desarrollada con Arduino. Tiene todo lo necesario en una sola placa: Entradas Analogicas (con ADC), comunicacion por USB, posibilidad de hacer aplicaciones para mostrar resultados en el PC con graficos, etc.
    Se tu opinion acerca de Arduino por un articulo anterior, pero me gustaria saber si en el futuro vas a realizar algun proyecto con el.
    Saludos.

    • Hola kirishima!

      Gracias por estar siempre con nosotros!

      Por supuesto que haremos algo con Arduino durante este año. Ahora estamos trabajando en otros objetivos para presentar pero esperamos llegar a incursionar en Arduino antes de mitad de año.
      No puedo especificar cuándo exactamente, pero tendremos Arduino amigo. 🙂

      ¿Qué clase de proyectos son los que más te atraen kirishima?
      Instrumentación? Ocio? Control Industrial?
      Cuéntame amigo!

      Saludos cordiales!

      • Me alegra saber que tienes previsto usar Arduino proximamente. Mis proyectos favoritos son
        casi todos 🙂
        Todos tus proyectos son muy didacticos, interesantes aunque uno no los llegue a realizar y lo mas importante es que siempre estas para resolver cualquier duda que surja.
        Hay muchas paginas web de proyectos electronicos pero como esta ninguna.
        Saludos.

  6. Hola, antes de nada agradecer a Mario, su gran aporte, sobre todo porque para gente como yo que estamos empezando con esto de la programación de pic, el hecho de que deje todo bien masticadito es una grana ayuda.

    Bueno, este "proyecto" me viene muy bien ya que estoy realizando un montaje similar, pero con la diferencia de que quiero medir los valores de rms o por lo menos la amplitud de una señal alterna de tensión, directamente desde el pic, si emplear etapas de pre-rectificado de la señal, especialmente porque trabajo con señales de muy bajo nivel (entre 5 y 50mv) y por criterios de diseño no puedo emplear etapas de amplificación (hay una epata pasiva de filtrado para el ruido).

    Quisiera, si es posible, que me echarais una mano con esto. Por el momento y gracias a que la frecuencia de la señal de entrada es de 50hz, he planteado la captura de la siguiente forma:

    Inicialmente configuro el Pic (precisamente el 18f2550), con la resolución a 10bits.. a continuación me dedico a realizar conversiones de forma sucesivas y comparando el resultado obtenido con el resultado de la operación anterior; comparo y me quedo con el mayor de ese modo voy registrando el valor máximo de la señal hasta que encuentra (aproximadamente) el valor máximo de la señal.

    Hasta aquí el invento funciona, el problema está cuando la señal atenúa su valor de amplitud. Como el valor máximo es superior a la nueva amplitud, no se actualiza. Para ello se me ha ocurrido usar un "contador de mínimos", de modo que si durante un cierto tiempo el valor de la señal medida siempre es inferior al máximo, reinicia esta variable para volver a comparar niveles y fijar el nuevo máximo.

    Bueno, no se si me he explicado, si alguien sabe una forma, digamos, mas óptima de hacerlo, no solo en cuanto al código del programa sino también de elemento hardware (circuitos integrados, etc), por favor, que me lo comente.

    Un saludo y gracias.
    PD: Perdonadme la parrafada.

    • Hola Kletus!

      Si no puedes utilizar etapas de amplificación previa estás en dificultades amigo.
      El ADC de ningún microcontrolador podrá leer con exactitud señales tan débiles … 🙁

      Deberás reveer el hardware porque sinó será una tarea imposible. Necesitas amplificación para hacer una medición segura.
      El resto es medir alterna : http://www.neoteo.com/monitor-de-tension-de-linea.neo

      Respecto a los máximos y mínimos es sencillo:
      1) Inicias el programa
      2) Declaras tres variables = Real, Max y Min
      3) Cargas las tres variables con la primer medición
      4) Inica el ciclo del programa
      5) En Real cargas el valor medido
      6) Comparas Real con las otras dos variables
      7) Si es mayor (recuerda que son iguales las otras dos porque fueron cargadas en la primer medición) se carga en Max y se almacena, si es menor se carga en Min y se almacena. Si sigue disminuyendo vá reemplazando a la anterior hasta que pare de bajar. Cuando comienza a aumentar y supera a lo almacenado en Max, se inicia el proceso de reemplazo dentro de la variable Max.
      8) Reinicias el ciclo del programa indefinidamente.

      Recuerda: 3 variables y por comparación se reemplazan los valores de Min y Max (o como tú llames a las veriables)

      Saludos! Éxito con el proyecto!

  7. desde hace mas de un año sigo su blog y exelengtes proyectos he logfrado ver y tambien exelentes noticias y cosas por leer; sigan asi mejorando cada dia mas.

    saludos desde santiago de chile

    • Hey paco!

      Lamento decirte que nunca utilicé Linux y no sé nada de ello. Si me estabas desafiando a hacer algo en Linux … perdí antes de empezar amigo! :))

      Saludos!

  8. Muy buen artículo, soy nuevo como seguidor de su portal de información. Pero me gustaría hacer una sugerencia acerca del software que están usando en PC.

    Ya que estan usando visual basic que solo lo limita a usuarios windows, les recomiendo usar otro software de desarrollo, por ejemplo RealBasic genera código para Mac y GNU-Linux.

    O depronto usar herramientas opensource multiplataforma como por ejemplo gtk para windows o en ultimas el pesado Java.

    Bueno, solo es una sugerencia, y repito, es un buen articulo.

  9. Pero siempre me impresiono con tus articulos de electronica estan detalladicimos para seguirlos al pie de la letra gracias. vere que puedo hacer.

    Para los que dicen que linux yo como usuario linux y windows creanme que con toda la informacion que te da Mario pasarlo a otro lenguaje ya no es cosa del otro mundo.

  10. Buenas buenas gente de NeoTeo.

    Mario, quería preguntarle ¿por qué VDD está conectado a masa a través de C3 en el esquemático? (¿no debería ir a VCC?), y ¿cuál es la función de VUSB?

  11. que onda mario,
    antes que nada dejame felicitare esta chido tu proyecto…

    pues bien, kisiera armarlo pero hay un problema con el programa para el pic y supongo que es mi complidador, bueno a lo que voy es que kisiera saber que compilador utilizas, supongo yo que es pic basic, y hay otro problema no encuentro el descriptor "voltimetroDESC.inc" supongo que por eso me genera errores. si no es mucha molestia podrias subirlo? o en su defecto mandarmelo a mi mail? "asalastmx@gmail.com" y una pregunta mas… en que parte del programa para el pic declaras que PLL utilizas, ya que hice un proyecto similar al tuyo, con un cristal de 4Mhz la diferencia es que mide temperatura en lugar de voltaje y el codigo del pic esta en c de ccs, en el cual debo configurar previamente el PLL dependiendo del cristal. bueno espero me puedas sacar de esta duda, ya que tu codigo esta mucho mas sensillo que el que yo tengo de pic C.

    PD. felicidades por tu proyecto esta chido y saludos desde Puebla Mexico!!

  12. Hola Sr. Mario
    muy interesante proyecto, tengo pensado realizar un termometro con dos termocuplas tipo k y dos amplificadores integrados tipo ad595, este integrado entrega a su salida 10mv/grado centigrado, es decir que puede llegar a entregar hasta 10v, debido que para la realizacion de la medicion necesito un voltimetro ¿podria utilizar un montaje como el que nos mostrastes? te pido un poco de ayuda porque mi area es la ing civil, y estoy un poco fuera de mi elemento, jejeje, gracias!!!!

  13. Hola Mario , felicitaciones por este proyecto y quería preguntarte si no hay alguna manera de que me pases el descriptor ya que soy novato con el sofware proton y me tira el mismo error que el usuario del comentario numero #20, desde ya muchas gracias.

  14. Saludos.

    Gracias por el aporte! He intentado aplicar tu diseño haciendo una simulación en proteus 7.7 usando el firmware para 5V y compilando en visual basic 6, pero la PC no reconoce el dispositivo y proteus no lo simula; quisiera saber si alguien mas ha intentado hacer esto y que resultados obtuvo o mejor aun si alguien mas ya intento construirlo.

    Gracias

  15. Saludos.

    Gracias por el aporte! He intentado aplicar tu diseño haciendo una simulación en proteus 7.7 usando el firmware para 5V y compilando en visual basic 6, pero la PC no reconoce el dispositivo y proteus no lo simula; quisiera saber si alguien mas ha intentado hacer esto y que resultados obtuvo o mejor aun si alguien mas ya intento construirlo.

    Gracias

  16. Hola, soy novato en esto de programar PICs y me gustaría saber si el conector ICSP va directamente al PC o a una placa programadora PIC, para ello, para programar el PIC.

    Mi idea es monitorizar los voltios obtenidos, mediante un generador de energía tipo dinamo almacenando la energía obtenida para luego volver a reutilizarla. Monitorizando todo ello mediante un programa en Visual.
    De momento solo se programar en Visual Basic.

    Muchas gracias, un saludo.

  17. Existe la posibilidad, de con mucha precision, medir en un rango de 0 a 100 mVolts Mario? Que debo hacer? como puedo amplificar la señal pero de manera bien fina. Aver, no se como explicarte, yo soy estudiante de medicina, y vengo de escuela tecnica. Estoy un poco oxidado despues de 5 años de ciencia blanda, y de verdad necesito colaboracion. La idea es medir diferencia de potencial muy chico. A nivel biologico. Te agradezco la mucha o minima ayuda que me puedas, o puedan la comunidad brindarme.
    PD: Nunca programe un pic, solo algun que otro firmware de telefono, o bios de pc.

  18. Bajando, Mario, Se ve genial contribucion, excelente aporte, ojala me funcione en mi proyecto.

    gracias por contribuir desinteresadamente, lo cual nos motiva a hacer lo mismo cuando podamos.excelente y sencilla redaccion propia de los que si saben.

  19. Hola Mario:
    Excelente trabajo, yo estoy usando la placa de entrenamiento para PIC18F2550 (tambien de tu invensión) y todo funciona 10 puntos.

    Tengo una consulta, donde puedo obtener el archivo "VoltimetroDESC.inc". Es que pretendo modificar el firmware del PIC para adquirir 10 canales analógicos ypoder además enviar datos desde la aplicación en visual.

    Desde ya muchas gracias

  20. Felicitaciones Mario!
    Este proyecto me interesó mucho. Lo armé y mi intensión a futuro es poder probarlo con C18 y ver como modificar el software de aplicación.
    Saludos.

  21. Mario. serias tan amable de describirnos, para los que empezamos, paso a paso los comandos necesarios para la lectura y escritura de datos desde la aplicacion VB hacia y desde el pic.

    gracias.

  22. Hola Mario, muchas gracias por el dato, muy bueno, sobre todo para los que no sabemos del PIC.

    Mario, con relación a la resolución y la exactitud; nosotros desarrollamos una nueva teoría para instrumentación análoga y digital(microcontrolada); ya construimos los análogos y superamos a los alemanes 2 y 3 veces.

    Algunos resultados los puede ver en http://www.idelati.com

    Quedamos en contacto para sugerencias y alianzas.

    Dios mediante

    luis alfonso aristizábal agudelo
    Dirección técnica
    http://www.idelati.com

  23. Mario, gracias por tu desinteresada contribución para que a todos los que nos apasione el mundo delos pic podamos aprender como se comunica con pc a través de USB.

    he construido tu proyecto y me ha funcionado perfectamente sin problemas y he aprendido un poco como lo hace.
    saludos… desde EL Salvador C.A.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Webcast del LHC: ¡Mira el Big Bang en directo!

Árboles que generan energía limpia