You are on page 1of 18

5

Controlador de LED CUBE


para PIC16F688

Dibujo comandos del procesador Visin de conjunto Conjunto de instrucciones Detalles de instrucciones

Controlar la presentacin de Cube LED El problema de usar una tabla de bsqueda de datos para conducir el cubo del LED es la cantidad de datos necesarios. Si los datos se embala requiere 16 bytes para mantener el estado del cubo (125/8 = 15,625). Desde el PIC 16F688 slo tiene palabras de 4K de memoria de programa y el cdigo principal utiliza ~ 1455 palabras que slo deja cerca de 2600 palabras de datos de la tabla. Esto, a su vez, un espacio para slo 168 estados cubo completo, que se celebrar en la memoria as que si queras 'PICPROJECTS "el texto que se mostrar, pasando de la parte de atrs hacia el frente del cubo que requerira 16 bytes x 5 fotogramas por letra x 11 cartas = 880 bytes. Es evidente que el mtodo de bsqueda en la tabla no va a permitir que lo haga mucho antes de que la memoria del programa se acabe. Para evitar esto, el cubo se controla mediante un lenguaje de comandos macro que controla un procesador de dibujo virtual. El uso de cdigo escrito con los comandos de macro definidas para el procesador grfico cubo puede ser la misma animacin en 60 bytes. ( Ver dpcode.txt ejemplo de cdigo ) Las instrucciones se implementan utilizando macros en ensamblador, por esta razn los mnemnicos de instrucciones tienen que ser diferentes para el conjunto de instrucciones PIC y ensamblador MPASM palabras reservadas. Los nombres de las macros de instrucciones y registrar nombres estn en maysculas y minsculas. Las macroinstrucciones se convierten en una o dos PIC ensamblador retlw instrucciones en tiempo de ensamblado. Cuando el PIC ledcube firmware ejecuta lee

estos de nuevo como datos de la tabla, descodifica la instruccin en base a los campos de bits y, a continuacin llama a las funciones de ensamblador para realizar la operacin de dibujo procesador requerido. El procesador 72 tiene Dibujo instruccin, registros 8, y una pila de usuario 33 nivel. El conjunto de instrucciones es similar al ensamblador PIC y usted tendr que tener conocimientos de programacin en lenguaje ensamblador PIC y el IDE de Microchip MPASM / MPLAB si usted tiene la intencin de escribir sus propias rutinas de usarlo. Tambin una comprensin de funcionamiento de la pila postfix no estara de ms. Dado que el cdigo se genera a partir DP macros MPASM y slo termina siendo ensamblado con el resto del cdigo de programa PIC, todos los operadores MPASM habituales y formatos de nmero estn disponibles para usar cuando se escribe cdigo para la AD. Demostracin Cdigo El archivo HEX pre-ensamblado para los proyectos de cubo de LED contiene algunas secuencias de animacin de demostracin. El cdigo del Procesador Dibujo para esto est contenida en el archivo de CubeProgram.inc Visin de conjunto En el contexto de este proyecto, un voxel es un solo LED dentro del cubo cuya posicin se define por su X, Y y Z coordenadas. Registros El DP tiene 8 registros de propsito general; 4 y 4 para fines especiales. Todos los registros son de 8 bits de ancho y puede contener un valor en el intervalo de 0-255. Sin embargo, las instrucciones que utilizan los valores en los registros de funciones especiales esperar que el valor para estar dentro de la gama indicada en la tabla siguiente. Los valores fuera de este rango puede ocasionar la ejecucin de cdigo impredecible. Registre el nombre R0 R1 R2 Funcin Registro de propsito general Registro de propsito general Registro de propsito general Alcance 0-255 0-255 0-255

R3 RHOLD RX RY RZ Timer

Registro de propsito general Mantenga valor del tiempo para el comando SHOW (x 10 ms) Coordenada X para voxel y funciones de dibujo Coordenada Y del voxel y para las funciones de dibujo Coordenada Z del voxel y para funciones de dibujo

0-255 0-255 0-4 0-4 0-4

