Autor Tema: Tablas y PIC12F675  (Leído 1525 veces)

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

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Tablas y PIC12F675
« en: 27 de Agosto de 2012, 13:10:57 »
Hola tengo este pequeño PIC que lo utilizo para una secuencia de luces, el problema es que para crear varios efectos tengo que hacer una tabla muy larga y al colocarla esta pasa de la dirección 0x100 y me tira erro el compilador apuntando a la instrucción que llame la tabla después de esta dirección
Yo comienzo la tabla en la dirección 0x40.
Como puedo hacer para resolver el problema.
Saludos

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Tablas y PIC12F675
« Respuesta #1 en: 27 de Agosto de 2012, 13:13:07 »
eeprom externa por spi o 12c.

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Tablas y PIC12F675
« Respuesta #2 en: 27 de Agosto de 2012, 13:24:16 »
Hola no dad de eso, es un pic conectado a un hc595, las tablas las armo dentro del pic, te pongo algo del cod.:

Código: ASM
  1. TABLA  
  2.       MOVWF   PCL      
  3.  
  4.  
  5. SEC2_1    DT B'00100000',B'01001001',B'10010010',B'00100100',B'01001001',0XAA
  6. SEC2_2    DT B'10010000',B'00100100',B'01001001',B'10010010',B'00100100',0XAA
  7. SEC2_3    DT B'01000000',B'10010010',B'00100100',B'01001001',B'10010010',0XAA
  8. SEC5_1    DT B'01100000',B'00000000',B'00000000',B'00000000',B'00000000',0XAA
  9. SEC5_2    DT B'11110000',B'00000001',B'00000000',B'00000000',B'00000000',0XAA
  10. SEC5_3    DT B'11110000',B'00000001',B'00000000',B'00000000',B'10000000',0XAA
  11. SEC5_4    DT B'11110000',B'00000011',B'00000000',B'00000000',B'11000000',0XAA
  12. SEC5_5    DT B'11110000',B'00000111',B'00000000',B'00000000',B'11100000',0XAA
  13. SEC5_6    DT B'11110000',B'00001111',B'00000000',B'00000000',B'11110000',0XAA
  14. SEC5_7    DT B'11110000',B'00011111',B'00000000',B'00000000',B'11111000',0XAA
  15. SEC5_8    DT B'11110000',B'00111111',B'00000000',B'00000000',B'11111100',0XAA
  16. SEC5_9    DT B'11110000',B'01111111',B'00000000',B'00000000',B'11111110',0XAA
  17. SEC5_10   DT B'11110000',B'11111111',B'00000000',B'00000000',B'11111111',0XAA
  18. SEC5_11   DT B'11110000',B'11111111',B'00000001',B'10000000',B'11111111',0XAA
  19. SEC5_12   DT B'11110000',B'11111111',B'00000011',B'11000000',B'11111111',0XAA
  20. SEC5_13   DT B'11110000',B'11111111',B'00000111',B'11100000',B'11111111',0XAA
  21. SEC5_14   DT B'11110000',B'11111111',B'00001111',B'11110000',B'11111111',0XAA
  22. SEC5_15   DT B'11110000',B'11111111',B'00011111',B'11111000',B'11111111',0XAA
  23. SEC5_16   DT B'11110000',B'11111111',B'00111111',B'11111100',B'11111111',0XAA
  24. SEC5_17   DT B'11110000',B'11111111',B'01111111',B'11111110',B'11111111',0XAA

La tabla es mucho mas larga y me va a ocupar mas de la 3/4 parte del PIC.
Te adjunto el esquema.
Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Tablas y PIC12F675
« Respuesta #3 en: 27 de Agosto de 2012, 14:27:30 »
Necesitas poder utilizar un algoritmo que permite tablas que excedan los 256 words de tamaño y en cualquier posicion.

Te recomiendo que leas este hilo: http://www.todopic.com.ar/foros/index.php?topic=12918.0

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Tablas y PIC12F675
« Respuesta #4 en: 27 de Agosto de 2012, 16:02:49 »
Hola estuve viendo el post pero no pude hacer que funcione, mi PIC no tiene "page select" y si pongo, como te dije, las tablas despues de la direccion 0x100 no funcionan me tira un aviso "Argument out of range.  Least significant bits used."
saludos

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Tablas y PIC12F675
« Respuesta #5 en: 27 de Agosto de 2012, 16:06:08 »
perdon yo llamo asi a las tablas:

