Autor Tema: Despliegue persistente en Displays multiplexados  (Leído 2615 veces)

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

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Despliegue persistente en Displays multiplexados
« en: 25 de Noviembre de 2006, 18:21:37 »
 :? por enesima vez aqui molestandolos y pidiendo de su ayuda....

Sucede que quiero darles por lo menos un uso a los senores de temperatura que tengo y se me metio a la cabeza el hacer un Termo casero con el TCN75 un 16f84a o un 16f88 y 2 displays. Todo lo quiero hacer smd excepto los displays. Bueno ese no es el caso.

El punto es que a la hora de multiplexar los displays se desaparece el numero de ambos es decir no logro ver el numero de forma continua.

aqui pongo el codigo:

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : TERMODYSP.BAS                                     *
  3. '*  Author  : Max E. Reyes Vera Juárez                          *
  4. '*  Notice  : Copyright (c) 2006 Protegido por leyes de Autor   *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 24/11/2006                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   : Para Displays de Anodo Comun, si se desea usar    *
  9. '*          : Displays de catodo comun sera necesario invertir  *
  10. '*          : los 1's por 0's en las constantes y los LOW's por *
  11. '*          : HIGH's dentro de los SELECT CASE                  *
  12. '*          :                                                   *
  13. '*          : Se usa RC_OSC ya que es un diseño SMD y no se     *
  14. '*          : usan Decodificadores para reducir el Tamaño       *
  15. '                                                               *
  16. '                                                               *
  17. '                   A                                           *
  18. '                  1111                                         *
  19. '                 1    1                                        *
  20. '               F 1    1 B                                      *
  21. '                 1  G 1                                        *
  22. '                  1111      DISPOSICION DEL DISPLAY            *
  23. '                 1    1                                        *
  24. '               E 1    1 C                                      *
  25. '                 1    1                                        *
  26. '                  1111                                         *
  27. '                   D                                           *
  28. '                                                               *                                                               *
  29. 'A --> PORTB.0                                                  *
  30. 'B --> PORTB.1                                                  *
  31. 'C --> PORTB.2                                                  *
  32. 'D --> PORTB.3                                                  *
  33. 'E --> PORTB.4                                                  *
  34. 'F --> PORTB.5                                                  *
  35. 'G --> PORTB.6                                                  *
  36. '****************************************************************
  37. @ DEVICE XT_OSC, WDT_OFF, PROTECT_OFF
  38.  
  39. 'CONSTANTES PARA VER EL NUMERO EN EL DISPLAY
  40.  
  41.                  'Catodo comun   Anodo comun
  42.  
  43. _0  CON 64       '%0111111        %1000000
  44. _1  CON 121      '%0000110        %1111001
  45. _2  CON 36       '%1011011        %0100100
  46. _3  CON 48       '%1001111        %0110000
  47. _4  CON 25       '%1100110        %0011001
  48. _5  CON 18       '%1101101        %0010010
  49. _6  CON 2        '%1111101        %0000010
  50. _7  CON 120      '%0000111        %1111000
  51. _8  CON 0        '%1111111        %0000000
  52. _9  CON 16       '%1101111        %0010000
  53.  
  54. TEMP   var word
  55. DECENA VAR BYTE                 ' variables pra mostrar
  56. UNIDAD VAR BYTE
  57.  
  58. LSB   var TEMP.BYTE0            ' Variable para medir la temperatura
  59. MSB   VAR TEMP.BYTE1
  60. SDA   VAR PORTA.0               'BUS I2C
  61. SCL   VAR PORTA.1
  62. DYS1  VAR PORTA.2               'PINES PARA MULTIPLEXAR
  63. DYS2  VAR PORTA.3
  64. LED   VAR PORTB.7
  65.  
  66. TRISA.4 = 1
  67. TRISB   = 0
  68.  
  69.  HIGH LED
  70.  I2CWRITE SDA,SCL,$90,[00]  ' CONFIGURACION DEL TCN75 APUNTANDO AL REGISTRO DE TEMPERATURA
  71.  PAUSE 1000
  72.  LOW  LED
  73.  
  74.  
  75. GO:
  76.  IF PORTA.4=1 THEN
  77.   GOSUB LEE_Y_MUESTRA
  78.  ENDIF
  79. GOTO GO
  80.  
  81.  
  82. LEE_Y_MUESTRA:
  83.    
  84.  I2CREAD SDA,SCL,$91,[TEMP] ' LEYENDO LA TEMPERATURA AMBIENTE
  85.  
  86.  decena = msb dig 1                                
  87.  select case decena
  88.   case 0
  89.    low dys2
  90.    high DYS1
  91.    PORTB = _0
  92.   case 1
  93.    low dys2
  94.    high DYS1
  95.    PORTB = _1
  96.   case 2
  97.    low dys2
  98.    high DYS1
  99.    PORTB = _2
  100.   case 3
  101.    low dys2
  102.    high DYS1
  103.    PORTB = _3
  104.   case 4
  105.    low dys2
  106.    high DYS1
  107.    PORTB = _4
  108.   case 5
  109.    low dys2
  110.    high DYS1
  111.    PORTB = _5
  112.   case 6
  113.    low dys2
  114.    high DYS1
  115.    PORTB = _6
  116.   case 7
  117.    low dys2
  118.    high DYS1
  119.    PORTB = _7
  120.   case 8
  121.    low dys2
  122.    high DYS1
  123.    PORTB = _8
  124.   case 9
  125.    low dys2
  126.    high DYS1
  127.    PORTB = _9
  128.  END SELECT
  129.  
  130.  PAUSE 5
  131.  
  132.  UNIDAD = MSB DIG 0
  133.  select case UNIDAD
  134.   case 0
  135.    low dys1
  136.    high DYS2
  137.    PORTB = _0
  138.   case 1
  139.    low dys1
  140.    high DYS2
  141.    PORTB = _1
  142.   case 2
  143.    low dys1
  144.    high DYS2
  145.    PORTB = _2
  146.   case 3
  147.    low dys1
  148.    high DYS2
  149.    PORTB = _3
  150.   case 4
  151.    low dys1
  152.    high DYS2
  153.    PORTB = _4
  154.   case 5
  155.    low dys1
  156.    high DYS2
  157.    PORTB = _5
  158.   case 6
  159.    low dys1
  160.    high DYS2
  161.    PORTB = _6
  162.   case 7
  163.    low dys1
  164.    high DYS2
  165.    PORTB = _7
  166.   case 8
  167.    low dys1
  168.    high DYS2
  169.    PORTB = _8
  170.   case 9
  171.    low dys1
  172.    high DYS2
  173.    PORTB = _9
  174.  END SELECT
  175.  
  176.  PAUSE 5
  177. RETURN
  178. END