Hay un temporizador de usuario nico que cuenta a partir de un valor precargado a cero en intervalos de 1 segundo. Stacks El DP tiene dos pilas, una pila de usuario y una pila direccin de envo. La pila contiene la direccin del remitente la direccin de retorno para saltar a subrutina (JSR) las instrucciones y no es directamente accesible. La pila de usuario es 33 niveles de profundidad y puede ser utilizado para empujar / tirar de cualquier registro de usuario. Tambin se utiliza para realizar operaciones matemticas y lgicas, empujando los valores en la pila, a continuacin, ejecutar la operacin, el resultado ser empujado de nuevo en la pila. A tal fin SWAP DUP, DROP, una y operadores ROT pila tambin se aplican. Esto es similar a un lenguaje de programacin Forth y no por casualidad :-). El puntero de pila de usuario tiene capacidad para envolver alrededor de empuje sin igual / operaciones de extraccin no se sobreponen a memoria fuera de la pila Esto es importante porque el / ADD / SUB O / Y / XOR operadores empuje siempre el resultado de la operacin en la pila. Esto significa que usted no tiene que sacar el resultado a menos que usted lo necesita, pero usted debe recordar que est en la pila si tiene algo ms en la pila antes. Vase tambin la instruccin DROP que descarta la entrada en la parte superior de la pila.

La pila de usuario puede contener un mximo de 33 entradas. Tenga en cuenta que las instrucciones PUSHXYZ y PULLXYZ utilizar 3 entradas de la pila. La pila de la direccin del remitente no se ajusta y no tiene ms / menos control de flujo. La pila de la direccin del remitente puede contener hasta 8 direcciones de retorno.

Banderas Fcarry - Establecer si llevar producido durante la instruccin add, borra si no pedir prestado ocurri durante restar (lo mismo que las operaciones subyacentes CFP) Fzero - Establecer si el resultado es cero, se aclar si el resultado es diferente de cero. Bandera fzero tambin se modifica por TSTVOX, CMP, temporizador y las instrucciones de conmutacin externos.

Del conjunto de instrucciones r - Registrar el nombre del k - datos literales, constantes o etiquetas Mnemotcnico Descripcin NOOP Mset MCLR MINV Ninguna operacin Modificar las operaciones se establece en voxel para Modificar las operaciones se establece en off voxel Modificar las operaciones se invertir el valor del voxel actual Encienda todos los voxels en cubo ( independiente de mset, MCLR y las instrucciones MINV ) Apague todos los voxels en cubo ( independiente de mset, MCLR y las instrucciones MINV ) Invierte todos los voxels en cubo ( independiente de mset, MCLR y las instrucciones MINV ) Traslado bfer de dibujo para mostrar y cargar valor en RHOLD registrarse en espera del temporizador Banderas Registro

SETALL CLRALL INVALL

MOSTRAR

VOX k, k, k VOXM TSTVOX

Carga RX, RY, RZ y voxel modify [0 <= k <= 4] Modificar voxel actual en RX, RY, RZ coordenadas . Voxel de prueba en corriente RX, RY, RZ coordenadas fzero claro si voxel en: set fzero voxel si fuera Dibujar carcter ASCII especificado en el registro r en la Y (vertical) Dibuja carcter ASCII especificado en el registro r en el Z (horizontal) avin Dibuja k valor ASCII de caracteres en el Y (vertical) [32 <= k <= 95] Dibuja k valor ASCII de caracteres en el Z (horizontal) plano [32 <= k <= 95] Fzero

RX, RY, RZ

CHYR r CHZR r CHY k CHZ k

LNEA k, k, k, k Modificar una lnea de voxels, especifique x inc, inc y, z inc, longitud LinEx Liney Linez PLANEX PLANEY PLANEZ RotateX SHXL SHXR Modificar la lnea de voxels en todo el eje X conjunto, situado en RY, RZ Modificar la lnea de voxels en todo el eje Y todo, situado en RX, RZ Modificar la lnea de voxels en todo el conjunto del eje Z, ubicado en RX, RY Modificar todos los voxels en el plano YZ, situados en el eje X en RX Modificar todos los voxels en el plano XZ, situados en el eje Y en RY Modificar todos los voxels en el plano XY, situado en el eje Z en RZ Rotar el cubo entero a lo largo de una lnea en y = 2, z = 2 en el eje x Buffer de dibujo a la izquierda un voxel. Cambie bfer de dibujo correcto voxel.

RX, RY, RZ

Shyu SHYD SHZF SHZB DECX Decy DECZ INCX INCY INCZ DECR r DECRSZ r INCR r INCRSZ r

Cambie bfer de dibujo hasta un voxel Cambie bfer de dibujo hacia abajo un voxel Cambie bfer de dibujo adelante un voxel Cambie tampn dibujo completo de nuevo un voxel Disminuir RX registro, modulo 5 Disminuir RY registro, modulo 5 Disminuir RZ registro, modulo 5 Incremento de RX registro, modulo 5 Incremento RY registro, modulo 5 Incremento RZ registro, modulo 5 Decrementa registro, mdulo 256 Decrementa registro, mdulo 256, Salta la siguiente instruccin si el resultado es cero Incremento registro, mdulo 256 Incremento registro, mdulo 256, Salta la siguiente instruccin si el resultado es cero Empuje el contenido del registro en la parte superior de la pila Tire de la parte superior del contenido de las pilas y ponerlo en un registro Empuje registra RX, RY, RZ a apilar Tire registra RX, RY, RZ de la pila Tire de entrada desde la parte superior de la pila y desecharla (a -) Intercambiar dos principales entradas de la pila. (Ab - ba) RX, RY, RZ r Fzero Fzero Fzero Fzero Fzero Fzero Fzero Fzero RX RY RZ RX RY RZ r r r r