Código: ASM
  1. SECUENCIA2_1
  2.     MOVLW   SEC2_1           ;
  3.     CALL    SEND_SEC        ; Subrutina para la escritura del mensaje.
  4.  
  5. SECUENCIA2_2
  6.     MOVLW   SEC2_2           ;
  7.     CALL    SEND_SEC        ; Subrutina para la escritura del mensaje.
  8.  
  9. SECUENCIA2_3
  10.     MOVLW   SEC2_3           ;
  11.     CALL    SEND_SEC        ; Subrutina para la escritura del mensaje.

Y es ese " MOVLW   SEC2_1  " el que me tira el error
saludos

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Tablas y PIC12F675
« Respuesta #6 en: 31 de Agosto de 2012, 12:53:52 »
Hola lo pude resolver asi:

Cargo la direccion de la tabla, que puede estar en cualquier lado:
Código: ASM
  1. CLRF    DIR_CHAR
  2.     MOVLW   HIGH  SEC2_1
  3.     MOVWF   AddrTablaHigh
  4.     MOVLW   LOW   SEC2_1
  5.     MOVWF   AddrTablaLow
  6.     CALL    SEND_SEC_LEDS

La tabla es asi:
Código: ASM
  1. SECUENCIAS_LEDS
  2.         movf            DIR_CHAR,W
  3.         addwf           AddrTablaLow,W          ;determinamos si el salto no excede 0xFF
  4.         btfsc           STATUS,C
  5.         incf            AddrTablaHigh,F     ;Si excede => incrementamos la parte alta
  6.         movf            AddrTablaHigh,W
  7.         movwf           PCLATH                      ;actualizamos PCLATH(parte alta)
  8.         movf            DIR_CHAR,W
  9.         addwf           AddrTablaLow,W          ;volvemos a calcular el salto
  10.         movwf           PCL                                 ;actualizamos PCL para realizar el salto.
  11.  
  12. SEC2_1    DT B'00100000',B'01001001',B'10010010',B'00100100',B'01001001',0XAA
  13. SEC2_2    DT B'10010000',B'00100100',B'01001001',B'10010010',B'00100100',0XAA
  14. SEC2_3    DT B'01000000',B'10010010',B'00100100',B'01001001',B'10010010',0XAA

Solo despues de cargar la dirección de la tabla que quiero debo hacer un
Código: ASM
  1. CALL   SECUENCIAS_LEDS

Y LISTO DEVUELVE EL VALOR EN "W"
Esto es parte de un ejemplo que encontré en la web y lo adapte. Espero que les sirva.
Saludos  :-/

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Tablas y PIC12F675
« Respuesta #7 en: 06 de Septiembre de 2012, 11:31:22 »
Bueno unas anotaciones:
Una secuencia de la tabla no tiene que estar dividida, una mitad en una pagina de memoria y la otra en la siguiente ya que se cuelga. La tendrían que organizar desde el principio de la pagina asi:

