TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Loudness en 25 de Marzo de 2012, 23:05:13

Título: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness 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
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: MGLSOFT 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:
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness 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
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: jorsss 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


Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: amyver 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....
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness 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.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: jorsss 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 (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011000) quizas te puedan guiar bastante...

Saludos!!
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness 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
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: jorsss 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

 
(http://r-luis.xbot.es/pic2/imagen/mplab_24.gif)

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.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: tapi8 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.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness 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.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: MGLSOFT 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:
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: tapi8 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.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness 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
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: tapi8 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.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 29 de Marzo de 2012, 02:53:40
De cojones nada, que al final terminare mirandome solo la mitad, como siempre jejeje :D

Pues hablando del MPLAB, desde hace unos dias que no puedo utilizarlo :oops:.

Utilizo windows 7 y el Mplab version 8.73a. Me funcionaba bien pero de repente, al intentar abrirlo me da un error de windows y se me cierra. Le he borrado e intentado instalar diferentes versiones (desde la 7 en adelante) pero todas me dan el mismo resultado :5]. Iba a abrir un tema nuevo pero ya que lo has dicho, alguien tiene el mismo problema???.

Saludos
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: jorsss en 29 de Marzo de 2012, 07:35:28
Yo tuve muchas veces ese problema... y no solo con el MPLAB hasta que me aburri tire Win7 ya te imaginaras donde fue a parar y puse XP SP3 UE... Ahora la compu vuela y ningun problema con ningun programa :-)

Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 29 de Marzo de 2012, 10:35:07
Realmente me paso lo mismo con el oficce hace un tiempo. La verdad que el windows 7 es lo peor. El Vista ni siquiera le probe pero decian que era peor todavia.... increible :(. Tambien me lo tendre que pensar porque no puedo continuar asi.

He visto que hay algo asi como un windows xp virtual que se puede utilizar dentro del 7 pero mi version es home premiun y solo vale para profesional. Que pereza :5].

Voy a intentar hacerlo funcionar de alguna manera.

Gracias por el mensaje.

Saludos
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: jorsss en 29 de Marzo de 2012, 11:04:45
Lo que vos decis es correr el sistema operativo de manera virtual.... de hecho hay varios programas que lo hacen... uno de ellos es VirtualBox podes correr incluso Linux dentro de Windows... o Windows dentro de Linux

Mira este video de Linux emulando a Windows en una parte del mismo


