TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: daniloarg007 en 15 de Abril de 2010, 15:39:41
-
LCD con PIC 16F877A Hola a todos. Recien me inicio con esto de los PIC, lamentablemente a la fuerza, y con poco tiempo pot r temas laborales. PEro debo hacer algo para la presentar en un y necesito si alguien podria pasarme informacion de como conectar un LCD al 16F877A con alguna programa para correr con el MPLAB y bajar al PIC para hacer funcionar el LCD. COn eso ganaria mucho tiempo, ya que luego tengo mucho soft por desarrollar pues debo hacer mostrar diferentes menues en el LCD que estaran en esperando el ingreso por un teclado. Desde ya muchas gracias Si alguien tiene como debo conectarlo pin a pin, y alguna rutina que muester algo con las librerias necesarias r e en el LCD se lo agradecere. De esa manera podria chequear todo el hardware y comenzar a modificar el software.
El display que tengo es este:
http://www.winstar.com.tw/products_detail_ov.php?lang=es&ProID=23
Pero si es necesario cambiarlo por otro no tengo problemas.
Gracias
-
Bienvenido al foro.
En primer lugar deberias de indicar que tipo de lenguaje de programacion vas a utilizar.
¿El bus de datos para el LCD que sera de 4 bits o de 8 bits?
Deberias ser un poco mas descriptivo con los recursos que quieres utilizar ya que si vas a tener que usar y/o utilizar mas cosas por ampliacion de software debes de tener todo en cuenta.
Has utilizado el buscador del foro?
Una opcion seria conectar el puerto B a la linea de datos.
F.
-
Gracias Fer_TACA por tu respuesta.
Para serte sincero no tengo mucha idea. Solo usare un teclado de numerico se que vienen de 0 al 9 y alguna tecla mas. Creo que son de 16 teclas.
Ademas de eso podre usar algunas lineas mas de datos pero no sera mucho mas de 8 o 10.
Si tenes algo de info, del metodo mas sencillo, menos complicado y mas facil de entender como para poder arrancar el display, de esa manera sabre que mi programador funciona bien, que el hardware del display va bien y que al menos la cosa va quieriendo.
Despues veria en el camino como voy avanzando.
Estimo que si el bus de datos del display es de 8 bits el software sera algo mas sencillo.
Espero no te molester aconsejarme.
Gracias
-
Ahh olvide, programare en lenguaje ensamblador usando las instrucciones del PIC con el MPLAB.
-
Una configuracion de conexion entre pic y LCD podria ser el adjunto.
Voy a ver si en el subfore de Asm hay algo que te pueda servir
F.
-
Hola de nuevo:
Mira aqui:
http://www.todopic.com.ar/foros/index.php?topic=12918.0
Hay ejemplos que aunqe son para el 16F876 te pueden servir para ir empezando.
Echale un vistazo al foro de "Almacen de Asembler" que eguro que vas a encontrar bastante info para empezar en lo que vas a necesitar.
F.
-
Bueno encontre algunas rutinitas para el control del LCD, creo que te serviran para empezar.
F.
-
Gracias por la informacion.
Vere si con esto puedo ir arrancando.
Gracias
-
:mrgreen: ;-)
-
.
Ese mismo display fue en el cual probé las rutinas que adjunto en este mensaje (una es para usar el LCD en modo 8 bits y la otra para 4). Están en ASM y de seguro funcionan. Por cualquier cosa que no se entienda, no tema en preguntar :smiley:
Saludos.
-
Gracias mtristan.
Vere con todo esto a hasta donde puedo llegar. Soy MUY novato en esto y necesito lamentablemente resolver esto y con poco tiempo disponible.
Gracias pro la data.
Por casualidad diagramas del hardware (conexionado) tenes algo?
Si no creo que con la info que esta en lo que enviaste me puedo arreglar sumoado a lo enviado por Fer_TACA.
Debo lograr algo con todo eso.
Seguramente cuando pueda meter mano me encontarre con algun problema y estare molestando con preguntas.
Mil Gracias
-
Comence con unas pruebas sencillas para probar mi hardware y mi programador.
Hice un programita que simplemente encienda un led y lo apague (parpadeo constante) en el pin 0 del puerto A.
El led enciende y apaga.
La consulta es por que con el MPLAB que es con lo que hice todo al simular con MPLAB SIM en el menu Debugger, y poner View - Special Functions Registers. Ahi no veo en ningun momento que cambie de 0 a 1 la pata 0 del PortA.
Alguien sabe por que no lo puedo ver alli. Que hago mal? Seguramente algo de lo mucho que no entiendo y estoy aprendiendo del MPLAB.
Gracias
PD: Por las dudas copio el programa que estoy utilizando.
__CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF ; Configuración para el programador
LIST p=16F877A
INCLUDE <P16F877A.INC>
ORG 0x00 ;Inicio de programa
N EQU 0x00
cont1 EQU 0x20
cont2 EQU 0x21
BCF STATUS,RP0 ;Accede a banco 0
BCF STATUS,RP1
CLRF PORTA ;Limpia PORTA
BSF STATUS,RP0 ;Accede a banco 1
CLRF TRISA ;Configura todos las patitas de PORTA como salidas
BCF STATUS,RP0 ;Regresa a banco 0
Encled
BSF PORTA,0 ;La línea RA0 de PORTA toma el valor de 1, se enciende el LED
CALL Retardo ;Llamada a la rutina de retardo
BCF PORTA,0 ;La línea RA0 de PORTA toma el valor de 0, se apaga el LED
CALL Retardo ;Llamada a la rutina de retardo
GOTO Encled ;Va a la etiqueta Encled
Retardo ;Rutina de retardo
MOVLW N
MOVWF cont1
Rep1
MOVLW N
MOVWF cont2
Rep2
DECFSZ cont2,1
GOTO Rep2
DECFSZ cont1,1
GOTO Rep1
RETURN ;Retorno a la llamada de rutina de retardo.
END ;Fin de programa
-
cumu es daniloarg007!
No te preocupes, no es problema del MPLAB, lo que pasa es que el pic 16f877a por defecto tiene configurado el puerto A como salidas /entradas analogicas, si movieras tu programa a otro puerto funcionaria normal sin ningun error, o tambien puedes configurarlo como salidas /entradas digitales de la siguiente forma:
; te ubicas en el BANCO_1
BCF ADCON1,0
BSF ADCON1,1
BSF ADCON1,2
BCF ADCON1,3
Te recomiendo que leas el datasheet la parte del conversor analogico digital, para entrar mas en detalle.
Si buscas en foro puedes encontrar ejemplitos en asm, te van a ayudar bastante.
Me parece bien que empieces desde lo basico para despues intentar hacer funcionar el LCD.
-
.
Hola de nuevo. Me disculpo por la demora. Se me pasó por alto el esquema de conexión del LCD:
(http://img220.imageshack.us/img220/8894/conectwh1602.jpg) (http://img220.imageshack.us/i/conectwh1602.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
El potenciómetro está para regular el contraste del LCD. Si no ves nada en la pantalla al energizarlo, ajusta el potenciómetro.
Los pines 15 y 16 sirven para energizar la luz de fondo del LCD (backlight), que no es más que una especie de LED. No es necesario conectar estos pines si no se quiere la luz de fondo. En caso de requerirla, simplemente conectá el 16 a GND y el 15 a VDD a través de una resistencia de 10ohms (podés aumentar este valor si querés que brille menos).
De los dos archivos que subí el que se corresponde con esta conexión es LCD8BITS.INC. Como recién estás empezando, quizá tengas dudas sobre cómo usar el archivo, así que cuando tengas algo más de experiencia y quieras hacer andar el LCD, no dudes en preguntar por acá.
Saludos.
-
por casualidad de casualidades, yo tambien soy nuevo en este foro, pero tengo aproximadamente un año de programar en pic , y el ultimo programa que realice tiene una subrutina que controla una lcd de 16 columnas y 2 filas, por medio de un bus de datos de 4 pines, y al realizarlo por recomendacion de un amigo busque la hoja tecnica del controlador del modulo, en el cual se haya la informacion nescesaria para usar la lcd, la secuencias de inicializacion y diversos comandos de control del texto. Asi que te recomiendo que la descarges, ademas cuando programes un pic, primero conocelo, dale una leida a la hoja tecnica del pic (lo mas actualizada posible) porqu hai encontras ejemplos para poder configurar tu pic, el primer programa q hice para un pic lo hice en microcode de mecanique, el cual posee instrucciones sencillas para controlr d la lcd, pero ultimamante me he dedicado a estudiar las tecnicas de programcion del asm del mplab. pero puesdes encontrar mas informacion en la web.
-
.
Ese mismo display fue en el cual probé las rutinas que adjunto en este mensaje (una es para usar el LCD en modo 8 bits y la otra para 4). Están en ASM y de seguro funcionan. Por cualquier cosa que no se entienda, no tema en preguntar :smiley:
Saludos.
Estoy interesado en usar la rutina de 4 bits pero no se manejar el Cblock para definir lo que se necesita, como seria para el PIC 16f628a?. Darias un ejemplo basico para utiliza la rutina?
-
.
Me disculpo por la tardanza en la respuesta :mrgreen:
La directiva CBLOCK es una manera muy cómoda y fácil de declarar registros de la memoria RAM. Por ejemplo:
CBLOCK 0x20
REG1
REG2
CONT
ENDC
Es equivalente a:
REG1 EQU 0x20
REG2 EQU 0X21
CONT EQU 0X22
El número al lado de CBLOCK indica cuál es la dirección de inicio. Al registro con esa dirección se le asigna la primer etiqueta de la lista. La etiqueta siguiente es asignada al registro siguiente.
Si se omite el número que le sigue a CBLOCK, la dirección inicial se toma del último bloque declarado. Por ejemplo:
CBLOCK 0x20
REG1
REG2
CONT
ENDC
; Cualquier codigo...
CBLOCK
NUM
CONT2
ENDC
El primer bloque es igual al primer ejemplo. El segundo es equivalente a:
NUM EQU 0x23
CONT2 EQU 0X24
Si declarás tus variables con CBLOCK, al incluir el archivo con las rutinas, las variables necesarias se ubican inmediatamente después de las que declaraste.
Espero que se haya entendido.
Saludos.
-
Hola descarge tus rutinas de 4bits pero no se como se usan, estoy tratando de hace funcionar un LCD, logre hacerlo funiconar y que aparezca el cursor para cuando le doy que dibuje un caracter no lo dibuja. En el proteus si me anda. Sera porque es un LCD "fordata" FDCC1602G
que me parece que no es 100% compatible con hitachi. Cuando le doy la posicion del curor me la toma pero no escribe el caracter. AYUDA!!