Buena tarde.El viejo gameport de las PC incluia la lectura de la resistencia de un potenciómetro y lo hacía sin usar ADC. El principio de funcionamiento era simplemente medir el tiempo de carga de un condensador.
No es un ADC como se puede llegar a pensar, la lectura no es lineal , depende fuertemente de las variaciones de la tensión de umbral y de las variaciones por temperatura de la capacidad del condensador. Pero como es algo muy sencillo, para aplicaciones de baja resolución como es un estabilizador donde solamente hay que ver en qué rango se está para conmutar los relays --> sirve.
Con microcontroladores lo que se puede hacer es programar un puerto como salida para descargar un condensador y luego reprogramarlo como entrada para medir el tiempo que demora en cargarse hasta leer un '1'
No está en el ejemplo, pero luego se debe comparar la lectura con valores de una tabla para saber en rango se está y actuar en consecuencia.
Ver el archivo adjunto 260101
En el ejemplo el programa del micro es:
Código:#include <12f508.h> #FUSES NOWDT //No Watch Dog Timer #FUSES NOMCLR //Master Clear pin used for I/O #use delay(internal=4MHz) #use FAST_IO(all) #bit pinB0 = getenv("SFR:PORTB").0 int16 N ; //----------------------------------- int16 Tcarga(){ int16 k ; set_tris_b(1) ; for(k=0 ; pinB0 == 0 ; k++); set_tris_b(0) ; pinB0=0 ; return k ; } //----------------------------------- void main(void){ set_tris_b(0) ; pinB0 = 0 ; while(1){ N = Tcarga() ; // Leo el tiempo de carga // del condensador /* Otras operaciones dentro del bucle ppal ......... ......... */ delay_ms(200) ; // Un retardo cualquiera para este ejemplo } }
Hay que tener cuidado con la simulación porque al menos Proteus usa un modelo de entrada que llama "Digital" y vaya uno a saber por qué pero no mantiene constante el umbral donde la entrada pasa de detectar '0' a '1' y en consecuencia la lectura durante la simulación es inestable
Con compuertas, Proteus tiene la opción de usar un modelo 'Analógico" o 'Digital' para las entradas (obviamente el que funcionaría en este ejemplo es el 'Analógico') pero para micros NO.
Dónde puedo encontrar el voltaje umbral de los pines configurados como entradas para ser leídos como 1? En cada pic es diferente ? Depende de la temperatura?
En lenguaje de bajo nivel una orden se ejecuta a la misma velocidad que uno de bajo nivel? Es para calcular el valor de K en el ejemplo.
Gracias.