TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: BINARIO en 29 de Enero de 2007, 10:00:52

Título: LCD con 16f877
Publicado por: BINARIO en 29 de Enero de 2007, 10:00:52
Alguien sabe de alguna libreria ya echa para utilizar un LCD tipo hitachi con un 16f877, espero su respuesta y gracias, si me pueden añadir el circuito estaria bueno.
Título: Re: LCD con 16f877
Publicado por: psykhon en 29 de Enero de 2007, 10:31:16
revise el foro mijo
Título: Re: LCD con 16f877
Publicado por: BINARIO en 29 de Enero de 2007, 13:05:35
OK GRACIAS, ESTUVE BUSCANDO PERO NO HE ENCONTRADO AUN, SEGUIRE BUSCANDO, OTRA COSA GRACIAS POR SER TAN AMABLE...
Título: Re: LCD con 16f877
Publicado por: microcom en 29 de Enero de 2007, 13:11:58
la verdad en el foro hay mucha informacion sobre el tema
algunas dudas de lo leido se puede preguntar y aqui amablemente se puede responder.

saludos y gracias
Título: Re: LCD con 16f877
Publicado por: Cryn en 29 de Enero de 2007, 14:06:13
haber amigo, visita este link: http://www.todopic.com.ar/foros/index.php?topic=4530.0 son ejemplos de Vszener, muchos, la primera pagina, el primer post del hilo en realidad tiene un indice busca los qeu digan lcd y ya iras viendo, pues como dicen, siempre trata de buscar, se que a veces uno quiere las cosas inmediatas, pero mas rapido a veces te sale que tu busques hasta qeu te respondan, weno hay te dejo, espero te sirva; adios.

ahh y weno si hablas de libreria supongo que te refieres a lenguaje c, este hilo que te dejo esta en CCS.
Título: Re: LCD con 16f877
Publicado por: psykhon en 29 de Enero de 2007, 17:49:25
con cinco post echos y preguntando cosas repetidas hasta el cansancio no se puede pedir mucho
Título: Al Estimado Señor Pshikon.
Publicado por: BINARIO en 30 de Enero de 2007, 10:52:46
Señor Pshikon, lamento que mis dudas le hayan provocado tal estado de sulfuracion, solo queria conseguir alguna info de lcd porque estaba trabajando en un proyecto al respecto de eso, desconocia que no se podia preguntar en el foro sobre temas que ya figuraban, dado mi trabajo y que no cuento con demasiado tiempo es que no pude revisar a fondo el foro como usted debe de haberlo echo, estuve buscando en la red y encontre el ejemplo de hola mundo para lcd de 2x16 lo publicare en breve, nuevamente le reitero mis disculpas si le cause alguna molestia o me diriji a su persona de modo incorrecto, y me comprometo a respetar las normativas del foro en post de poder enviar y recibir informacion que es la finalidad de este foro segun creo, desde ya muchas gracias por su invaluable ayuda.
Título: Re: LCD con 16f877
Publicado por: Kedutpic en 30 de Enero de 2007, 11:04:24
 :o hola binario las rutinas del LCD son faciles de realizar solo hay que tener un poco de paciencia para poder realizarlas  y leer un poco el datasheet del microcontrolador hitachi , bueno no te puedo agradeciria que me mencionaras en que entorno de programacion  vas a realizar tu pruebas (MPLAB ,CSS,etc)

saludos  :mrgreen:
Título: Re: LCD con 16f877
Publicado por: BINARIO en 30 de Enero de 2007, 12:06:55
Yo trabajo con MPLAB 7, asi que asi es como lo hago se que para muchos es el lenguaje de programacion mas complicado, es decir el mas bajo pero creo que es el que mejor se adapta a mis conocimientos se que hoy por hoy no importa mucho el tamaño del programa eso es cosa del pasado, pero sabes me gustaria programar en C, el pic basic me esta gustando, mira consegui una rutina del LCD es esta:

