Laboratorio 2
Laboratorio 2
Laboratorio 2
MICROCONTROLADORES I
INFORME N°2
Manejo de CAD (Conversor Análogo
Digital)
Integrante(s): Andres Mamani Quispe
Carrera: Electrónica
2021
1. Objetivo
Aplicar los conocimientos sobre la conversión análogo digital en el microcontrolador PIC 16F877A,
durante la simulación y armado del circuito.
Pre informe
Conversión Analógica Digital (CAD). La operación que permite expresar una propiedad o atributo
físico en forma numérica es precisamente la medida. La noción de Magnitud está inevitablemente
relacionada con la de medida. Se denominan magnitudes a ciertas propiedades o aspectos
observables de un sistema físico que pueden ser expresados en forma numérica. En otros
términos, las magnitudes son propiedades o atributos medibles.
Puerto A:
• Puerto de e/s de 6 pines
• RA4 è RA4 (Salida en colector abierto) y T0CKI (Entrada de reloj del módulo Timer0)
Puerto B:
• Puerto e/s 8 pines
Puerto C:
• Puerto e/s de 8 pines
• RC0 è RC0, T1OSO (Timer1 salida oscilador) y T1CKI (Entrada de reloj del módulo Timer1).
• RC1-RC2 è PWM/COMP/CAPT
• RC3-4 è IIC
• RC3-5 è SPI
• RC6-7 è USART
Puerto D:
• Puerto e/s de 8 pines
• Puerto E:
Los ciclos for son lo que se conoce como estructuras de control de flujo cíclicas o simplemente
estructuras cíclicas, estos ciclos, como su nombre lo sugiere, nos permiten ejecutar una o varias
líneas de código de forma iterativa, conociendo un valor especifico inicial y otro valor final, además
nos permiten determinar el tamaño del paso entre cada "giro" o iteración del ciclo.
Para comprender mejor el funcionamiento del ciclo for, pongamos un ejemplo, supongamos que
queremos mostrar los números pares entre el 50 y el 100, si imaginamos un poco como seria esto,
podremos darnos cuenta que nuestro ciclo deberá mostrar una serie de números como la
siguiente: 50 52 54 56 58 60 ... 96 98 100. Como podemos verificar, tenemos entonces los
componentes necesarios para nuestro ciclo for, tenemos un valor inicial que sería el 50, tenemos
también un valor final que sería el 100 y tenemos un tamaño de paso que es 2 (los números
pares). Estamos ahora en capacidad de determinar los componentes esenciales para un ciclo for.
Vamos a ver ahora como es la sintaxis de un ciclo for en C++, así estaremos listos para usarlos en
nuestros programas de ahora en adelante
Sintaxis del Ciclo For en C++:
La sintaxis de un ciclo for es simple en C++, en realidad en la mayoría de los lenguajes de alto
nivel es incluso muy similar, de hecho, con tan solo tener bien claros los 3 componentes del ciclo
for (inicio, final y tamaño de paso) tenemos prácticamente todo hecho
Línea 1:
En esta línea está prácticamente todo lo esencial de un ciclo for. La sintaxis es simple, tenemos
una variable de control llamada i que es tipo entero (int), cabe notar que la variable se puede
llamar como nosotros lo deseemos y puede ser del tipo de queramos también, sin embargo, en la
mayoría de los casos se usa la "i" como nombre y el entero como tipo, pero somos libres de
modificar esto a nuestro gusto. Esta variable "i" se le asigna un valor inicial que puede ser
cualquier número correspondiente al tipo de dato asignado. Posteriormente lo que haremos será
especificar hasta donde irá nuestro ciclo por medio del valor final, ten en cuenta que cada uno de
estos componentes es separado por un punto y coma ";", también es importante saber que la
condición final puede ser cualquier cosa, mayor, menor, mayor o igual, menor o igual, sin embargo
no tiene sentido que la condición sea por ejemplo un igual, pues nuestra variable de control
siempre va a cambiar entre valores, menores o mayores que el valor final deseado, si fuera un
igual no tendríamos un error de sintaxis, pero nuestro for básicamente no haría nada de nada.
Finalmente, el ultimo componente de esta primera línea es el tamaño del paso, este componente
se especifica aumentando en la cantidad deseada la variable de control.
Línea 2:
En la línea 2 tenemos una llave abriendo "{" lo cual como seguramente ya sabrás indica que allí
comienza el bloque de instrucciones que se ejecutaran cada vez que el ciclo de un "giro". Esta
llave no es del todo obligatoria, sin embargo, si no la ponemos solo se ejecutará dentro de nuestro
ciclo la primera línea inmediatamente posterior a la declaración del ciclo, de modo que si
deseamos que se ejecuten varias líneas dentro de nuestro ciclo, debemos usar las llaves
Línea 3 a 7:
En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de manera
iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de líneas necesarias
incluso, como veremos más adelante dentro de estas podría haber uno o más ciclos, así que
podrías tener todo un programa dentro de un ciclo.
Línea 8:
En esta última línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya
sabrás esta nos indica que allí termina el bloque del ciclo for y se dará por terminada la ejecución
de este para continuar ejecutando el resto del algoritmo.
No te preocupes si no comprendiste muy bien lo que acabo de escribir, estoy seguro que con un
par de ejemplos que veremos a continuación, te va a quedar todo claro
Ejemplos de Ciclo For en C++
A continuación vamos a ver unos cuantos ejemplos para comprender de manera adecuada el uso
de los ciclos for en c++, recuerda que si no comprendes alguno de estos ejemplos o tienes alguna
pregunta o sugerencia sobre estos o cualquier contenido de la sección, puedes dejarlas en
la sección de comentarios.
Vamos a retomar el ejemplo anterior, donde deseábamos sacar los números pares entre el número
50 y el 100, es un ejemplo sencillo con el que nos aseguraremos de haber comprendido bien lo
anterior:
Solución Ejemplo 1:
Como pudimos ver anteriormente, tenemos entonces que el valor inicial para nuestro ciclo es el
número 50 y el valor final es el 100, además, dado que necesitamos los números pares vamos a ir
de dos en dos, así que el tamaño del paso va a ser 2, teniendo estos 3 componentes identificados,
estamos listos para crear nuestro ciclo for así:
for(int i=50;i<=100;i+=2)
{//Notemos que escribir i+=2 es similar a escribir i = i + 2
cout << i << endl;
}
El código funcional completo sería el siguiente:
#include "iostream"
#include "stdlib.h"
for(int i=50;i<=100;i+=2)
{//Notemos que escribir i+=2 es similar a escribir i = i + 2
cout << i << endl;
}
system("PAUSE");
return 0;
}
Ciclo do-while. Estructura, sintaxis y diferencias con el while. Cómo y cuándo usar un ciclo
do-while en C++
Los ciclos do-while son una estructura de control cíclica, los cuales nos permiten ejecutar una o
varias líneas de código de forma repetitiva sin necesidad de tener un valor inicial e incluso a veces
sin siquiera conocer cuándo se va a dar el valor final, hasta aquí son similares a los ciclos while,
sin embargo el ciclo do-while nos permite añadir cierta ventaja adicional y esta consiste que nos da
la posibilidad de ejecutar primero el bloque de instrucciones antes de evaluar la condición
necesaria, de este modo los ciclos do-while, son más efectivos para algunas situaciones
específicas. En resumen, un ciclo do-while, es una estructura de control cíclica que permite
ejecutar de manera repetitiva un bloque de instrucciones sin evaluar de forma inmediata una
condición específica, sino evaluándola justo después de ejecutar por primera vez el bloque de
instrucciones
Para comprender mejor el funcionamiento del ciclo while, usemos de nuevo el ejemplo de la
sección anterior sobre el ciclo while. Imaginemos entonces que, por algún motivo, queremos
pedirle a un usuario una serie de números cualquiera y que solo dejaremos de hacerlo cuando el
usuario ingrese un número mayor a 100. Como vimos anteriormente, esto se puede hacer por
medio de un ciclo while, pero vamos ahora a ver como lo podemos hacer usando un ciclo do-while
mejorando así un poco nuestro algoritmo, evitando ciertos comandos, tal como se dijo con el ciclo
while, en efecto aquí estamos en la situación de no tener ni idea de cuándo al usuario se le va a
ocurrir ingresar un número mayor que 100, pues es algo indeterminado para nosotros, sin embargo
el ciclo while y en efecto el do-while nos permite ejecutar cierta acción de forma infinita hasta que
se cumpla alguna condición específica, en nuestro caso sería que el número ingresado sea mayor
a 100. De modo que, si el usuario nos ingresa de manera sucesiva los siguientes números 1,50,99,
49, 21, 30, 100 ..., nuestro programa no finalizara, pues ninguno de estos números es mayor que
100, sin embargo, si nos ingresara el número 300, el programa finalizaría inmediatamente.
Vamos a ver ahora como es la sintaxis de un ciclo do-while en C++, así estaremos listos para
usarlos en nuestros programas de ahora en adelante cada vez que lo necesitemos
Sintaxis del Ciclo Do-While en C++:
La sintaxis de un ciclo do-while es un tanto más larga que la del ciclo while en C++, sin embargo
no se hace más complicado, de hecho con tan solo tener bien clara una condición de finalización
para el ciclo tendremos prácticamente todo terminado.
do
{
....
....
Bloque de Instrucciones....
....
....
}
while (condición de finalización); //por ejemplo numero! = 23
Vamos entonces a ver línea por línea el anterior código para comprender todo y quedar claros.
Posteriormente veremos el ejemplo planteado anteriormente y su solución.
Línea 1:
Esta línea es por decirlo así, la parte novedosa del ciclo do-while, esta expresión no evalúa
ninguna condición ni nada, simplemente da paso directo al bloque de instrucción y luego permite la
evaluación de la condición.
Línea 2:
En la línea 2 tenemos una llave abriendo "{" lo cual como sabemos indica que allí comienza un
bloque de instrucciones que se ejecutaran cada vez que el ciclo de un "giro". Esta llave no es del
todo obligatoria, sin embargo si no la ponemos solo se ejecutará dentro de nuestro ciclo la primera
línea inmediatamente posterior a la instrucción do, de modo que si deseamos que se ejecuten
varias líneas dentro de nuestro ciclo, debemos usar las llaves. En lo personal, es preferible poner
siempre las llaves sin importar cuantas líneas se vayan a ejecutar, es una buena práctica de
programación y te puede evitar dolores de cabeza
Línea 3 a 7:
En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de manera
iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de líneas necesarias
incluso, como veremos más adelante dentro de estas podría haber uno o más ciclos, así que
podrías tener todo un programa dentro de un ciclo.
Línea 8:
En esta última línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya
debemos saber esta nos indica que allí termina el bloque de instrucciones que se ejecutarán de
manera cíclica y se dará por terminada la ejecución de este para continuar ejecutando el resto del
algoritmo.
Línea 9:
La línea 9 en el ciclo do-while, tiene la misma importancia y función que l alinea 1 en la sección del
ciclo while, cabe resaltar que simplemente evalúa la condición y define si se cumple o no para
seguir con la ejecución del ciclo o con la del resto del algoritmo, de este modo podemos ver que el
ciclo while y el do-while son muy similares, con la pequeña diferencia en que en uno se evalúa la
condición desde el principio y en la otra al final de cada ciclo.
No te preocupes si no comprendiste muy bien lo que acabo de escribir, estoy seguro que con un
par de ejemplos que veremos a continuación, te va a quedar todo claro
Ejemplos de Ciclo Do-While en C++
A continuación vamos a ver unos cuantos ejemplos para comprender de manera adecuada el uso
de los ciclos while en c++, recuerda que si no comprendes alguno de estos ejemplos o tienes
alguna pregunta o sugerencia sobre estos o cualquier contenido de la sección, puedes dejarlas en
la sección de comentarios.
Vamos a retomar el ejemplo anterior, donde queremos hacer que nuestro programa le pida a un
usuario una serie de números cualquiera y que solo dejaremos de hacerlo cuando el usuario
ingrese un número mayor a 100, una vez más es un ejemplo sencillo con el que nos aseguraremos
de haber comprendido bien todos los conceptos anteriores, vamos a ver cómo hacer lo mismo con
dos tipos de ciclos diferentes (el while y el do-while), sin embargo, vamos a ver como con uno es
más eficiente que con el otro:
Solución Ejemplo 1:
Para solucionar esto, debemos tener clara cuál va a ser la condición que se debe cumplir para que
el ciclo este pidiendo el numero constantemente. El ciclo se va a detener solo cuando el numero
ingresado sea mayor que 100, así que la condición para que se siga ejecutando es que el número
sea menor a 100, ¿Comprender la lógica?, es simple si para que se detenga el numero debe ser
mayor a 100, entonces para seguirse ejecutando el numero debe ser menor o igual a 100,
veámoslo entonces
int numero;
do
{
cout << "Ingrese un numero ";
cin >> numero;
}
while(numero <= 100);
El código funcional completo y un tanto más amigable para el usuario sería el siguiente:
#include "iostream"
Cuando la temperatura sea mayor a 25°C entonces se activará el ventilador controlado por el
terminal RA2 y se desactivará el calefactor controlado por el terminal RA1
Entre las temperaturas de 20°C a 25°C el calefactor y el ventilador estarán desactivados.
COSTO COSTO
ITEM COMPONENTE CANTIDAD OBSERVACIÓN
UNIDAD TOTAL
1 PIC16F877A 35bs 1 35bs
2 LM35 5bs 1 5bs
3 PANTALLA LCD 30bs 1 35bs
4 RESISTENCIAS 50ctvs 3 1.5bs
5 led 25ctvs 2 50ctvs
TOTAL 77bs
4. CONCLUSIONES Y/O RECOMENDACIONES
En este laboratorio pudimos observar la conversión de análogo a digital, al ingresar una entrada
analógica por el microcontrolador PIC16F877A a través del sensor LM35 los datos de salida fueron
digitales a través de la pantalla LCD mostrándonos las diferentes temperaturas.
Pudimos simular un ambiente de temperatura que podríamos aplicar a nuestros hogares para
mantener estable la temperatura en diferentes estaciones del año.
5. ANEXOS
https://www.alldatasheet.com/datasheet-pdf/pdf/517588/TI1/LM35.html