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

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #15 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

Desconectado jorsss

  • PIC10
  • *
  • Mensajes: 28
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #16 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 :-)


Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #17 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

Desconectado jorsss

  • PIC10
  • *
  • Mensajes: 28
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #18 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 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]

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #19 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.

Desconectado jorsss

  • PIC10
  • *
  • Mensajes: 28
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #20 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

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #21 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.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #22 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                        



Desconectado jorsss

  • PIC10
  • *
  • Mensajes: 28
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #23 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


Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #24 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.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #25 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.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #26 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.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re: Principiante con problemas con entrada analogica y LCD
« Respuesta #27 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.



 

anything