;****************************************** http://www.x-robotics.com *******
; PROGRAMA : LCD.LIB
; Funcion : Libreria de funciones para controlar un display
;       LCD de 2x16 lineas complatible con Hitachi.
;      
;  Revision : 1.0                            Programa para : PIC16F84
; CPU Clock : 4 MHz                      Reloj instruccion : 1 us
;       WDT : Deshabilitado                  Tipo de reloj : XT 
; Code Prot : OFF           
;****************************************** http://www.x-robotics.com *******
                               
                             
 LCD_E          BSF     RA,2            ;Activa señal E
                NOP                     ;Espera 1uS
                BCF     RA,2            ;Desactiva señal E
                RETURN       
                             
 LCD_BUSY       BSF     RA,1            ;Pone el LCD en modo lectura
                BSF     STATUS,5        ;Selecciona el Banco 1
                MOVLW   0xFF 
                MOVWF   TRISB           ;Puerta B act£a de entrada
                BCF     STATUS,5        ;Selecciona el Banco 0
                BSF     RA,2            ;Activa el LCD (Señal E)
                NOP           
 L_BUSY         BTFSC   RB,7            ;Chequea el bit BUSY
                GOTO    L_BUSY          ;Est  a "1" (Ocupado)
                BCF     RA,2            ;Desactiva el LCD (Se¤al E)
                BSF     STATUS,5        ;Selecciona el Banco 1
                CLRF    TRISB           ;Puerta B actua como salida
                BCF     STATUS,5        ;Selecciona el Banco 0
                BCF     RA,1            ;Pone el LCD en modo escritura
                RETURN       
                             
 LCD_REG        BCF     RA,0            ;Desactiva RS (Modo instruccion)
                MOVWF   RB              ;Saca el codigo de instruccion
                CALL    LCD_BUSY        ;Espera a que se libere el LCD
                GOTO    LCD_E           ;Genera pulso en señal E
                             
 LCD_DATOS      BCF     RA,0            ;Desactiva RS (Modo instrucci¢n)
                MOVWF   RB              ;Valor ASCII a sacar por RB
                CALL    LCD_BUSY        ;Espera a que se libere el LCD
                BSF     RA,0            ;Activa RS (Modo dato) 
                GOTO    LCD_E           ;Genera pulso en señal E
                             
 LCD_INI        MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                RETURN           
                             
 LCD_PORT       BSF     STATUS,5        ;Selecciona el banco 1 de datos
                CLRF    TRISB           ;RB se programa como salida
                MOVLW   b'00011000'     ;RA<4:3> se programan como entradas
                MOVWF   TRISA           ;RA<2:0> se programan como salidas
                BCF     STATUS,5        ;Selecciona el banco 0 de datos
                                       
               ;MOVLW   b'00000000'     
               ;MOVWF   INTCON          ;Desactiva interrupciones
                BCF     RA,0            ;Desactiva RS del modulo LCD
                BCF     RA,2            ;Desactiva E del modulo LCD
         
;****************************************************************************                                                               
;DELAY_5MS genera una temporizacion de 5mS necesario para la secuencia de
;inicio del LCD                         
                                       
DELAY_5MS     movlw    0x1a                   
              movwf    DATO_B                 
              clrf    DATO_A                 
DELAY_1       decfsz    DATO_A,1             
              goto    DELAY_1                 
              decfsz    DATO_B,1             
              goto    DELAY_1                 
              return
               

Esta muy buena y gracias a esta rutina estoy aprendiendo a dominar este tipo de display creo que con un poco de trabajo es posible lograr muchas cosas, se que esta libreria se puede incluir llamandola desde el programa con un include, pero segun veo tambien se pueden introducir las subrutinas en el prg que hagas y te va a funcionar igual.
bueno si saben algo mas siempre es buena una data, seguire buscando y espero lograr grandes cosas con este bicho de 2x16.
Gracias por el manual que publicaste me ha sido de mucha utlidad aprendi mucho de ese manual junto con esta libreria creo que cualquiera que entre al foro podra aprender a utilizar lo unico que no me guio como plantear el circuito, si lo se medio tonto de mi parte pero una manito en este aspecto me permitiria lograr concluir mi proyecto con lcd.
Título: Re: LCD con 16f877
Publicado por: BINARIO en 30 de Enero de 2007, 12:10:37
ACA ESTA EL EJEMPLO QUE PROMETI DEL PROGRAMA HOLA MUNDO ESTE ES PARA UN 16cf84, si alguien se da una idea qu ese modifica para un 16f877 bienvenida sea la mano brindada nos vemos

                                                                                                    1110001100001001

;****************************************** http://www.x-robotics.com *******
; PROGRAMA : hola.asm
; Funcion  : Programa de ejemplo de utilizacion de rutinas para control de
;            LCD Hitachi 44780 o compatible.
;  Revision : 1.0                            Programa para : PIC16F84
; CPU Clock : 4 MHz                      Reloj instruccion : 1 us
;       WDT : Deshabilitado                  Tipo de reloj : XT 
; Code Prot : OFF           
;****************************************** http://www.x-robotics.com *******
;
;
;****************************** Igualdades **********************************
;                           
           list p=16c84      ;Procesador PIC16c84 
           list c=132        ;Listado a 132 caracteres

