desktop

Mostrar voltaje sin usar ADC

Voy a usar un lm2596 y lo enciendo y apago del on off
Acá otro como vos; PWM LM2596 buck converter?
No se qué tan rapido es ese pin, y mucho menos qué tan rapido reacciona el LM. Ademas ese pin no es para esa finalidad.

Te conviene, como dice al final, usar el PWM del microcontrolador, y reemplazar el potenciometro, pasando a analógico al PWM.
O usar algun potenciometro digital y controlar via I2C o SPI.
Luego con un ADC del mismo microcontrolador realizas la lectura del voltaje.
todos quieren que use el adc
Porque no te aclaras.
El ADC (Analog Digital Converter, Conversor Analógico Digital), sirve para obtener una señal analógica (tu voltaje), y convertirlo en digital (lo que entiende el microcontrolador).
Lo que necesitas es el contrario para controlar, osea DAC (Digital Analog Converter, Conversor Digital Analógico), que convierte datos digitales (desde tu microcontrolador), a analógicos (voltaje de salida variable).
Lee cómo usar el PWM como DAC. Y si quieres, en vez de usar el módulo PWM (que seria lo lógico y conveniente), puedes crear mediante código tu propio PWM (problemas de retardo, desincronizacion, etc)
 
Última edición:
¿Para aprender ? buenisimo, nunca me quedo claro ESO.
Entendía que era para un trabajo o un berretin personal.
Como sea, si se puede con una PIC, pero no lo recomiendo en lenguaje "C" , si en assembler del fabricante.
Primero hay que escribir la rutina interrupcion de refresco del display para que no parpadee nunca y refreque a 50Hrtz
Ademas hay que usar un watch dog para que el ciclo no varie y funcione por RAFAGAS.
En el funcionamiento por RAFAGA, se hace un ciclo completo con todas las tareas necesarias y se descanza en un bucle INFINITO al final del ciclo.
De ese bucle infinito lo saca la INTERRUPCION , en el bucle se leen los teclados pulsados que ocurran o de algun otro evento o variable a controlar.
La rutina de teclado se programa como sigue :
1-Se espera un cambio de estado de tecla de 0 a 1.
2-Se entra en un bucle de espera a que retorne de 1 a 0 para dar por concluida la pulsación.
(No hacerlo de esta manera induce a errores y reniegos por parte del usuario)
3- recien se procede a cumplir con la orden.
Un ser humano tarda como mínimo 10 milsegundos en pulsar una tecla y liberarla.Es importante para programar teclados y no llorar.
El programa debe HACER todo A LA VEZ sin parar. Lo dificil es coordinar todo eso adecuadamente. Haga un plan no escriba a tontas y a locas.

Algo a tener en cuenta en la PICS es NO hacer abuso de la EPPROM interna. Su vida útil es limitada. Sirve para datos a largo plazo calibración anual, no para grabar datos a cada rato porque termina rompiendose.

Le adjunto en este .rar un sistema operativo que hice por 2004, que simula un PLC , funciona y hace bastante de lo que le escribo en este topico. No es el definitivo pero le va a dar una idea de como se hace ciertas cosas. (No es fácil le adelanto)
 

Adjuntos

  • sopt0pl2.rar
    4.9 KB · Visitas: 10
Última edición:
Si fuera un trabajo ya me hubieran echado como 2 años que estoy con esto, busque programadores en Argentina para que me orienten pero.... en fin sin palabras ahora estoy haciendo un curso por Internet para mejorar y volví con esta idea, se que va salir, gracias a todos por contestar
 
Usa un divisor de tensión y el convertidor ADC que ya estás usando actualmente.
Si así me funciona bien, pero pasa que quiero encender y apagar la fuente del pin on/off y cuando la apago no muestra valor en el lcd, tengo que encender para que se vea, por eso pensé un contador de 0 a 17 y que vayan concatenado con el ciclo activo, si es 5 volr=17 volt, tendría que funcionar no estaría 100% precisó pero andaría bien
 
