Proyecto Final Secuenciador de Luces

24
UNIVERSIDAD NACIONAL DE PIURA FACULTAD DE INGENIERÍA INDUSTRIAL ESCUELA PROFESIONAL DE INGENIERÍA INFORMATICA CURSO : CIRCUITOS ELECTRICOS Y ELECTRONICOS TEMA : SIMULACION DE UN SECUENCIADOR DE LUCES DOCENTE : ESTRADA CRISANTO C. CICLO : V INTEGRANTES : ANDRADE SILVA DARWIN CALDERON DE LA CRUZ MARTIN SUAREZ CHIROQUE JHONY RAMIREZ CORONADO LUIS ZETA MIRANDA JORGE

Transcript of Proyecto Final Secuenciador de Luces

Page 1: Proyecto Final Secuenciador de Luces

UNIVERSIDAD NACIONAL DE

PIURA FACULTAD DE INGENIERÍA INDUSTRIAL

ESCUELA PROFESIONAL DE INGENIERÍA INFORMATICA

CURSO : CIRCUITOS ELECTRICOS Y ELECTRONICOS

TEMA : SIMULACION DE UN SECUENCIADOR DE LUCES

DOCENTE : ESTRADA CRISANTO C.

CICLO : V

INTEGRANTES :

ANDRADE SILVA DARWIN

CALDERON DE LA CRUZ MARTIN

SUAREZ CHIROQUE JHONY

RAMIREZ CORONADO LUIS

ZETA MIRANDA JORGE

Page 2: Proyecto Final Secuenciador de Luces
Page 3: Proyecto Final Secuenciador de Luces

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.

Page 4: Proyecto Final Secuenciador de Luces

INICIANDO NUESTRO PROYECTO

PROTEUS (ISIS) es un potente programa de diseño electrónico 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 colección de librerías de modelos tanto para dibujar, simular o para las placas. Además,

permite la creación de nuevos componentes, su modelización para su simulación e, incluso, la posibilidad de

solicitar al fabricante que cree un nuevo modelo.

Sin entrar profundamente en cómo utilizar dicho programa, a continuación se explican las bases para dibujar

cualquier circuito electrónico. 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 pulsación sobre el botón P de la ventana de

componentes y librerías (figura3).

Page 5: Proyecto Final Secuenciador de Luces

FIGURA2 Figura3

Tras activar el botón P se abre la ventana para la edición de componentes (figura4) donde se puede buscar el

componente adecuado y comprobar sus características.

Al localizar el componente adecuado se realiza una doble pulsación en él, de tal forma que aparezca en la

ventana de componentes y librerías (figura5). Se puede realizar esta acción tantas veces como componentes

se requiere incorporar al esquema. Una vez definido el proceso se puede cerrar la edición de componentes.

Page 6: Proyecto Final Secuenciador de Luces

Para situar un componente en el esquema tan solo debemos seleccionarlo de la lista. Al hacerlos se puede

comprobar su orientación (tal como se representara en el esquema) en la ventana de edición (figura6). Si

deseamos modificar la rotación o la reflexión del componente podemos acceder a ello a través de la barra de

herramientas correspondiente (figura7).

Haciendo de esta forma todos los componentes de la lista tendrán la misma orientación (si se desea orientar

un único componente deberemos hacerlo una vez ya situado en el esquema).

Ahora solo falta realizar una pulsación sobre la ventana de trabajo y se colocara el componente. El cursor del

ratón se convierte en un lápiz blanco.se 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. También se puede cambiar su orientación

utilizando los comandos de rotación y reflexión a través de una pulsación con el botón derecho sobre ellos.

Page 7: Proyecto Final Secuenciador de Luces

Para unir los componentes con cables hay que situarse en los extremos de los terminales, el cursor se

convierte en un lápiz verde. Ahora se pueden ejecutar dos acciones o ir marcando el camino hasta el destino