Yo por eso, como te digo, cambie a Windows UE 2009.1 (http://www.intercambiosvirtuales.org/sistemas-operativos/windows-ue-sp3-20091-bj-actualizado-por-guanaco) y la compu me anda barbaro ahora sin esos problema de incompatibilidad debido a que el programa fue liberado 2 meses antes que el Win7 xD (y no es broma me paso con varios)  :5]
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 29 de Marzo de 2012, 11:28:39
GUUAAAUUU pedazo de video, que chulo. Si con este programa se puede utilizar xp dentro del 7, entonces me interesa y mucho. Lo buscare.

Nuevo problema :((lo siento por molestar). De momento estoy escribiendo el programa en otro ordenador portatil que tengo, algo viejo pero que todavia se mueve. El caso es que he escrito un programa facil para sacar un mensaje por el LCD pero al simularlo no me sale el mensaje. Estoy utilizando las librerias LCD y  RETARDOS que vienen en el famoso libro "desarrollo de proyectos pic16f84" (creo que mas o menos todo el mundo conoce este libro jejejeje). La libreria retardos no la he tocado, solamente he cambiado la libreria LCD para que:

LCD_PinRS      PORTC, 0
LCD_PinRW      PORTC, 1
LCD_PinEnable   PORTC, 2
LCD_BusDatos   PORTB

En la libreria original venian puestas en el PORTA pero necesito ese puerto para la entrada analogica. Al compilar con MPLAB no da errores pero lo he probado en el proteus y tambien en un protoboard y el LCD se enciende pero no sale ninguna letra.

Envio las librerias y el programa y, abusando de vuestro tiempo, os pido que le echeis un vistazo. Si ni siquiera puedo sacar algo en el LCD, entocnes mi proyecto no tiene ningun sentido.

Gracias por todo.
Saludos.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: jorsss en 29 de Marzo de 2012, 16:03:35
Hola Loudness como va? quiza donde colocaste el codigo luego de la posicion 0... sea mehir colocar de este modo

Código: [Seleccionar]
V_RESET        ORG          0x000
               GOTO        INICIO
               ORG          0x004
               RETFIE

INICIO         
               ....
               ....

Ya que en la vida real puede haber ruido o algo que puede hacer que sufra interrupciones y tu programa saltara a la linea donde tienes:

movlw   'a'

Esto se debe a que en la estructura del microcontrolador ya esta hecha para que cuando se sufra una interrupcion (que esta puede ser generada por ruidos del ambiente) el programa salte a la posicion 0x04

Recuerdo que una vez en clases, no podia grabar bien un programa en el micro en una feria de ciencia por que un compañero tenia el amplificador a todo volumen cerca y ello interferia la transmision de datos desde la compu al PIC  :?

En cuanto a la libreria del LCD de ese libro, sinceramente nunca le confie  :P aca te dejo un hilo donde se postea una buena libreria para ello

http://todopic.mforos.com/85505/4083876-control-lcd-4-bits-en-asm/

La cual esta mucho mas completa que la que trae el libro que mensionas.

Ojala te sirva
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 30 de Marzo de 2012, 00:45:00
Hola jorsss, gracias por todo ((:-)).

Solo habia probrado el LCD con el Pic16f84a y no habia tenido problemas asi que pense que con el 16f877a iria igual de bien, pero me equivoque :oops:.

Interesante lo que me cuentas del ruido. Voy a anadir ese trozo de codigo al inicio de mi programa a ver si cambia algo.

He visto la libreria que me enviaste y, por lo que veo, es la misma base que la del famoso libro simplemente cambiando los puertos del LCD al D y utilizando la instrucion banksel en alguna partes del programa. De todas maneras voy a probarla esta libreria con mi programa. Veremos si logro algo bueno. De todas maneras todavia no he solucionado lo del MPLAB :5] y sigo con la computadora vieja :(. asi que creo que tardare tiempo ...... maldito windows.

Cuidate
Saludos.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 15 de Abril de 2012, 10:51:45
Hola a todos. Cuanto tiempo :lol: pero entre el trabajo y la familia no me queda mucho tiempo para los pics :D

Os cuento mis progresos:

He escrito la conversion a-d sin problemas. He conseguido una buena rutina para el LCD (recomendada por jorsss) y otra que convierte binario a bcd sin problemas.

Sigo a vueltas con las rutinas aritmeticas y todavia no consigo una rutina de division que funcione.
El caso es que leyendo por ahi he visto una forma diferente de hacerlo sin utilizar division, sino utilizando tablas con la instruccion "addwf   PCL, F" y "retlw". Utilizando la conversion de 8 bits y no la de 10, de la conversion sale un numero entre 0~255, con ese numero llama a una tabla de 256 lineas (tarde tiempo en escribirla  :oops:). La tabla devuelve un numero de 0 a 100 que convertido y pasado a la pantalla seria mi deseado porcentaje. ((:-))

El caso es que el programa (probado en proteus) no va mal pero cuando la entrada pasa de cierto nivel, la pantalla se resetea y hace cosas raras. Por lo que he leido puede ser un salto incontrolado por que la tabla se va de pagina y eso se soluciona accionando sobre PCL y PCLATH....... pero la verdad es que no entiendo muy bien este punto. Si alguien me puede ayudar se lo agradeceria porque esto de las tablas parece bastante interesante pero facil para equivocarse.

Les adjunto mi codigo.
Gracias por su atencion.

;*****************PROGRAMA PARA SACAR UNA SENAL DE 0~5 VOLTIOS EN PORCENTAJE POR UN LCD**********************

   LIST      P=16F877A
   INCLUDE      <P16F877A.INC>
   
   __CONFIG    _CP_ALL & _DEBUG_OFF & _WRT_OFF & _CPD_ON & _LVP_OFF & _BODEN_ON & _HS_OSC & _WDT_OFF & _PWRTE_ON

   CBLOCK
                 RESULTADO   
                 ENDC


V_RESET        ORG          0x000
               GOTO         main
               ORG          0x004
               RETFIE

main   bcf   STATUS,   RP0
   clrf   PORTB
   clrf   PORTC
   clrf   PORTD
   bsf   STATUS,   RP0
   movlw   b'00000001'
   movwf   PORTB
   clrf   PORTD
   movlw   b'11111111'
   movwf   PORTC
   bcf   OPTION_REG,INTEDG
   bcf   STATUS, RP0

   
;***********CONVERSION DE LA ENTRADA 1-5V A DIGITAL*****************************************************

Initad   bsf      STATUS, RP0
   movlw      b'00001110'
   movwf      ADCON1
   bcf      STATUS, RP0
   movlw      b'01000001'
   movwf      ADCON0
   call      Retardo_20micros
   bsf      ADCON0, 2
loop   btfsc      ADCON0, 2
   goto      loop
   movf      ADRESH, RESULTADO

;*******************************PROGRAMA PRINCIPAL*******************************************************

Main1   call      LCD_Inicializa
   call      LCD_Linea1
   call      LCD_Output   ;Saca la palabra "OUTPUT:" por el LCD
   movfw                         RESULTADO
                 call      Tabla1
   call       LCD_Dec                    ;Llama a la rutina que cambia binario a bcd   
   movf       CENTENAS,0
   addlw       .48                  
   call       LCD_Caracter
   movf       DECENAS,0
   addlw       .48                  
   call       LCD_Caracter
   movf       UNIDADES,0
   addlw       .48                  
   call       LCD_Caracter
   call      LCD_Pc      ;Saca "%" por el LCD   
                 goto                            Initad


;**********TABLA DE SALIDAS DEL LCD. TIENE QUE HABER 256, UNA POR CADA NUMERO DIGITAL*****************************      
;*************SALIDA 1 SE REFIERE AL POCENTAJE DE LA SENAL: 0 Voltios=0%, 5 Vol=100%**************************************
;**********ESTA RUTINA DEVUELVE UN NUMERO DE 0 A 100 QUE LUEGO HAY QUE CONVERTIR A BCD PARA SACARLO POR EL LCD****
   
Tabla1   addwf   PCL, F
   retlw    D'0'   ;   adresh=0
   retlw    D'0'   ;   adresh=1
   retlw    D'0'   ;   adresh=2
   retlw    D'1'   ;   adresh=3
   retlw    D'1'   ;   adresh=4
   retlw    D'2'   ;   adresh=5
   retlw    D'2'   ;   adresh=6
   retlw    D'2'   ;  adresh=7
   retlw    D'3'   ;   adresh=8
   
            esta parte la he suprimido para que no sea muy largo el mensaje pero creo que se puede entender.
 
                 retlw          D'95'   ;adresh=245
   retlw          D'96'   ; adresh=246
   retlw          D'96'   ;adresh=247
   retlw          D'96'   ;adresh=248
   retlw          D'97'   ;adresh=249
   retlw          D'97'   ;adresh=250
   retlw          D'98'   ;adresh=251
   retlw          D'98'   ; adresh=252
   retlw          D'99'   ;adresh=253
   retlw          D'99'   ;adresh=254
   retlw          D'100'   ;adresh=255


   #INCLUDE  <LCD_4BIT.INC>         
   #INCLUDE  <RETARDOS.INC>
   #INCLUDE  <LCD_VARIOS.INC>         
   #INCLUDE  <LCD_DEC.INC>

   
   
   END                        


Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: jorsss en 16 de Abril de 2012, 02:46:01
HOla Loudness tanto tiempo! ke bueno que vayas avanzando con tus librerias... ahora reviso si tengo alguna libreria de divisiones que se adapte a tu algoritmo... ya te estare avisando   ;-)

Antes que nada queria aclararte ke el conversor AD ya esta establecido a 10 bits... por lo ke si kieres utilizar solo los 8 bits mas bajos el conversor seguira haciendo su trabajo a 10 bits independientemente de, como te digo, lo ke elijas trabajar...

estas librerias LCD_VARIOS.INC y LCD_DEC.INC las escribiste vos?? sinceramente desconosco si vienen en el libro de pic... te agradeceria si me las pasaras... asi puedo terminar de entender como funciona todo el programa  :)

