MICROCONTROLADORES
Laboratorio N°9:
PROGRAMACIÓN BÁSICA CON BUCLES DE CONTROL.
- Utilizar al microcontrolador en aplicaciones de control electrónico.
- Desarrollar y ejecutar programas en un microcontrolador PIC
- Programar y configurar interfaces básicas del microcontrolador.
- Manejo de puertos de forma grupal e independiente para manejo de luces
- Programación de sonidos mediante subrutinas.
- Creación de Subrutinas mediante funciones.
- Declaración de variables enteras.
BUCLES DE CONTROL: while, if, if-else, for.
a. While
El ciclo while nos permite realizar múltiples iteraciones basándonos en el resultado de una expresión lógica que puede tener como resultado un valor True o False
1. Tipos de Bucle ‘while’
A continuación, se presentan algunos ejemplos del uso del bucle while:
1.1 Bucle ‘while’ controlado por Conteo
A continuación, se presenta un ejemplo del uso del bucle while controlado por conteo:
suma, numero = 0, 1
while numero <= 10:
suma = numero + suma
numero = numero + 1
print "La suma es " + str(suma)
En este ejemplo tiene un contador con un valor inicial de cero, cada iteración del while manipula esta variable de manera que incremente su valor en 1, por lo que después de su primera iteración el contador tendrá un valor de 1, luego 2, y así sucesivamente.Eventualmente cuando el contador llegue a tener un valor de 10, la condición del ciclo numero <=10 sera False, por lo que el ciclo terminará arrojando el siguiente resultado.
1.2 Bucle ‘while’ controlado por Evento
A continuación, se presenta un ejemplo del uso del bucle while controlado por Evento:
promedio, total, contar = 0.0, 0, 0
print "Introduzca la nota de un estudiante (-1 para salir): "
grado = int(raw_input())
while grado != -1:
total = total + grado
contar = contar + 1
print "Introduzca la nota de un estudiante (-1 para salir): "
grado = int(raw_input())
promedio = total / contar
print "Promedio de notas del grado escolar es: " + str(promedio)
En este casi el evento que se dispara cuando el usuario ingresa el valor -1, causando que el bucle while se interrumpo o no se inicie.
Al igual que la sentencia if, la estructura while también puede combinarse con una sentencia else).
El nombre de la sentencia else es equivocada, ya que el bloque else se ejecutará en todos los casos, es decir, cuando la expresión condicional del while sea False, (a comparación de la sentencia if).
promedio, total, contar = 0.0, 0, 0
mensaje = "Introduzca la nota de un estudiante (-1 para salir): "
grado = int(raw_input(mensaje))
while grado != -1:
total = total + grado
contar += 1
grado = int(raw_input(mensaje))
else:
promedio = total / contar
print "Promedio de notas del grado escolar: " + str(promedio)
La sentencia else tiene la ventaja de mantener el mismo nombre y la misma sintaxis que en las demás estructuras de control.2. Sentencias utilitarias
A continuación, se presentan algunos ejemplos del uso de sentencias utilitarias usadas en el bucle while:
2.1Sentencia break
A continuación, se presenta un ejemplo del uso del bucle while controlado la sentencia break:
variable = 10
while variable > 0:
print 'Actual valor de variable:', variable
variable = variable -1
if variable == 5:
break
Adicionalmente existe una forma alternativa de interrumpir o cortar los ciclos utilizando la palabra reservada break.Esta nos permite salir del ciclo incluso si la expresión evaluada en while (o en otro ciclo como for) permanece siendo True. Para comprender mejor use el mismo ejemplo anterior pero se interrumpe el ciclo usando la sentencia break.
2.2 Sentencia continue
A continuación, se presenta un ejemplo del uso del bucle while controlado la sentencia continue:
variable = 10
while variable > 0:
variable = variable -1
if variable == 5:
continue
print 'Actual valor de variable:', variable
La sentencia continue hace que pase de nuevo al principio del bucle aunque no se haya terminado de ejecutar el ciclo anterior.b. If
La sentencia condicional if se usa para tomar decisiones, este evaluá básicamente una operación lógica, es decir una expresión que dé como resultado True o False, y ejecuta la pieza de código siguiente siempre y cuando el resultado sea verdadero.
1.1 Sentencia if
La sentencia if EXPRESION, significa, Si se cumple la expresión condicional se ejecuta el bloque de sentencias seguidas.
1.2. Sentencia elif
La sentencia elif EXPRESION, significa, De lo contrario Si se cumple la expresión condicional se ejecuta el bloque de sentencias seguidas
1.3. Sentencia else
La sentencia else, significa, De lo contrario se cumple sin evaluar ninguna expresión condicional y ejecuta el bloque de sentencias seguidas.
1.4. Operador is
El operador is, significa, que prueba identidad: ambos lados de la expresión condicional debe ser el mismo objeto:
1.5. Operador in
El operador in, significa, para cualquier colección del valor del lado izquierdo contenga el valor del lado derecho:
1.6. Operador not in
El operador not in, el contrario de operador in, devuelve True cuando un elemento no está en una secuencia.
c. If- else
Ejecuta una sentencia si una condición especificada es evaluada como verdadera. Si la condición es evaluada como falsa, otra sentencia puede ser ejecutada. Quiza la estructura if-else es la estructura de control mas basica y la mas utilizada. La forma mas sencilla seria algo así
Si (tal cosa es cierta) {
// Haz esto
}En caso contrario {
// Haz esto otro
}
d. For
Los bucles for funcionan exactamente igual que en C. Con una sola instrucción controlamos el bucle.
for(valor inicial; condicion; ejecutar en cada bucle) {
// instrucciones a ejecutar mientras la condición sea cierta
}
Ejemplo
for ($cantidad = 1; $cantidad< 10; $i++){
echo("$cantidad");
}
Traducido es igual a : Cantidad es igual a 1, mientras cantidad sea menor que 10 escribe cantidad en pantalla y despues sumale 1 al valor de la cantidad. Es decir, es exactamente el mismo ejemplo que vimos en el bucle while pero de otra manera.IV. DESARROLLO DE TAREAS
1. TAREAS GUIADAS EN EL LABORATORIO
En esta primera etapa se realizo la programación guiada por el docente el cual fue de la siguiente manera:
Seguidamente se compilo lo cual genero un archivo en formato .hex, este archivo nos permite poder simularlo en PROTEUS, acción que realizamos para poder verificar que nuestras programación cumpla con las configuraciones que se ha establecido.
Para la aplicación de esta programación se verifico todos los condiciones:
a) Con el PIN_D0

