Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Encender varios LED a una secuencia específica (tipo semáforo), se activará el inicio de la
secuencia con un botón pulsador.
Un botón pulsador será empleado para iniciar la secuencia de encendido y apagado de 3 LEDs.
Se simula con este circuito el comportamiento de un semáforo.
Antes de comenzar la realización del montaje del circuito electrónico, se debe realizar el circuito
en el programa Fritzing. Se debe tener en cuenta el conocimiento de cuál es el cátodo y ánodo
de los LED. Se coloca el ánodo del LED verde en el pin 13, LED amarillo en el pin 12 y LED rojo
en el pin 8. El cátodo de cada LED va a tierra (ground). Se va a usar el pin 5V para alimentar el
botón pulsador tal como se muestra en la figura 2:
Luego que se tiene armado el circuito en el programa Fritzing, se comienza con el desarrollo del
programa en el IDE de Arduino.
– Se selecciona la tarjeta Arduino que se esta utilizando sea Arduino Uno-R3 o Arduino Mega
2560.
– Se selecciona el Puerto Serial. Bajo que puerto USB se va a conectar el Arduino con el
computador.
Inicialmente debemos darle un nombre de qué consiste el codigo, esto se hace a través del
símbolo //, se puede colocar el título de la práctica o del programa en sí. También se puede
utilizar como comentarios dentro del programa.
Se declaran las variables. En la práctica se declaran de tipo constante, una variable que no
cambiara durante el desarrollo del programa, su comando es const, además se debe
especificar qué tipo de datos se almacenará en la constante, en este caso será entero y su
comando es int, luego se le da el nombre de la variable; en la tarjeta Arduino se van a usar
los pines 8, 12 y 13 para alimentar los LEDs. También se declara la variable botón en el pin 7
y una variable entero val igual a cero (0), la diferencia de las demás variables es que la
variable val no será constante ya que puede variar entre 0 y 1.
Se define si la variable declarada son de tipo entrada o de salida, para eso se utiliza el
comando void setup (), se abre corchete ({) para saber qué es lo que contiene ese comando y
al finalizar el comando se cierra corchete (}). Internamente del corchete se declara que la
variable LED es de salida, esto se realiza a través del comando pinMode, este a su vez
necesita como argumento la variable y el tipo de señal de la misma, es
decir pinMode(LED,OUTPUT); en la que OUTPUT indica que la señal saldrá del pin 13
permitiendo encender el LED. El mismo procedimiento se sigue para los LED conectados en
los pines 12 y 8. Para definir el botón pulsador lo importante es definir el pin donde está
conectado el boton (pin 7), este se define en la programación en vez de ser un OUTPUT es
un INTPUT, cada vez que el reciba en ese INPUT él va a tomar una acción; la cual es decirle
Arduino que tome una señal digital en el pin 13 y encienda el LED, su comando
será pinMode(BONTON,INPUT).
Luego de definir las variables, se procede a realizar la estructura del código a través del
comando void loop (), de igual manera se abre corchete({) y se cierra (}) luego de terminar su
cumplimiento. Internamente del corchete se establecen las instrucciones que ejecutara
Arduino continuamente. Se utilizara la variable val la cual leerá digitalmente lo que sucede en
el pin 7 (botón), su comando seria digitalRead(BOTON). La práctica permite introducir otra
estructura de programación la cual es if, la que significa si en español. La estructura if es un
condicional que permite decidir en función del valor de la variable val, si este es alto
(HIGH=1) o si es bajo (LOW=0). Se utiliza una variable estado (state) que registrará los
cambios de HIGH y LOW cuando se pulsa el botón de esta manera se crea un suiche de
encendido que luego al volver a presionar sirve para apagar lo que esté dentro del if que
contenga la variable state.
Para que el LED se encienda, si state==1 se utiliza se emplea una secuencia de código de
encendido y apagado de cada LED simulando la secuencia de un semáforo (primero verde,
luego brevemente el amarillo y finalmente el rojo), para encender cada led se emplea el
comando digitalWrite con la opción HIGH. Para que los LEDs puedan apagarse se utiliza el
mismo comando digitalWrite pero indicándole esta vez una señal baja LOW, esto cuando el
state esté en 0.
1
Para el presente tutorial se ha utilizado la versión 14.2 de Xilinx ISE Design Suite. Con
licencia ISE Web Pack.
Elegimos la locación y el directorio de trabajo (Dejar las ubicaciones por
Family:
Spartan3E
Device:
XC3S500E
Package:
FG320 Speed:
-4
(VHDL/Verilog) Simulator:
lenguaje: VHDL
Presionamos “next”.
3. Aparecerá la siguiente ventana que simplemente detalla el proyecto creado.
Presionamos “Finish”.
Clic en “next”.
Reset ->
in clk -> in
sentido ->
in
En salida “Q”, seleccionamos la opción de “Bus” debido a que es la salida del contador
de 4 bits, por ende debe tener de 0 a 3 bits.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
8. La declaración de la entidad debe quedar de la siguiente manera:
entity contador is
Port ( reset : in STD_LOGIC;
clk : in STD_LOGIC;
sentido : in STD_LOGIC := '0';
Q : out STD_LOGIC_VECTOR (3
downto 0)); end contador;
*recordar que las líneas de código anteriores pueden generarse automáticamente
siguiendo el proceso del paso 6, o pueden escribirse directamente en el código obviando
el paso 6. Sin embargo estas líneas pueden modificarse en cualquier momento.
begin
if reset='1' then
counter <=
"0000"; elsif clk'event and Arquitectura comportamental.
clk = '1' then
if sentido = '1' then En cada pulso de reloj se incrementa
counter <= counter + 1;
else una unidad a la señal contador
counter <= counter - 1;
end
if; Q <=
counter;
end if;
end process;
end
Behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_unsigned.all;
entity contador is
Port ( reset : in
STD_LOGIC; clk :
in STD_LOGIC;
sentido : in STD_LOGIC := '0';
Q : out STD_LOGIC_VECTOR (3
downto 0)); end contador;
begin
if reset='1' then
counter <=
"0000"; elsif clk'event and
clk = '1' then
if sentido = '1' then
counter <= counter + 1;
else
counter <= counter - 1;
end if;
Q <= counter;
end if;
end process;
end
Behavioral;
11. SIMULACIÓN
Una vez terminado nuestro código podemos realizar la simulación para constatar el
correcto funcionamiento.
Creamos un nuevo recurso como en el paso 4, con excepción de que esta vez necesitamos
un recurso de
tipo “VHDL test bench”.
Le asignamos un nombre al nuevo recurso, click en “next”.
En la ventana siguiente se nos pide que asociemos un recurso a este “test bench”,
seleccionamos el recurso correcto, en este caso solo existe un recurso.
Ahora tenemos un archivo de tipo VHDL pero con las señales, puertos y
temporizaciones necesarias para una simulación.
Fig.
12
Para correr la simulación y observar las señales se debe dar clic en el ícono que
se observa en Fig 16 einteractuar con los íconos de zoom out y zoom in.