Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

07/12/2009 #21


Respuesta: pic 16f877a y lcd
Buenas tardes desde Venezuela:
Estoy armando un sistema de ultrasonido para detectar presencia en un pasillo de 10 metros de largo por tres de ancho. Estoy interesado en conectarle una pantalla LCD para que me indique cuando se active, este próximo a apagar la luz, indique la fecha y hora... Ya he creado parte de la rutina, pero no tengo experiencia en con las Pantallas LCD conectadas al PIC16F877a (en este caso), por lo que me sería de gran ayuda cualquier comentario o diagrama. Muchas gracias de antemano.
28/04/2010 #22

Avatar de djota13

Respuesta: pic 16f877a y lcd
Buenas, la verdad no se si ya cerraron el tema (soy nuevo en esto)
pero tengo el mismo problema con la LCD, me muestra solo los cuadros negros el la segunda fila y queria saber si lo pudieron resolver.
ya probe el pic y esta bien programado

agradeceria la ayuda
28/06/2010 #23


Respuesta: pic 16f877a y lcd
Muy buenos Dias, me gustaria pedirles el favor si tienen el diagrama de conexiones electricas del pic (Proteus o jpg) con los diferentes elementos, ya compile el programa pero no he podido configurar las otras conexiones. Agradeceria la ayuda ya que soy nuevo en el mundo de la programacion
13/10/2010 #24


Respuesta: 2a. parte pa pakito
mayita dijo: Ver Mensaje
hola otra vez!!! en serio necesito ayuda, ya llevamos mucho haciendo librerías y subrutinas y solo necesitamos que diga HOLA MUNDO o cualquier cosa nada complicado... lo digo por que vi que hiciste uno de un termómetro y no tenemos suficientes materiales aquí para hacerlo.... por favor. Por ahí dime de donde eres y tu edad
hola mira yo tengo dice hola y después despliega el nombre te pongo la simulación y el programa cabe decir que la base es ensamblador pero lo hice en pic c, ojala te sirva saludos

si necesitas algo mas mándame un e-mail políticas@delforo.com

a en la simulación esta para un lcd de una línea y ahí viene el otro lcd son las mismas conexiones vale.


Como no cumplo las Políticas del Foro. Me editaron el mensaje.
Archivos Adjuntos
Tipo de Archivo: zip LCD FINAL.zip (38,1 KB (Kilobytes), 396 visitas)
05/12/2010 #25


hola necesito programar en picbasic una pantalla lcd 16x2 por el puerto a y lo he intentado y no me da resultado por el famoso puerto a4, adjunto el codigo de la configuracion de la pantalla y la foto del montaje, estare agradecido por la ayuda saludos

DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 5
define LCD_BITS 4
DEFINE LCD_LINES 2
define OSC 4

alldigital
TRISA=0 'LCD
TRISB=%01110000 'TECLADO

04/10/2011 #26

Avatar de lordaenema

Buenas. Soy de Venezuela y estoy realizando un proyecto bastante simple pero en cuando simulo en "pic simulator ide" se queda en un ciclo y no muestra nada en la lcd! El proyecto consiste en un contador de pulsaciones para que entiendan mejor: hay que llevar el conteo de los puntos marcados en un combate "una pelea" hay 4 jueces cada uno tiene 2 pulsadores uno para cada peleador. Para que el punto pueda ser contado 3 de los 4 jueces tienen que presionar los pulsadores para que el pic lo pueda contar como valido es allí donde lo va a mostrar por el lcd de 2x16 utilizo un 16f877a


pd: en cuanto a que 4 de los 4 jueces deben pulsar para que sea valido hay como un error ya que tomo referencia b`0111` hago una simple comparación pero si se dan cuenta a lo mejor los jueces pueden pulsar así b`1011` y eso en este programa lo tomo como no valido aquí les dejo el programa.
Archivos Adjuntos
Tipo de Archivo: txt contador.txt (6,7 KB (Kilobytes), 47 visitas)
12/05/2012 #27


Hola, tengo un mi termómetro hecho, pero necesito agregarle una alarma auditiva, para que cuando la temperatura sea mayor a 38 grados suene. Quisiera saber que le agrego a mi código?


Código:
processor 16f877
  include<p16f877.inc>

  ;Variable para el DELAY del ADC
val equ h'20'

  ;Variables para el DELAY del ENABLE LCD
val2 equ 0x30
val1 equ 0x31

  ;Variables para separar el resultado de ADC
  ; en valor BCD
Unidades equ 0x32     
Decenas equ 0x33      
Centenas equ 0x34   
Resto equ 0x35

  org 0h
  goto INICIO
  org 05h