TIMER0     equ 01            ;Registro del TIMER0
OPCION     equ 0x1           ;Registro de opciones,p gina 1
PCL        equ 0x2           ;Registro PC
PCLATH     equ 0xa           ;Registro alto del PC
STATUS     equ 03            ;Registro de estado
RA         equ 05            ;Puerta A
RB         equ 06            ;Puerta B
PORTA      equ 05            ;Puerta A
PORTB      equ 06            ;Puerta B
TRISA      equ 0x5           ;Reg. de programaci¢n de la puerta A, p gina 1
TRISB      equ 0x6           ;Reg. de programaci¢n de la puerta B, p gina 1
INTCON     equ 0xb           ;Registro de control de interrupciones
DATO_A     equ 0xc           ;Registro del dato A
DATO_B     equ 0xd           ;Registro del dato B
RESUL      equ 0xe           ;Registro de resultados
TEMPO1     equ 0xf           ;Registro temporal 1
TEMPO2     equ 0x10          ;Registro temporal 2
OFFSET     equ 0x11          ;Variable de desplazamientos de mensajes
RP0     EQU     05h          ;Bit 5 registro STATUS
Digito  EQU     1Fh        ;Cursor para leer la tabla de datos.
                             

;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>                             
                           
                ORG     00h             ;Direccion del Vector de RESET

                GOTO    INICIO          ;Comienza el programa

                ORG     05h             ;detras del Vector Interrupcion
       

      Include "LCD.LIB" 
   


;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
                                                         
INICIO          CLRF    Digito          ;Pone a 0 la variable digito                             
                CALL    LCD_PORT        ;Puertos en modo LCD       
                BCF     RA,0            ;Desactiva RS del modulo LCD
                BCF     RA,2            ;Desactiva E del modulo LCD
START           CALL    LCD_INI         ;Inicia LCD (CFG puertos...)                 
START_1         MOVLW   b'00000001'     ;Borrar LCD y Home         
                CALL    LCD_REG                                     
                MOVLW   b'00000110'     ;                           
                CALL    LCD_REG                                     
                MOVLW   b'00001100'     ;LCD On, cursor Off,Parpadeo Off         
                CALL    LCD_REG                                     
                MOVLW   0x80            ;Direccion caracter
                CALL    LCD_REG                           
                                                                   
REPETIR          MOVF    Digito,w        ;W=Digito
                CALL    DATO_1          ;Coge el caracter           
                IORLW   0               ;Compara
                BTFSC   STATUS,2        ;Es el ultimo?             
                GOTO    acabar      ;Si               
                CALL    LCD_DATOS       ;Visualiza caracter         
                INCF    Digito,f        ;Incrementa numero de Digito
                GOTO    REPETIR         ;Vuelve a escribir
                                                                   
acabar      nop
      goto   acabar      ;Buclee infinito
                 
;<<<<<<---------------------- TABLA DE DATOS ------------------------->>>>>>>
                                                                   
DATO_1          ADDWF   PCL,1                 
                RETLW   'H'             
                RETLW   'O'
                RETLW   'L'           
                RETLW   'A'           
                RETLW   ' '           
                RETLW   'M'           
                RETLW   'U'           
                RETLW   'N'           
                RETLW   'D'           
                RETLW   'O'           
                RETLW    0x00           
 
;<<<<<<\\\\\\\\\\\THE\\\\\\\\\\\\\\\\////////////////END//////////////>>>>>>>   
      
      END                           

Título: Re: LCD con 16f877
Publicado por: ascii en 30 de Enero de 2007, 12:22:17
Para pasar tu programa al pic16f877 solo debes leer el datasheet  :mrgreen:
Título: Re: LCD con 16f877
Publicado por: BINARIO en 30 de Enero de 2007, 12:30:07
QUE APORTE SEÑOR !