PUSHR r PULLR r PUSHXYZ PULLXYZ DROP SWAP

DUP OVER ROT TSTZ

Duplicar entrada en la parte superior de la pila. (Ab - aab) Funciona en la pila: (ab - aba) Funciona en la pila: (abc - BCA) Prueba de valor en la parte superior de la bandera de pila y condicin fzero (a Fzero - a): a == 0 fzero conjunto, a = 0 fzero claro! saca dos valores de la pila, los suma juntos y empuja resultado de nuevo en la pila saca dos valores de la pila, los resta y empuja resultado de nuevo en la pila de orden es (TopOfStack-1) - (TopOfStack) -> TopOfStack Fzero Fcarry Fzero Fcarry

AADIR SUB Y Oregn XOR NO

saca dos valores de la pila, lleva a cabo un bit a bit 'Y' resultado es empujado Fzero hacia atrs en la pila saca dos valores de la pila, lleva a cabo un bit a bit 'OR' resultado es empujado hacia atrs en la pila Fzero

saca dos valores del stack, realiza resultado 'XOR' a nivel de bits es empujado Fzero hacia atrs en la pila tirar de valor desde la parte superior de la pila, le asigna el operador 'NO' operacin en el byte y empuje resultado de nuevo a apilar Compara el contenido del registro con k. Si el contenido de r == k luego Set fzero, de lo contrario fzero Borrado. Fzero

CMP r, k

Fzero

LDXYZ k, k, k LDR r, k LDRAND r, k LDTMR k

Carga RX, RY, RZ [0 <= k <= 4] ( ver tambin VOX k, k, k ) Cargar registro con el valor de k [0 <= k <= 255] Cargar registro de nmeros aleatorios en el rango [0 <= Random Number <k] Cargar temporizador con el periodo en segundos [1 <= k <= 255]

RX, RY, RZ r r

ADDTRND k

Agregar nmero aleatorio en el rango [0 <= Random Number <k] para contenido de temporizador Salta la siguiente instruccin si la bandera se establece fzero Salta la siguiente instruccin si la bandera est claro fzero Salta la siguiente instruccin si la bandera se establece Fcarry Salta la siguiente instruccin si la bandera est claro Fcarry Salta la siguiente instruccin si la funcin == 0 Ir a k de direcciones de programa Saltar a subrutina en direccin k Retorno de subrutina Semilla generador de nmeros aleatorios con valor distinto de cero de TMR0 Espere un flanco descendente en la entrada SW1 antes de continuar la ejecucin del programa o un temporizador a cabo Prueba de entrada SW1. Establecer bandera fzero si el interruptor activo (presionado), bandera fzero Clear si el interruptor no activa Fzero Fzero

SKIPZ SKIPNZ SKIPC SKIPNC SKIPTOUT SALTAR k JSR k RET RandSeed SYNCEXT k TSTSW

Detalles de instrucciones

MOSTRAR Todas las instrucciones de uso que operan en el buffer de dibujo. Esto permite una nueva imagen que se construye en el tampn de dibujo mientras que el cubo del LED muestra el contenido de la memoria intermedia de visualizacin. Para transferir el buffer de dibujo en el bfer de pantalla debe utilizar la instruccin SHOW. Cuando la instruccin se ejecuta espectculo se va a esperar para el mantenimiento de retardo previo a completar si todava est activo. A continuacin, establece el indicador de transferencia tampn y espera a que el controlador de pantalla para copiar el bfer de dibujo en la

memoria intermedia de visualizacin y borrar el indicador de transferencia. En este momento el valor en RHOLD se transfiere en el temporizador de retencin y las salidas de instrucciones. Temporizador RHOLD es el perodo que esperar 10 ms x. Si RHOLD es 0, el bfer se transfiere a la actualizacin de cubo siguiente pantalla. Este comando est bloqueando, la ejecucin del programa no continuar hasta que el temporizador de retencin actual ha agotado el tiempo y el controlador de pantalla de interrupcin ha transferido el tampn.