INICIO:
      clrf PORTA        ;Limpia el puerto A
      clrf PORTB        ;Limpia el puerto B
      clrf PORTC        ;Limpia el puerto C    
      clrf PORTD        ;Limpia el puerto D
      bsf STATUS,RP0    
      bcf STATUS,RP1    ;Cambio al banco 1
      
      ;Configuración de puertos C-D para el LCD
      clrf TRISC        ;Configura PORTC como salida
      clrf TRISD        ;Configura PORTD como salida
      
      ;Configuración del puerto A para ADC
      movlw 00h         
      movwf ADCON1      ;Configura puerto A y E como analógicos
      movlw 3fh         
      movwf TRISA       ;Configura el puerto A como entrada
      movlw h'0'
      
      ;Configuración del puerto B para mostrar el resultado ADC
      movwf TRISB       ;Configura puerto B como salida
      bcf STATUS,RP0    ;Regresa al banco 0
      
      ;Inicio del programa
START
      call START_LCD   ;Inicializa LCD
      goto START_ADC   ;Comienza la lectura del Conv. A/D
      
      ;Inicia LCD
START_LCD:
      bcf PORTC,0      ; RS=0 MODO INSTRUCCION
      movlw 0x01       ; 0x01 limpia la pantalla en el LCD
      movwf PORTD
      call COMANDO     ; Se da de alta el comando
      movlw 0x0C       ; Selecciona la primera línea
      movwf PORTD
      call COMANDO     ; Se da de alta el comando
      movlw 0x3C       ; Se configura el cursor
      movwf PORTD
      call COMANDO     ; Se da de alta el comando
      bsf PORTC, 0     ; Rs=1 MODO DATO
      return
      
      ;Rutina para enviar un dato
ENVIA:
      bsf PORTC, 0    ; RS=1 MODO DATO
      call COMANDO    ; Se da de alta el comando
      return 
       
      ;Rutina para enviar comandos
COMANDO:
      bsf PORTC, 1    ; Pone la señal ENABLE en 1
      call DELAY2     ; Tiempo de espera
      call DELAY2
      bcf PORTC, 1    ; ENABLE=0    
      call DELAY2
      return     
      
      ;Rutina para limpar pantalla LCD  
ERASE_LCD
      bcf PORTC,0      ; RS=0 MODO INSTRUCCION
      movlw 0x01       ; 0x01 limpia la pantalla en el LCD
      movwf PORTD
      call COMANDO     ; Se da de alta el comando
      bsf PORTC, 0     ; Rs=1 MODO DATO
      return
      
      ;Configuración Convertidor A/D
START_ADC
      movlw b'11000001' ;Configuración ADCON0 
      movwf ADCON0      ;ADCS1=1 ADCS0=1 CHS2=0 CHS1=0 
                        ;CHS0=0 GO/DONE=0 - ADON=1

CICLO: bsf ADCON0,2      ;Conversión en progreso GO=1
       call DELAY1       ;Espera que termine la conversión
ESPERA btfsc ADCON0,2    ;Pregunta por DONE=0?(Terminó conversión)
       goto ESPERA       ;No, vuelve a preguntar
       movf ADRESH,0     ;Si
       movwf PORTB       ;Muestra el resultado en PORTB
       
       ;Rutina que muestra temperatura
PRINT_TEMP
       call ERASE_LCD    ;Limpia LCD
       movlw 'T'
       movwf PORTD
       call ENVIA
       movlw '='
       movwf PORTD
       call ENVIA

       call READ_TEMP    ;Llamada a rutina que obtine el 
                         ;valor de la temperatura a partir
                         ;del  resultado del Conv a/D

       movf Centenas,W   ;Imprime el dígito de las centenas
       movwf PORTD
       call ENVIA
       movf Decenas,W    ;Imprime el dígito de las decenas
       movwf PORTD
       call ENVIA
       movf Unidades,W   ;Imprime el dígito de las unidades
       movwf PORTD
       call ENVIA
       movlw ' '
       movwf PORTD
       call ENVIA
       movlw h'DF'       ;Imprime el simbolo "°"
       movwf PORTD
       call ENVIA 
       movlw 'C'
       movwf PORTD
       call ENVIA 

       goto CICLO        ;Repite el ciclo de lectura ADC

       ;Rutina que obtine el valor de la temperatura
       ;a partir del  resultado del Conv a/D
READ_TEMP:
       clrf Centenas
       clrf Decenas
       clrf Unidades
      
       movf ADRESH,W   
       addwf ADRESH,W     ;Dupilca el valor de ADRESH para 
       ;obtener un valor de temperatura real aprox
       movwf Resto        ;Guarda el valor de ADRESH en Resto  
        
       ;Comienza el proceso de otención de valores BCD 
       ;para Centenas, Decenas y unidades atraves de restas
       ;sucesivas.
CENTENAS1
       movlw d'100'      ;W=d'100'
       subwf Resto,W     ;Resto - d'100' (W)
       btfss STATUS,C    ;Resto menor que d'100'?
       goto DECENAS1     ;SI
       movwf Resto       ;NO, Salva el resto
       incf Centenas,1   ;Incrementa el contador de centenas BCD
       goto CENTENAS1    ;Realiza otra resta
DECENAS1
       movlw d'10'       ;W=d'10'
       subwf Resto,W     ;Resto - d'10' (W)
       btfss STATUS,C    ;Resto menor que d'10'?
       goto UNIDADES1    ;Si
       movwf Resto       ;No, Salva el resto
       incf Decenas,1    ;Incrementa el contador de centenas BCD
       goto DECENAS1     ;Realiza otra resta