Lo mas seguro es que el error este en estas partes:

Código: [Seleccionar]
   low dysX
   high DYSX
   PORTB = X

Pero probe comentando todo y poniendo solo:
Código: [Seleccionar]
   low dys1
   high DYS2
   PORTB = _9
   pause 10
   low dys2
   high dys1
   PORTB= _5
   pause 10

Y en los displays se nota perfectamente el numero 95, entonces veo que el problema se extiende mas alla de multiplexar los displays y se une el tiempo de cada select case. Entonces aqui es donde entran mis dudas, ¿como puedo hacer que no se borren los digitos de los displays?

Perdonen tanto post de preguntas prometo colaborar mas y ser menos pregunton!

Saludos y Gracias

 
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Despliegue persistente en Displays multiplexados
« Respuesta #1 en: 25 de Noviembre de 2006, 23:30:55 »
Bueno casi me queda salvo por un error.

Lo que hace el prog es: inicializa el TCN75 salta a leer la temperatura una vez sensada regresa y despliega la temperatura, cada 255 ciclos vuelve a sensar la temperatura y regresa a mostrarla y asi hasta que se acabe la pila o me canse de verlo.

Pero hay un error esta linea serout2 porta.4,84,["temp: ", dec x, 13] que lo que hace es corroborar via serial el valor sensado. Cuando lo conecto a mi modulo serie Pues todo funciona muy bien. Pero si quito esa linea o desconecto el modulo serie, la temperatura sensada ya no es constante le empieza a errar hasta por 10° o sensa de manera loca.

Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : TERMODYSP.BAS                                     *
  3. '*  Author  : Max E. Reyes Vera Juárez                          *
  4. '*  Notice  : Copyright (c) 2006 Protegido por leyes de Autor   *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 24/11/2006                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   : Para Displays de Anodo Comun, si se desea usar    *
  9. '*          : Displays de catodo comun sera necesario invertir  *
  10. '*          : los 1's por 0's en las constantes y los LOW's por *
  11. '*          : HIGH's dentro de los SELECT CASE                  *
  12. '*          :                                                   *
  13. '*          : Se usa RC_OSC ya que es un diseño SMD y no se     *
  14. '*          : usan Decodificadores para reducir el Tamaño       *
  15. '                                                               *
  16. '                                                               *
  17. '                   A                                           *
  18. '                  1111                                         *
  19. '                 1    1                                        *
  20. '               F 1    1 B                                      *
  21. '                 1  G 1                                        *
  22. '                  1111      DISPOSICION DEL DISPLAY            *
  23. '                 1    1                                        *
  24. '               E 1    1 C                                      *
  25. '                 1    1                                        *
  26. '                  1111                                         *
  27. '                   D                                           *
  28. '                                                               *                                                               *
  29. 'A --> PORTB.0                                                  *
  30. 'B --> PORTB.1                                                  *
  31. 'C --> PORTB.2                                                  *
  32. 'D --> PORTB.3                                                  *
  33. 'E --> PORTB.4                                                  *
  34. 'F --> PORTB.5                                                  *
  35. 'G --> PORTB.6                                                  *
  36. '****************************************************************
  37. @ DEVICE XT_OSC, WDT_OFF, PROTECT_OFF
  38. include "modedefs.bas"
  39. 'CONSTANTES PARA VER EL NUMERO EN EL DISPLAY
  40.  
  41.                  'Catodo comun   Anodo comun
  42.  
  43. _0  CON 64       '%0111111        %1000000
  44. _1  CON 121      '%0000110        %1111001
  45. _2  CON 36       '%1011011        %0100100
  46. _3  CON 48       '%1001111        %0110000
  47. _4  CON 25       '%1100110        %0011001
  48. _5  CON 18       '%1101101        %0010010
  49. _6  CON 2        '%1111101        %0000010
  50. _7  CON 120      '%0000111        %1111000
  51. _8  CON 0        '%1111111        %0000000
  52. _9  CON 16       '%1101111        %0010000
  53.  
  54. TEMP   var word
  55. DECENA VAR BYTE                 ' variables pra mostrar
  56. UNIDAD VAR BYTE
  57. x      var byte
  58. i      var byte
  59. c      var byte
  60.  
  61. LSB   var TEMP.BYTE0            ' Variable para medir la temperatura
  62. MSB   VAR TEMP.BYTE1
  63. SDA   VAR PORTA.0               'BUS I2C
  64. SCL   VAR PORTA.1
  65. DYS1  VAR PORTA.2               'PINES PARA MULTIPLEXAR
  66. DYS2  VAR PORTA.3
  67. LED   VAR PORTB.7
  68.  
  69. TRISB   = 0
  70.  
  71.  HIGH LED
  72.  I2CWRITE SDA,SCL,$90,[00]  ' CONFIGURACION DEL TCN75 APUNTANDO AL REGISTRO DE TEMPERATURA
  73.  PAUSE 1000
  74.  LOW  LED
  75. goto lee_y_muestra          'saltamos a leer la temperatura
  76.  
  77. s:
  78. low led
  79. if c=255 then lee_y_muestra   ' cada 100 ciclos leer la temperatura
  80.  
  81. x = msb
  82. serout2 porta.4,84,["temp: ", dec x,10,13]
  83.  decena = x dig 1             'desplegado de la temperatura                  
  84.  select case decena
  85.   case 0
  86.    low dys2
  87.    high DYS1
  88.    PORTB = _0
  89.   case 1
  90.    low dys2
  91.    high DYS1
  92.    PORTB = _1
  93.   case 2
  94.    low dys2
  95.    high DYS1
  96.    PORTB = _2
  97.   case 3
  98.    low dys2
  99.    high DYS1
  100.    PORTB = _3
  101.   case 4
  102.    low dys2
  103.    high DYS1
  104.    PORTB = _4
  105.   case 5
  106.    low dys2
  107.    high DYS1
  108.    PORTB = _5
  109.   case 6
  110.    low dys2
  111.    high DYS1
  112.    PORTB = _6
  113.   case 7
  114.    low dys2
  115.    high DYS1
  116.    PORTB = _7
  117.   case 8
  118.    low dys2
  119.    high DYS1
  120.    PORTB = _8
  121.   case 9
  122.    low dys2
  123.    high DYS1
  124.    PORTB = _9
  125.  END SELECT
  126.  
  127. pause 5
  128.  UNIDAD = x DIG 0
  129.  select case UNIDAD
  130.   case 0
  131.    low dys1
  132.    high DYS2
  133.    PORTB = _0
  134.   case 1
  135.    low dys1
  136.    high DYS2
  137.    PORTB = _1
  138.   case 2
  139.    low dys1
  140.    high DYS2
  141.    PORTB = _2
  142.   case 3
  143.    low dys1
  144.    high DYS2
  145.    PORTB = _3
  146.   case 4
  147.    low dys1
  148.    high DYS2
  149.    PORTB = _4
  150.   case 5
  151.    low dys1
  152.    high DYS2
  153.    PORTB = _5
  154.   case 6
  155.    low dys1
  156.    high DYS2
  157.    PORTB = _6
  158.   case 7
  159.    low dys1
  160.    high DYS2
  161.    PORTB = _7
  162.   case 8
  163.    low dys1
  164.    high DYS2
  165.    PORTB = _8
  166.   case 9
  167.    low dys1
  168.    high DYS2
  169.    PORTB = _9
  170.  END SELECT
  171. pause 5
  172. c=c+1
  173. goto s
  174.  
  175. LEE_Y_MUESTRA:  
  176.   high led
  177.   I2CREAD SDA,SCL,$91,[TEMP] ' LEYENDO LA TEMPERATURA AMBIENTE
  178.  c=0
  179. goto s
  180.  
  181. END

