Autor Tema: Ayuda Multiplexacion con 2 Displays en P16f1787  (Leído 350 veces)

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

Desconectado Gabrielbas

  • PIC10
  • *
  • Mensajes: 2
Ayuda Multiplexacion con 2 Displays en P16f1787
« en: 22 de Marzo de 2021, 22:25:04 »
Hola buenas, tengo una duda que se me presenta en una actividad de una clase, tengo que hacer un programa que use un teclado matricial que al presionar un boton muestre la informacion en dos displays de 7 segmentos, es decir, al presionar una
tecla debe mostrarse en el primer Display y a su vez activarse el Punto de este, indicando cual fue el último Display actualizado, al presionar otra tecla debe mostrarse la información en un segundo Displays así como su punto, en este caso debe apagar el punto
del display anterior. Al presionar otra tecla deba repetir los pasos anteriores. Agradeceria cualquier consejo o ayuda.. aqui adjunto mi codigo con un solo display:

Código: ASM
  1.  LIST p=16f1787
  2.  
  3. #INCLUDE "p16f1787.inc"
  4. AUX EQU 0x70
  5. ORG 0
  6. call Config_tec
  7. call Config_tec
  8. CICLO
  9. call Pres_tec
  10. movf WREG, W
  11. btfss STATUS, Z
  12. goto CICLO
  13. call Deco_tec
  14. movwf AUX
  15. incf AUX,F
  16. btfsc STATUS, Z
  17. goto CICLO
  18. call Deco_7seg
  19. BANKSEL PORTD
  20. movwf PORTD
  21. GOTO CICLO
  22.  
  23.  
  24. Config_tec
  25. BANKSEL TRISB
  26. movwf TRISB
  27. bcf OPTION_REG,7
  28. BANKSEL WPUB
  29. movlw 0xFF
  30. movwf WPUA
  31. BANKSEL ANSELB
  32. clrf ANSELB
  33. clrfANSELB
  34. return
  35.  
  36. Config_7seg
  37. BANKSEL TRISD
  38. movlw b'10000000'
  39. movwf TRISF
  40. BANKSEL ANSELD
  41. clrf ANSELD
  42. return
  43.  
  44. Pres_tec
  45. BANKSEL PORTB
  46. clrf PORTB
  47. btfss PORTB,RB7
  48. retlw 0x0
  49. btfss PORTB,RB6
  50. retlw 0x0
  51. btfss PORTB,RB5
  52. retlw 0x0
  53. btfss PORTB,RB4
  54. retlw 0x0
  55. retlw 0xFF
  56.  
  57. Deco_tec
  58. BANKSEL PORTB
  59. movlw b'11110111'
  60. movwf PORTB
  61. btfss PORTB,RB7
  62. retlw 0x1
  63. btfss PORTB,RB6
  64. retlw 0x4
  65. btfss PORTB,RB5
  66. retlw 0x7
  67. btfss PORTB,RB4
  68. retlw 0xA
  69. movlw b'11111011'
  70. movwf PORTB
  71. btfss PORTB,RB7
  72. retlw 0x2
  73. btfss PORTB,RB6
  74. retlw 0x5
  75. btfss PORTB,RB5
  76. retlw 0x8
  77. btfss PORTB,RB4
  78. retlw 0x0
  79. movlw b'11111101'
  80. movwf PORTB
  81. btfss PORTB,RB7
  82. retlw 0x3
  83. btfss PORTB,RB6
  84. retlw 0x6
  85. btfss PORTB,RB5
  86. retlw 0x9
  87. btfss PORTB,RB4
  88. retlw 0xB
  89. retlw 0xFF
  90.  
  91.  
  92.  
  93. Deco_7seg
  94. brw
  95. retlw 0x3F
  96. retlw 0x06
  97. retlw 0x5B
  98. retlw 0x4F
  99. retlw 0x66
  100. retlw 0x6D
  101. retlw 0x7C
  102. retlw 0x07
  103. retlw 0x7F
  104. retlw 0x67
  105. retlw 0x63
  106. retlw 0x5C
  107.  
  108. END
  109.  
  110.  
  111.  
« Última modificación: 22 de Marzo de 2021, 22:47:21 por Gabrielbas »

Desconectado Milkiell

  • PIC10
  • *
  • Mensajes: 2
Re:Ayuda Multiplexacion con 2 Displays en P16f1787
« Respuesta #1 en: 23 de Marzo de 2021, 20:17:45 »
No tengo mucha idea de esto, pero dejo mi mensaje para no perder el hilo y ver la respuesta de los demás

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 314
Re:Ayuda Multiplexacion con 2 Displays en P16f1787
« Respuesta #2 en: 23 de Marzo de 2021, 23:15:38 »

Creo que te puede ayudar...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8096
Re:Ayuda Multiplexacion con 2 Displays en P16f1787
« Respuesta #3 en: 24 de Marzo de 2021, 07:01:36 »
En que puertos estas conectando los displays? o necesitas multiplexarlo?
En si la parte del cambio la podes hacer de la siguiente forma:

Vas a necesitar un registro para mantener los datos de ambos displays SIN el punto.
Y un registro mas el cual nos va a indicar a cual display le toca. Podemos usar el bit 0 de este registro

- Lees el teclado como SIEMPRE
Al momento de mostrar:
- Pregunto por el registro que me indica cual le toca BTFFS AquienToca,0
-- Si esta en 0 supongamos que el primero hago un GOTO al primero
-- En el primero, busco el numero a escribir en el display en la tabla, y lo muestro
-- Le activo el punto con un BSF del display 1, y desactivo el punto del segundo con un BCF

-- Si estaba en 1 el bit 0 del registro AquienToca,
-- En el segundo, busco el numero a escribir en el display en la tabla, y lo muestro
-- Le activo el punto con un BSF del display 2, y desactivo el punto del display 1 con un BCF


Y eso seria TODO..

Si es necesario multiplexar, mejor encararlo de otra forma.
Y lo ideal seria usar interrupciones con el Timer para que la parte de "mostrar" se encargue solo el Timer. Y en tu programa solo dedicas 2 registros mas para guardar lo que queres mostrar. Que luego la interrupcion sola tomaria los valores y los mostraria.

Es decir necesitas hacer lo mismo que antes, pero en ves de escribir al puerto directo, lo haces en un registro. Luego la interrupcion manejaria los tiempos y la carga a los puertos.

Desconectado Gabrielbas

  • PIC10
  • *
  • Mensajes: 2
Re:Ayuda Multiplexacion con 2 Displays en P16f1787
« Respuesta #4 en: 26 de Marzo de 2021, 13:24:28 »
Muchas gracias, ya pude resolver el ejercicio, me ayudaron bastante!  ((:-))