Autor Tema: Una manito por favor  (Leído 49139 veces)

0 Usuarios y 15 Visitantes están viendo este tema.

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Una manito por favor
« Respuesta #15 en: 03 de Mayo de 2009, 22:13:46 »
hola

solo queria comentar que yo ya e realizado lo que quiere marvic

http://micros.mforos.com/1149907/8023880-desarrollo-panel-90x8-16f877a-24lc256-ds1307-con-usb/

espero que le sirva como referencia para hacer su panel

SAludos :mrgreen:

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #16 en: 03 de Mayo de 2009, 23:27:46 »
Hola Bruno, un pregunta...

el buffer de 80bits de este ejemplo se modifica según los datos de cada fila, cierto?

si se desea hacer algunos efectos, por ejemplo solo desplazar un texto, si ya tengo un mensaje cargado para desplazar una columna se debe rotar el buffer en cada fila, si voy en el décimo desplazamiento debo rotar 10 veces el buffer cada vez que lleguen los datos de una fila.

Lo que yo hice fue usar excesiva RAM :(, creándome en CCS un arreglo bidimensional o matriz que emula a mi matriz de leds, si tengo por ejemplo 40 columnas tendré una matriz[40][8] y ahí cargo los datos los roto, los animo y hago quizá todo, lo más complicado creo que serán algunos algoritmos para efectos llamativos, y muestro los datos fila por fila de mi matriz[40][8] cargando a los registros byte por byte.

Crees que es un desperdicio de ram? o como se hace solo con uno o dos buffers?

un saludo.
.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #17 en: 03 de Mayo de 2009, 23:55:24 »
hola

solo queria comentar que yo ya e realizado lo que quiere marvic

http://micros.mforos.com/1149907/8023880-desarrollo-panel-90x8-16f877a-24lc256-ds1307-con-usb/

espero que le sirva como referencia para hacer su panel

SAludos :mrgreen:

te quedó un panel muy bueno jmcs87, quisiera ver un esquema completo de tu hardware, si es que se puede claro y que me cuentes más sobre el truco para que los registros queden invisibles en la parte trasera de los leds.

un saludo, y que buen trabajo hiciste :-/ :-/
.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #18 en: 04 de Mayo de 2009, 00:08:50 »
Hola Bruno, un pregunta...

el buffer de 80bits de este ejemplo se modifica según los datos de cada fila, cierto?

Hola! El buffer es de 80 bytes. Un byte por columna, un bit por LED. No entendí lo de modificar los datos según cada fila.

si se desea hacer algunos efectos, por ejemplo solo desplazar un texto, si ya tengo un mensaje cargado para desplazar una columna se debe rotar el buffer en cada fila, si voy en el décimo desplazamiento debo rotar 10 veces el buffer cada vez que lleguen los datos de una fila.

Ah! Creo que logré entender algo...Bien. Tu has utilizado otro método. Mi propuesta "destruye" los datos a medida que van siendo reemplazados por otros. En mi algoritmo, cuando roto, voy destruyendo columna por columna, aunque debería ser ocupada por nuevos datos. Si entendí bien, lo que hacés es almacenar los datos originales, sin transformaciones, y luego realizar las transformaciones necesarias para generar el resultado que deberá ser mostrado en pantalla. No está mal. Técnicamente funciona. Lo que pasa es que deberías asegurarte en ese caso que todos los efectos que hagas se puedan realizar en tiempos breves, y no sean acumulativos de manera tal que cada vez demanden mayor tiempo de procesado.

Yo no llegué a explicarle a marvicdigital que hay una optimización más a la hora de rotar el buffer, sea hacia arriba, abajo, derecha o izquierda, y se basa en usar punteros. Un puntero que indique la primer columna del buffer, y otro que indique la primer fila del mísmo.

Lo explayo un poco(caso de rotaciones hacia la izq y der):

Cuando comienza el programa, el puntero de columnas apuntará a la posición donde se encuentre COL1. El algoritmo de refresco "mostrará" fila x fila los valores, comenzando desde lo que el puntero le indique, es decir, desde COL1 hasta COL32 en el programa de marvicdigital. Ahora, si yo quisiera rotar un lugar a la derecha el buffer, usando punteros, puedo sencillamente sólo cambiar el puntero, haciendo que ahora apunte a la posición donde está COL2. El algoritmo de refresco comenzará a refrescar las filas comenzando desde COL2 hasta COL1, que será la última. Fijemonos que usando punteros, el tiempo que se requiere para procesar los datos se minimiza. Sólo cambiamos el valor del puntero, para que luego la rutina de refresco se adapte a ello.
En tu caso, esto resolvería las 10 rotaciones. Sólo deberías incrementar o decrementar el puntero en 10 unidades. SIEMPRE TENIENDO EN CUENTA QUE EL BUFFER ES CICLICO. CUANDO TERMINA, HAY QUE VOLVER A RECORRERLO DESDE EL PRINCIPIO Y VICEVERSA.

Lo que yo hice fue usar excesiva RAM :(, creándome en CCS un arreglo bidimensional o matriz que emula a mi matriz de leds, si tengo por ejemplo 40 columnas tendré una matriz[40][8] y ahí cargo los datos los roto, los animo y hago quizá todo, lo más complicado creo que serán algunos algoritmos para efectos llamativos, y muestro los datos fila por fila de mi matriz[40][8] cargando a los registros byte por byte.

Crees que es un desperdicio de ram? o como se hace solo con uno o dos buffers?

un saludo.

no me especificaste si la matriz de [40][8] son bits o bytes. Si son bits, no hay desperdicio. Si son bytes y no estás usando tonalidades de color(es decir, sólo enciendes o apagas el LED(biestado))  entonces sí habría desperdicio ya que de 8 bits por LED solo usas 1. Ten en cuenta que si puedes hacer lo mísmo con una matriz de una sóla dimension, todos los accesos y operaciones son más rápidas que con matrices de más dimensiones.

Podés usar un solo buffer sin problemas si se cumple con lo que dije más arriba. Un doble buffer da 100% de seguridad, porque te permite modificar a gusto sin tener que preocuparte por si los datos se están refrescando o no mientras estás todavía realizando modificaciones al buffer. Si tenés la posibilidad de crear dos buffers, te recomiendo que lo hagas, especialmente si deseas agregarle efectos que puedan requerir de mucho tiempo para procesarlos.

Como ya mencioné, el peligro de hacer sólo un buffer es que como dependemos de nuestro buffer interno para poder ir refrescando las filas en el cartel, puede suceder que se visualicen en los LEDs los cambios que vamos realizando en el buffer. Y no es posible esperar a que termine de procesarlos para visualizarlos, porque sino mientras no podríamos refrescar las filas. Un solo buffer significa que compartimos el buffer para visualizarlo y para modificarlo.

Un saludo.






"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 marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #19 en: 04 de Mayo de 2009, 00:10:23 »
hola

solo queria comentar que yo ya e realizado lo que quiere marvic

http://micros.mforos.com/1149907/8023880-desarrollo-panel-90x8-16f877a-24lc256-ds1307-con-usb/

espero que le sirva como referencia para hacer su panel

SAludos :mrgreen:

Claro que ya lo había visto, y a sido parte fundamental de inspiración para aventurarme a hacerlo  :-/, llegue a tu link gracias a que primero busque información aca en los foros y encontré tu post y mira..que bonito te quedó..puro led azul..debió costar lo suyo ese panel  :-)
Mis felicitaciones, te ha quedado muy bien   :wink:

Cuando será que muestre el mío así....por ahora tengo un inconveniente que no logro entender, y resulta que si escribo valores hexadecimales a las primeras columnas para que me formen una letra, la pongo a rotar y me funciona bien, pero si cambio lo anterior por un llamado a una tabla con los mismos valores hexadecimales de tal forma que cuando se haga la rotación, el valor hexadecimal siguiente lo cargue en COL1 para mostrarlo y seguir rotando..el detalle está en que apenas llega en la tabla al 4 valor hexadecimal se me reinicia el microcontrolador y he revisado y no veo el problema, no me he pasado de la pila, siempre uso un máximo de 3 rutinas, osea Call A , dentro de la rutina A llamo Call B y asi máximo hasta C, y en mi programa no uso si no 2...de verdad que no entiendo por que se me reinicia..dejo el fragmento donde tengo la rutina para el llamado de la tabla de caracteres..a ver si encuentran mi falla y me ayudan un poco  :? y mil gracias de antemano.

Código: [Seleccionar]
INICIO
BSF STATUS,RP0
CLRF TRISC
CLRF TRISB
CLRF OPTION_REG
BCF STATUS,RP0
;BCF STATUS,IRP
LOOP_INICIO
MOVLW 0FFH
MOVWF PORTB
BCF         LOAD                 ;LOAD DE EL CD4094
MOVLW .32
MOVWF COLUMNAS
MOVLW COL1
MOVWF FSR
CEROS_COLUMNAS                    ;BORRO TODAS LAS COLUMNAS PARA EMPEZAR LIMPIA LA PANTALLA
CLRF         INDF
DECFSZ COLUMNAS
GOTO SEGUIR_BORRANDO
GOTO SIGUIENTE_FASE
SEGUIR_BORRANDO
INCF         FSR,1
GOTO CEROS_COLUMNAS

SIGUIENTE_FASE
CLRF        LETRA
MOVF LETRA,W
CALL         A                ;tabla para la letra A
MOVWF     COL1
METER_COLUMNAS
CALL        PANTALLAZO          ;MUESTRA EN PANTALLA VARIAS VECES LA MISMA COLUMNA
CALL        ROTAR_IZQUIERDA        ;ANTES DE DESPLAZARLALA Y ASI DARLE VELOCIDAD AL DESPLAZAMIENTO
INCF        LETRA
MOVF LETRA,W
CALL        A                          ;SIGUIENTE VALOR HEXADECIMAL DE LA LETRA A
MOVWF COL1                     ;CARGO COL1 CON EL NUEVO VALOR HEXADECIMAL
XORLW 000H                     ;MIRO SI YA TERMINO LOS VALORES QUE FORMAN LA LETRA
BTFSS STATUS,Z
GOTO METER_COLUMNAS     ; SI NO VOY A MOSTRAR COL1 CON EL NUEVO VALOR
CALL         ESPACIOS_BLANCO  ;SI TERMINO DE LEER LA LETRA A, ENTONCES LLENO DE ESPACIOS PARA QUE
GOTO SIGUIENTE_FASE      ;SEA VEA EFECTO DE DESPLAZAMIENTO. SOLO A MODO DE PRUEBA



A ADDWF PCL,1 ;letra A , de 8x6
RETLW B'11111110'
RETLW B'11111111'
RETLW B'00010011'
RETLW B'00010011'
RETLW B'11111111'
RETLW B'11111110'
RETLW 000H




INCLUDE CD4094.INC
INCLUDE RETARDOS.INC

END

Es una parte del código, como estoy aprendiendo, pues solo estoy haciendo pruebas para empaparme bien del asunto antes de empezar a introducir todos los caracteres, rutinas de lectura de memoria, teclado,efectos, etc..

De antemano muchas gracias por la ayuda que me puedan dar.

Saludos


Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Una manito por favor
« Respuesta #20 en: 04 de Mayo de 2009, 00:14:40 »
hola Cryn pues si esa es la idea lograr  hacerlo la mas delgadito posible , para eso la placa de los registros van directamente conectados con los pines de los leds ..ojo pero no todos los leds. En uno de los videos se ve la parte trasera del panel  y tambien hay una foto que muestra la placa de los registros .....aun falta documentar bien eso pero cuando termine al trabajito me dedicare a hacer un manual.

hola marvicdigital que bueno que mi ejemplo te haya servido

Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #21 en: 04 de Mayo de 2009, 01:09:21 »
marvicdigital, no tuve tiempo de analizar el código pero espero que sepas que la memoria FLASH del PIC está paginada.Se divide en partes de 256 palabras cada una. Asegurate que el PCLATH contenga el valor correcto antes de llamar a una tabla. Fijate que acá en el Almacen del Assembler hay un tutorial de Leon_pic que explica el funcionamiento del Program Counter(PCL y PCLATH).

Saludos.
"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 marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #22 en: 04 de Mayo de 2009, 08:15:13 »

Código: [Seleccionar]
INICIO
BSF STATUS,RP0
CLRF TRISC
CLRF TRISB
CLRF OPTION_REG
BCF STATUS,RP0
;BCF STATUS,IRP
LOOP_INICIO
MOVLW 0FFH
MOVWF PORTB
BCF         LOAD                 ;LOAD DE EL CD4094
MOVLW .32
MOVWF COLUMNAS
MOVLW COL1
MOVWF FSR
CEROS_COLUMNAS                    ;BORRO TODAS LAS COLUMNAS PARA EMPEZAR LIMPIA LA PANTALLA
CLRF         INDF
DECFSZ COLUMNAS
GOTO SEGUIR_BORRANDO
GOTO SIGUIENTE_FASE
SEGUIR_BORRANDO
INCF         FSR,1
GOTO CEROS_COLUMNAS

SIGUIENTE_FASE
CLRF        LETRA
MOVF LETRA,W
CALL         A                ;tabla para la letra A
MOVWF     COL1
METER_COLUMNAS
CALL        PANTALLAZO          ;MUESTRA EN PANTALLA VARIAS VECES LA MISMA COLUMNA
CALL        ROTAR_IZQUIERDA        ;ANTES DE DESPLAZARLALA Y ASI DARLE VELOCIDAD AL DESPLAZAMIENTO
INCF        LETRA
MOVF LETRA,W
CALL        A                          ;SIGUIENTE VALOR HEXADECIMAL DE LA LETRA A
MOVWF COL1                     ;CARGO COL1 CON EL NUEVO VALOR HEXADECIMAL
XORLW 000H                     ;MIRO SI YA TERMINO LOS VALORES QUE FORMAN LA LETRA
BTFSS STATUS,Z
GOTO METER_COLUMNAS     ; SI NO VOY A MOSTRAR COL1 CON EL NUEVO VALOR
CALL         ESPACIOS_BLANCO  ;SI TERMINO DE LEER LA LETRA A, ENTONCES LLENO DE ESPACIOS PARA QUE
GOTO SIGUIENTE_FASE      ;SEA VEA EFECTO DE DESPLAZAMIENTO. SOLO A MODO DE PRUEBA



A ADDWF PCL,1 ;letra A , de 8x6
RETLW B'11111110'
RETLW B'11111111'
RETLW B'00010011'
RETLW B'00010011'
RETLW B'11111111'
RETLW B'11111110'
RETLW 000H




INCLUDE CD4094.INC
INCLUDE RETARDOS.INC

END




BrunoF, de nuevo gracias por el consejo, de verdad que debo mejorar mi  ingles, siempre que comienzo a trabajar con nuevos pic siempre abro el datasheet, muy obligado para esto, en la parte que explica sobre el PCLATH, me refiere al AN556, donde se amplia el tema, lo leía y en un recuadro sale que si solo usaba menos de 2K de la memoria flash pues no era necesario escribir el PCLATH, por lo menos asi lo escribe el documento:

Citar
If the program memory size is less than
2K-words, then the above precaution is
not necessary.

Pero al leer el espectacular  tutorial de ASM desde cero de LEON_PIC dice lo siguiente:

Citar
El usuario no debe preocuparse por precargar el PCLATH en dos sitaciones:
Si el uC no posee más de 2kWords de memoria Flash;
O si en el código creado por el usuario, no se utiliza la memoria FLASH más allá de la posición 2047(0x7FF).

La diferencia entre ambos es si el uC no posee más de 2k Words, y como este PIC16f877A tiene 8k pues tome las precauciones del caso y puse lo siguiente antes de cada Call  Rutina :

Código: [Seleccionar]
PAGESEL         PANTALLAZO
CALL              PANTALLAZO

Se que la rutina está en la primera página y que al ejecutar RETURN el PCLATH queda con esa página grabada, le puse el PAGESEL  antes de cada CALL por seguridad y a pesar de que no me he pasado del primer banco de la memoria Flash me seguía dando el problema y me tocó hacer lo siguiente antes de llamar la Tabla A:

Código: [Seleccionar]
PAGESELW A
MOVF LETRA,W
CALL         A             ;Tabla que forma la letra A
MOVWF COL1

Y así resolví mi problema de reinicio y ya veo los caracteres moverse de izquierda a derecha sin problema.

Ojala le sirva a todos los que puedan tener el mismo problema, y el consejo que doy es asegurar esos registros que al reiniciar sus bits puedan tomar cualquier valor asegurarlos con escribirle el valor que necesitan para su funcionamiento, y leer el una y otra vez el  espectacular tutorial de LEONPIC  :-)