Lo unico que les pido ahora es que me ayuden a atacar el prog desde otro punto de vista ya que consumo 565 words de las 1024 disponibles cuando no uso el serout2 y cuando lo uso consumo mas de 700.

Saludos
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Despliegue persistente en Displays multiplexados
« Respuesta #2 en: 26 de Noviembre de 2006, 18:27:08 »
Hola Navaismo!
Las pocas veces que use displays me apoye en hard externo. Con un 74LS164N (que custa centavos) por display te olvidas del refresco, y solo usas 2 lineas para manejar todo el display...;)

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Despliegue persistente en Displays multiplexados
« Respuesta #3 en: 26 de Noviembre de 2006, 19:30:12 »
Gracias por el dato como mencionaa arriba pues era para reducir el espacio aunque viendo esta situacion como que optare por multiplexarlo tipo ejemplos de Gio con un 7447 aunque aumente el tamaño ya que aqui no venden 7447 smd, de hecho no se si los hagan smd
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: Despliegue persistente en Displays multiplexados
« Respuesta #4 en: 29 de Noviembre de 2006, 15:53:35 »
Puedes poner las constantes en un array

decena = x dig 1             'desplegado de la temperatura 

low dys2
high DYS1
PORTB = ARRAY[decena]

pause 5 
UNIDAD = x DIG 0
PORTB = ARRAY[UNIDAD] ' y a correr


fijate ... no es necesario repetir cada vez
   low dys2
   high DYS1
lo haces al principio solo una vez , no es nacesario en cada case




Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Despliegue persistente en Displays multiplexados
« Respuesta #5 en: 29 de Noviembre de 2006, 16:05:30 »
SI el problema basicamente es que como tengo que hacer una Pausa de mas de 5 segundos al ser multiplexados si dejo encendido el Display1 obviamente tendra el mismo valor del Display 2 creo que voy a optar por un LCD y a anexarle mas cosas para no desperdiciar el LCD.

Gracias amigos por sus recomendaciones.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."