Todo el codigo:
Código: ASM
  1. ORG  0X300
  2.  
  3. SECUENCIAS_LEDS
  4.         movf            DIR_CHAR,W
  5.         addwf           AddrTablaLow,W          ;determinamos si el salto no excede 0xFF
  6.         btfsc           STATUS,C
  7.         incf            AddrTablaHigh,F     ;Si excede => incrementamos la parte alta
  8.         movf            AddrTablaHigh,W
  9.         movwf           PCLATH                      ;actualizamos PCLATH(parte alta)
  10.         movf            DIR_CHAR,W
  11.         addwf           AddrTablaLow,W          ;volvemos a calcular el salto
  12.         movwf           PCL                                 ;actualizamos PCL para realizar el salto.
  13.  
  14. SEC2_1    DT B'00100000',B'01001001',B'10010010',B'00100100',B'01001001',0XAA
  15. SEC2_2    DT B'10010000',B'00100100',B'01001001',B'10010010',B'00100100',0XAA
  16. SEC2_3    DT B'01000000',B'10010010',B'00100100',B'01001001',B'10010010',0XAA
  17.  
  18. SEC5_1    DT B'01100000',B'00000000',B'00000000',B'00000000',B'00000000',0XAA   ; SEC4_2
  19. SEC5_2    DT B'11110000',B'00000001',B'00000000',B'00000000',B'00000000',0XAA
  20. SEC5_3    DT B'11110000',B'00000001',B'00000000',B'00000000',B'10000000',0XAA
  21. SEC5_4    DT B'11110000',B'00000011',B'00000000',B'00000000',B'11000000',0XAA
  22. SEC5_5    DT B'11110000',B'00000111',B'00000000',B'00000000',B'11100000',0XAA
  23. SEC5_6    DT B'11110000',B'00001111',B'00000000',B'00000000',B'11110000',0XAA
  24. SEC5_7    DT B'11110000',B'00011111',B'00000000',B'00000000',B'11111000',0XAA
  25. SEC5_8    DT B'11110000',B'00111111',B'00000000',B'00000000',B'11111100',0XAA
  26. SEC5_9    DT B'11110000',B'01111111',B'00000000',B'00000000',B'11111110',0XAA
  27. SEC5_10   DT B'11110000',B'11111111',B'00000000',B'00000000',B'11111111',0XAA
  28. SEC5_11   DT B'11110000',B'11111111',B'00000001',B'10000000',B'11111111',0XAA
  29. SEC5_12   DT B'11110000',B'11111111',B'00000011',B'11000000',B'11111111',0XAA
  30. SEC5_13   DT B'11110000',B'11111111',B'00000111',B'11100000',B'11111111',0XAA
  31. SEC5_14   DT B'11110000',B'11111111',B'00001111',B'11110000',B'11111111',0XAA
  32. SEC5_15   DT B'11110000',B'11111111',B'00011111',B'11111000',B'11111111',0XAA
  33. SEC5_16   DT B'11110000',B'11111111',B'00111111',B'11111100',B'11111111',0XAA
  34. SEC5_17   DT B'11110000',B'11111111',B'01111111',B'11111110',B'11111111',0XAA
  35.  
  36. SEC7_1    DT B'00000000',B'11000000',B'00000000',B'00000000',B'00000011',0XAA
  37. SEC7_2    DT B'00000000',B'00100000',B'00000001',B'10000000',B'00000100',0XAA
  38. SEC7_3    DT B'00000000',B'00010000',B'00000010',B'01000000',B'00001000',0XAA
  39. SEC7_4    DT B'00000000',B'00001000',B'00000100',B'00100000',B'00010000',0XAA
  40. SEC7_5    DT B'00000000',B'00000100',B'00001000',B'00010000',B'00100000',0XAA
  41. SEC7_6    DT B'00000000',B'00000010',B'00010000',B'00001000',B'01000000',0XAA
  42. SEC7_7    DT B'00000000',B'00000001',B'00100000',B'00000100',B'10000000',0XAA
  43. SEC7_8    DT B'10010000',B'00000000',B'01000000',B'00000010',B'00000000',0XAA
  44. SEC7_9    DT B'01100000',B'00000000',B'10000000',B'00000001',B'00000000',0XAA
  45.  
  46. SEC9_0    DT B'00000000',B'00000000',B'00000000',B'00000000',B'00000000',0XAA
  47. SEC9_1    DT B'00000000',B'11000000',B'00000000',B'00000000',B'00000011',0XAA
  48. SEC9_2    DT B'00000000',B'11100000',B'00000001',B'10000000',B'00000111',0XAA
  49. SEC9_3    DT B'00000000',B'11110000',B'00000011',B'11000000',B'00001111',0XAA
  50. SEC9_4    DT B'00000000',B'11111000',B'00000111',B'11100000',B'00011111',0XAA
  51. SEC9_5    DT B'00000000',B'11111100',B'00001111',B'11110000',B'00111111',0XAA
  52. SEC9_6    DT B'00000000',B'11111110',B'00011111',B'11111000',B'01111111',0XAA
  53. SEC9_7    DT B'00000000',B'11111111',B'00111111',B'11111100',B'11111111',0XAA
  54. SEC9_8    DT B'10010000',B'11111111',B'01111111',B'11111110',B'11111111',0XAA
  55. SEC9_9    DT B'11110000',B'11111111',B'11111111',B'11111111',B'11111111',0XAA