UNIDADES1
       movf Resto,W      ;El resto son la Unidades BCD
       movwf Unidades
       ;clrf Resto
       
       ;Rutina que obtiene el equivalente en ASCII       
OBTEN_ASCII
       movlw h'30' 
       iorwf Unidades,f      
       iorwf Decenas,f
       iorwf Centenas,f      
       return

;Rutina que genera un Delay de 20 microSeg aprox.
;para el Conv. A/D
DELAY1:             
       movlw h'30'
       movwf val
Loop   decfsz val,1
       goto Loop
       return

;Subrutina de retardo para ENABLE_LCD 
DELAY2:            
       movlw 0xFF
       movwf val1 
Loop1:
       movlw 0xFF
       movwf val2    
Loop2:
       decfsz val2,1
       goto Loop2
       decfsz val1,1
       goto Loop1
       return
    end
12/05/2012 #28

Avatar de Somacruz

cacharrero dijo: Ver Mensaje
señores tengan un buen dia

tengo el siguiente problema con un display lcd y un pic 16f877a, solo aparecen cuadros en el display y en la linea de abajo,es un display 2 por 16.

q
Hola

cacharrero no se si ya lograste resolver tu problema te dejo el archivo para la lcd 16x2 con la libreria para manejarla en CCS que no es de mi autoria y la simulacion en proteus y el HEX para que lo grabes en el PIC para verficar su funcionamiento saludos y suerte
Archivos Adjuntos
Tipo de Archivo: rar LCD16X2_foros.rar (16,9 KB (Kilobytes), 137 visitas)
14/06/2012 #29


Mi pantalla LCD hace lo mismo que habeis dicho la mayoria, se pone toda la primerla Fila en Negro ! y ya he probado con muchos programas que habeis puesto aqui y nada... Mi Pic es 16F877.
14/06/2012 #30
Moderador

Avatar de D@rkbytes

Lnar92 dijo: Ver Mensaje
AyÚdenme plis,necesito poner la alarma auditiva cuando la temperatura sea mayor a 38° pero lo q he hecho no me ha servido
armajaleo dijo: Ver Mensaje
Mi pantalla LCD hace lo mismo que habeis dicho la mayoria, se pone toda la primerla Fila en Negro ! y ya he probado con muchos programas que habeis puesto aqui y nada... Mi Pic es 16F877.
A ambos les aconsejo que adjunten el código de su programa actual y sus conexiones.
Si tienen la simulación de sus proyectos es mejor. Y si no, suban las fotos de sus proyectos.
Con esos detalles es como se les puede ayudar mejor.

Un comentario:
A mi me paso que un LCD JHD 162A Azul, mostraba solo la primer línea con cuadros negros.
Igualmente probe con programas que tengo funcionando, y seguia con el problema.
Así que probe con otro LCD del mismo modelo, y funciono sin problemas.
En conclusión, el LCD paso a mejor vida.
Esto también pasa cuando no esta bien ajustado el pin de contraste (VEE)

Saludos.
29/08/2012 #31


Hola tengo el problema de los cuadritos que salen el la parte de abajo!
Mi programa si funciona en proteus, lo hice en ccs, y no se que sea.
¿Si me pueden ayudar?

Mi programa es el siguiente.
Código:
 #include <16F877A.H>
   #device adc=8
   #device ccs2
   #fuses XT, NOWDT, NOPROTECT, NOLVP
   #use delay(clock=4000000)
   
   #byte PORT_A=0X05
   #byte TRIS_A=0X85
   #define PIN_A1 40
   #define PIN_A2 41
   #byte PORT_D=0X07
   #byte TRIS_D=0X87
   #define PIN_D0 42
   #define PIN_D1 43
   
#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7

#define LCD_RS    PIN_C0
#define LCD_RW    PIN_C1
#define LCD_E     PIN_C2

   #INCLUDE <flex_lcd.c>
   
   int temp;   

   void main(void)
   {
      lcd_putc clif;
      delay_ms(1000);
      lcd_init();
      lcd_gotoxy(2,1);
      lcd_putc("    Temp:");
      delay_ms(2000);
      lcd_gotoxy(2,2);
      delay_ms(100);
      setup_adc(ADC_CLOCK_INTERNAL);
      setup_adc_ports(RA0_ANALOG);
      set_adc_channel(0);
      
      while(1)
      {
      delay_ms(70);
      temp=read_adc();//esta istrucion lee el puerto a0
      delay_ms(25);
      temp=(temp/2)-1;
      lcd_gotoxy(7,2);
      printf(lcd_putc,"%u",temp);
      
         if(PIN_A1 == 0 && PIN_A0 == 1)
         {
            output_bit (PIN_B1,0);
            output_bit (PIN_B0,1);
         }

         if(PIN_A1 == 1 && PIN_A0 == 0)
         {
            output_bit (PIN_B0,0);
            output_bit (PIN_B1,1);                                 
         }   
         
        }
      }
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.