Autor Tema: Asunto tablas  (Leído 2946 veces)

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

Desconectado germanpic

  • PIC10
  • *
  • Mensajes: 5
Asunto tablas
« en: 25 de Agosto de 2003, 06:24:00 »
Hola de nuevo

Alguien me prodria explicar para que sirven las tablas
y como las creo en Niple.
 

Desconectado _Canito_

  • PIC12
  • **
  • Mensajes: 74
RE: Asunto tablas
« Respuesta #1 en: 31 de Agosto de 2003, 14:51:00 »
Hola,

Las tablas son utilizadas como tecnica para consulta o seleccion de valores.

Se trabaja con el registro llamado PCL (02h) que es el Contador de Programa o Puntero.

El valor que contiene el PCL corresponde al numero de linea que se esta ejecutando actualmente.

A medida que el programa se va ejecutando el valor de PCL se actualiza de manera automatica.

Osea que si lees el valor del registro PCL estas obteniendo la posicion actual de memoria en la que se encuentra trabajando el microcontrolador.

Además puedes modificar el valor de PCL, con esto estas seleccionando manualmente la direccion de memoria (flash) que quieres ejecutar.

Las tablas utilizan esta posibilidad de seleccionar la direccion de memoria para realizar consultas.

La tecnica consiste en sumar la un valor (indice) al registro PCL para que la ejecucion del programa salte una determinada cantidad de lineas.

En general las tablas de declaran como subrutinas donde el nombre de la tabla es ingresado como etiqueta y luego es llamada mediante call.

Esto te permite optimizar el codigo dado que si necesitas realizar mas de 1 consulta solo tienes que ingresar unas pocas lineas y no escribir toda la tabla nuevamente.

Ademas, si necesitas corregir la tabla lo haces en una  sola vez.

Te mostrare la estructura de las tablas mediante un ejemplo

A continuacion se selaccionan valores mediante una tabla llamada tabla_prueba1 segun el valor de un registro llamado dato.
El resultado de la consulta se almacena en el registro llamado resultado.

-------------
dato            equ   0x20   ;dato a partir del cual consultar
resultado   equ   0x21    ;resultado de la consulta

;consultar tabla_prueba1
  ...
  movf dato,w  ;cargar el valor a consultar en W. Indica el nro de elemento a seleciconar

 call tabla_prueba1  ;consultar la tabla
 movwf resultado     ;guardar el resultado        
 ... continua ell resto del programa


;declaracion de la tabla
  tabla_prueba1   ;nombre de la tabla = nombre de la subrutina
   addwf pcl,1     ; (*) sumar el valor a consultar (que esta cargado en W)  al registro PCL.
   retlw .00        ;si el valor a consultar es 0, retorna del call con un 0 en W
   retlw .10        ;si el valor a consultar es 1, retorna del call con un 10 en W
   retlw .20        ;si el valor a consultar es 2, retorna del call con un 20 en W

--------------------
(*) Dado que el registro PCL controla la ejecucion del programa:
        - si a PCL le sumamos 0, ejecutara la linea siguiente (retlw .00)
        - si a PCL le sumamos 1, la ejecucion salta 1 linea  (hasta  retlw .10)
        - si a PCL le sumamos 2, la ejecucion salta 2 lineas  (hasta  retlw .20)

De esta manera segun el valor de entrada (dato) se obtiene un valor de salida (resultado).


Otra apliacacion es la seleccion del codigo o rutina a ejecutar
Po ejemplo:

 ;selecicona rutina segun dato
   movf dato,w     ;cargar el valor a consultar en W.  
   addwf pcl,1     ; (*) sumar el valor a consultar (que esta cargado en W)  al registro PCL.
   goto rutina1    
   goto rutina2    
   goto rutina3    



Espero que te sirva.

Un saludo
Canito

Desconectado lesr

  • PIC10
  • *
  • Mensajes: 49