O asi, dividiendo en dos paginas:
Código: ASM
  1. SECUENCIAS_LEDS
  2.         movf            DIR_CHAR,W
  3.         addwf           AddrTablaLow,W          ;determinamos si el salto no excede 0xFF
  4.         btfsc           STATUS,C
  5.         incf            AddrTablaHigh,F     ;Si excede => incrementamos la parte alta
  6.         movf            AddrTablaHigh,W
  7.         movwf           PCLATH                      ;actualizamos PCLATH(parte alta)
  8.         movf            DIR_CHAR,W
  9.         addwf           AddrTablaLow,W          ;volvemos a calcular el salto
  10.         movwf           PCL                                 ;actualizamos PCL para realizar el salto.
  11.  
  12. SEC2_1    DT B'00100000',B'01001001',B'10010010',B'00100100',B'01001001',0XAA
  13. SEC2_2    DT B'10010000',B'00100100',B'01001001',B'10010010',B'00100100',0XAA
  14. SEC2_3    DT B'01000000',B'10010010',B'00100100',B'01001001',B'10010010',0XAA
  15.  
  16. SEC5_1    DT B'01100000',B'00000000',B'00000000',B'00000000',B'00000000',0XAA   ; SEC4_2
  17. SEC5_2    DT B'11110000',B'00000001',B'00000000',B'00000000',B'00000000',0XAA
  18. SEC5_3    DT B'11110000',B'00000001',B'00000000',B'00000000',B'10000000',0XAA
  19. SEC5_4    DT B'11110000',B'00000011',B'00000000',B'00000000',B'11000000',0XAA
  20. SEC5_5    DT B'11110000',B'00000111',B'00000000',B'00000000',B'11100000',0XAA
  21. SEC5_6    DT B'11110000',B'00001111',B'00000000',B'00000000',B'11110000',0XAA
  22. SEC5_7    DT B'11110000',B'00011111',B'00000000',B'00000000',B'11111000',0XAA
  23. SEC5_8    DT B'11110000',B'00111111',B'00000000',B'00000000',B'11111100',0XAA
  24. SEC5_9    DT B'11110000',B'01111111',B'00000000',B'00000000',B'11111110',0XAA
  25. SEC5_10   DT B'11110000',B'11111111',B'00000000',B'00000000',B'11111111',0XAA
  26. SEC5_11   DT B'11110000',B'11111111',B'00000001',B'10000000',B'11111111',0XAA
  27. SEC5_12   DT B'11110000',B'11111111',B'00000011',B'11000000',B'11111111',0XAA
  28. SEC5_13   DT B'11110000',B'11111111',B'00000111',B'11100000',B'11111111',0XAA
  29. SEC5_14   DT B'11110000',B'11111111',B'00001111',B'11110000',B'11111111',0XAA
  30. SEC5_15   DT B'11110000',B'11111111',B'00011111',B'11111000',B'11111111',0XAA
  31. SEC5_16   DT B'11110000',B'11111111',B'00111111',B'11111100',B'11111111',0XAA
  32. SEC5_17   DT B'11110000',B'11111111',B'01111111',B'11111110',B'11111111',0XAA
  33.  
  34.     ORG  0X300     ; Asi funciona tambien, no tiene que estar la tabla dividada por
  35.                     ; la pagina de memoria.
  36.  
  37. SEC7_1    DT B'00000000',B'11000000',B'00000000',B'00000000',B'00000011',0XAA
  38. SEC7_2    DT B'00000000',B'00100000',B'00000001',B'10000000',B'00000100',0XAA
  39. SEC7_3    DT B'00000000',B'00010000',B'00000010',B'01000000',B'00001000',0XAA
  40. SEC7_4    DT B'00000000',B'00001000',B'00000100',B'00100000',B'00010000',0XAA
  41. SEC7_5    DT B'00000000',B'00000100',B'00001000',B'00010000',B'00100000',0XAA
  42. SEC7_6    DT B'00000000',B'00000010',B'00010000',B'00001000',B'01000000',0XAA
  43. SEC7_7    DT B'00000000',B'00000001',B'00100000',B'00000100',B'10000000',0XAA
  44. SEC7_8    DT B'10010000',B'00000000',B'01000000',B'00000010',B'00000000',0XAA
  45. SEC7_9    DT B'01100000',B'00000000',B'10000000',B'00000001',B'00000000',0XAA
  46.  
  47. SEC9_0    DT B'00000000',B'00000000',B'00000000',B'00000000',B'00000000',0XAA
  48. SEC9_1    DT B'00000000',B'11000000',B'00000000',B'00000000',B'00000011',0XAA
  49. SEC9_2    DT B'00000000',B'11100000',B'00000001',B'10000000',B'00000111',0XAA
  50. SEC9_3    DT B'00000000',B'11110000',B'00000011',B'11000000',B'00001111',0XAA
  51. SEC9_4    DT B'00000000',B'11111000',B'00000111',B'11100000',B'00011111',0XAA
  52. SEC9_5    DT B'00000000',B'11111100',B'00001111',B'11110000',B'00111111',0XAA
  53. SEC9_6    DT B'00000000',B'11111110',B'00011111',B'11111000',B'01111111',0XAA
  54. SEC9_7    DT B'00000000',B'11111111',B'00111111',B'11111100',B'11111111',0XAA
  55. SEC9_8    DT B'10010000',B'11111111',B'01111111',B'11111110',B'11111111',0XAA
  56. SEC9_9    DT B'11110000',B'11111111',B'11111111',B'11111111',B'11111111',0XAA

Espero que les sirva.
Saludos


 

anything