Ahora a seguir..ya tengo texto corriendo, vamos lo básico, ahora me queda implementar las tablas completas para los caracteres y lo voy hacer mediante código ASCII, osea leo la memoria en donde tengo guardado el valor ASCII para cada caracter y ese valor es el que llamo para que me genere el caracter, con tanta memoria disponible  :mrgreen:

Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #23 en: 04 de Mayo de 2009, 09:25:18 »
Pero al leer el espectacular  tutorial de ASM desde cero de LEON_PIC dice lo siguiente:

Citar
El usuario no debe preocuparse por precargar el PCLATH en dos sitaciones:
Si el uC no posee más de 2kWords de memoria Flash;
O si en el código creado por el usuario, no se utiliza la memoria FLASH más allá de la posición 2047(0x7FF).

Si leíste bien el tutorial, podrás apreciar que quien dijo eso en su tutorial he sido precisamente yo. Toda esa parte del tutorial son palabras textuales mías ya que León me pidió ayuda con eso.

La diferencia entre ambos es si el uC no posee más de 2k Words, y como este PIC16f877A tiene 8k pues tome las precauciones del caso y puse lo siguiente antes de cada Call  Rutina :

Código: [Seleccionar]
PAGESEL         PANTALLAZO
CALL              PANTALLAZO

