enc 8 leds

Page 1

Practica #2 (Secuencia de 8 Leds)

*Forma 1 -En este programa haremos que 8 leds prendan consecutivamente y se apaguen de la misma forma, este programa se puede hacer de dos formas diferentes que a continuación las explicaremos. 1. Iniciamos indicando que micro vamos a trabajar y el valor del cristal a utilizar. #include <18f2550.h> #use delay(clock=8000000) 2. Seguimos con la función principal que ya conocemos. Le recuerdo que no se debe olvidar abrir y cerrar los corchetes. #include <18f2550.h> #use delay(clock=8000000) void main (void) { } 3. Ahora empezamos a escribir nuestro programa, es muy sencillo y muy parecido al anterior lo único que tenemos que hacer es repetir el encendido y apagado 8 veces sin olvidar los retardos; pero no podemos conectar todos los led al mismo pin, por lo tanto tenemos que conectar cada led en un pin diferente, por este motivo vamos a necesitar todo el puerto B. Como recordaremos un led se enciende y apaga de la siguiente manera: output_high(pin_b0); delay_ms(1000); outout_low(pin_b0); delay_ms(1000); Pero nosotros necesitamos hacerlo 8 veces y lo único que vamos a cambiar es el pin, por ejemplo: pin_b0, pin_b1, pin_b2….. y esto lo haremos hasta llegar al pin b7. -Por lo tanto esto quedaría así: #include <18f2550.h> #use delay(clock=8000000) void main (void) { output_high(pin_b0); delay_ms(1000); outout_low(pin_b0); delay_ms(1000); output_high(pin_b1); delay_ms(1000); outout_low(pin_b1); delay_ms(1000); output_high(pin_b2); delay_ms(1000); outout_low(pin_b2); delay_ms(1000);


output_high(pin_b3); delay_ms(1000); outout_low(pin_b3); delay_ms(1000); output_high(pin_b4); delay_ms(1000); outout_low(pin_b4); delay_ms(1000); output_high(pin_b5); delay_ms(1000); outout_low(pin_b5); delay_ms(1000); output_high(pin_b6); delay_ms(1000); outout_low(pin_b6); delay_ms(1000); output_high(pin_b7); delay_ms(1000); outout_low(pin_b7); delay_ms(1000); } 4. Ya esta listo el programa solo que tenemos el mismo problema que se nos presento en el programa pasado, y como recordaremos solo le tenemos que agregar un “while� y se soluciona este problema. #include <18f2550.h> #use delay(clock=8000000) void main (void) { While(true) { output_high(pin_b0); delay_ms(1000); outout_low(pin_b0); delay_ms(1000); output_high(pin_b1); delay_ms(1000); outout_low(pin_b1); delay_ms(1000); output_high(pin_b2); delay_ms(1000); outout_low(pin_b2); delay_ms(1000);


output_high(pin_b3); delay_ms(1000); outout_low(pin_b3); delay_ms(1000); output_high(pin_b4); delay_ms(1000); outout_low(pin_b4); delay_ms(1000); output_high(pin_b5); delay_ms(1000); outout_low(pin_b5); delay_ms(1000); output_high(pin_b6); delay_ms(1000); outout_low(pin_b6); delay_ms(1000); output_high(pin_b7); delay_ms(1000); outout_low(pin_b7); delay_ms(1000); } } Nota: -Recordamos que este es un ejemplo de cómo prender y apagar varios leds, pero se puede hacer cualquier tipo de secuencia todo es cuestión de creatividad. *Esa es una forma de realizar una secuencia de leds ahora vamos a aprender otra forma de hacer la misma secuencia.

*Forma 2 1. Iniciamos de la misma forma que siempre: #include <18f2550.h> #use delay(clock=8000000) 2. Antes de empezar a escribir la función principal tenemos que declarar las variables que vamos a usar, pero antes vamos a definir que es una variable: -Una variable es donde podemos almacenar ciertos valores que a medida que el programa avance estos van a ir cambiando su valor, una variable se puede llamar de cualquier forma, existen varios tipos de variables, de 8 bits, de 16 bits, y variables decimales; estas variables se declaran de la siguiente forma: *int xxxx; (esta es una variable de 8 bits). *int16 xxxx; (esta es una variable de 16 bits). *float xxxx; (esta es la única variable que trabaja con números decimales, aunque también puede trabajar con números enteros, y trabaja cualquier cantidad de bits).