Si así me funciona bien, pero pasa que quiero encender y apagar la fuente del pin on/off y cuando la apago no muestra valor en el lcd, tengo que encender para que se vea, por eso pensé un contador de 0 a 17 y que vayan concatenado con el ciclo activo, si es 5 volr=17 volt, tendría que funcionar no estaría 100% precisó pero andaría bien
No entiendo absolutamente nada.
Si la fuente está apagada mostrará 0, suponiendo que el indicador se alimente de otro sitio.
Lo del contador y todo eso, no lo entiendo.
 
Pero como ya te puse, NO está pensado ese pin para ese uso, por eso al apagar obtienes los 0V.
Aparte de eso, seguro ni siquiera tienes un capacitor a la salida del LM, porque con carga puede ser, pero sin carga deberia marcarte algo superior a 0.
Haz lo que te dije, controla el pin que llevaria el potenciometro, o usa otro método con otros componentes que estén mas adecuado para eso (transistores varios, bobinas, diodos, etc).
Mira en el foro, que hay mucho material. Busca una fuente regulable digital
 
Si entendí bien o se explico bien el asunto, para que el display LCD, muestre el último valor leido de la fuente
despues de apagarse, hay 2 opciones básicas que no son ningun secreto.
1- El LCD debe tener su propia fuente o batería que lo alimente, a pesar de apagar la fuente ó el PIC ó
2- Hay que desconectar el bus del LCD , antes de apagar la fuente para que conserve el dato y ademas éste último siga recibiendo alimentación de algun origen (bateria , o lo que sea) ( No puedo creer que ésdte tópico tenga ya 7 páginas) :rolleyes: :unsure: 😝
 
Si entendí bien o se explico bien el asunto, para que el display LCD, muestre el último valor leido de la fuente
despues de apagarse, hay 2 opciones básicas que no son ningun secreto.
1- El LCD debe tener su propia fuente o batería que lo alimente, a pesar de apagar la fuente ó el PIC ó
2- Hay que desconectar el bus del LCD , antes de apagar la fuente para que conserve el dato y ademas éste último siga recibiendo alimentación de algun origen (bateria , o lo que sea) ( No puedo creer que ésdte tópico tenga ya 7 páginas) :rolleyes: :unsure: 😝
Poneme un ejemplo de cómo sería? Así acordamos las páginas, no es así, el ciclo activo tiene que ir con lo que muestro en el lcd, esta el adjunto para verlo! Gracias

Ahí pude hacerlo funcionar, lo único no se porque cuando presiono el pulsador el el primer pulso se va al máximo, subo el archivo con el código y la simulación en proteus , gracias
 

Adjuntos

  • Nueva carpeta (5).zip
    135.7 KB · Visitas: 11
Ahí pude hacerlo funcionar, lo único no se porque cuando presiono el pulsador el el primer pulso se va al máximo, subo el archivo con el código y la simulación en proteus , gracias
Porque cuando presionas ingresa al while(!input_state(pin_incr)) y aquí mientras sigas presionando se va a ejecutar lo que hay dentro de ese while y viendo tu código lo que haces es incrementar tu variable.
Prueba y déjalo así: while(input_state(pin_incr)) {...};
 
Poneme un ejemplo de cómo sería? Así acordamos las páginas, no es así, el ciclo activo tiene que ir con lo que muestro en el lcd, esta el adjunto para verlo! Gracias
Se lo que es un ciclo activo en general, pero en vuestro proyecto, hace hojas que me pregunto a que le llama usted el ciclo activo.
Si hay un ciclo activo para usted,¿a que le llama ciclo pasivo en su proyecto ? :rolleyes: Así terminamos con los neologismos. :rolleyes:😝 ... y avanzamos
 
Así desde afuera es un sinsentido de la A a la Z.
El único sentido que tenía era estudiar por aprender aunque no tuviera sentido el resultado, si aprender y distraerse no es el objetivo, entonces ya...
 
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.
Buena tarde.
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.
 
Atrás
Arriba