Autor Tema: Ayuda con Lcd 'hola mundo'  (Leído 7938 veces)

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

Desconectado Maximo

  • PIC10
  • *
  • Mensajes: 6
Ayuda con Lcd 'hola mundo'
« en: 05 de Julio de 2007, 19:25:19 »
hola alguien tiene un codigo en asm para un "hola mundo" con un lcd de 2x16 con un controlador hd4877 o algo asi es el mas comun.
como veran no entiendo mucho esto de los lcds. he intentado sin exito ya por 2 dias O.o y lo unico que puedo hacer con el display es prender el back light que no tiene gracia porque lo conecto a corriente y listo XD.

tengo un PIC 16f877a y un lcd generico el comun y corriente de 2 lienas
tengo el pic funcionando con un osc de 20Mhz (el unico osc que tengo)

probe un programa para un 16f628a en el pic simulator y funcionaba para la opcion del simulador LCD de 4 bits low (que no tengo idea que es) pero no funcaba ni con 8 ni con 4 bits high

 la cosa es que cuando lo queme a mi 16f628a no paso nada(aun cuando en el sumilador funkaba).

si alguien tiene un codigo con el pic 16f877a se lo agradecere y mucho mas si esta en ASM pues ahsta ahora por alguna razon no he tenido exito compilando C en mi pc parece ke no le gusta o algo asi pero no compila nada que este en C :(.

Desconectado picNIC

  • PIC16
  • ***
  • Mensajes: 140
Re: Ayuda con Lcd 'hola mundo'
« Respuesta #1 en: 06 de Julio de 2007, 00:39:56 »
fijate aca http://www.x-robotics.com/rutinas.htm#LCD y aca hay una guia de como manejarlos   http://www.pablin.com.ar/electron/info/lcd/index.htm  :-/

para mas informacion escribi en BUSCAR "lcd" :D

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda con Lcd 'hola mundo'
« Respuesta #2 en: 06 de Julio de 2007, 09:49:00 »
Hola Maximo, acá te dejo una rutina para hacer uso del display LCD con 4 bits y en 20MHz, es muy básica pero seguro te guiará para realizar lo que tú deseas:

Código: ASM
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;                       Comando de display LCD por medio de 4 bits a 20 MHz
  4. ;
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6.  
  7.         LIST            P=16F877A
  8.         INCLUDE         <P16F877A.INC>
  9.         ERRORLEVEL      -302
  10.  
  11.         __CONFIG        _CP_OFF&_DEBUG_OFF&_WRT_OFF&_CPD_OFF&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
  12.  
  13. ;................................................................................................
  14.  
  15. #DEFINE         LCD_RS          PORTB,0 ;Configuración de pines a usar con el LCD
  16. #DEFINE         LCD_E           PORTB,1
  17. #DEFINE         LCD_D4          PORTB,2
  18. #DEFINE         LCD_D5          PORTB,3
  19. #DEFINE         LCD_D6          PORTB,4
  20. #DEFINE         LCD_D7          PORTB,5
  21.  
  22. LCD_TEMP_1      EQU             .32
  23. LCD_CONTA_1     EQU             .33
  24. LCD_CONTA_2     EQU             .34
  25.  
  26. ;................................................................................................
  27.         org     .0
  28.         bcf     STATUS,RP0
  29.         bcf     STATUS,RP1
  30.         goto    INICIO
  31.  
  32.         org     .4
  33.         bcf     INTCON,GIE
  34.         retfie
  35.  
  36. ;................................................................................................
  37. RUTINA_15ms                     ;RUTINA DE DEMORA DE 15ms
  38.         movlw   .75
  39.         movwf   LCD_CONTA_2
  40.         goto    QWE1
  41. RUTINA_1ms                      ;RUTINA DE DEMORA DE 1ms
  42.         movlw   .5
  43.         movwf   LCD_CONTA_2
  44. QWE1
  45.         movlw   .249
  46.         movwf   LCD_CONTA_1
  47. QWE2
  48.         nop
  49.         decfsz  LCD_CONTA_1,F
  50.         goto    QWE2
  51.         decfsz  LCD_CONTA_2,F
  52.         goto    QWE1
  53.         return
  54.  
  55. ;................................................................................................
  56. LCD_INICIALIZAR
  57.         bcf     LCD_E
  58.         bcf     LCD_RS
  59.         call    RUTINA_15ms     ;demora para que el display se resetee correctamente
  60.         movlw   B'00110010'     ;Setea 4 BITS
  61.         call    LCD_IN
  62.         movlw   B'00101000'     ;Setea 2 lineas, matris de 5x7
  63.         call    LCD_IN
  64.         movlw   B'00000110'     ;Activa el display, desactiva el cursor y desactiva el destello del cursor
  65.         call    LCD_INST
  66.         movlw   B'00001100'
  67.         call    LCD_INST
  68.         movlw   B'00000001'     ;BORRA DISPLAY
  69.         call    LCD_INST
  70.         return
  71.  
  72. ;.....................
  73. LCD_IN
  74.         movwf   LCD_TEMP_1
  75.         call    SACAR
  76.         bsf     LCD_E
  77.         call    RUTINA_1ms
  78.         call    RUTINA_1ms
  79.         call    RUTINA_1ms
  80.         call    RUTINA_1ms
  81.         bcf     LCD_E
  82.         swapf   LCD_TEMP_1,F
  83.         call    SACAR
  84.         bsf     LCD_E
  85.         call    RUTINA_1ms
  86.         call    RUTINA_1ms
  87.         call    RUTINA_1ms
  88.         call    RUTINA_1ms
  89.         bcf     LCD_E
  90.         return
  91.  
  92. ;.....................
  93. LCD_INST
  94.         movwf   LCD_TEMP_1
  95.         call    SACAR
  96.         bsf     LCD_E
  97.         call    RUTINA_1ms
  98.         call    RUTINA_1ms
  99.         bcf     LCD_E
  100.         swapf   LCD_TEMP_1,F
  101.         call    SACAR
  102.         bsf     LCD_E
  103.         call    RUTINA_1ms
  104.         call    RUTINA_1ms
  105.         bcf     LCD_E
  106.         return
  107.  
  108. ;.....................
  109. LCD_DATO
  110.         movwf   LCD_TEMP_1
  111.         call    SACAR
  112.         bsf     LCD_RS
  113.         bsf     LCD_E
  114.         movlw   .133
  115.         movwf   LCD_CONTA_1
  116.         decfsz  LCD_CONTA_1,F
  117.         goto    $-1
  118.         bcf     LCD_E
  119.         bcf     LCD_RS
  120.         swapf   LCD_TEMP_1,F
  121.         call    SACAR
  122.         bsf     LCD_RS
  123.         bsf     LCD_E
  124.         movlw   .133
  125.         movwf   LCD_CONTA_1
  126.         decfsz  LCD_CONTA_1,F
  127.         goto    $-1
  128.         bcf     LCD_E
  129.         bcf     LCD_RS
  130.         return
  131.  
  132. ;.....................
  133. SACAR
  134.         bcf     LCD_D4
  135.         btfsc   LCD_TEMP_1,4
  136.         bsf     LCD_D4
  137.         bcf     LCD_D5
  138.         btfsc   LCD_TEMP_1,5
  139.         bsf     LCD_D5
  140.         bcf     LCD_D6
  141.         btfsc   LCD_TEMP_1,6
  142.         bsf     LCD_D6
  143.         bcf     LCD_D7
  144.         btfsc   LCD_TEMP_1,7
  145.         bsf     LCD_D7
  146.         return
  147.  
  148. ;................................................................................................
  149.  
  150. INICIO
  151.         clrf    PORTA
  152.         clrf    PORTB
  153.         clrf    PORTC
  154.         clrf    PORTD
  155.         clrf    PORTE
  156.  
  157.         bsf     STATUS,RP0
  158.         movlw   B'11111111'     ;Configuro los puertos
  159.         movwf   TRISA
  160.         movlw   B'11000000'
  161.         movwf   TRISB
  162.         movlw   B'11111111'
  163.         movwf   TRISC
  164.         movlw   B'11111111'
  165.         movwf   TRISD
  166.         movlw   B'11111111'
  167.         movwf   TRISE
  168.         bcf     STATUS,RP0
  169.  
  170.         call    LCD_INICIALIZAR
  171.  
  172.         movlw   H'80'
  173.         call    LCD_INST
  174.         movlw   A' '
  175.         call    LCD_DATO
  176.         movlw   A' '
  177.         call    LCD_DATO
  178.         movlw   A' '
  179.         call    LCD_DATO
  180.         movlw   A'H'
  181.         call    LCD_DATO
  182.         movlw   A'o'
  183.         call    LCD_DATO
  184.         movlw   A'l'
  185.         call    LCD_DATO
  186.         movlw   A'a'
  187.         call    LCD_DATO
  188.         movlw   A' '
  189.         call    LCD_DATO
  190.         movlw   A'M'
  191.         call    LCD_DATO
  192.         movlw   A'u'
  193.         call    LCD_DATO
  194.         movlw   A'n'
  195.         call    LCD_DATO
  196.         movlw   A'd'
  197.         call    LCD_DATO
  198.         movlw   A'o'
  199.         call    LCD_DATO
  200.         movlw   A' '
  201.         call    LCD_DATO
  202.         movlw   A' '
  203.         call    LCD_DATO
  204.         movlw   A' '
  205.         call    LCD_DATO
  206.  
  207.         movlw   H'C0'
  208.         call    LCD_INST
  209.         movlw   A' '
  210.         call    LCD_DATO
  211.         movlw   A' '
  212.         call    LCD_DATO
  213.         movlw   A' '
  214.         call    LCD_DATO
  215.         movlw   A' '
  216.         call    LCD_DATO
  217.         movlw   A'C'
  218.         call    LCD_DATO
  219.         movlw   A'h'
  220.         call    LCD_DATO
  221.         movlw   A'a'
  222.         call    LCD_DATO
  223.         movlw   A'l'
  224.         call    LCD_DATO
  225.         movlw   A'y'
  226.         call    LCD_DATO
  227.         movlw   A'2'
  228.         call    LCD_DATO
  229.         movlw   A'9'
  230.         call    LCD_DATO
  231.         movlw   A' '
  232.         call    LCD_DATO
  233.         movlw   A' '
  234.         call    LCD_DATO
  235.         movlw   A' '
  236.         call    LCD_DATO
  237.         movlw   A' '
  238.         call    LCD_DATO
  239.         movlw   A' '
  240.         call    LCD_DATO
  241. FGH
  242.         nop                     ; Una ves escrito en la pantalla me quedo en este loop
  243.         goto    FGH
  244.  
  245. ;................................................................................................
  246.  
  247.         END

En el adjunto te dejo el esquemático del conexionado entre el PIC y el display

Espero te sea de ayuda.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda con Lcd 'hola mundo'
« Respuesta #3 en: 06 de Julio de 2007, 11:06:33 »
Otra rutina, esta también es para 20MHz, pero hace uso de los 8 bits del display LCD:

Código: ASM
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;                       Comando de display LCD por medio de 8 bits a 20 MHz
  4. ;
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6.  
  7.         LIST            P=16F877A
  8.         INCLUDE         <P16F877A.INC>
  9.         ERRORLEVEL      -302
  10.         __CONFIG        _CP_OFF&_DEBUG_OFF&_WRT_OFF&_CPD_OFF&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
  11.  
  12. ;................................................................................................
  13.  
  14. #DEFINE         LCD_RS          PORTA,0 ;Configuración de pines a usar con el LCD
  15. #DEFINE         LCD_E           PORTA,1
  16. #DEFINE         LCD_SALIDA      PORTB
  17.  
  18. LCD_TEMP_1      EQU             .32
  19. LCD_CONTA_1     EQU             .33
  20. LCD_CONTA_2     EQU             .34
  21.  
  22. ;................................................................................................
  23.         org     .0
  24.         bcf     STATUS,RP0
  25.         bcf     STATUS,RP1
  26.         goto    INICIO
  27.  
  28.         org     .4
  29.         retfie
  30.  
  31. ;................................................................................................
  32. RUTINA_15ms                     ;RUTINA DE DEMORA DE 15ms
  33.         movlw   .75
  34.         movwf   LCD_CONTA_2
  35.         goto    QWE1
  36. RUTINA_1ms                      ;RUTINA DE DEMORA DE 1ms
  37.         movlw   .5
  38.         movwf   LCD_CONTA_2
  39. QWE1
  40.         movlw   .249
  41.         movwf   LCD_CONTA_1
  42. QWE2
  43.         nop
  44.         decfsz  LCD_CONTA_1,F
  45.         goto    QWE2
  46.         decfsz  LCD_CONTA_2,F
  47.         goto    QWE1
  48.         return
  49.  
  50. ;................................................................................................
  51. LCD_INICIALIZAR
  52.         bcf     LCD_E
  53.         bcf     LCD_RS
  54.         call    RUTINA_15ms     ;demora para que el display se resetee correctamente
  55.         movlw   B'00110000'     ;Setea 8 BITS
  56.         call    LCD_IN
  57.         movlw   B'00111000'     ;Setea 2 lineas, matris de 5x7
  58.         call    LCD_IN
  59.         movlw   B'00000110'     ;Activa el display, desactiva el cursor y desactiva el destello del cursor
  60.         call    LCD_INST
  61.         movlw   B'00001100'
  62.         call    LCD_INST
  63.         movlw   B'00000001'     ;BORRA DISPLAY
  64.         call    LCD_INST
  65.         return
  66.  
  67. ;.....................
  68. LCD_IN
  69.         movwf   LCD_SALIDA
  70.         bsf     LCD_E
  71.         call    RUTINA_1ms
  72.         call    RUTINA_1ms
  73.         call    RUTINA_1ms
  74.         call    RUTINA_1ms
  75.         bcf     LCD_E
  76.         return
  77.  
  78. ;.....................
  79. LCD_INST
  80.         movwf   LCD_SALIDA
  81.         bsf     LCD_E
  82.         call    RUTINA_1ms
  83.         call    RUTINA_1ms
  84.         bcf     LCD_E
  85.         return
  86.  
  87. ;.....................
  88. LCD_DATO
  89.         movwf   LCD_SALIDA
  90.         bsf     LCD_RS
  91.         bsf     LCD_E
  92.         movlw   .20
  93.         movwf   LCD_CONTA_1
  94.         decfsz  LCD_CONTA_1,F
  95.         goto    $-1
  96.         bcf     LCD_E
  97.         bcf     LCD_RS
  98.         return
  99.  
  100. ;................................................................................................
  101. INICIO
  102.         clrf    PORTA
  103.         clrf    PORTB
  104.         clrf    PORTC
  105.         clrf    PORTD
  106.         clrf    PORTE
  107.  
  108.         bsf     STATUS,RP0
  109.         movlw   B'11111111'     ;Configuro los puertos
  110.         movwf   TRISA
  111.         movlw   B'11000000'
  112.         movwf   TRISB
  113.         movlw   B'11111111'
  114.         movwf   TRISC
  115.         movlw   B'11111111'
  116.         movwf   TRISD
  117.         movlw   B'11111111'
  118.         movwf   TRISE
  119.         bcf     STATUS,RP0
  120.  
  121.         call    LCD_INICIALIZAR
  122.  
  123.         movlw   H'80'
  124.         call    LCD_INST
  125.         movlw   A' '
  126.         call    LCD_DATO
  127.         movlw   A' '
  128.         call    LCD_DATO
  129.         movlw   A' '
  130.         call    LCD_DATO
  131.         movlw   A'H'
  132.         call    LCD_DATO
  133.         movlw   A'o'
  134.         call    LCD_DATO
  135.         movlw   A'l'
  136.         call    LCD_DATO
  137.         movlw   A'a'
  138.         call    LCD_DATO
  139.         movlw   A' '
  140.         call    LCD_DATO
  141.         movlw   A'M'
  142.         call    LCD_DATO
  143.         movlw   A'u'
  144.         call    LCD_DATO
  145.         movlw   A'n'
  146.         call    LCD_DATO
  147.         movlw   A'd'
  148.         call    LCD_DATO
  149.         movlw   A'o'
  150.         call    LCD_DATO
  151.         movlw   A' '
  152.         call    LCD_DATO
  153.         movlw   A' '
  154.         call    LCD_DATO
  155.         movlw   A' '
  156.         call    LCD_DATO
  157.  
  158.         movlw   H'C0'
  159.         call    LCD_INST
  160.         movlw   A' '
  161.         call    LCD_DATO
  162.         movlw   A' '
  163.         call    LCD_DATO
  164.         movlw   A' '
  165.         call    LCD_DATO
  166.         movlw   A' '
  167.         call    LCD_DATO
  168.         movlw   A'C'
  169.         call    LCD_DATO
  170.         movlw   A'h'
  171.         call    LCD_DATO
  172.         movlw   A'a'
  173.         call    LCD_DATO
  174.         movlw   A'l'
  175.         call    LCD_DATO
  176.         movlw   A'y'
  177.         call    LCD_DATO
  178.         movlw   A'2'
  179.         call    LCD_DATO
  180.         movlw   A'9'
  181.         call    LCD_DATO
  182.         movlw   A' '
  183.         call    LCD_DATO
  184.         movlw   A' '
  185.         call    LCD_DATO
  186.         movlw   A' '
  187.         call    LCD_DATO
  188.         movlw   A' '
  189.         call    LCD_DATO
  190.         movlw   A' '
  191.         call    LCD_DATO
  192. FGH
  193.         nop                     ; Una ves escrito en la pantalla me quedo en este loop
  194.         goto    FGH
  195.  
  196. ;................................................................................................
  197.  
  198.         END

Nuevamente en el adjunto te dejo el esquema del conexionado del LDC y el PIC.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado kamisama

  • PIC16
  • ***
  • Mensajes: 151
Re: Ayuda con Lcd 'hola mundo'
« Respuesta #4 en: 29 de Julio de 2007, 14:19:35 »
Hola, muy muy directo y bueno el ejemplo...
Solo como siempre tengo problemas para comprender el porque del alias TRISB o TRISA.
El Mpasm siempre me tira el mensaje de advertencia aun cuando estoy en el banco correcto, y si quiero usar 05 en lugar de 85 la advertencia desaparece pero el codigo no funciona, aun estando en el banco correcto...

Que es lo que aun no entiendo...???? ya vengo peleando con estas cosas hace rato!!!!

Saludos

PD: Porque PBP consume tanta memoria de programa??? no hay uno mejor...?

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Ayuda con Lcd 'hola mundo'
« Respuesta #5 en: 30 de Julio de 2007, 16:07:28 »
Hola kamisama, lee este link que puede llegar a disipar tus dudas.

http://www.todopic.com.ar/foros/index.php?topic=18236.msg125608#msg125608

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Ayuda con Lcd 'hola mundo'
« Respuesta #6 en: 30 de Julio de 2007, 21:31:53 »
eso sucede cuando cambias mucho de bancos para chequear los registros.
bancos0 bancos1,bancos2 etc.

pero eso no es problema solo te advierte que si estes posecionado en el banco donde se encuentra el registro consultado.

bsf status,5
movlw 00
movwf  05 ;porta
movlw h'ff'
movwf  06 ;portb

tambien se puedes esctribir asi.

bsf status,5
movlw 00
movwf  trisa
movlw h'ff'
movwf  trisb

saludos



saludos

Desconectado mestanza

  • PIC10
  • *
  • Mensajes: 22
Re: Ayuda con Lcd 'hola mundo'
« Respuesta #7 en: 21 de Febrero de 2013, 05:07:50 »
Alguien por casualidad me podria ayudar con este codigo pero para el pic16f887 en assembler por favor, gracias!


 

anything