Si se requiere trabajar con mas de una variable se agrega enseguida de la otra separadas de una coma y al final se debe poner un punto y coma ( ; ), ejemplo: int x,y,z; donde -x- es una variable -y- es otra y -z- otra variable. Ya que tenemos claro que es una variable seguimos con el programa, nosotros utilizaremos 2 variables ( x y aux ), pero las vamos a escribir de la siguiente forma: int x=1,aux[15]; Una variable automáticamente no tiene inicio, puede empezar desde cualquier numero por este motivo se recomienda iniciarla desde 0 o 1 para que no haya problemas en el programa, aunque le podemos dar cualquier valor de inicio pero en este caso la iniciamos en 1. La otra variable aux utiliza vectores en este caso son 14 vectores que se van a usar pero tenemos que escribir una mas (15) para que el programa no marque error. Nuestro programa va de la siguiente forma: #include <18f2550.h> #use delay(clock=8000000) int x=1,aux[15]; 3. Empezamos a escribir la función principal y la iniciamos escribiendo el valor de cada uno de los vectores de la variable aux y se puede hacer de dos formas: aux[1]=0b00000001; (esta es la forma binaria, se identifica porque el código empieza por 0b que significa que el código esta escrito en binario, recordemos que es una variable de 8 bits por lo tanto solo podemos tener 8 “números”). aux[1]=0x01; (esta es la forma hexa, se identifica porque empiezan por 0x que significa que el código esta escrito en hexadecimal). Entre las llaves se escribe el numero del vector, en nuestro caso son 14 vectores por lo tanto van a haber 14 combinaciones diferentes. En lo personal prefiero el código binario ya que se puede ver la secuencia que uno este realizando. Nosotros vamos a encender del led 1 al 8 y los apagaremos del 8 al 1; nuestros vectores quedan de la siguiente forma: aux[1]=0b00000001; aux[2]=0b00000010; aux[3]=0b00000100; aux[4]=0b00001000; aux[5]=0b00010000; aux[6]=0b00100000; aux[7]=0b01000000; aux[8]=0b10000000; aux[9]=0b01000000; aux[10]=0b00100000; aux[11]=0b00010000; aux[12]=0b00001000; aux[13]=0b00000100; aux[14]=0b000000010; Aclaro que un 1 significa un alto y un 0 un bajo.


Por ahora nuestro programa va de la siguiente forma: #include <18f2550.h> #use delay (clock=8000000) int x=1,aux[15]; void main (void) { aux[1]=0b00000001; aux[2]=0b00000010; aux[3]=0b00000100; aux[4]=0b00001000; aux[5]=0b00010000; aux[6]=0b00100000; aux[7]=0b01000000; aux[8]=0b10000000; aux[9]=0b01000000; aux[10]=0b00100000; aux[11]=0b00010000; aux[12]=0b00001000; aux[13]=0b00000100; aux[14]=0b000000010; } 4. Seguimos el programa con un “while” para evitar el desborde o pérdida del micro ahora vamos a utilizar un “for”, for es un condicional que nos sirve para realizar una secuencia determinada las veces que nosotros le indiquemos al for y luego continúe con el programa, por ejemplo podemos hacer que cada led se prenda y apague 5 veces y luego hacer una secuencia; en palabras resumidas podemos decir que el for es un contador. En un for debemos indicar en que numero iniciamos la “cuenta”, hasta que numero debe contar, y si queremos aumentar o disminuir. Recordemos que estos números debemos almacenarlos en una variable. Vamos a iniciar el for en 1, que cuente hasta 14 y que aumente; esto queda así: for (x=1;x<=14;++x) { } El x<=14 es una condición: si x es menor o igual a 14 se hace lo que este dentro del for si no cumple esa condición se sale del for. Continuemos completando el for, ahora vamos a escribir la secuencia que tiene que seguir el for: for (x=1;x<=14;++x) { output_b(aux[x]); delay_ms(1000); } Aquí utilizamos nuestro aux, le indicamos al programa que a la salida del puerto B ponga el valor del vector y el valor del vector esta determinado por la variable x, por lo tanto cada ves que se repita un for la x va aumentando de uno en uno y cada repetición va siendo un vector diferente ya que cada ves la x va a tener un valor diferente y siempre la salida al puerto B va cambiando prendiendo y apagando los leds indicados. Se inicio con el vector 1 (aux[1]=0b00000001;) al x cambiar de valor pasamos al segundo vector (aux[2]=0b00000010;) así hasta llegar al 14, cuando ya haya llegado al 14 acaba el for y


sigue a la siguiente instrucci贸n; pero nosotros no tenemos mas instrucciones por ese motivo fue que colocamos el while antes del for, por lo tanto cuando el for llegue a 14 este vuelve y se reinicia colocando la x en 1 y repitiendo la secuencia. Y el programa final es el siguiente: #include <18f2550.h> #use delay (clock=8000000) #define retardo delay_ms (10) int x=1,aux[15]; void main (void) { aux[1]=0b00000001; aux[2]=0b00000010; aux[3]=0b00000100; aux[4]=0b00001000; aux[5]=0b00010000; aux[6]=0b00100000; aux[7]=0b01000000; aux[8]=0b10000000; aux[9]=0b01000000; aux[10]=0b00100000; aux[11]=0b00010000; aux[12]=0b00001000; aux[13]=0b00000100; aux[14]=0b000000010; while (true) { for (x=1;x<=14;++x) { output_b(aux[x]); delay_ms(1000); } } }


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.