Re: Asunto tablas
« Respuesta #2 en: 05 de Marzo de 2010, 19:55:15 »
Saludos a Todos,

Les estoy escribiendo por el siguiente motivo, he realizado unos montajes con los CI LM3914, LM3915 y deseo experimentar con los PIC ( 16F84, 16F88, etc. ) a modo de sustitutos de estos integrados ( de los PICs solo se cosas generales ).

En el siguiente artículo que encontré en el internet:

http://www.edn.com/contents/images/6363904.pdf

( Por favor denle un vistazo ) muestran la forma de encender y apagar leds de acuerdo al número de pines con que se quiera trabajar ( por ejemplo con 5 pines de un puerto se pueden encender y apagar 20 leds en modo punto o barra ). Tengo la versión demo de Niple y esta perfecto ( no se assembler, pero me estoy instruyendo ).
Para desarrollar algo así me imagino que se debe usar una tabla?, me podrían dar algunas sugerencias?. He probado el circuito del articulo y funciona.
Hay otro articulo del mismo autor que también me parece interesante.

http://www.edn.com/contents/images/6343251.pdf

Saludos cordiales.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Asunto tablas
« Respuesta #3 en: 05 de Marzo de 2010, 20:23:58 »
Bienvenido,

¿porque no vas colocando tus avances  y te ayudamos a terminalos (corregir y explicar dudas).

Fermin
Todos los días se aprende algo nuevo.

Desconectado lesr

  • PIC10
  • *
  • Mensajes: 49
Re: Asunto tablas
« Respuesta #4 en: 15 de Marzo de 2010, 17:54:29 »
Estimado Fermin,

Estaba revisando en el internet y encontré que a ésta forma de conexión se le llama "Charlieplexing" ( adjunto paginas web para los amigos que tengan interés en el tema ) y es mucho mas complejo de lo que me imaginaba.
En este tipo de multiplexado ( suponiendo que tenemos 3 pines con los cuales se pueden encender y apagar 6 leds ) un pin al funcionar como entrada semeja un estado de alta impedancia ( los cuatro leds conectados a este pin quedan desconectados electricamente ) quedando los otros dos pines para controlar a dos leds restantes. Voy a seguir investigando en este tema.

Saludos
Luis

http://en.wikipedia.org/wiki/Charlieplexing

http://www.instructables.com/id/Charlieplexing-LEDs--The-theory/

http://www.elkonet.com/iweb/modules.php?op=modload&name=iweb_ii&file=listado&grupo=4&id_adjuntos=36&id_ampliar=36&sortby=ubicacion&sortorder=ASC&sString=&offset=15&id_buscar=36

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Asunto tablas
« Respuesta #5 en: 15 de Marzo de 2010, 18:17:00 »
Hola lers

No dices nada de en que lenguaje vas a programar, dado que estas en el subforo de Niple, doy por descontado que lo realizaras en el.

Al principio indicas que tienes pocos conocimientos de pics. Si es asi te aconsejaria ir empezando por lo mas basico e ir progresando poco a poco. En todo pic tienes multiple programas de ejemplo para empezar casi desde cero y en cualquier lenguaje. Por tanto pudes leerlo intentar comprenderlos y modifcarlos segun tus preferencias para conseguir resultados distintos a los planteados en los ejercicios.

Citar
Les estoy escribiendo por el siguiente motivo, he realizado unos montajes con los CI LM3914, LM3915 y deseo experimentar con los PIC ( 16F84, 16F88, etc. ) a modo de sustitutos de estos integrados ( de los PICs solo se cosas generales ).

Como ya te dije en el anterior post puedes ir posteando tus avances y preguntando cosas concretas en las que tengas dudas y ten por seguro que te iremos respondiendo,guiando y ayudando asta que puedas conseguir un dominio del pic. Pero tienes que poner de tu parte.

Fermin
Todos los días se aprende algo nuevo.