b) Con el ¨PIN_A5 , el cual permitia desplazar un led como se ve a continuación

2. TARREAS A SER EVALUADAS
Las condiciones con respecto al laboratorio a realizar son las siguientes:
Se tiene un sistema con 3 pulsadores (A5, D0, D1) de entrada y 8 leds de salida (Puerto C): Programar para que se comporte de la siguiente manera:
a) Con el PIN_D0

b) Con el ¨PIN_A5 , el cual permitia desplazar un led como se ve a continuación

2. TARREAS A SER EVALUADAS
Las condiciones con respecto al laboratorio a realizar son las siguientes:
Se tiene un sistema con 3 pulsadores (A5, D0, D1) de entrada y 8 leds de salida (Puerto C): Programar para que se comporte de la siguiente manera:
a. Al iniciar el programa todos los leds deben permanecer apagados
b. Al presionar A5, debe encender C0, al volver a presionar, debe encender C1 y asi suceivamente.
c. Al presionar D0, los deben encender sucesivamente pero en sentido inverso.
d. La entrada D1 debe funcionar como un habilitador, es decir, por defecto el sistema esta habilitado y funcionara como lo antes mencionado. Si presiono D1, el sistema quedara "congelado" y nada funcionara. Si vuelvo a presionar D1, el sistema nuevamente queda habilitado.
a) Programación que cumples las condiciones
La programación que logro satisfacer las condiciones propuestas en la tarea a ser evaluada es la siguiente:

b) Simulación en PROTEUS
Para verificar que nuestra programación cumpla las especificaciones que se le ha programado se debe primero simular de la siguiente manera:

1.- Con respecto al PIN_A5
La condición es que debe encender C0, al volver a presionar, debe encender C1 y asi suceivamente.

2.- Con respecto al PIN_D0
La condición debe ser que los led´s deben encender sucesivamente pero en sentido inverso.

3.- Con respecto al PIN_D1
La condición es que debe funcionar como un habilitador, es decir, por defecto el sistema esta habilitado y funcionara como lo antes mencionado. Si presiono D1, el sistema quedara "congelado" y nada funcionara. Si vuelvo a presionar D1, el sistema nuevamente queda habilitado

VÍDEO:
:
link del video del laboratorio : https://youtu.be/k5b_ecsG11s
Observaciones:
- Al inicio se presento un pequeño error, dado que el software PIC C COMPILER no creaba las demás carpetas que permitían simular como el archivo .hex, y para resolverlo se tuvo que recordar la anterior sesión la que se debía extraer en la base de datos del programa la información del pic 167F88A, y se copio a la carpeta donde se guardo una vez copiado se genero los archivos para poder simularlo en PROTEUS.
- En el desarrollo del laboratorio se observo que la programación realizada al principio no lograba ejecutar las acciones que se programaron, lo cual perjudico el desarrollo del mismo por lo que se recurrió a revisar la programación notando que en una parte de la programación no se negaba lo que contradecía las configuraciones que se dispuso, lo cual era el problema por el cual el entrenador no cumplía las configuraciones que se programaron..
- Se observo que todo lo aprendido en anteriores semestres, nos ayudo a lograr realizar con mayor eficiencia en este laboratorio en diversas plataformas de programación como lo es Arduino la que nos familiarizo con algunos comandos de bucles de control.+
- Cuando el puerto C se desciende hasta el ultimo puerto, este ya no regresa por mas que presionemos D0, por lo tanto, se deduce que esto sucede porque el PIC no presenta un proceso de bucle interno.
- En la investigación con respecto a los bucles de control se observo que existen ciertos comandos que se utilizan a ciertas configuraciones especificas lo que nos demuestra que las soluciones a un problema con respecto a la programación pueden ser infinitas, con respecto a los muchos ejemplos que se puede encontrar en la web.
Conclusiones
- Se logró realizar las actividades propuestas por el docente, realizando una correcta programación que permitió simular en el software PROTEUS a través del uso de los bucles de control como los es while, if-else, for, if.
- Se concluye que el PIC 16F877a no presenta una función de bucles internos, dado que se demostro que al llegar al ultimo pin del puerto C este no puede regresar incluso si presionamos D0.
- Se logró utilizar todo el puerto_C gracias a la configuración "output_c(0b00000000);" que permitió realizar las actividades propuestas por el docente.
- Se concluye que es necesario establecer una buena programación de acuerdo a los parametros que se soliciten, demostrando que hasta un ";" puede ser crucial para que la programación no compile, e incluso un "!" para que no funcione como se programe, por lo tanto se debe ser exhaustivo en esta parte, para evitar futuros errores.