con distintas pulsaciones o realizar, directamente, una pulsación en el destino y dejar que ISIS realice el

camino.

Page 8: Proyecto Final Secuenciador de Luces

Para unir cables virtualmente es a través 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 unión eléctrica.

Mediante este modo también 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 características de los componentes que lo requieran por ejemplo modificando el

valor de los componentes pasivos. Para ello, seleccionamos un componentes realizando una pulsación con el

Page 9: Proyecto Final Secuenciador de Luces

botón derecho, aparece el menú contextual y se selecciona la opción EDIT PROPERTIES; también se puede

utilizar el modo edición donde se pueden cambiar las características de los componentes (figura13), por

ejemplo la resistencia de 10K a 300K.tambien se pueden editar directamente la referencia o el valor de un

componente si la pulsación se realiza encima de estos elementos.

Con esto quedaría finalizado aparentemente nuestro circuitos electrónico 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 más importante es que permite cargar en el micro controlador el archivo de programa (*.HEX) generado

en la compilación.

Page 10: Proyecto Final Secuenciador de Luces

COPILADOR CSC C (FUENTE DE VIDA DEL

MICROCONTROLADOR)

El compilador C de CCS ha sido desarrollado específicamente para PIC MCU, obteniendo la máxima

optimización del compilador con estos dispositivos. Dispone de una amplia librería de funciones predefinidas,