Se que la rutina está en la primera página y que al ejecutar RETURN el PCLATH queda con esa página grabada, le puse el PAGESEL  antes de cada CALL por seguridad y a pesar de que no me he pasado del primer banco de la memoria Flash me seguía dando el problema y me tocó hacer lo siguiente antes de llamar la Tabla A:


Código: [Seleccionar]
PAGESELW A
MOVF LETRA,W
CALL         A             ;Tabla que forma la letra A
MOVWF COL1

Y así resolví mi problema de reinicio y ya veo los caracteres moverse de izquierda a derecha sin problema.

Ojala le sirva a todos los que puedan tener el mismo problema, y el consejo que doy es asegurar esos registros que al reiniciar sus bits puedan tomar cualquier valor asegurarlos con escribirle el valor que necesitan para su funcionamiento, y leer el una y otra vez el  espectacular tutorial de LEONPIC  :-)

Ahora a seguir..ya tengo texto corriendo, vamos lo básico, ahora me queda implementar las tablas completas para los caracteres y lo voy hacer mediante código ASCII, osea leo la memoria en donde tengo guardado el valor ASCII para cada caracter y ese valor es el que llamo para que me genere el caracter, con tanta memoria disponible  :mrgreen:

Saludos

Te pedí que leyeras bien lo del PC y PCLATH por las tablas. Tus caracteres son computed GOTO y eso era lo que supuse que te fallaba y el por qué está en el tutorial de León. Precisamente en la parte en la que te envié a leer.

