UNIVERSIDAD NACIONAL DE PIURA
FACULTAD DE INGENIERA INDUSTRIAL
ESCUELA PROFESIONAL DE INGENIERA INFORMATICA
CURSO : CIRCUITOS ELECTRICOS Y ELECTRONICOS
TEMA
: SIMULACION DE UN SECUENCIADOR DE LUCES
DOCENTE
: ESTRADA CRISANTO C.
CICLO
INTEGRANTES
: ANDRADE SILVA DARWIN CALDERON DE LA CRUZ MARTIN SUAREZ CHIROQUE JHONY RAMIREZ CORONADO LUIS ZETA MIRANDA JORGE
PROYECTO FINAL SECUENCIADOR DE LUCES
ESTE PROYETO TIENE LA FINALIDAD DE EXPLICAR COMO GFUNCIONAN LOS DIODOS ,EN ESTE CASO EMPLEAREMOS UN TIPO DE DIODO LED, QUE EN COMBINACION CON OTRO ELEMENTOS ELECTRONICOS SIMPLES COMO RESISTORES (RESISTENCIAS),LOGICSTATE(ESTADOS LOGICOS),LED-GREEN(LED DE COLOR VERDE), HASTA COMPONENETES MAS COMPLEJOS : LOS PIC(16F84A), NOS DARAN UNA SECUENCIA DE LUCES. EL SECUENCIADOR DE LUCES ESTA COMPUESTO POR LOS ELEMNTOS MENCIONADOS ANTERORIORMENTE, ESTE SERA PRESENTADO EN UN SOFTWARE DE SIMULACION DE CIRCUITOS ELECTRONICOS: PROTEUS, ADEMAS PARA QUE ESTE PUEDE CORRER SIN NINGUN PROBLEMA SE HARA USO DE LA PROGRAMACION EN C, PARA ESO UTILIZAREMOS UN COMPILADOR QUE NOS GENERARA ARCHIVOS DE EXTENSION *.HEX : PIC-C.
INICIANDO NUESTRO PROYECTO
PROTEUS (ISIS) es un potente programa de diseo electrnico que permite realizar esquemas que pueden ser simulados en el entorno VSM o pasados a un circuito impreso ya en el entorno ARES. Posee una muy buena coleccin de libreras de modelos tanto para dibujar, simular o para las placas. Adems, permite la creacin de nuevos componentes, su modelizacin para su simulacin e, incluso, la posibilidad de solicitar al fabricante que cree un nuevo modelo. Sin entrar profundamente en cmo utilizar dicho programa, a continuacin se explican las bases para dibujar cualquier circuito electrnico. El entorno ISIS posee un entorno de trabajo (figura 1) formado por distintas barras de herramientas.
Para dibujar, lo primero es colocar los distintos componentes en la hoja de trabajo. Para ello, se selecciona el modo componente (figura2) y acto seguido, realizar una pulsacin sobre el botn P de la ventana de componentes y libreras (figura3).
FIGURA2
Figura3
Tras activar el botn P se abre la ventana para la edicin de componentes (figura4) donde se puede buscar el componente adecuado y comprobar sus caractersticas. Al localizar el componente adecuado se realiza una doble pulsacin en l, de tal forma que aparezca en la ventana de componentes y libreras (figura5). Se puede realizar esta accin tantas veces como componentes se requiere incorporar al esquema. Una vez definido el proceso se puede cerrar la edicin de componentes.
Para situar un componente en el esquema tan solo debemos seleccionarlo de la lista. Al hacerlos se puede comprobar su orientacin (tal como se representara en el esquema) en la ventana de edicin (figura6). Si deseamos modificar la rotacin o la reflexin del componente podemos acceder a ello a travs de la barra de herramientas correspondiente (figura7). Haciendo de esta forma todos los componentes de la lista tendrn la misma orientacin (si se desea orientar un nico componente deberemos hacerlo una vez ya situado en el esquema).
Ahora solo falta realizar una pulsacin sobre la ventana de trabajo y se colocara el componente. El cursor del ratn se convierte en un lpiz [Link] pueden colocar varios componentes del mismo tipo simplemente realizando varias pulsaciones. Para terminar de colocar un componente se debe seleccionar otro componente de la lista o pasar a otro modo de trabajo. Una vez situados los componentes en el rea de trabajo se pueden mover, al pasar por encima del componente el curso se convierte en una mano con una cruz, indicando que se puede mover el componente (quedan seleccionados al poner rojo) y se puede arrastrar. Tambin se puede cambiar su orientacin utilizando los comandos de rotacin y reflexin a travs de una pulsacin con el botn derecho sobre ellos.
Para unir los componentes con cables hay que situarse en los extremos de los terminales, el cursor se convierte en un lpiz verde. Ahora se pueden ejecutar dos acciones o ir marcando el camino hasta el destino con distintas pulsaciones o realizar, directamente, una pulsacin en el destino y dejar que ISIS realice el camino.
Para unir cables virtualmente es a travs de terminales. Al activar el modo terminal (figura)se pueden seleccionar distintos tipos de terminales, entre ellos el utilizado por defecto(default). Al utilizar este terminal en varios componentes y darle el mismo nombre en todos ellos se consigue la unin elctrica. Mediante este modo tambin se pueden colocar las masas y alimentaciones del circuito utilizando las opciones Ground y Power (figura). De esta forma se puede finalizar el circuito (figura).
Tan solo queda modificar las caractersticas de los componentes que lo requieran por ejemplo modificando el valor de los componentes pasivos. Para ello, seleccionamos un componentes realizando una pulsacin con el
botn derecho, aparece el men contextual y se selecciona la opcin EDIT PROPERTIES; tambin se puede utilizar el modo edicin donde se pueden cambiar las caractersticas de los componentes (figura13), por ejemplo la resistencia de 10K a [Link] se pueden editar directamente la referencia o el valor de un componente si la pulsacin se realiza encima de estos elementos.
Con esto quedara finalizado aparentemente nuestro circuitos electrnico pero quen psaria si le damos Play se nos producir una serie de errores ya que no se han modificado las propiedades del micro-controlador. Tal vez lo ms importante es que permite cargar en el micro controlador el archivo de programa (*.HEX) generado en la compilacin.
COPILADOR CSC C (FUENTE DE VIDA DEL MICROCONTROLADOR)
El compilador C de CCS ha sido desarrollado especficamente para PIC MCU, obteniendo la mxima optimizacin del compilador con estos dispositivos. Dispone de una amplia librera de funciones predefinidas, comandos de procesado y ejemplos. Adems, suministra los controladores (drivers) para diversos dispositivos como LCD, convertidores AD, relojes en tiempo real, EEPROM serie, etc. Un compilador convierte el lenguaje de alto nivel a instrucciones en cdigo maquina; un cross-compiler es un compilador que funciona en un procesador (normalmente en una PC) diferente al procesador objeto. El compilador CCS C es un cross-compiler. Los programas son editados y compilados a instrucciones maquina en el entorno de trabajo del PIC, el cdigo maquina puede ser cargado del PIC al sistema PIC mediante el ICD2 (o mediante cualquier programador) y pude ser depurado (puntos de ruptura, paso a paso) desde el entorno de trabajo del PIC. El CCS C es C estndar y, adems de las directivas estndar (#include, etc.) suministra unas directivas especficas para PIC (#device, etc.); adems incluye funciones especficas (bit_set (), etc.). Se suministra con un editor que permite controlar la sintaxis del programa. ESTRUCTURA DE UN PROGRAMA Para escribir un programa en C con el CCS C se deben tener en cuenta una serie de elementos bsicos de su estructura.
DIRECTIVAS DE PREPROCESADO: controlan la conversin del programa a cdigo maquina por
parte del compilador. PROGRAMAS o FUNCIONES: conjunto de instrucciones. Pueden haber uno o varios; en cualquier caso siempre debe haber uno definido como principal mediante la inclusin de la llamada main (). INSTRUCCIONES: indican como debe comportar el PIC en todo momento.
COMENTARIOS: permiten describir lo que significa cada lnea del programa.
TIPOS DE DATOS
CCS C acepta los siguientes tipos de datos: TIPO Short Int Long Int32 Float Char Void TAMAO 1 bit 8 bit 16 bit 32 bit 32 bit 8 bit RANGO 0a1 0 a 255 0 a 65.535 0 a [Link] 1.175x10-38 a 3.402x10+38 0 a 255 DESCRIPCION Entero de 1 bit Entero Entero de 16 bits Entero 32 bit Como flotante Carcter Sin valor
LAS CONSTANTES 123 0123 0x123 0b010010 x \010 xA5 Decimal Octal(0) Hexadecimal(0x) Binario(0b) Carcter Carcter octal Carcter hexadecimal
Adems, se pueden definir constantes con un sufijo: Int8 Long Signed INT16 Float Char 127U 80ul 80L 3.14F Con comillas simples C
Tambin se definen caracteres especiales, algunos como: \n \r \t \b Cambio de lnea Retorno de carro Tabulacin backspace
VARIABLES Las variables se utilizan para nombrar posiciones de memoria RAM, se deben declarar, obligatoriamente, antes de utilizarlas de la siguiente forma: TIPO NOMBRE_VARIABLE [=VALOR INICIAL] TIPO hace referencia a cualquiera de los tipos de datos. El NOMBRE_VARIABLE pude ser cualquiera y el valor inicial es opcional. Veamos un ejemplo: Float temp_limit=500.0; Las variables definidas en un programa pueden ser de tipo LOCAL o GLOBAL. Las variables locales solo se utilizan en la funcin donde se encuentran declaradas; las variables globales se pueden utilizar en todas las funciones del programa. Ambas deben declararse antes de ser utilizadas y las globales deben declararse antes
de que cualquier funcin y fuera ellas. Las variables globales son puestas a cero cuando se inicia la funcin principal main (), #include <16f84a.h> #USE DELAY (CLOCK=4M) Int16 counter; Void FUNCION (void) { Char k, cont=o } // variables locales // variable global
Operadores
*Asignacin += -= *= /= %= <<= >>= &= |= ^= Asignacin de suma (x+=y es lo mismo que x=x+y) Asignacin de resta (x-=y es lo mismo que x=x-y) Asignacin de multiplicacin (x*=y es lo mismo que x=x*y) Asignacin de divisin (x/=y es lo mismo que x=x/y) Asignacin del resto de la divisin(x%=y es lo mismo que x=x%y) Asignacin de desplazamiento a la izquierda (x<<=y es igual x=x<<y) Asignacin de desplazamiento a la izquierda (x>>=y es igual x=x>>y) Asignacin AND de bits (x&=y es lo mismo que x=x&y) Asignacin OR de bits (x|=y es lo mismo que x=x|y) Asignacin OR EXCLUSIVA de bits (x^=y es lo mismo que x=x^y)
ARITMETICOS
+ * / % ++ -Sizeof Suma Resta Multiplicacin Divisin Modulo, resto de una divisin entera Incremento Decremento Determina el tamao, en bytes, de un aperando
En las operaciones de decremento e incremento, en funcin de la posicin del aperador, se consigue un preincremento (++A) o un pos-incremento(A++). a=3; b=4*a++; a=3; b=4*++3//b=16 y a=4; //b=4 y a=4;
Relacionales
< > >= <= == = ?: Menor que Mayor que Mayor igual que Menor igual que Igual Distinto Expresin condicional
Lgicos
! && || NOT AND OR
Funciones
Las funciones son bloques de sentencias; todas las sentencias se deben enmarcar dentro de las funciones. Al igual que las variables, las funciones deben definirse antes de utilizarse. Una funcin puede ser invocada desde una sentencia de otra funcin. Una funcin pude devolver un valor a la sentencia que la ha llamado. El tipo de datos se indica en la definicin de la funcin; en el caso de no indicarse nada se entiende que es un int8 y en el caso de no devolver un valor se debe especificar el valor VOID. La funcin, adems de devolver un valor, puede recibir parmetros o argumentos. Declaraciones de control: Las declaraciones son usadas para controlar el proceso de ejecucin del programa. Las que admite CCS son:
If-else While Do-while For Switch-case Return
IF-ELSE Con la ayuda de IF-ELSE se pueden tomar decisiones. If (expresin) Sentencia_1; Else Sentencia_2:
Primero se evala la Expresin si es cierta (TRUE o 1) ejecuta la SENTENCIA_1 en el caso contrario (FALSE o 0) ejecuta la sentencia_2.
FOR
Se usa para repetir sentencias. For (inicializacin; condicin de finalizacin, incremento) { Sentencias; }
En las expresiones del FOR la inicializacin es una variable a la cual se le asigna un valor inicial con el que contrala el bucle. La condicin de finalizacin sirve para evaluar ANTES de ejecutar las sentencias si es cierta o no, en el caso de ser cierta se ejecuta las sentencias y en caso contrario se sale del for. Por ltimo, la expresin de incremento o decremento modifica la variable de control DESPUES de ejecutar el bucle. Si se ejecutan la siguiente expresin se consigue un BUCLE SIN FIN: For ( { ; ; )
Sentencias; }
Comentarios Los comentarios en el programa facilitan la comprensin de las distintas expresiones tanto para el programador como para quien tiene que interpretar dicho programa. No afectan a la compilacin por lo que pueden ser tan extensos como el programador quiera. Se pueden colocar en cualquier parte del programa y con dos formatos: Utilizando //. Al colocar estos signos se comienza el comentario y finaliza en el final de la lnea. //comentario que terminara al final de esta lnea Utilizando /*y*/. Se debe utilizar al inicio y al final de comentario, pero no pueden repetirse del mimo comentario /*Este comentario no finaliza al final de esta lnea Finaliza cuando se cierre el comentario */
ENTORNO DE TRABAJO
El entorno de trabajo del CCS en PCW y PCWH permite compilar y tambin suministra una gran variedad de herramientas auxiliares. En la figura se muestran los distintos elementos bsicos del entorno de trabajo. Existen dos formas de iniciar una sesin: abriremos un fichero de cdigo fuente o creando un proyecto
Para abrir un fichero fuente directamente se realiza una pulsacin sobre el icono para el manejo de ficheros (figura3) apareces un men donde podemos crear, abrir, guardar o cerrar ficheros. Con el comando NEW podemos crear un fichero fuente, un proyecto, un fichero RTF o un fichero de diagrama de flujo.
Si se ejecuta el comando PROJECT WIZARD, tras pedir el nombre del nuevo proyecto aparece la ventana de configuracin con dos pestaas, una para configurar las distintas opciones que se muestran en la barra izquierda y otra donde se muestra el cdigo resultante de la configuracin (figura). Recorriendo las distintas opciones (general, comunicaciones, etc.) se llega a obtener el cdigo de configuracin deseado, tras la cual ya podemos empezar a escribir el resto del cdigo del programa. Debemos observar cmo se incluye un fichero de cabecera *.h donde se encuentra la configuracin del dispositivo (figura).
EL PRIMER PROGRAMA
La opcin del PROYECT WIZARD es muy cmoda pero para comenzar a trabajar con CCS C, se recomienda iniciar los ficheros de cdigo fuente directamente hasta que el programador adquiere los conocimientos bsicos para manejar esta opcin. Lo primero es utilizar el fichero de cabecera donde se especifican las caractersticas del microcontralodor PIC: # include <16f84a.h> Este fichero suministra CCS y lo incorpora en el directorio de dispositivos (devices). El compilador de querer incluir ficheros que se encuentren en otros directorios. Tiene una ruta de bsqueda para los ficheros #include, esta ruta se puede modificar en el caso q se encuentren en otro directorio. A continuacin se definen, mediante las correspondientes directivas, la velocidad del PIC. Es importante definir la velocidad inmediatamente despus del PIC ya que muchos drivers la necesitan para configurarse. #use delay (clock=4M) Despus de haber definido la velocidad del PIC ahora es necesario definir lo que seria los LED en si, esto se hace mediante un array comnmente llamaos arreglos o vectores, estos son estructuras dinmicas que se utilizan para almacenar cualquier tipo de datos. En nuestro caso llenaremos nuestro array con ocho elementos que sern las posiciones de los DIODOS-LEDS.
int vector[8]={0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};
*cada posicin viene dada con valor binario. Ahora se puede escribir la funcin principal MAIN () donde ira el cdigo que har funcionar el secuenciador de luces: Int i,cont For ( ; ; ) For(i=0;i<=7;i=i+cont) Output_b(vector[i]) Delay_ms(40) Declaramos nuestras variables locales Este for har un bucle infinitos de repeticiones para que los LEDs nunca se apaguen Este for se utiliza para recorrer el arreglos definido anteriormente(recordemos que los array se comienzan a recorrer desde el ndice 0) Esta lnea sirve para dar salida a a cada posicin del vector, en otra palabras se encienden los LEDs de acuerdo a la posicin que se van definiendo. Declaramos que la velocidad de prenderse los LEDs ser de 40 milisegundos, esto nmero puede variar.
Esto sera el cdigo en si del secuenciador de luces pero para darle ms complejidad le agregarnos un cambio de estado, es decir cada que ves que el LOGICSTATE este en cero los LEDS se prendern en forma impar, si por el contrario el LOGICSATE se encuentra en 1 los LEDS se encendern secuencialmente.
Para conseguir esto es el mismo cdigo definido anteriormente solo que se le agrega unas condiciones: Int i,cont For ( ; ; ) For(i=0;i<=7;i=i+cont) If(input(pin_a0)) Cont=1; Else cont=2 Output_b(vector[i]) Delay_ms(40) Declaramos nuestras variables locales. Este for har un bucle infinitos de repeticiones para que los LEDs nunca se apaguen. Este for se utiliza para recorrer el arreglos definido anteriormente (recordemos que los array se comienzan a recorrer desde el ndice 0). Esta condicin nos pregunta si el LOGICSTATE est en 1 Si de haberse cumplido la condicin la variable cont se cambia a 1 y el encendido de luces ser secuencial. De caso contrario la variable cont cambia a 2, lo que las luces se prendern en forma impar. Esta lnea sirve para dar salida a cada posicin del vector, en otra palabras se encienden los LEDs de acuerdo a la posicin que se van definiendo. Declaramos que la velocidad de prenderse los LEDs ser de 40 milisegundos, este nmero puede variar.
EL CODIGO FUENTE COMPLETO
CODIGO FUENTE
Despus de haber terminado nuestro cdigo ahora si lo que hacemos es compilarlo para generar el archivo *.HEX que ser utilizado en el PIC, para ello en la barra de herramientas le damos BUILD ALL(construir todo) luego nos saldr una ventana donde nos muestra la complicacin del archivo y el espacio que se utiliza en ROM Y RAM.
Despus de eso obtendremos los archivos *.HEX
Para agregar el archivo al PIC solo le damos clic al componente que se encuentra en ISIS y nos saldr una ventana, le damos clic en el botn de carpeta donde nos dar a elegir el archivo seleccionamos el archivo generado anteriormente y listo damos aceptar y el proyecto correr sin ningn problema.
CIRCUITO CORRIENDO ESTADO1
CIRCUITO CORREINO EN ESTADO 0
LISTO..!!!!!!!!!!!!!!!!!!!!