Autor Tema: Principiante con problemas con entrada analogica y LCD  (Leído 12973 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Principiante con problemas con entrada analogica y LCD
« en: 25 de Marzo de 2012, 23:05:13 »
Hola a todos. He leido varias veces este foro pero es la primera vez que escribo.

El tema es que estoy estudiando un poco el tema de los PIC y he echo pequenos proyectos en ensamblador (no tengo ni idea de C) con un PIC16F877A encendiendo y apagando
 leds. Ahora he dado el salto a un LCD y me faltan conocimientos. Espero que me podais ayudar:

OBJETIVO: El objetivo del programa es leer una entrada analogica de 0~5V por la entrada AN0 de mi pic y sacar por un lcd 16x2 el resultado convertido en porcentaje
                 (0V=0%, 5V=100%) sin decimales.

PROBLEMA: El pic transforma el voltaje a un numero 0~256 sin problema. Mi problema es que debo hacer con ese numero para convertirlo al porcentaje deseado. He leido
    que para sacarlo en el lcd es necesario utilizar una rutina de binario a BCD, pero si hago nada mas eso me imagino que en el lcd solo saldra un numero
    entre 0 y 256.
    Tambien he leido sobre la utilizacion de tablas con la instruccion "addwf PCL,F" y "retlw" como las utilizadas en los displays de 7 segmentos. Pero, si no
    me equivoco, deberia hacer 256 tablas, una por cada numero y eso parece un trabajo bastante largo.... Cual es el metodo correcto?.

No quiero que nadie me escriba un programa porque entonces no aprenderia nada pero si alguien me puede dar una ayuda, o una pista que seguir lo agradeceria enormemente.

Saludos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #1 en: 25 de Marzo de 2012, 23:20:13 »
Para el caso te conviene usar un PIC con entrada analogica de 10 bits (en este momento la gran mayoria lo tiene.
Eso te da un resultado de 1024, en vez del 256 que da el de 8 bits.
Para llegar al valor de 100 %, casi que con dividri por 10 te deja perfecto.
En el otro caso deberias usar mas matematica para obtener el mismo resultado... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #2 en: 26 de Marzo de 2012, 00:46:39 »
Gracias por la rapida respuesta. :mrgreen:

Es verdad, el pic que utilizo tiene convertidor de 10 bits. Si divido 1024 entre 100 sale una cuenta casi perfecta sin necesidad de mucha matematica. Si redondeas los 1024 a 1000 y lo divides entre 100 saldria que por cada 10 que aumenta el resultado de la conversion, aumentaria un 1%.

Mi problema es que sabiendo esto no entiendo de que manera puedo sacarlo por el LCD..... :?

Se me ocurre de repente utilizar alguna rutina de division para dividir el resultado de la conversion entre 10, pasar el resultado de la division de binario a BCD, y sacarlo por el LCD.
Me equivoco?. Estoy diciendo un imposible?.

Saludos

Desconectado jorsss

  • PIC10
  • *
  • Mensajes: 28
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #3 en: 26 de Marzo de 2012, 04:32:37 »
Hola Loudness como va? como bien dice MGLSOFT el PIC16F877A tiene un conversor de 10 bits lo que te da una resolucion de 1024 (0 - 1023) posiciones. Aparte de ello, cuenta con entradas de referencia de voltaje para el conversor A/D, de este modo podras determinar por programa, y conectando las referencias, cuanto es el limite en voltaje maximo y minimo.

Lo que puedes hacer es una simple regla de tres lo que te dara el resultado acorde al porcentaje....

Vmax...........100%
Vin...............X  ==== >    X = Vin * 100 / Vmax [%]

Luego haces una conversion a BCD y voila!  :mrgreen:

NOTA: si vas a hacer las librerias matematicas por ti mismo, te recomiendo que leas sobre re-utilización de código para sacarle mas provecho al aprendizaje. Podras hacer dos archivos diferentes para cada dato... por ejemplo BIN2BCD.INC y MATH.INC y luego incluirlo en todos los programas que lo necesites para no volver a escribir siempre lo mismo.

Saludos espero te sirva! cualquier cosa escribeme: jorsss_v5.3@hotmail.com



Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #4 en: 26 de Marzo de 2012, 11:00:15 »
Hola Loudness , si lo que quieres es sacar datos por el LCD 16x2 con el compilador CCS

lo mejor es incluir la libreria LCD.c que trae ya el compilador una vez instalado, y bueno te pongo un ejemplo en el cual testeo lecturas analogicas de un sensor de temperatura (si estas iniciando con el compilador CCS te recomiendo que aceptes el codigo y lo adaptes a tus necesidades)

Código: [Seleccionar]
#include<16F877A.h>
#device adc=10                    //Definimos un Conversor Analogo/Digital con resolucion de 10 bits
#Fuses XT, NOWDT, NOPROTECT, NOLVP, PUT, BROWNOUT, NOCPD, NOWRT   //palabra de configuracion
#Use delay(clock=4000000)  //usando un oscilador de 4MHz
#include<lcd.c>       //Incluimos libreria para manejo del modulo LCD

void main()
{
 int16 valorDigital;                //Declaramos una variable de 16 bits que contendra el valor del conversor A/D
 float valorAnalogico;              //Declaramos una variable tipo float que contendra el valor de temperatura
 
 lcd_init();                        //Inicializamos la libreria flex_lcd.c
 
 printf(lcd_putc," Hola Mundo ETN\n"); //Sacamos mensajes por el LCD
 printf(lcd_putc,"   FCYT - UMSS");    //Sacamos mensajes por el LCD
 delay_ms(2500);
 printf(lcd_putc,"\f");                //borramos el contenido del LCD
 
 Setup_adc(ADC_CLOCK_INTERNAL);        //COnfiguramos el CAD para que funcione con un oscilador interno RC
 Setup_adc_Ports(AN0);                 //Configuramos el Pin RA0 como  entrada analogica por la se tomaran las lecturas
 
 while(true)
 {
  Set_adc_channel(0);                  //Seleccionamos el canal'0' para hacer la lectura del valor analogico
                                       //el canal'0' corresponde a "AN0" usada en la funcion "Setup_adc_Ports(AN0)" 
  delay_ms(20);                        //Esperamos un tiempo prudente para la toma del valor analogico
 
  valorDigital=read_adc();                            //Hacemos la lectura del canal seleccionado anteriormente (canal'0')
                                                      //Almacenamos el valor digital en una variable entera de 16 bits
  valorAnalogico=(float)(valorDigital*4.883/10.000);  //Convertimos el valorDigital a un dato analogico
 
  lcd_gotoxy(1,1);                                    //Nos situamos en el extremo superior izquierdo del LCD
  printf(lcd_putc,"ADC = %Ld",valorDigital);          //mostramos por el LCD el valor digital de la conversion
  printf(lcd_putc,"\nTemp = %f'C",valorAnalogico);    //mostramos la temperatura actual
 }
}


saludos....

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #5 en: 26 de Marzo de 2012, 21:25:32 »
Gracias a todos por sus respuestas y su ayuda. Intentare responderles por partes.

jorsss: Entendido. Entonces necesito una rutina que me divida el resultado segun tu formula y luego ese resultado pasarlo a BCD y sacarlo por el LCD, no es asi?.
Las rutinas para pasar a BCD y para sacar por el lcd ya las tengo, solo tengo que preparar la rutina de division. Como tampoco se muy bien como se hace, intentare buscar algo en el almacen de assembler que hay en esta pagina. Si no lo encuentro es posible que te vuelva a preguntar sobre eso.

amyver: Gracias por tu codigo pero, como he dicho antes,  no tengo ni idea de C. Solo entiendo un poco de assembler y utilizo el MPLAB IDE para escribir, compilar, etc. De todas maneras, algun dia me gustaria aprender, asi que me guardo tu codigo.

Saludos a todos.

Desconectado jorsss

  • PIC10
  • *
  • Mensajes: 28
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #6 en: 27 de Marzo de 2012, 02:51:07 »
Claro Loudness busca como multiplicar 16x8 bits para tener un resultado de 24 bits (ya que de los 16 bits vas a trabajar solo 10, en caso de usar los 16 el resultado debe ser de 32 bits)

Y luego lo mismo con la división. Ten en cuenta que la division y la multiplicacion en binario se procede de igual forma que en decimal...

Las instrucciones que te van a ayudar mucho a resolver esto de manera mas eficiente son RRF y RLF

Si no tenes problemas con el ingles aca te dejo un enlace de microchip con notas de aplicacion de matematicas quizas te puedan guiar bastante...

Saludos!!

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #7 en: 27 de Marzo de 2012, 03:17:24 »
No soy experto en ingles pero puedo defenderme, solo necesito tiempo :).

Las instrucciones RRF y RLF no las he utilizado todavia asi que no se muy bien de que van, me pondre a estudiar.

Parece que el programa este me va a llevar mas tiempo del que yo pensaba jejeje.:oops:

Gracias por la informacion

Saludos

Desconectado jorsss

  • PIC10
  • *
  • Mensajes: 28
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #8 en: 27 de Marzo de 2012, 03:32:31 »
Es muy simple RRF Rotate Right File o Rotar un registro hacia la derecha... lo que hace es tomar el bit menos significativo y pasarlo al bit C del registro STATUS, desplazar una posicion de bits el registro y en el bit mas significativo coloca el valor anterior del bit C del registro STATUS

 

Y con la instruccion RLF (Rotate Left File) es exactamente lo mismo pero a la izquierda
El MSB pasa al bit C mientras que el valor anterior del bit C pasa al LSB

Saludos! espero te sirva esto...
Por cierto no te desanimes... Aprender asm siempre lleva su tiempo y practica... Si lo aprendes bien, luego cualquier lenguaje de programación que te interese te sera mucho mas fácil de aprender.
« Última modificación: 27 de Marzo de 2012, 05:11:15 por jorsss »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #9 en: 27 de Marzo de 2012, 05:57:23 »
Informacion que creo que te puede interesar:

Explicacion de todas las instrucciones:

http://www.todopic.com.ar/foros/index.php?topic=23623.0

Aqui un cursillo muy completo, casi todo lo que hay que saber para empezar:

http://www.todopic.com.ar/foros/index.php?topic=24720.0

Aqui rutinas matematicas (respuesta 13), aparte de otras muy utiles:

http://www.todopic.com.ar/foros/index.php?topic=23812.0

Espero que te sirva.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #10 en: 28 de Marzo de 2012, 00:47:04 »
jorsss: gracias por los consejos y sobre todo por tu apoyo. Algun dia tambien me gustaria aprender algo de c pero primero quiero llegar a dominar el ensamblador.

tapi8: Links muy utiles sin duda. Sobre todo el de las rutinas matematicas me puede servir bastante. Ire examinandolas poco a poco.

Saludos.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #11 en: 28 de Marzo de 2012, 00:54:10 »
Es muy grande el foro, en solo 5 mensajes de vida (dentro de el) ya vas encaminado hacia una solucion a tu problema y con tanta informacion que vas a tener que filtrar bastante para no empacharte !!  ((:-)) ((:-)) ((:-)) :lol: :lol: :lol:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #12 en: 28 de Marzo de 2012, 09:12:10 »
vas a tener que filtrar bastante para no empacharte !! 

De filtrar nada, que se lo estudie todo  :D :D :D

Es broma, no hay que aprender nada, hay que entenderlo, lo importante es entender las cosas y saber aplicarlas, los post siempre estaran ahi para consultar.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #13 en: 28 de Marzo de 2012, 10:32:03 »
MGLSOFT: en lo que del foro es muy grande tienes toda la razon. Es increible ((:-)) ((:-)) ((:-))

tapi8: Filtrar es de cobardes!!A estudiarmelo todo!!!!! :shock:  jejeje. :D. Intentare entederlo mientras lo estudio o estudiarlo meintras lo entiendo, lo que sea pero gracias a todos por la colaboracion.

Saludos

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #14 en: 28 de Marzo de 2012, 14:58:45 »
Citar
Filtrar es de cobardes!!A estudiarmelo todo!!!!!   jejeje. . Intentare entederlo mientras lo estudio o estudiarlo meintras lo entiendo, lo que sea pero gracias a todos por la colaboracion.

Asi, con dos cojones  :lol: :lol:

Una buena manera de entender los ejemplos es simulandolos en el MPLAB.