111001110001110011010110010101010101010101010101011111000000000011100010100
000000000000011100000000000011000000000111111111111000011111110101101000011
Título: Re: LCD con 16f877
Publicado por: ascii en 30 de Enero de 2007, 13:07:13
Por lo demas no creo que haya alguien del foro que modifique tu programa al pic que pides no por lo complejo que seria si no por que pienso que de esta forma se te estaria mal acostumbrando a que todo se de en bandeja, lo cual pienso yo no es la idea del foro, No es mala onda solo es una opinion personal.
Título: Re: LCD con 16f877
Publicado por: Fer_TACA en 30 de Enero de 2007, 13:35:46
Coincido con ascii, no te debes molestar, pero si si se teda todo realizado, entonces nunca aprenderas y lo mejor de todo y lo que mas satisfaccion te da es realizar una cosa por ti mismo.
Lo que si hacemos todos es responder a preguntas, dudas, etc... muy concretas respecto a cualquier cosa que no entiendas y en la que estes. O no te ha gustado hecerte la rutina que has posteado.
De todas formas no es mucho lo que hay que cambiar para pasar de un micro a otro. No es necesario que te leas todo el datasheet, con ver las paginas de memoria y la siruacion de los registros SFR va a ser suficiente y veras como lo consigues.
Fermin
Título: Re: LCD con 16f877
Publicado por: BINARIO en 30 de Enero de 2007, 14:51:04
 :-/ :-/TKZ, PERSONALMENTE CREO QUE DAR ALGUNOS EJEMPLOS AYUDA A QUE OTROS QUE DIRECTAMENTE NO TIENEN IDEA O POSIBILIDAD ALGUNA PRACTIQUEN Y SE VAYAN HACIENDO UNA IDEA, PARA APRENDER DE PIC ESTUVE MUCHO TIEMPO LEYENDO Y BUSCANDO INFORMACION NADIE PIDE LAS COSAS EN BANDEJA, SOLO TENGO LA INTENCION DE QUE EN PARTE SI ALGUIEN DESCONOCE DE UN TEMA EN EL FORO NO SE CONTESTE DE MANERA PEDANTE DICIENDO INVESTIGALO VOS, O ESTA EN EL FORO, CREO QUE MI OPINION ES CLARA Y MIENTRAS PUEDA POSTEARE LOS TEMAS QUE VAYA ENCONTRANDO O LOS PORYECTOS QUE PUEDA DESARROLLAR, CREO QUE COMPARTIR LA INFORMACION ES EL UNICO CAMINO PARA LOGRAR NUEVOS DESCUBRIMIENTOS, VOS NO LO SABES PERO TAL VEZ SI LE NEGAS UNA DATA A ALGUN FLACO QUE PREGUNTA AMABLEMENTE ESTES SACANDO DEL MEDIO A ALGUIEN QUE PODRIA LLEGAR A SER MUY BRILLANTE Y BENEFICIARNOS A TODOS YO NO EXIJO A NADIE QUE PROPORCIONE INFORMACION OBLIGATORIAMENTE CUANDO ALGUIEN INDAGUE DE UNA DUDA, PERO CREO QUE UN LINK, O UN ACLARACION AMABLE SURTE MAS EFECTO QUE UNA RESPUESTA PEDANTE Y ENGREIDA, ES MI HUMILDE OPINION Y ESPERO QUE LOS PROXIMOS POST SEAN DE APORTES MAS QUE DE REGAÑOS, DADO QUE ESTE FORO SEGUN CREO SE TRATA DE PERSONAS ADULTAS COMPARTIENDO INFORMACION, ESPERO QUE PODAMOS SEGUIR COMPARTIENDO LA INFORMACION QUE TODOS NECESITAMSO SOBRE LA MATERIA QUE NOS GUSTA.

110010101011000111110001111111111111111100101000010011111000010101010101011
011111111010111111111111111110010100001001111100001010101010101100000000001
Título: Re: LCD con 16f877
Publicado por: maunix en 30 de Enero de 2007, 15:17:57
Binario, más allá de tus razones que puedan ser buenas o no, te pido leas las reglas del foro sobre todo la sección donde se aclara que el uso de mayúsculas es "gritar".

Con el tiempo te darás cuenta que el espíritu de la mayor parte de los miembros activos del foro es la de compartir conocimientos.  También es cierto que hay mucho posteado y a veces es molesto ver y ver y ver de nuevo la misma pregunta por más que tu no tengas la culpa de eso, esa es la finalidad de que te digan que 'busques'  , porque hay decenas de miles de posts en este foro y versan sobre distintos temas, entonces es raro que algo que no sea estrictamente nuevo no aparezca, al menos siquiera mencionado.

Saludos
Título: Re: LCD con 16f877
Publicado por: BINARIO en 30 de Enero de 2007, 16:23:31
comprendido señór moderador,nome dicuentadelas mayusculas le pido me disculpesigamos con el tema si?
Título: Re: LCD con 16f877
Publicado por: microcom en 30 de Enero de 2007, 18:47:40
la MODIFICACION SOLO TIENES QUE DECLARAR LOS VARIABLES GENERALES DESDE LA POSICION  20
Y TAMBIEN TENER LAS SALIDAS DEL PORTA COMO DIGITALES