Saludos.
"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 marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #24 en: 04 de Mayo de 2009, 09:56:13 »
Si mil gracias, BrunoF se me olvidó citar en mi anterior texto que tu habías escrito todo sobre le PCLATH y que LEONPIC te había citado  :mrgreen:.
Por ahora estoy creando las tablas de los caracteres ,claro que tengo duda si dejarlos del tamaño de 8x6 o el estandar de 7x5 o 7x6, a lo mejor creo ambas tablas para el caso de cambiar de texto en algún momento.

Quiero hacerte una pregunta, ante tanta sorpresa que me ha dado este proyecto en cuanto a texto que se puede escribir en ASM, por ejemplo para el llamado de las tablas que contienen las letras y hacer solo una rutina para generar las letras, osea  supongamos que tengo en secuencia la palabra "BABA" EN CODIGO ASCII sería 66,65,66,65 se puede poner ese valor para llamar la tabla, osea algo asi..no lo he probado por que estoy con las tablas..:

Código: [Seleccionar]
LEER_EEPROM
                      MOVF     DATO,W       ;MUEVO EL DATO DE LA EEPROM A W PRIMERA LETRA 66(B)
                      MOVWF   ASCII
                      CALL       CARACTER_ASCII  ;ES EN ESTE PUNTO DONDE TENGO LA DUDA, SE PUEDE HACER ALGO PARECIDO?