Mset, MCLR, MINV instrucciones de controlar el funcionamiento de VOX, PUT, LINE y las instrucciones de avin. Mset convierte en voxels MCLR se apaga voxels MINV invierte el estado del voxel actual

El modo operativo se mantiene en efecto hasta que sea cambiado por otra instruccin.

VOX RX, RY, RZ / VOXM / TSTVOX instrucciones operan en un solo Voxel El voxel se modifica de acuerdo con el modo actual establecido por mset / MCLR / MINV instruccin. VOX RX, RY, RZ cargas coordina en RX, RY, RZ y modifica el voxel VOXM modifica los voxels utilizando actual RX, RY y RZ coordenadas Prueba TSTVOX el voxel en el actual RX, RY, RZ coordenadas y luego establece el indicador fzero. bandera fzero se borra si el voxel est encendido, fzero se establece si el voxel est apagado

SETALL, CLRALL y INVALL instrucciones operan en todo el cubo Estas instrucciones funcionan independientemente del modo de Voxel actual fijado por el mset, MCLR, instrucciones MINV.

Pila de operaciones Pila de notacin: (pila antes - despus pila) SWAP por ejemplo, (ab - ba) PUSHXYZ (- ZYX) PULLXYZ (ZYX -)

Estas dos instrucciones de empujar y tirar de los ejes X, Y y Z se registra en / desde la pila de usuario en un solo comando.El orden de los registros se insertan en la pila es XYZ, por lo que el registro Z est en el tope de la pila despus de una instruccin PUSHXYZ. PUSHR Rn (- Rn) PULLR Rn (Rn -)

Empuje o tire del registro nico a / desde la parte superior de la pila de usuario DROP de la pila

(a -)

descarta la entrada superior

SWAP (ab - ba) intercambia los dos valores superiores de la pila DUP (a - aa) duplica la entrada superior en la parte superior de la pila MS (ab - aba) inserta una copia de la entrada de la pila superior detrs de la segunda entrada ROT (abc - BCA) gira los tres mejores en la pila.

LDTMR, ADDTRND y SKIPTOUT instrucciones de controlar el funcionamiento de un temporizador de usuario.

El temporizador se carga con el nmero de segundos requeridos para el perodo del temporizador. A continuacin, la cuenta atrs hasta que llega a cero y se detiene. La instruccin SKIPTOUT prueba el valor actual del contador de tiempo y se saltar la siguiente instruccin al llegar a cero. Instruccin ADDTRND aade un valor aleatorio entre 0 y 1-k al valor ya en el temporizador. Esto permite que el temporizador se carga con un valor aleatorio entre dos valores, mediante el uso de una instruccin de LDTMR seguida por una instruccin ADDTRND.

SYNCEXT La instruccin de sincronizacin externa espera a un flanco descendente en la entrada S1 o un tiempo de espera antes de continuar la ejecucin del programa. Si el valor de tiempo de espera se establece en 0, la instruccin espera indefinidamente una flanco de bajada antes de continuar. Si el valor de tiempo de espera se ajusta entre 1 y 255, la instruccin espera hasta que un flanco de bajada se detecta o el temporizador llegue a 0. Las disminuciones del temporizador a intervalos de un segundo y se comparte con las instrucciones de temporizador. El temporizador no se borra si las salidas de instruccin en un flanco de bajada. La bandera fzero se establece si las salidas de instruccin en un flanco descendente, y se aclar si sale en un tiempo de espera. SYNCEXT 0; esperar indefinidamente a que el flanco descendente de la entrada S1 antes de continuar SYNCEXT 12; espera durante 12 segundos, o en su defecto en el borde de entrada S1 antes de continuar No hay software de eliminacin de rebotes implementado en esta entrada de control, que espera una seal de nivel lgico limpio. TSTSW La instruccin TSTSW lee el nivel lgico en la entrada del interruptor. Si el nivel lgico es baja (botn presionado) la bandera fzero se establece, si el nivel lgico es alta (conmutador no presionado) la bandera fzero se borra. Esta instruccin

no est bloqueando la entrada se pone a prueba, la bandera fzero acondicionado y contina la ejecucin de cdigo.

DECRSZ y INCRSZ instrucciones de no modificar la bandera fzero. Decr y INCR instrucciones se modifican la bandera fzero. Agradezco esta no parece lgico, pero que refleja la forma en que el PIC subyacente instrucciones de trabajo. INCX, INCY, INCZ y DECX, Decy, DECZ instrucciones se modifique la bandera fzero. Estas instrucciones utilizan Modulo 5 para el incremento / decremento de modo que los incrementos de nmeros de 4 -> 0 y disminuye a partir de 0 -> 4. Es importante sealar que la DECR, INCR, DECRSZ, INCRSZ se puede utilizar en todos los registros, incluyendo RX, RY, RZ.Sin embargo, esto puede llevar a un valor en el registro que est fuera del rango vlido de 0 = <Rxyz = <4 desde estas instrucciones operan en el byte de mdulo 256. Instrucciones que siguen y operar sobre los valores en los registros de RX, RY, RZ puede hacer que el firmware PIC subyacente se bloquee si el valor est fuera del rango esperado.

