TODOPIC
Microcontroladores PIC => - Niple - => Mensaje iniciado por: QUIQUE62 en 07 de Abril de 2023, 21:05:26
-
Buenas noches, me ganó el ADC no lo puedo configurar, me pueden dar una mano. Les subo los archivos para que lo vean si tienen tiempo. Lo pude configurar pero la lectura me sale siempre cero. - Tienes que ingresar para ver archivos adjuntos -
-
perfecto amigo quique, como comentaba el amigo fer en el post anterior después de tu lectura analógica tienes que poner el bloque de convertir el registro descarga a bcd para que puedas verlo en el lcd, ponle ese bloque y checa que hace tu programa.
-
La conversion analogica digital tiene la opcion convertir a BCD automáticamente, se puede usar esa opción?
- Tienes que ingresar para ver archivos adjuntos -
-
pero por supuesto amigo quique, aunque si pudieras probar las dos maneras para que cheques si hay alguna diferencia e igual en el asm que genera cheques pero si también se puede usar.
-
Quique,
Lo que también te puede estar pasando es que en tu conversion al ser de 10 bits el valor del registro descarga podrá tener un valor de 0 a 1023.
Evidentemente este valor puede no ser descriptivo para ti. El micro solo lee valores de 0 a 5V. Por lo tanto si necesitas tener una correspondencia entre el valor del conversor ADC y el valor real de la entrada en voltios, debes si o si hacer una conversión.
Esto se realiza con el uso del bloque escalar que se encuentra dentro de las operaciones matemáticas. Con el uso de este bloque ya puedes tener un valor real de la conversión realizada ya sea en voltios, temperatura, etc.
Para finalizar después de este bloque de escalado ya si debes usar el bloque de convertir en BCD y después asignar los valores al dispositivo LCD como ya se te ha indicado.
F.
-
Bien, estoy intentando con la función escalar, hay alguna fórmula para convertir los valores de entrada a los valores que se muestran en el lcd?. Les pido que disculpen las preguntas pero sobre este tema no he podido encontrar nada en la red.
-
buenas amigo quique, en la red hay mucha info y como dice el amigo fer lo mejor es hacer la conversión o escalarlo, pero si te fijas en la imagen que mandaste dice medir voltaje, niple ya tiene esa función sin que hagas algún otro movimiento solo activa la casilla y listo a y como esta en tu lcd recuerda que de izquierda a derecha esta primero centenas, decenas y unidades no unidades, decenas y centenas como tu las tienes, te sugiero que lo hagas igual que la otra vez de las 2 maneras escalando y con la casilla para que cheques.
-
Hola TSU, si hay algo en la red te agradecería que me pases la información, en cuanto a la lectura necesito medir valores entre 10 y 0 volts, pensé en reducirlo con divisor resistivo justo a la mitad para que entren al PIC de 5 a 0 volts. Los valores a medir son con 2
decimales, por eso puse en el lcd unidades de un registro y centenas y decenas del otro. Al parecer eso anda lo que no puedo es ver en el lcd lo mismo que estoy leyendo o sea tensiones entre 10 y 0 volts. Activando la casilla medir voltaje se pone mucho peor, no le echo la
culpa a Niple seguramente soy yo que no le encuentro la vuelta. Aunque es muchiiiiisimo mas facil que el assembler tiene sus cosa y no hay mucha documentación, o por lo menos yo no la tengo. Gracias nuevamente a Uds. por ayudarme. Lo que me parece extraño es que
nadie haga ninguna pregunta, parece que soy el único que no sabe del tema.
-
ok creo ya se por donde vas, aquí te recomiendo que uses un hardware para ese propósito y al final la lectura será diferente para visualizar los 10 volts, aquí si necesitaría saber que tanto conocimiento tienes en electrónica para mas o menos dar una solución ya que con niple pues solo seria en el apartado de leer de 0 a 5 pero fuera del micro seria acople de 0 a 10
-
quique,
Si quieres medir valores de 0 a 10V vas a tener que utilizar algo de hardware externo para limitar los valores a medir entre 0 y 5V. Por ejemplo para probar puedes usar 2 resistencias de 1K usadas en serie de forma que el punto medio lo lleves a la entrada dl pic. Un extremo de la serie lo llevas a 0V y el extremo libre de la serie lo llevas al sensor donde mides los valores de 0 a 10V. Con esto ya lo limitas a a un máximo de 5V (esto no es lo mas fiable pero para probar creo que valdrá).
Luego en Niple colocas el bloque de conversor ad y selecciona el valor de la conversión de 10bits (necesitas que el registro donde se guarde la conversión sea de 16bits). Con esto cuando el sensor entregue 0V el convertidor leerá 0 y cunado tu sensor marque 10V(5V en el pic) el convertidor leerá 1023.
A continuación, debes de insertare el bloque de escalar dentro de los valores de origen seleccionas 0 y 1023 y en la escala de destino eliges como valores 0 y 1000. Aquí ya puedes hacer 2 opciones o marcar que el resultado se guarde en BCD o bien después de insertar el bloque de escalar añadir el bloque de convertir a BCD. Con esto, una vez en BCD ya tienes el valor de 1000 descompuesto en: unidad de mil(1), centena(0), decena(0) y unidad(0) y por tanto puedes representar ya el valor en el display LCD.
Ahora bien, como quieres ver valores decimales(con 2 dígitos) a la hora de representar el valor BCD en el LCD debes de realizarlo de la forma siguiente:
unidad de mil--centena-- ahora debes de añadir un carácter fijo (punto o coma según tu gusto)--decena --unidad.
De esta forma cuando tu valor a leer sea por ejemplo 7,64 el convertidor estará leyendo 782 que una vez escalado el valor será de 764 y por tanto en el display verías la cifra 07.64 (el 0 de las unidades de mil puedes decir dentro de la configuración del mensaje del LCD que no se muestre si el valor es un 0).
Espero que esta explicacion te sirva.
F.
-
Gracias Fermín por la explicación detallada, ya está funcionando perfecto en Proteus, la única duda que tengo es de que manera calculaste el número del escalado, en este caso (1000).
-
Quique,
No calcule nada de ninguna forma. simplemente si tienes que leer 10V y además con 2 decimales y eso es lo que tienes que representar pues listo. 10 mas el punto y los dos decimales 00 equivalen a 1000.
Ese es valor máximo que quieres leer cuando tu entrada tenga el valor máximo y por tanto en adc tendrá el valor máximo 1023. Así que basta de decirle que cuando el máximo tenga 1023 (10V a la entrada reducidos a 5V) pues que ese valor 1023 sean 1000 de acuerdo a lo explicado en el párrafo anterior.
Cualquier valor intermedio se corresponderá con la relación de escalado indicado en el post anterior. Como es una relación reductora: 1000/1023=0.97751.
Por tanto si quieres saber cualquier valor intermedio del ad te basta dividir el valor de la entrada por 0.97751 y si quieres saber el valor real de la conversión sabiendo el valor del conversor ad te basta con multiplicar el valor leido del ad por 0.97751.
Los valores intermedios del conversor puedes verlos directamente en el bloque del escalado si mueves el cursor del origen a la derecha de la ventana del escalado. El factor de la escala ya lo ves también en esa ventana es decir x/1023 y tu x en este caso es 1000 por eso si ves la figura observarás que es una reducción. En caso de que quisieras un valor mayor de 1023 por ejemplo 1500 ya verias que te cambia la figura y seria como una amplificación por eso el valor de la escala también te varia y te pone x*
F.
-
Gracias por todo Fermín, muy clara la explicación.