La idea es que cada tabla se llame CARACTER_65 para el caso de la A y de ahi las siguientes....es que con tanto truco que hay en ASM, pues parece una idea descabellada, ..pregunto solo si existe algo similar o toca por los tradicionales medios rudimentarios de hacer una rutina para cada caracter?

Saludos

PD: Sobre este tema, estoy leyendo la teoría de tablas, y hay una idea sobre usar el offset, algo asi como darle un ancho único a cada caracter y para mi ejemplo no es muy funcional a la hora de mostrar la "I"  por ejemplo, ya que solo usaré 3 columnas y no 6 de una letra como la "M"..bueno seguiré leyendo más, para ver que pruebo, a lo mejor el 000h que le agrego a cada caracter me sirva para esa tarea.

« Última modificación: 04 de Mayo de 2009, 10:09:06 por marvicdigital »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #25 en: 04 de Mayo de 2009, 12:47:55 »
Hola. No, lo que pretendés hacer no es posible ni en ASM ni en ningún lenguaje de programación con los que he trabajado. No podés variar en tiempo de ejecución el nombre de la etiqueta a llamar de la manera que exponés.

Podés hacer una tabla que conduzca a otra tabla.

Como no vi esto en el foro y por ahí le sirve a muchos, he posteado la solución aquí: Ejemplos en Assembler - PIC16F876 porque puede servirle a otros.