MOVLW 07                     ; SALIDAS O ENTRADAS DIGITALES  DIGITALES
MOVWF ADCON1

DATO_A     equ 20           ;Registro del dato A
DATO_B     equ 21         ;Registro del dato B
RESUL      equ 22          ;Registro de resultados
TEMPO1     equ 23         ;Registro temporal 1
 

Y ASI SUCESIVAMENTE

Y NO TIENES MAS NADA QUE HACER

DISCULPAS POR MAYUSCULA

SALUDOS
Título: Re: LCD con 16f877
Publicado por: maunix en 30 de Enero de 2007, 19:08:08
comprendido señór moderador,nome dicuentadelas mayusculas le pido me disculpesigamos con el tema si?

Si, la idea es continuar con el tema, lo de las mayúsculas fue un comentario al margen.

Para darte una pauta, debes comparar el pic de origen con el pic destino.  En tu caso, el pic de destino es mucho mas grande y complejo (tiene los mismos módulos y aún más que el pic original).  Esto te beneficia ya que está garantizado casi al 99% de que tu aplicación, cualquiera sea, podrá correr en el nuevo pic.   Un caso en que no sería posible una migración sería si el nuevo pic a pesar de ser mayor, no tenga un módulo (por ejemplo el módulo USB) , pero este no es tu caso.

El código que has puesto es muy breve y simple.  No habría problemas en migrarlo.

Deberás verificar que la declaración que hiciste de registros sea correcta, para ello haz

include "P16F877.inc" y con eso ya habrás incluido los registros del nuevo pic con lo cual no te hace falta hacer todos los EQUS que tu has hecho.  Ya están definidos en el archivo .inc que provee microchip

Como sugerencia, fíjate de deshabilitar las entradas analógicas del puerto A del PIC16F877. 
Esto se hace cargando 0x06 en el registro ADCON1.

Sería importante conocer para qué micro está hecha esa librería (LCD.LIB) y verificar si es posible reconfigurarla, en caso contrario deberás recodificarla.

Saludos
Título: Re: LCD con 16f877
Publicado por: ascii en 30 de Enero de 2007, 22:15:47
maunix si no me equivoco creo que todo el programa esta hecho en base al PIC16F84...saludos :)
Título: Re: LCD con 16f877
Publicado por: maunix en 30 de Enero de 2007, 22:28:06
maunix si no me equivoco creo que todo el programa esta hecho en base al PIC16F84...saludos :)

Si, el código lo leí, pero me parece que se te pasó por alto esto:

ACA ESTA EL EJEMPLO QUE PROMETI DEL PROGRAMA HOLA MUNDO ESTE ES PARA UN 16cf84, si alguien se da una idea qu ese modifica para un 16f877 bienvenida sea la mano brindada nos vemos


Como ves el amigo pide ayuda para pasar su código al 16F877.

Saludos
Título: Re: LCD con 16f877
Publicado por: ascii en 30 de Enero de 2007, 22:42:36
Si claro eso lo tengo claro, yo pense que tu pregunta iba referida a la libreria LCD.LIB, creo que no nos estamos entendiendo, otra cosa para desabilitar las entradas analogicas del porta, yo cargo 0X07 no 0x06 como tu planteas, no recuerdo bien probablemente la configuracion sea 11x para los LSB en ese caso daria igual.... saludos.
Título: Re: LCD con 16f877
Publicado por: flacoclau en 30 de Enero de 2007, 23:14:48
Hola Binario: para conectar el lcd al pic debes asignar cada pata del pic a cada pata del lcd en cuanto a datos y control, suponiendo que la transmisión de datos hacia el lcd lo hagas a 8 bits por ejemplo, puedes elegir el puerto b completo osea desde RB0 hasta RB7 conectados a las patas 7 hasta la 14 del lcd que corresponden al D0 hasta D7 del mismo.
luego elijes los otros tres pines de control que van al lcd, que son RS pata 4, RW pata 5 y E pata 6 del lcd, en este caso podrías elejir el puerto E completo (tiene solo tres bits) que serían RE0, RE1 y RE2.

para el programa tendrías que modificar el asembler para que los datos y el control te salgan por dichos pines del 16f877.
cualquier cosa pregunta.
saludos.