lunes, 9 de diciembre de 2019

LABORATORIO N°14-15-16

MICROCONTROLADORES


Laboratorio N°14-15-16:


PROYECTO MICROCONTROLADORES.

SELECTOR E IDENTIFICADOR DE MATERIAL POR COLOR.

Semana N° 14

1. TÍTULO DEL PROYECTO:

Nuestro proyecto a realizar tiene el nombre de un SELECTOR E IDENTIFICADOR DE MATERIAL POR COLOR mediante un arduino uno, que nos permite discriminar los colores y plantearlos en la siguiente descripción.

2. GRUPO DE TRABAJO:

Los integrantes de este proyecto son:

- Cáceres Vilca, Nadia
- Livisi Cosi, Geanmarco
-Pezo Mendoza, Anthony


3.OBJETIVOS

Este proyecto tendrá solo un objetivo general y tres objetivos específicos.

3.1 OBJETIVO GENERAL

Implementar un sistema prototipo de un clasificador de color para el sector de la industria alimentaria, mediante el uso de un arduino UNO.

3.2 OBJETIVOS ESPECÍFICOS

Proponer una arquitectura adecuada para el diseño e implementación de un clasificador de color para el sector de industria alimentaria.
Evaluar las opciones del uso de motores, que permita realizar el clasificador de color, de acuerdo a un prototipo.
Desarrollar la programación que permita la clasificación de colores mediante el sensor de color y el arduino UNO.

4.JUSTIFICACIÓN DEL PROYECTO

4.1 Teórica

En este trabajo se brindara consideraciones para el diseño e implementación de los clasificadores de colores, que permitan la acción de discriminar los componentes mediante sensores, esto tiene un fundamental uso en la optimización de la productividad de acuerdo a un mejor funcionamiento para discriminar elementos de distintas características, específicamente por el color.

4.2 Tecnológica

Es necesario validar un uso adecuado de los clasificadores de colores que presenten un mejor uso en el sector productivo, específicamente en la industria alimentaria, dado que se necesitar mejorar la productividad de este sector económico, ya que presenta importancia en nuestro país.

4.3 Social

El desarrollo e implementación del clasificador de colores brinda una solución para poder aumentar la productividad de las empresas del sector alimentario, dado que esto generará un impacto social favorable en el aumento productivo de la empresa y por lo tanto aporta a mayores ingresos al país además que también genera mas puestos de trabajos en una industria consolidada en su mayor productividad.

4.4 Práctica

El desarrollo de la solución permitirá utilizar un clasificador de colores en el sector de industrias alimentarias, ya que estas pueden ampliar y mejorar las características de proceso que estas tengan, mejorando asi el servicio y un aumento de la productividad, por lo tanto, el proyecto puede cambiar para otros tipos de objetivos aumentando sensores o actuadores, volviendo el proceso mas especializado.

5. MATERIALES

Los materiales que usaremos para realizar este proyecto clasificador se utilizaron los siguientes materiales:

- Modulo sensor color TCS3200
Fuente: Mercado libre
- 1 servomotores
Fuente: Mercado libre

-1 arduino UNO

Fuente: Mercado libre
- Cables
Fuente: Mercado libre
-1 arduino Nano

Fuente: Mercado libre
- 1 Motor Gorilla

Fuente: Mercado libre
Mecanica impreso en 3D “PLA”


Fuente: Mercado libre
6. RESUMEN

El presente proyecto ha sido realizado mediante los conocimientos obtenidos en los laboratorios del curso, lo que nos ha permitido tener una idea mas consolidada del proyecto, en este proyecto se han utilizado servomotores, sensor de luz, arduino nano y algunos elementos de apoyo para poder realizar el prototipo, es necesario entender, que la programación fue crucial para que el proyecto se realiza por lo que también para su realización se utilizo varias fuentes que nos han permitido a tener una mayor lucidez del proyectos realizar, para el proceso se divido en varias etapas de construcción, la primera fue realizada en la recolección de información a través de fuentes, la segunda fue programar, la tercera fue probar la programación mediante el uso de los servomotores, el sensor de colores, seguidamente se armo la estructura para tener una mejor idea del prototipo que se plantea, esto también fue pensado con la finalidad de aumentar la productividad en el proceso de la industria alimentaria.

6.1 Vídeo demostrativo








Semana N° 15

7. DEMOSTRACIÓN

7.1 Programación


El programa siguiente evidencia el proceso y significado de cada paso que se aplico en el programa para que el proyecto final funcionara.

#include <Servo.h>

#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6