El algoritmo puede resultar dificil, pero no puedo simplificarlo mucho mas que eso sin tener que despilfarrar más ROM.

Un saludo.
"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 marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #26 en: 04 de Mayo de 2009, 22:26:04 »
Hola. No, lo que pretendés hacer no es posible ni en ASM ni en ningún lenguaje de programación con los que he trabajado. No podés variar en tiempo de ejecución el nombre de la etiqueta a llamar de la manera que exponés.

Podés hacer una tabla que conduzca a otra tabla.

Como no vi esto en el foro y por ahí le sirve a muchos, he posteado la solución aquí: Ejemplos en Assembler - PIC16F876 porque puede servirle a otros.

El algoritmo puede resultar dificil, pero no puedo simplificarlo mucho mas que eso sin tener que despilfarrar más ROM.

Un saludo.

Una última pregunta, es obligatorio aprender C para los uC más actuales? o se puede seguir usando el ASM?

Muchas gracias BrunoF, apenas me ponga en contacto directo con lo que escribiste en el otro hilo, pondré resultados de mi aventura con este pasamensajes.

Saludos

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #27 en: 04 de Mayo de 2009, 23:00:00 »
No obligatoriamente, aunque lo recomiendo arduamente. En las familias superiores el assembler se torna cada vez más complejo y difícil. Especialmente cuando tienes que utilizar módulos avanzados, como USB, CAN, DMA, etc...

Te recomiendo que migres a CCS o C18 para empezar. Probablemente CCS te resulte un poco más sencillo.

Un saludo.

"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 marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #28 en: 12 de Mayo de 2009, 01:05:31 »
Bueno BrunoF, ya he avanzado un poco, después de 5 días de no dedicarle tiempo, hoy puedo mostrar algo de lo que tu me has explicado, la calidad del video no s la mejor, es con el celular, pero algo se deja leer...
Falta agregarle las 48 columnas restantes, el teclado PS2, la memoria I2C, y el RTC, sobre este punto, puedo poner la 24LC256 y el RTC en el mismo Bus?.

Para leer los caracteres uso el código ASCII, claro los mensajes por ahora están en la Flash del PIC, pero pronto los agregaré a la memoria, en este punto quisiera preguntarte, cuál es la mejor forma de grabar los datos en la memoria, y leer hexdecimal por hexadecimal y mostrar ese valor  cada vez? o hacer otra cosa..es que con tanto algoritmo que te sabes, no vendría mal un buen concejo tuyo  :)


La velocidad se ve alterada por la calidad de la cámara del celular, pero normalmente funciona bien sin parones o relantizaciones.

Saludos
« Última modificación: 12 de Mayo de 2009, 01:11:58 por marvicdigital »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Una manito por favor
« Respuesta #29 en: 12 de Mayo de 2009, 01:44:59 »
Muy chulo Marvic.

Que LEDs usaste? chorro o normal? La fuente de los LEDs es por aparte o dejaste los mismos 5v?
El papel lo aguanta todo