Te mando un abrazo ya te estare avisando de las librerias

Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 16 de Abril de 2012, 03:16:44
Hola jorsss, cuanto tiempo. Gracias por tu rapida respuesta como siempre.

La libreria LCD_DEC.INC la he cogido del almacen del assembler cambiando simplemente el nombre. En cuanto a la de LCD_VARIOS.INC, simplemente saca mensajes en la pantalla tales como "OUTPUT". Me gustaria ampliar el programa en el futuro y que sacara mas cosas en pantalla, pero ahora de momento es una libreria muy sencilla. De todos modos te las envio.

Que me cuentas sobre las tablas?. He seguido leyendo sobre ello, pero no acabo de entender muy bien lo de los cambios de pagina y la utilizacion de PCLATH. No quiero abusar de tu ayuda pero si me puedes contar algo te lo agradeceria porque parece algo muy util.

Saludos.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 06 de Junio de 2012, 10:58:21
Siento por la tardanza (el trabajo, la familia) no tengo mucho tiempo para mis pics. Pero me gustaria contaros mis progresos, si a alguien le apetece leerlos ;-)

Ya termine mi programa, aunque ha cambiado. Ya no saca por la pantalla el porcentaje sino que saca un numero de 0 a 5 voltios con un decimal dependiendo de la entrada de 0~5V.
He pasado horas intentando escribir rutinas matematicas o intentar comprender de que van pero demasiado para mi, me rindo :oops:. Al final he decidido coger rutinas ya escritas y adaptarlas a mi programa.(gracias al almacen de assembler y a todos los que alli aportan).