Servo topServo;
Servo bottomServo;
int frequency = 0;
int color=0;
void setup() {
  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(sensorOut, INPUT);
  // Setting frequency-scaling to 20%
  digitalWrite(S0, HIGH);
  digitalWrite(S1, LOW);
  topServo.attach(7);
  bottomServo.attach(8);
  Serial.begin(9600);
}
void loop() {
  topServo.write(115);
  delay(500);

  for(int i = 115; i > 65; i--) {
    topServo.write(i);
    delay(2);
  }
  delay(500);

  color = readColor();
  delay(10);
  switch (color) {
    case 1:
    bottomServo.write(50);
    break;
    case 2:
    bottomServo.write(75);
    break;
    case 3:
    bottomServo.write(100);
    break;
    case 4:
    bottomServo.write(125);
    break;
    case 5:
    bottomServo.write(150);
    break;
    case 6:
    bottomServo.write(175);
    break;
 
    case 0:
    break;
  }
  delay(300);

  for(int i = 65; i > 29; i--) {
    topServo.write(i);
    delay(2);
  }
  delay(200);

  for(int i = 29; i < 115; i++) {
    topServo.write(i);
    delay(2);
  }
  color=0;
}
// Custom Function - readColor()
int readColor() {
  // Setting red filtered photodiodes to be read
  digitalWrite(S2, LOW);
  digitalWrite(S3, LOW);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int R = frequency;
  // Printing the value on the serial monitor
  Serial.print("R= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(50);
  // Setting Green filtered photodiodes to be read
  digitalWrite(S2, HIGH);
  digitalWrite(S3, HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int G = frequency;
  // Printing the value on the serial m2onitor
  Serial.print("G= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.print("  ");
  delay(50);
  // Setting Blue filtered photodiodes to be read
  digitalWrite(S2, LOW);
  digitalWrite(S3, HIGH);
  // Reading the output frequency
  frequency = pulseIn(sensorOut, LOW);
  int B = frequency;
  // Printing the value on the serial monitor
  Serial.print("B= ");//printing name
  Serial.print(frequency);//printing RED color frequency
  Serial.println("  ");
  delay(50);
  if(R<45 & R>32 & G<65 & G>55){
    color = 1; // Red
  }
  if(G<55 & G>43 & B<47 &B>35){
    color = 2; // Orange
  }
  if(R<53 & R>40 & G<53 & G>40){
    color = 3; // Green
  }
  if(R<38 & R>24 & G<44 & G>30){
    color = 4; // Yellow
  }
  if(R<56 & R>46 & G<65 & G>55){
    color = 5; // Brown 
  }
  if (G<58 & G>45 & B<40 &B>26){
    color = 6; // Blue
  }
  return color;  
}

La parte color morado, es la parte de prubas que se realizo para hallar la frecuencia y rango máximo y minimo del color el sensor lo detectaba.

8. Fabricación de la placa:

La placa cumple la funcion de poder utilizar el arduino NANO directo al sensor y a los servomotores;



9. Evidencias de avance:

Proceso de armado del circuito:
 Proceso de armado de la parte mecanica:

9.1 Vídeo demostrativo



Semana N° 16

10. Simulación en Tinkercat:
Programa utilizado ya que se utilizo pulsadores como rangos de color que detectaba el sensor:
#include <Servo.h>
int pu9 = 0;
int pul0 = 0;
int pul1 = 0;
int pul2 = 0;
int pul3 = 0;
Servo servo1; //declaramos la variable que controlara el servomotor
void setup() {

  Serial.begin(9600);
  servo1.attach(5); // asignamos el pin 5(analogo PMW) a la variable servo1
  pinMode(pu9, INPUT );
  pinMode(pul0, INPUT );
  pinMode(pul1, INPUT );
  pinMode(pul2, INPUT );
  pinMode(pul3, INPUT );
  servo1.write(0); //PARA INICIAR EL SERVO EN 0 GRADOS
}
void loop() {
  pu9 = digitalRead(9);
  pul0 = digitalRead(10);
  pul1 = digitalRead(11);
  pul2 = digitalRead(12);
  pul3 = digitalRead(13);

  if (pu9 == HIGH) {
    servo1.write(0);
  }
  if (pul0 == 1) {
    servo1.write(45);
  }
  if (pul1 == 1) {
    servo1.write(90);
  }
  if (pul2 == 1) {
    servo1.write(120);
  }
  if (pul3 == 1) {
    servo1.write(180);
  }

}

11. Simulación en Flow Code:


Flujograma:






12. Evidencia de proyecto completo:
Se introduce primero la pieza de color por la parte arriba, este cayendo hacia la rueda que girara con la ayuda de un motor, y luego lo detectara el sensor y moverá el servo para que la pieza caiga donde se estableció.


12.1 Vídeo demostrativo


12.2 Aplicaciones en la industria


Para lograr la más alta calidad del producto final que sea posible, se utilizan máquinas seleccionadoras por color. Estas se pueden equipar de una variedad de cámaras dependiendo de la aplicación. Se utilizan las cámaras para detectar diferencias de color, diferentes superficies y daños ocultos, por ejemplo, por debajo de una cáscara.

Se transporta el producto a través de los canales vibratorios en la entrada de la máquina a una placa deslizante. En esta placa deslizante, el producto pasa por las cámaras. Toda la superficie se ve a través del sistema óptico. Esto asegura que todos los productos que no cumplen con los criterios de calidad, se identifican por el sistema y se seleccionan por medio de toberas de aire comprimido. Separadamente del resto, el producto seleccionado sale de la máquina por salidas separadas.

Se pueden almacenar una variedad de diferentes programas en la máquina. Al mismo tiempo es posible ajustar la exactitud de separación durante el proceso, de manera que se pueden seleccionar una variedad de diferentes productos, aunque no sean muy homogéneos, con la máxima precisión.



MÁQUINA PARA LA CLASIFICACIÓN DE ALIMENTOS POR COLORES NFM

La clasificadoras de alimentos por color NFM son máquinas con un elevado rendimiento, fáciles de manejar y con unos costes de funcionamiento reducidos. La NFM proporciona una excelente clasificación de frutas y verduras por colores, incluso en los entornos más difíciles con suciedad, polvo y vibraciones.

Estas clasificadoras pueden aguantar calor, frío, humedad... y in perder nunca la calidad de la cosecha.



MÁQUINA DE CLASIFICACIÓN DE ALIMENTOS POR COLORES NFM:
Son clasificadoras de alimentos de alta capacidad y bajo mantenimiento.
Gracias a un diseño robusto, es capaz de soportar el calor extremo, la humedad elevada y las vibraciones de la cosechadora.
Clasificadora de alimentos flexible con un manejo suave asegurado.
Controles sencillos, fáciles de ajustar y usar.
Control total por parte del operador.
APLICACIONES EN EL ÁMBITO DE LA CLASIFICACIÓN DE FRUTAS Y VERDURAS
Clasificación en la cosechadora y en la planta:

  • Tomates
  • Cebollas
  • Ajo


13. OBSERVACIONES Y CONCLUSIONES
13.1 OBSERVACIONES:

  • Para realizar la impresión de las piezas utilizadas se debe tener conocimientos del programa cura y además AutoCAD 
  • Se deben verificar que la placa impresa no esté llena de estaño sobrante ya que esto causó que las pistas hicieran contacto pero ningún componente fue dañado.
  • Se deben verificar las etapas de programación ya que alguna falta de comando puede dañar gravemente a toda la programación.
  • Se tuvo que realizar las modificaciones de la programación original para realizar el programa final.

13.2 COMCLUSIONES:

  • Se logró programar un clasificador de colores de acuerdo a los colores que se han propuesto.
  • Se logró realizar implementar un prototipo de un clasificador de color para el sector de la industria alimentaria, mediante el uso de un arduino UNO.
  • Se propuso el uso de los servomotores precisamente por que son los que se adecuaban al ´proyecto.
  • Se logró una arquitectura adecuada para el diseño e implementación de un clasificador de color para el sector de industria alimentaria.
  • Se realizó la impresión de piezas en una impresora 3D y las impresión de una placa para evitar largos contratiempos de realizado del proyecto.
  • Se logró modificar la programación original para que el proceso realice las condiciones que se desean.
  • Se reconoció la tarjeta del sensor de color y sus pines respectivos para diferenciar colores enviando señales analógicas y digitales al arduino nano.
  • Se identificaron componentes utilizados para la parte mecánica- movible y así controlar el proceso de selectora.

viernes, 6 de diciembre de 2019

LABORATORIO N°13


MICROCONTROLADORES


Laboratorio N°13:

LECTURA DE ENTRADAS ANALÓGICAS DE TEMPERATURA.



I. CAPACIDAD TERMINAL

  1. Utilizar al microcontrolador en aplicacion de control electrónico
  2. Desarrollar y ejecutar programas en un microcontrolador PIC
  3. Programar y configurar interfaces básicas del microcontrolador

II. COMPETENCIA ESPECÍFICA DE LA SESIÓN
  1. Lecturas analogicas de un canal del PIC
  2. Configuración de un Sensor de Temperatura
  3. Lectura analógica en una pantalla LCD

III. FUNDAMENTOS TEÓRICOS

Existen dos tipos de entradas analógicas y digitales, de igual manera en las salidas que son analógicas y digitales, estas entradas mediante el interfaz, adapta y codifica de forma comprensible para la CPU las señales procedentes de los dispositivos de entrada.

a. Entradas analógicas

Los módulos de entradas analógicas convierten una magnitud analógica en un numero que se deposita en una variable interna del autómata. Lo que realiza es una conversión A/D, puesto que el autómata solo trabaja con las señales digitales. Esta conversión se realiza con una precisión o resolución determinada (número de bits) y cada cierto intervalo de tiempo (periodo de muestreo).

Las señales analógicas son las que varían en función del tiempo adquiriendo valores dentro de un intervalo continuo. La información analógica puede tomar infinitos valores. Las entradas analógicas permiten que se pude leer y trabajar con señales de tipo analógico, como pueden ser por ejemplo la temperatura, la presión o el caudal. Esta información se obtiene de los sensores, que son unos dispositivos de entrada que captan la señal analógica del exterior y devuelven un valor de tensión.

Despues se tiene que adaptar de forma comprensible para la CPU esta información, a este procesos se le denomina digitalización, que es el proceso de conversión de una señal analogica en digital. Lo que se realiza es una conversión A/D, puesto que en el caso de trabajar con microcontroladores solo pueden trabajar con señales digitales. Esta conversión se realiza con una precisión o resolución determinada.

ETAPAS:

-> Captación de la señal analógica de entrada mediante un sensor
->Lectura del valor de tensión.
->Conversión Analógico/digital

.En el caso del PIC 16F877a presenta un conversor análogo a digital con una resolución de 10 bits que puede leer los voltajes presentes en los pines de AN0 hasta AN7.


La conversión analogo-digital, se configura y controla con los registros ADCON0 y ADCON1, donde es posible configurar aspectos como el canal( pin del PIC) en que se hara la lectura, velocidad de muestreo, estado de la conversión, pines analogos o digitales, entre otros. Por otro lado la conversión resultante se alberga en los registros ADRESH y ADRESL como se muestra a continuación.




Canales usados como entrada analógica
En el binario formado por los bits PGF3 - PGF2-PGF1-PGF0, se debe ingresar la combinación correspondiente a los canales digitales o analogicos que se quieren usar como la siguiente gráfica nos muestra:

IV. DESARROLLO DE LAS TAREAS

Para el desarrollo de este laboratorio se colocaron las siguientes condiciones:

a. Donde dice '#devide adc=8' cambie por '#device adc=10', convierta la variable "lectura" en entero de 16 bits y la línea de printf cambie '%4u' por '%4lu'

¿Cuál es el cambio mostrado en la pantalla LCD? ¿Por qué?

b. Convierta el valor leído en valor de voltaje de 0 a 5 voltios. Para esto cambie la variable "lectura" a variable tipo float y configure su forma de mostrarse en el LCD. Luego en la función While (true), añada la instrucción "lectura =lectura/204.6". Cambie las instrucciones para que en la pantalla del LCD aparezca : " Tensión: 3.456V"

c. Agregar una condición IF para que cuando el voltaje supera 4.5 voltios, se mostrara un mensaje de advertencia en la primera linea del LCD.

En esta parte se logro cumplir el objetivo de crear la condición cuando el voltaje superaba los 4.5 voltios tendira que mostrar en la pantalla LCD un mensaje de advertencia, en este caso el mensaje fue "CORREporTUvida" de acuerdo a lo establecido.

d. La ultima condición que el docente indico que se debía cumplir es que aparezca valores de temperatura y de tensión pero que al 100°C la tensión este en un máximo de 2.5 V comos se muestra a continuación.

Y que al ser menor a 15 tendria que prender el LED_C3, al ser un valor mayor a 15 pero menor a 90 tendria que prender el LED_C2 y al ser mayor que 90 tendria que prender el LED_C1 como se muestra:

Toda la programación que se realizo fue la siguiente:



V. VIDEO DEMOSTRATIVO


link del video: https://youtu.be/mrQL-Hq1otg


VI. OBSERVACIONES Y CONCLUSIONES

a. Observaciones
  • Se observo que es necesario establecer bien los valores con los que se van a trabajar, ya que al inicio del laboratorio se tuvo una dificultad para trabajar con las dos variables de tensión y temperatura las cuales fueron solucionadas al introducir las variables en la programación en el caso del "float temperatura;".
  • Con respecto a las limitaciones de valores para cumplir los condiciones que se establecieron fue necesario utilizar limitaciones, cuando un numero es mayor a 15, cuando el valor esta de 15 a 90 y cuando el valor sea mayo que 90 delimitandolo.
  • Al inicio se coloco la definición a la variable con int lo que no permitía hacer el uso de las mediciones que se debían aplicar a este laboratorio la solución fue aplicar el float el cual nos permite hacer las mediciones respectivas.
  • Cuando se delimito el valor de la temperatura existía un conflicto en los LEDS que se programaban ya que al ser mayor de 90 prendían dos LEDS, cuando debía prender solo uno, en este caso se analizo la programación y se observo que solo esta mal establecido el valor de ">" el cual se corrigió y se cumplió con las condiciones establecidas.

b. Conclusiones
  • Se logro utilizar el PIC 16F877a logrando realizar las aplicaciones desarrollando y ejecutando la programación necesaria para cumplir con las mediciones de temperatura con las entradas analógicas del PIC.
  • Se comprobó la programación en el entrenador y en el Proteus para verificar el cumplimiento de la misma, en ambos casos funciono correctamente de acuerdo a los valores que se solicitaron.
  • Se concluye que es necesario saber las limitaciones con las que se va a trabajar plasmando las condiciones que se propongan, como es el caso de la temperatura tendría que marcar 100°C como máximo cuando la tensión sea 2.5V para lograr esto se dividió el valor de temperatura entre 10.3 cumpliendo asi el rango de medición propuesto.
  • Se logro comprender las entradas analógicas ya que convierten una magnitud analógica en un numero que se deposita en una variable interna del autómata, por lo tanto, lo que realiza es una conversión A/D, puesto que el autómata solo trabaja con las señales digitales

jueves, 21 de noviembre de 2019

LABORATORIO N°12


MICROCONTROLADORES




Laboratorio N°12:



MANEJO DE TIMER Y LAS INTERRUPCIONES.

I. CAPACIDAD TERMINAL

  • 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.

II. COMPETENCIA ESPECÍFICA DE LA SESIÓN

  • Conocer el funcioamiento y la configuración de las Interrupciones.
  • Conocer el funcionamiento y la configuración del Timer cero.
  • Aplicar estos conocimientos en la realización de un cronómetro.

III. FUNDAMENTO TEÓRICOS

A. TIMER0 PIC

El timer0 Pic es un temporizador contador de 8 bits, el registro TMR0 es el temporizador contador timer0 PIC, cuando es utilizado como temporizador sus valores aumentaran de uno en uno entre 0 y 255 con cada 4 ciclos del reloj, cabe destacar que cada ciclo de instrucción del microcontrolador PIC es realizado en 4 ciclos de reloj.

El registro TMR0 del timer' PIC puede ser leido y escrito, puede ser prescalado para que el tiempo en su incremento de valor en una unidad sea mayor, el timer0 PIC cuando alcanza su valor máximo de 255 se reinicia, volviendo a incrementar sus valores de 0 a 255, además cuando llega a su valor máximo y se reinicia puede producir una interrupción, lo que se decide en la programación.

FUENTE: MRELBERNI

B. TIMER0 AVR: CONTADOR

Para el PIC 16F877A el registro TMR0 del timer0 PIC esta formador por 8 bits por lo que se puede contar desde 0 hasta 255, al utilizar timer0 PIC como contador este no aumentara sus valores o su cuenta con cada ciclo de instrucción, en este caso el timer0 estará conectado al pin TOCKI por donde se le hara llegar una señal, la cual al cambiar de estado hara que el timer0 PIC se incremente en una unidad, estos incrementos en su cuenta pueden ser por cada flanco de subida o cada por flanco de bajada de la señal, el flanco a utilizar se elige por programa, por ejemplo se elige el flanco de subida, quere decir que cada vez que la señal que llega al pin T0CKI pase de un bajo a un alto o de 0 a 1, el registro TMR0 aumentara en una unidad, de esta manera se le puede utilizar como contador , cuando la señal pase de un alto a un bajo o de 1 a 0 el registro TMR0 no aumentara su valor o no se incrementara.

FUENTE: MRELBERNI

¿QUÉ BITS SE UTILIZAN?

-> Bit 7: al poner este bit a ' se activan unas resistencia pull up internas que el micrcontrolador tiene en el puerto B.
-> Bit 6: es para cuando se utilice una interrupción externa por el pin INT, con este bit se elige si se quiere que la interrupción sea por flanco de subida o por flanco de bajada.
-> Bit5 TOCS este es el bit que en este caso interesa, al poner este bit a 1 se elige utilizar el timer0 PIC como contador, si se le pone a ' se elige utilizar el timer0 PIC como temporizador
-> Bit4 T0SE con este bit se elige si se quiere que el timer0 PIC cuente por flanco de subida, esto es cuando la señal que llega por el pi T0CKI pase de 0 a 1, o que cuente por flanco de bajada
-> Bit 3: es para utilización del prescaler para el timer 0, el prescaler se le puede asignar al timer0 o al WDT mediante este bit
-> Bit 2,1,0 son para elegir el prescaler a utilizar mediante las combinaciones de esots bits se tienen diferentes valores para el prescaler, el que a su vez dependerá de a quien se la ha asignado el prescaler mediante el bit3, como se puede observar en la imagen.

C. TIMER0 AVR: TEMPORIZADOR

El timer0 Pic como temporizador normalmente se utilizar el TMR0 del timer0 PIC ira aumentando sus valores con cada ciclo de instrucción del microcontrolador PIC, y para estos microcontroladores a cada ciclo de instrucción le toma 4 ciclos del oscilador que se esté utilizando, si se usa por ejemplo un cristal de Fosc=4Mhz entonces cada ciclo del oscilador sera de 0.25us, luego cada ciclo de instrucción tardara 4 veces este valor, es decir 4*(0.25us) lo que viene a ser 1us, a esto se le conoce como ciclo máquina Tcm= 4/Fosc, entonces el registro TMR0 aumentará en una unidad cada microsegundo cuando el oscilador es de 4Mhz.

Entonces como el registro TMR0 es de 8 bits este aumentara desde 0 o desde algún valor que se le ponga como valor inicial hasta un máximo de 255, por ejemplo si va desde 0 hasta 255 habrán transcurrido 255us luego volverá a 0 pero en esa vuelta a 0 transcurre a 1us mas, por lo que en ir de 0 a 255 y volver a 0 transcurren 256us.

El temporizador contador PIC TMR0 cuenta con prescaler esto hace que la frecuencia de trabajo Fosc, se divida por este prescaler, con lo que se logra que el temporizador contador pic tarde un poco mas en aumentar su valor en una unidad; el prescaler del timer0 PIC para el PIC16F877A puede tomar el valor 1, 2, 4, 8, 16, 32, 64, 128 o 256; estos valores se eligen mediante las combinaciones de los bits 0, 1 y 2 del registro OPTION_REG

FUENTE: MRELBERNI

¿QUÉ BITS SE UTILIZAN?

-> Bit 7: al poner este bit a ' se activan unas resistencia pull up internas que el micrcontrolador tiene en el puerto B.
-> Bit 6: es para cuando se utilice una interrupción externa por el pin INT, con este bit se elige si se quiere que la interrupción sea por flanco de subida o por flanco de bajada.
-> Bit5 TOCS este es el bit que en este caso interesa, al poner este bit a 1 se elige utilizar el timer0 PIC como contador, si se le pone a ' se elige utilizar el timer0 PIC como temporizador
-> Bit4 T0SE con este bit se elige si se quiere que el timer0 PIC cuente por flanco de subida, esto es cuando la señal que llega por el pi T0CKI pase de 0 a 1, o que cuente por flanco de bajada
-> Bit 3: es para utilización del prescaler para el timer 0, el prescaler se le puede asignar al timer0 o al WDT mediante este bit
-> Bit 2,1,0 son para elegir el prescaler a utilizar mediante las combinaciones de esots bits se tienen diferentes valores para el prescaler, el que a su vez dependerá de a quien se la ha asignado el prescaler mediante el bit3, como se puede observar en la imagen.

IV. DESARROLLO DE LAS TAREAS

Las condiciones encargadas en este laboratorio son:

a. Al presionar el pulsador D0 se debe incrementar segundos, el temporizador aún no debe estar contando el tiempo.

b. Al presionar el pulsador D1, iniciar CUENTA REGRESIVA desde los minutos previamente configurados.


d. Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.

V. VÍDEO DEMOSTRATIVO




VI. OBSERVACIONES Y CONCLUSIONES

a. Observaciones:

  • Al realizar las configuraciones respectivas para lograr cumplir las indicaciones se tuvo complicaciones ya que al tener un temporizador ascendente se tenia que configurar los tiempos para que este sea descendente.
  • Al programar y realizar las pruebas correspondientes en el entrenador físico existía una pequeña interferencia, ya que al presionar el pulsador programado este no respondía correctamente, por lo que se reinicio el entrenador con lo que se logro solucionar el problema.
  • En las primeras pruebas que se realizo se utilizo el programa CCS Compiler en la maquina física pero existía confusiones ya que no encontraba variables como "i", por lo que se utilizo el CCS Compiler pero en la maquina virtual logrando compilar la misma programación.
  • Al realizar las pruebas de la programación en la máquina virtual, no se lograba escuchar los sonidos que se habían programado lo que causo que se revisara de nuevo la programación pero el error era que en la maquina virtual no lograba emitir el sonido, pero en la código en el Proteus de la maquina física si logro emitir el sonido de los "BIP".

b. Conclusiones


  • Se logro elaborar la programación que satisfaga las condiciones que se proporcionaron en este laboratorio, logrando un temporizador descendente controlando su inicio y determinando el tiempo a descender.
  • Se concluye que al existir errores de compilación se debe buscar otras opciones como el uso de la maquina virtual que en este laboratorio ayudo a lograr concluir satisfactoriamente.
  • Se concluye que se debe tener cuidado al simular la programación, ya que el error no solo radica en la programación si no que hay varios elementos que pueden hacer que no funcione correctamente, como el daño del software, las limitaciones de la computadora, etc.

martes, 12 de noviembre de 2019

LABORATORIO N°11


MICROCONTROLADORES


Laboratorio N°11:

PROGRAMACIÓN EN UNA PANTALLA LCD.


I. CAPACIDAD TERMINAL
  • 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
II. COMPETENCIA ESPECIFICA DE LA SESIÓN
  • Conocer el Display LCD y su funcionamiento
  • Programar eficientemente el LCD
  • Programar HMI para proyecto actual
III. FUNDAMENTOS TEÓRICOS


FUENTE: Ingeniería Electrónica


En la actualidad existe un sinnúmero de aparatos, desde lo mas pequeño como una calculadora hasta los televisores mayores a 50 pulgadas, las pantallas LCD que son las siglas del ingles liquid crystal display que significa la pantalla de cristal líquido.
1. Características
Cada pixel de un LCD típicamente consiste de una capa de moléculas alineadas entre dos electrodos transparentes, y dos filtros de polarización, los ejes de transmisión de cada uno que están perpendiculares entre sí. Sin cristal líquido entre el filtro polarizarte, la luz que pasa por el primer filtro sería bloqueada por el segundo polarizador.

2. Matrices activas y pasivas dirigidas a LCD
Las pantallas LCD con un pequeño número de sectores, tales como los que se utilizan en relojes digitales y calculadores de bolsillo, tienen contactos eléctricos individuales para cada segmento. Un circuito externo dedicado suministra una carga eléctrica para el control de cada segmento. Esta estructura es díficl de visualizar para algunos dispositivos de visualización.

3. Composición interna un DISPLAY LCD 

La composición interna de un Display LCD de 16x2 esta formada por 6 niveles, estos son:

a. Film de filtro vertical, este primer nivel permite polarizar la luz que entra.

b. Sustrato de vidrio con electrodos de Óxido de Indio ITO, en esta etapa podremos apreciar una especie de plantilla parecida a un display de 7 segmentos, esta plantilla sera la que se muestre en negro cuando la luz se encienda, en las pantallas a color o monitores el proceso es muy parecido aun que la tecnología utilziada abarca una cantidad mayor de pixeles

c. Cristal liquido

d. Sustrato de vidrio con film electrodo común 

e. Film de filtro horizontal, este film es considerado como un filtro ya que este permite o bloquea la luz

f. Superficie reflectante, para devolver la luz al espectador.

FUENTE: Ingeniería Electrónica

4. Pines de conexión
Estas pantallas constan de 16 pines. De izquierda a derecha, sus usos son lo siguientes:

Pin 1 - VSS o GND
Pin 2 - VDD o alimentación (+5V)
Pin 3 - Voltaje de contraste. Se conecta a un potenciometro
Pin 4- Selección de registro. Aqui se selecciona el dispositivo para su uso.
Pin 5- Lectura/ escritura, dependiendo del estado (High o low), se podra escribir o leer datos en el LCD
Pin 6 - Enable. Es el pin habilita o deshabilita el LCD
Pin 7 hasta el Pin 14 - Son los pines de datos por donde se envia o recibe información
Pin 15 - El anodo del LED de iluminación de fondo (+5V)
Pin 16- El cátodo del LED de iluminación de fondo (GND)

IV. DESARROLLO DE LAS TAREAS

La programación que se planteo fue la siguiente:





Esta tarea fuera realizada en el laboratorio lo que se obtuvo fue la imagen siguiente:


V. VIDEO DEMOSTRATIVO



VI. OBSERVACIONES Y CONCLUSIONES
a. Observaciones
  • Al realizar la programación para poder realizar la actividad de este laboratorio se complico el trabajo dado que el compilador PIC C no funcionaba como debía creaba errores donde no debía lo que no permitía ejecutar las acciones que se solicitaban en el código de programación.
  • Precisamente el compilador PIC C no identificaba varias códigos de la programación tales como el big, este se presentaba como un error dado que no se encontraba "definido" pero al no estarlo aparecía mas de 10 lineas un error, lo que impedida realizar el trabajo optimamente.
  • Se aprendió que es necesario saber con que librerías se van a trabajar, dado que al no tener definidos estas librerías no compilara y no encontrara datos que se necesitan para poder compilar correctamente, tales como el "lcd.c" o también el "16f877a.h".
  • Es necesario asegurarse que la programación que lo que se este realizando sea lo que se esta solicitando, es decir, que no es solo completar o añadir algo dado que si no se entiende la programación no se podrá solucionar un problema que pueda surgir.
  • Es necesario definir las variables con las que se van a trabajar, para que al momento de compilar no exista conflicto y menos aún errores que impidan realizar el correcto desarrollo del laboratorio.

b. Conclusiones
  • Se logro realizar el código de programación que cumplieron las condiciones establecidas, demostrando la compilación del mismo y sobre todo se probo en el módulo de entrenamiento y en el simulador de PROTEUS.
  • Se concluye la importancia de conocer las librerías "lcd.c" y "16f877a.h" ya que fueron indispensables para el correcto desarrollo de este laboratorio y para otros futuros proyectos que se den.
  • Se realizaron diversas condiciones para realizar las tareas a realizar, tales como la condición "if" y "else if" que ayudaron a cumplir las condiciones.
  • Se logro realizar la programación tanto en el simulador como en el entrenador notando el correcto funcionamiento del código de programación realizado.

jueves, 7 de noviembre de 2019

LABORATORIO N°10


MICROCONTROLADORES


Laboratorio N°10:


PROGRAMACIÓN CON DISPLAY DE 7 SEGMENTOS

I. CAPACIDAD TERMINAL
  • 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.
II. COMPETENCIA ESPECIFICA DE LA SESIÓN

Conocer el Display de 7 segmentos y su funcionamiento.
Conocer las técnicas de multiplexación.

III. FUNDAMENTO TEÓRICO

a. TIPOS DE VARIABLES

Los tipos de datos basicos definidos por C son caracteres, numeros enteros y numeros en punto flotante. Los caracteres son representados por char, los enteros por short, int, long y los numeros en punto flotante por float y double. Los tipos básicos disponibles y su tamaño son:

char Carácter (normalmente 8 bits)
short Entero corto con signo (normalmente 16 bits)
int Entero con signo (depende de la implementación)
unsigned Entero sin signo (depende de la implementación)
long Entero largo con signo (normalmente 32 bits)
float Flotante simple (normalmente 32 bits)
double Flotante doble (normalmente 64 bits)
Enteros

Los tipos de datos enteros son : short, int, long y long long, cada uno representando un numero entero de un tamaño o capacidad determinado. Según el compilador y la plataforma de hardware, cada uno de estos tipos de dato puede ocupar desde 1 byte hasta 8 bytes en memoria. Cabe añadir que en caso que no se declare si es con o sin signo, se toma con signo.


-> Variables enteras: Con signo (+, -) y sin signo (+)

Enteros de 8 bits -> 1 byte
Enteros de 16 bits -> 2 bytes
Enteros de 32 bits -> 4 bytes
Enteros de 64 bits -> 8 bytes
Reales

Los tipos de datos que representan a los números reales, ya que utilizan un sistema de representación basado en la técnica de coma flotante, que permite operar con números reales de diversas magnitudes, mediante un número decimal llamado mantisa y un exponente que indica el orden de magnitud.
La forma de declarar una variable flotante es escribiendo en una línea uno de los tipos de datos flotantes y a continuación el nombre de la variable y tal vez algún valor que se les quiera dar.

-> Variables reales (en como flotante)

Reales de 32 bits -> 4 bytes
Reales de 64 bits -> 8 bytes
Reales de 128 bits -> 16 bytes
Caracteres

Los caracteres se representan utilizando el tipo de char, que tiene solo 1 byte de tamaño. Este tipo se utiliza para representar los 256 caracteres de la tabla de caracteres del sistema. El tipo char es tambien un tipo entero, ya que puede tomar valores de 0 a 255. Por lo tanto también puede ser signed o unsigned.

-> Variable no Numericas

Lógicas -> 1 - 8 bytes
Alfanumericas -> "n" bytes


IV. DESARROLLO DE LAS TAREAS

a. TAREAS A SER EVALUADAS

Las condiciones que se tuvieron que cumplir para esta tarea fue la de:
Se tiene un sistema con dos pulsadores (D0, D1) de entrada y 3 display de salida, además de un zumbador en el pin E1. Programe según lo siguiente:

Al empezar el programa, se debe mostar el numero 500.
Al presionar D0, el número mostrado se debe incrementar en 5 unidades, ademas debe zonar un pitido.
Al presionar D1, el número mostrado debe disminuir 5 unidades pero de 1 en 1 cada segundo
Si el numero llegar a ser mayor a 600, debe sonar 3 pitidos.
1. Programación



2. Simulación en Proteus

En la simulación de Proteus, no mostraba el dato que debia dado la programación que se establecio, es por ello que fue necesario introducir el watch window que es una interfaz que permite ver el numero que en el display no se puede lograr ver.



V. VÍDEO DEMOSTRATIVO





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.

    jueves, 17 de octubre de 2019

    LABORATORIO N°9


    MICROCONTROLADORES


    Laboratorio N°9:

    PROGRAMACIÓN BÁSICA CON BUCLES DE CONTROL.

    I. CAPACIDAD TERMINAL
    • 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.
    II. COMPETENCIA ESPECÍFICA DE LA SESIÓN
    • 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.
    III. FUNDAMENTO TEÓRICO

    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.

    1.3 Bucle ‘while’ con ‘else’

    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. 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.