comandos de procesado y ejemplos. Además, 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 código 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 código 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 estándar y, además de las directivas estándar (#include, etc.) suministra unas directivas

específicas para PIC (#device, etc.); además incluye funciones específicas (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 básicos de su

estructura.

DIRECTIVAS DE PREPROCESADO: controlan la conversión del programa a código 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 inclusión de la llamada main ().

INSTRUCCIONES: indican como debe comportar el PIC en todo momento.

Page 11: Proyecto Final Secuenciador de Luces

COMENTARIOS: permiten describir lo que significa cada línea del programa.

TIPOS DE DATOS

CCS C acepta los siguientes tipos de datos:

TIPO TAMAÑO RANGO DESCRIPCION

Short 1 bit 0 a 1 Entero de 1 bit

Int 8 bit 0 a 255 Entero

Long 16 bit 0 a 65.535 Entero de 16 bits

Int32 32 bit 0 a 4.294.967.295 Entero 32 bit

Float 32 bit 1.175x10-38 a 3.402x10+38 Como flotante

Char 8 bit 0 a 255 Carácter

Void - - Sin valor

Page 12: Proyecto Final Secuenciador de Luces

LAS CONSTANTES

123 Decimal

0123 Octal(0)

0x123 Hexadecimal(0x)

0b010010 Binario(0b)

‘x’ Carácter

‘\010’ Carácter octal

‘xA5’ Carácter hexadecimal

Además, se pueden definir constantes con un sufijo:

Int8 127U

Long 80ul

Signed INT16 80L

Float 3.14F

Char Con comillas simples ‘C’

También se definen caracteres especiales, algunos como:

\n Cambio de línea

\r Retorno de carro

\t Tabulación

\b 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 función 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

Page 13: Proyecto Final Secuenciador de Luces

de que cualquier función y fuera ellas. Las variables globales son puestas a cero cuando se inicia la función

principal main (),

#include <16f84a.h>

#USE DELAY (CLOCK=4M)

Int16 counter; // variable global

Void FUNCION (void)

{

Char k, cont=’o’ // variables locales

}

Operadores

*Asignación

+= Asignación de suma (x+=y es lo mismo que x=x+y)

-= Asignación de resta (x-=y es lo mismo que x=x-y)

*= Asignación de multiplicación (x*=y es lo mismo que x=x*y)

/= Asignación de división (x/=y es lo mismo que x=x/y)

%= Asignación del resto de la división(x%=y es lo mismo que x=x%y)

<<= Asignación de desplazamiento a la izquierda (x<<=y es igual x=x<<y)

>>= Asignación de desplazamiento a la izquierda (x>>=y es igual x=x>>y)

&= Asignación AND de bits (x&=y es lo mismo que x=x&y)

|= Asignación OR de bits (x|=y es lo mismo que x=x|y)

^= Asignación OR EXCLUSIVA de bits (x^=y es lo mismo que x=x^y)

ARITMETICOS

+ Suma

- Resta

* Multiplicación

/ División

% Modulo, resto de una división entera

++ Incremento

-- Decremento

Sizeof Determina el tamaño, en bytes, de un aperando

Page 14: Proyecto Final Secuenciador de Luces

En las operaciones de decremento e incremento, en función de la posición del aperador, se consigue un pre-

incremento (++A) o un pos-incremento(A++).

a=3;

b=4*a++; //b=4 y a=4;

a=3;

b=4*++3 //b=16 y a=4;

Relacionales

< Menor que

> Mayor que

>= Mayor igual que

<= Menor igual que

== Igual

¡= Distinto

?: Expresión condicional

Lógicos

! 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 función puede ser invocada desde una sentencia de otra función. Una función pude devolver un valor a

la sentencia que la ha llamado. El tipo de datos se indica en la definición de la función; 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 función, además de devolver un valor, puede recibir parámetros o argumentos.

Declaraciones de control:

Las declaraciones son usadas para controlar el proceso de ejecución del programa.

Las que admite CCS son:

Page 15: Proyecto Final Secuenciador de Luces

If-else

While

Do-while

For

Switch-case

Return

IF-ELSE

Con la ayuda de IF-ELSE se pueden tomar decisiones.

If (expresión)

Sentencia_1;

Else

Sentencia_2:

Primero se evalúa la Expresión 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 (inicialización; condición de finalización, incremento)

{

Sentencias;

}

En las expresiones del FOR la inicialización es una variable a la cual se le asigna un valor inicial con el que

contrala el bucle. La condición de finalización 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

expresión de incremento o decremento modifica la variable de control DESPUES de ejecutar el bucle.

Si se ejecutan la siguiente expresión se consigue un BUCLE SIN FIN:

For ( ; ; )

{

Page 16: Proyecto Final Secuenciador de Luces

Sentencias;

}

Comentarios

Los comentarios en el programa facilitan la comprensión de las distintas expresiones tanto para el

programador como para quien tiene que interpretar dicho programa. No afectan a la compilación 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 línea.

//comentario que terminara al final de esta línea

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 línea

Finaliza cuando se cierre el comentario */

Page 17: Proyecto Final Secuenciador de Luces

ENTORNO DE TRABAJO

El entorno de trabajo del CCS en PCW y PCWH permite compilar y también suministra una gran variedad de

herramientas auxiliares. En la figura se muestran los distintos elementos básicos del entorno de trabajo.

Existen dos formas de iniciar una sesión: abriremos un fichero de código fuente o creando un proyecto

Para abrir un fichero fuente directamente se realiza una pulsación 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.

Page 18: Proyecto Final Secuenciador de Luces

Si se ejecuta el comando PROJECT WIZARD, tras pedir el nombre del nuevo proyecto aparece la ventana de

configuración con dos pestañas, una para configurar las distintas opciones que se muestran en la barra

izquierda y otra donde se muestra el código resultante de la configuración (figura). Recorriendo las distintas

opciones (general, comunicaciones, etc.) se llega a obtener el código de configuración deseado, tras la cual

ya podemos empezar a escribir el resto del código del programa. Debemos observar cómo se incluye un

fichero de cabecera *.h donde se encuentra la configuración del dispositivo (figura).

Page 19: Proyecto Final Secuenciador de Luces

EL PRIMER PROGRAMA

La opción del PROYECT WIZARD es muy cómoda pero para comenzar a trabajar con CCS C, se recomienda

iniciar los ficheros de código fuente directamente hasta que el programador adquiere los conocimientos

básicos para manejar esta opción.

Lo primero es utilizar el fichero de cabecera donde se especifican las características 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 búsqueda para los ficheros #include,

esta ruta se puede modificar en el caso q se encuentren en otro directorio.

A continuación se definen, mediante las correspondientes directivas, la velocidad del PIC. Es importante

definir la velocidad inmediatamente después del PIC ya que muchos drivers la necesitan para configurarse.

#use delay (clock=4M)

Después de haber definido la velocidad del PIC ahora es necesario definir lo que seria los LED en si, esto se

hace mediante un array comúnmente llamaos arreglos o vectores, estos son estructuras dinámicas que se

utilizan para almacenar cualquier tipo de datos. En nuestro caso llenaremos nuestro array con ocho elementos

que serán las posiciones de los DIODOS-LEDS.

int vector[8]={0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};

*cada posición viene dada con valor binario.

Ahora se puede escribir la función principal MAIN () donde ira el código que hará funcionar el secuenciador

de luces:

Int i,cont Declaramos nuestras variables locales

For ( ; ; ) Este for hará un bucle infinitos de repeticiones para que los LEDs nunca se apaguen

For(i=0;i<=7;i=i+cont) Este for se utiliza para recorrer el arreglos definido anteriormente(recordemos que los array se comienzan a recorrer desde el índice 0)

Output_b(vector[i]) Esta línea sirve para dar salida a a cada posición del vector, en otra palabras se encienden los LEDs de acuerdo a la posición que se van definiendo.

Delay_ms(40) Declaramos que la velocidad de prenderse los LEDs será de 40 milisegundos, esto número puede variar.

Esto sería el código en si del secuenciador de luces pero para darle más complejidad le agregarnos un cambio

de estado, es decir cada que ves que el LOGICSTATE este en cero los LEDS se prenderán en forma impar, si por

el contrario el LOGICSATE se encuentra en 1 los LEDS se encenderán secuencialmente.

Page 20: Proyecto Final Secuenciador de Luces

Para conseguir esto es el mismo código definido anteriormente solo que se le agrega unas condiciones:

Int i,cont Declaramos nuestras variables locales.

For ( ; ; ) Este for hará un bucle infinitos de repeticiones para que los LEDs nunca se apaguen.

For(i=0;i<=7;i=i+cont) Este for se utiliza para recorrer el arreglos definido anteriormente (recordemos que los array se comienzan a recorrer desde el índice 0).

If(input(pin_a0)) Esta condición nos pregunta si el LOGICSTATE está en 1

Cont=1; Si de haberse cumplido la condición la variable cont se cambia a 1 y el encendido de luces será secuencial.

Else cont=2 De caso contrario la variable cont cambia a 2, lo que las luces se prenderán en forma impar.

Output_b(vector[i]) Esta línea sirve para dar salida a cada posición del vector, en otra palabras se encienden los LEDs de acuerdo a la posición que se van definiendo.

Delay_ms(40) Declaramos que la velocidad de prenderse los LEDs será de 40 milisegundos, este número puede variar.

Page 21: Proyecto Final Secuenciador de Luces

EL CODIGO FUENTE COMPLETO

CODIGO FUENTE

Después de haber terminado nuestro código 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 complicación del archivo y el espacio que se utiliza en

ROM Y RAM.

Page 22: Proyecto Final Secuenciador de Luces

Después 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 botón de carpeta donde nos dará a elegir el archivo seleccionamos el archivo

generado anteriormente y listo damos aceptar y el proyecto correrá sin ningún problema.

Page 23: Proyecto Final Secuenciador de Luces

CIRCUITO CORRIENDO ESTADO1

Page 24: Proyecto Final Secuenciador de Luces

CIRCUITO CORREINO EN ESTADO 0

LISTO..!!!!!!!!!!!!!!!!!!!!