Al final el programa ha quedado asi:

;****************************************************************************************************************************
;****************************************************************************************************************************
;****************************************************************************************************************************
;****************************************************************************************************************************

   LIST      P=16F877A
   INCLUDE      <P16F877A.INC>
   
   __CONFIG    _CP_ALL & _DEBUG_OFF & _WRT_OFF & _CPD_ON & _LVP_OFF & _BODEN_ON & _HS_OSC & _WDT_OFF & _PWRTE_ON


         
V_RESET      org          0x000
         nop
         nop
             goto         main
              org          0x004


main   bcf      STATUS,   RP0
      clrf   PORTB
      clrf   PORTC
      clrf   PORTD
      bsf      STATUS,   RP0
      clrf   PORTB
      clrf   PORTD
      clrf   PORTC
      bcf      STATUS,   RP0

Inicio   
      call   LCD_Inicializa
      call   Men_inic
      call   Retardo_500ms

;***********CONVERSION DE LA ENTRADA 1-5V A DIGITAL*****************************************************

Initad1
      bsf         STATUS, RP0         
      movlw      b'00001110'
      movwf      ADCON1
      bcf         STATUS, RP0
      movlw      b'01000001'
      movwf      ADCON0
      call      Retardo_50micros
      bsf         ADCON0, 2
loop1   btfsc      ADCON0, 2
      goto      loop1
      call      Retardo_10micros

;************************0-5 V    = 255x10 /51  *******************************************************

Out
   call      LCD_Linea1
   call      LCD_Output   
   movfw      ADRESH
   movwf      Arit_Multiplicando
   movlw      d'10'
   movwf      Arit_Multiplicador
   call      Arit_Multiplica_8Bit
   movfw      Arit_Producto_H
   movwf      Arit_Dividendo_H
   movfw      Arit_Producto_L
   movwf      Arit_Dividendo_L
   movlw      d'51'
   movwf      Arit_Divisor
   call      Arit_Divide_16Bit
   movfw      Arit_Cociente_H         
   movwf      NumH
   movfw      Arit_Cociente_L
   movwf      NumL
   call       LCD_Dec      
   movfw      Hund
   call       LCD_Caracter
   movfw      Tens
   call       LCD_Caracter
   movlw      '.'
   call       LCD_Caracter
   movfw      Ones
   call       LCD_Caracter
   movlw      '  '
   call      LCD_Caracter
   movlw      'V'
   call      LCD_Caracter
   call      LCD_DosEspaciosBlancos
   call      LCD_Linea2
   call      LCD_LineaEnBlanco
   nop
   goto      Initad1