SHXL, SHXR, Shyu, SHYD, SHZF, SHZB instrucciones cambiar todo el buffer de dibujo un voxel en la direccin especificada.Los voxels en el borde entrante del turno se borran (desactivado)

Ejemplo. Desplazar hacia abajo: Antes Despus

LNEA x_inc, y_inc, z_inc, longitud Esta instruccin modifica una lnea de voxels. x_inc, y_inc z_inc y puede tener un valor de -1, 0 o 1 El punto de inicio de la lnea es el valor actual en RX, RY, RZ Despus de que el voxel en RX, RY, RZ ha sido modificado: RX = RX + x_inc: RY RY = + y_inc: RZ RZ = + z_inc: Longitud Longitud = -1 Esto se repite hasta que la longitud == 0 La instruccin Line dejar RX, RY y RZ valores establecida en el punto final de la lnea. Esto permite que la instruccin de lnea consecutivo para dibujar una nueva lnea a partir del punto final de la lnea anterior. La operacin de incremento / decremento en los registros son modulo 5 de modo que el decremento rodarn en virtud de 0 a 4 y de nuevo el incremento pasa por encima de 4 a 0

ejemplos

Mset LDXYZ 0,0,0 LINE 1, 1, 1, 5 traza una lnea a travs de los voxels siguientes RX 0 1 2 3 4 RY 0 1 2 3 4 RZ 0 1 2 3 4

Mset LDXYZ 0,4,2 LNEA 0, -1, 1, 2 traza una lnea a travs de los voxels siguientes RX 0 0 RY 4 3 RZ 2 3

Mset LDXYZ 2,2,2 LNEA -1, 0, 1, 4 traza una lnea a travs de los voxels siguientes

Mset LDXYZ 0,0,0 LNEA 0, 0, 1, 5 traza una lnea a travs de los voxels siguientes RX 0 0 0 0 0 RY 0 0 0 0 0 RZ 0 1 2 3 4

RX 2 1 0 4

RY 2 2 2 2

RZ 2 3 4 0 <- Vuelco

LinEx, Liney, Linez Estas instrucciones se dibuja una lnea larga duracin a travs de un eje en el buffer de dibujo. Los vxeles en la lnea se establece, borra o invierte de acuerdo con el modo actual fijado por el MCLR ms reciente, mset o instruccin

MINV. Estas tres instrucciones se ejecutan ms rpido que utilizar la instruccin LINE.

LinEx situado en los planos YZ por los valores actuales de RY y RZ Liney situado en los planos XZ por los valores actuales de RX y RZ Linez situado en los planos XY por los valores actuales de RX y RY El RX, RY y RZ valores de registro se han modificado por estas instrucciones. Ejemplo de LinEx. Los valores en RY y RZ registra localizar la lnea en el eje YZ. El valor de RX registro se ignora

PLANEX, PLANEY, PLANEZ Las instrucciones PLANE llenar un plano entero en el buffer de dibujo. Los vxeles en el plano se establecer, borra o se invierte en funcin del modo actual definido por el MCLR ms reciente, mset o instruccin MINV.

Valor en RX especifica la posicin a lo largo del eje X CHZ, CHZR, CHY, CHYR

Valor de RY especifica la posicin a lo largo del eje Y

Valor RZ especifica en posicin a lo largo del eje Z

Un conjunto de caracteres de 5x5 se ha definido para los caracteres ASCII en el intervalo de 32 a 95. Esto cubre 0-9 y AZ en maysculas junto con la mayora de los smbolos.

Los caracteres se pueden extraer en el plano XY a lo largo del eje Z o el plano XZ en el eje-Y. No hay soporte para la elaboracin de caracteres en el plano YZ. Carcter 'A' en el plano XZ valor de RY carcter posiciones en el plano Y

Carcter 'A' en el plano XY valor en RZ carcter posiciones en el plano Z

Dada la forma en que el PLANEY y comandos PLANEZ trabajo que se puede esperar rdenes de la CHi y CHZ a trabajar al revs opuesto a la forma en que lo hacen y no me acuerdo, pero si lo cambio ahora se rompe cualquier pueblo de cdigo Ya ha escrito.

You might also like