;******************************MENSAJES************************************

Men_inic   
   movlw   'P'
   call   LCD_Caracter
   movlw   'R'
   call   LCD_Caracter
   movlw   'O'
   call   LCD_Caracter
   movlw   'G'
   call   LCD_Caracter
   movlw   'R'
   call   LCD_Caracter
   movlw   'A'
   call   LCD_Caracter
   movlw   'M'
   call   LCD_Caracter
   movlw   'A'
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter   
   movlw   '  '
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter
   call   Retardo_500ms
   call   LCD_Linea2
   movlw   'P'
   call   LCD_Caracter
   movlw   'O'
   call   LCD_Caracter
   movlw   'R'
   call   LCD_Caracter
   movlw   'C'
   call   LCD_Caracter
   movlw   'E'
   call   LCD_Caracter
   movlw   'N'
   call   LCD_Caracter
   movlw   'T'
   call   LCD_Caracter
   movlw   'A'
   call   LCD_Caracter
   movlw   'J'
   call   LCD_Caracter
   movlw   'E'
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter
   movlw   '2'
   call   LCD_Caracter   
   movlw   '0'
   call   LCD_Caracter
   movlw   '1'
   call   LCD_Caracter
   movlw   '2'
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter
   call   Retardo_500ms
   return

LCD_Output
   movlw   'E'
   call   LCD_Caracter
   movlw   'N'
   call   LCD_Caracter
   movlw   'T'
   call   LCD_Caracter
   movlw   'R'
   call   LCD_Caracter
   movlw   'A'
   call   LCD_Caracter
   movlw   'D'
   call   LCD_Caracter
   movlw   'A'
   call   LCD_Caracter
   movlw   ':'
   call   LCD_Caracter
   movlw   '  '
   call   LCD_Caracter
   return

   #INCLUDE  <LCD_4BIT.INC>         
   #INCLUDE  <RETARDOS.INC>
   #INCLUDE  <BIN_DEC.INC>
   #INCLUDE  <ARIT.INC>   
   
   END                        
 
Tambien os envio las rutinas que como ya he dicho estan en el almacen con otro nombre. El caso es que he probado en el PROTEUS y parece que va bien. Tambien os envio una captura. Ahora he hecho un circuito con soldadura y solo me falta el pic que me llegara en breve (esta semana?.) Cuando lo tenga es solo quemarlo y a funcionar.
Me imagino que para vosotros esta programa no es mucho, pero para mi que solo soy un aficionado es la leche asi que estoy emocionado jejejeje asi ya os contare como va. :-/.

Saludos.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 07 de Junio de 2012, 04:26:58
He tardado en escribir menos de lo que pensaba.

Esta manana me llego el PIC asi que lo queme con el programa de ayer y lo puse sobre mi circuito. En la pantalla deberia aparecer una medida de 0 a 5v sin problema segun el proteus.

Pero esta es la vida real y ahora al conectar el pic sale un numero tremendamente inestable. Es decir, por ejemplo, para 1V de entrada, medido don polimetro, en la pantalla aparece un numero entre 0.5v y 3V :shock: :shock: :shock: . He medido a la entrada del PIC con un polimetro (no dispongo de osciloscopio) y es estable o eso parece asi que el problema es del programa???. :?

He mirado el buscador y se comentaba algo de un seguidor de tension, he probado uno con un LM358N entre el divisor de resistencias y el pic, pero el resultado ha sido el mismo :(

Alguien ha tenido el mismo problema?. Agradeceria cualquier comentario.

Saludos.
Título: Re: Principiante con problemas con entrada analogica y LCD
Publicado por: Loudness en 03 de Julio de 2012, 10:44:28
Para matarme  :oops: :oops: :oops: La tierra de la entrada analogica y la de la alimentacion del pic no estaban unidas. Las he soldado un cable y ya esta, funcionando sin problemas, con un nivel de ruido aceptable.

Disculpas a todos por vuestro tiempo.
Saludos.