lunes, 18 de septiembre de 2017

PROYECTO 01: LED´S GIRATORIOS

PERSISTENCE OF VISION  (POV)

1. OBJETIVO GENERAL:

  • Programar e implementar con controlador PIC letrero de leds giratorio o persistence of vision (POV).
2. OBJETIVOS ESPECÍFICOS:

  • Desarrollar este proyecto para conocer mas sobre la programación en  lenguaje "c" ademas de implementarlo físicamente con un PIC determinado que cumpla con nuestras necesidades.
  • Realizar en el tiempo de 1 mes para, escribir la programación de este programa y implementar físicamente la tarjeta.
  • Resolver todos los problemas que se nos presenten, por que “Cada problema lleva en sí mismo la semilla de su propia solución”.
  • Desarrollar el letrero de led's giratorio para aplicar en el tema de marketing y publicidad.
3. JUSTIFICACIÓN: 

Este proyecto tiene un impacto muy bueno en la publicidad ya que es algo novedoso en cuanto a tecnología y ademas de llamativo para un usuario así logrando la atención de un cliente y mostrarle el producto que tengamos. 

El proyecto no es tan complejo de implementar ni tan costos por lo cual es ideal para el publico en general lo cual económicamente es muy bueno.

El POV (Persistence Of Vision) es un fenómeno visual descubierto por el científico belga Joseph Plateau que demuestra cómo una imagen permanece en la retina humana una décima de segundo antes de desaparecer completamente. Esto permite que veamos la realidad como una secuencia de imágenes que el cerebro "enlaza" como una sola imagen visual móvil y continua.

4. PIC 16F628A:


El  microcontrolador es un circuito o dispositivo programable capaz de realizar diferentes actividades que requieran del procesamiento de datos digitales y del control y comunicación digital de diferentes dispositivos. El PIC 16f628a es un microcontrolador de 8 bit, posee una arquitectura RISC avanzada así como un juego reducido de 35 instrucciones. Este microcontrolador es el remplazo del obsoleto PIC16F84a, los pines del 16f628a so compatibles con el 16f84a, así que se podrán actualizar proyectos.
PIC16F628A de la empresa MICROCHIP
Hoja de datos del PIC 16F628A: 

4.1 PRINCIPALES CARACTERÍSTICAS:

1. CPU de alto rendimiento RISC:

  • Velocidad de operación de CD- 20MHz.
  • Capacidad de interrupción.
  • Pila de 8 niveles.
  • Modos de direccionamiento directos, indirectos y relativo.
  • 35 simples instrucciones de palabras.
  • Todas las instrucciones de ciclo único, excepto las de salto.
2. Características especiales del microcontrolador:
  • Opciones de oscilador interno y externo.
  • Precisión de fabrica de oscilador interno de 4 MHz calibrada a ±1%.
  • Oscilador de 48 KHz de bajo consumo interno.
  • Modo de ahorro de energía en modo sueño.
  • Resistencia programable  pul-ups del PORTB.
  • Multiplexado del pin reset/entrada -pin.
  • Temporizador Watchdog con oscilador independiente para un funcionamiento fiable.
  • Baja tensión de programación In-Circuit Serial ( a través de dos pines).
  • Protección de código programable.
  • Brown-out rset.
  • Power-on reset.
  • Power-up Timer y el oscilador de puesta en marcha del temporizador.
  • Amplio rango de funcionamiento de tensión (2.0- 5.5V).
  • Industrial y amplia gama de temperaturas extendidas.
  • Alta durabilidad de la memoria FLASH/EEPROM: *100 000 ciclos de escritura FLASH.         * 1 000 000  ciclos de escritura EEPROM. * 40 años de retención de datos.
3. De baja potencia características:
  • Corriente en espera: 100 nA@2.0V, típico.
  • Corriente de funcionamiento:  *12μA @ 32 kHz, 2,0V, típica. * 120μA @ 1 MHz, 2,0V, típica.
  • Temporizador WATCHDOG: 1μA@2.0V, típico.
  • TIMER01 oscilador:  1.2μA @ 32 KHz, 2.0V. típica.
  • Doble velocidad seleccionable del oscilador interno: * Tiempo de ejecución seleccionable entre 4MHz y de 48KHz. * 4μs despertar de un sueño, 3.0V, Típico.
Distribución del pines del PIC 16F628A


Los pines I/O (Input/Output) están organizados en 5 puertos:
  • Puerto A: 8 pines
  • Puerto B: 8 pines
  • Pin VSS and Pin VDD

5. DIAGRAMA INTERNO DEL PIC 16F628A:



Diagrama interno PIC16F628A


6. FLUJOGRAMA DEL SISTEMA:

7. ESTRUCTURA DEL SISTEMA:


8. CÓDIGO EN C COMPILLER.

PRUEBA 01: Hemos usado el PIC16F877A-Puerto "B" y el mensaje es "HOLA". En esta prueba quisimos ver si la idea que teníamos podría funcionar. La simulación nos salio perfectamente bien, pero nos dimos cuenta que era un PIC demasiado grande para nuestro proyecto. Usamos el clock de 20MHz referencia de datasheet. Trabajamos con mili-segundos para que sea perceptible por la vista.

#include <16f877a.h>
#fuses hs,nowdt
#use delay(clock=20M)

void apagar()
{
output_b(0b00000000);

}

void encender()
{
output_b(0b11111111);
}

void letrah()
{
output_b(0b11111111);
delay_ms(1000);

output_b(0b00010000);
delay_ms(3000);

output_b(0b11111111);
delay_ms(1000);

apagar();
delay_ms(1000);
}

void letrao()
{
output_b(0b11111111);
delay_ms(1000);

output_b(0b10000001);
delay_ms(3000);

output_b(0b11111111);
delay_ms(1000);

apagar();
delay_ms(1000);
}

void letral()
{
output_b(0b11111111);
delay_ms(1000);

output_b(0b10000000);
delay_ms(4000);

apagar();
delay_ms(1000);
}

void letraA()
{
output_b(0b11111111);
delay_ms(1000);

output_b(0b00010001);
delay_ms(3000);

output_b(0b11111111);
delay_ms(1000);

apagar();
delay_ms(1000);
}
void main()
{
set_tris_b(0b00000000);
output_b(0b00000000);
while(true)
  {
  letrah();
  letrao();
  letral();
  letraA();
  delay_ms(3000);
  }


}
Simulación en ISIS
Características de carga

PRUEBA02: Cambiamos el PIC16F877A por uno con menos instrucciones, escogimos el 17F84A. Los resultados salieron satisfactoriamente bien pero el PIC ya era obsoleto y por recomendación del profesor cambiamos a otro PIC. El tiempo de trabajo lo reducimos un poco más pero sigue en el rango de mili-segundos. Modificamos el clock de 20MHz a 4MHz, para ellos nos guiamos del datasheet. El mensaje a aparecer es "UCONTROLADORES" en referencia al curso.

 #include <16f84a.h>
#fuses hs,nowdt
#use delay(clock=4M)

void apagar()
{
output_b(0b00000000);

}

void encender()
{
output_b(0b11111111);
}
void letraU()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000000);
delay_ms(300);
output_b(0b11111111);
delay_ms(100);
apagar();
delay_ms(100);
}
void letraC()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000001);
delay_ms(400);
apagar();
delay_ms(100);
}
void letraO()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000001);
delay_ms(300);
output_b(0b11111111);
delay_ms(100);
apagar();
delay_ms(100);
}
void letraN()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b00001111);
delay_ms(100);
output_b(0b00111000);
delay_ms(100);
output_b(0b11100000);
delay_ms(100);
output_b(0b11111111);
delay_ms(100);
apagar();
}
void letraE()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10010001);
delay_ms(400);
apagar();
delay_ms(100);
}


void letraA()
{
output_b(0b11111111);
delay_ms(100);

output_b(0b00010001);
delay_ms(300);

output_b(0b11111111);
delay_ms(100);

apagar();
delay_ms(100);
}
void letraT()
{
output_b(0b00000001);
delay_ms(200);
output_b(0b11111111);
delay_ms(100);
output_b(0b000000001);
delay_ms(200);
apagar();
delay_ms(100);
}
void letraR()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b00011001);
delay_ms(100);
output_b(0b00101001);
delay_ms(100);
output_b(0b01001001);
delay_ms(100);
output_b(0b10001111);
delay_ms(100);
apagar();
delay_ms(100);
}
void letraL()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000000);
delay_ms(400);
apagar();
delay_ms(100);
}
void letraD()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000001);
delay_ms(200);
output_b(0b01000010);
delay_ms(100);
output_b(0b00111100);
delay_ms(100);
apagar();
delay_ms(100);
}
void letraS()
{
output_b(0b10011111);
delay_ms(100);
output_b(0b10011001);
delay_ms(300);
output_b(0b11111001);
delay_ms(100);
apagar();
delay_ms(100);

}
void main()
{
set_tris_b(0b00000000);
output_b(0b00000000);

while(true)
  {
  letraU();//listo
  letraC();//listo
  letraO();//listo
  letraN();//listo
  letraT();//listo
  letraR();//listo
  letraO();//listo
  letraL();//listo
  letraA();//listo
  letraD();//listo
  letraO();//listo
  letraR();//listo
  letraE();//listo
  letraS();//listo

  delay_ms(3000);
  }
}


Simulación ISIS
Características de carga

PRUEBA03: Finalmente decidimos trabajar con el PIC16F628A. el cual es el PIC reemplazo del 16F84A, nos facilito la conexión ya que tenían la misma configuración de entradas y salidas. Nuestro mensaje a aparecer es "UCONTROLADORES" en referencia al nombre del curso. Modificamos los mili-segundos a micra-segundos.  Modificamos el clock de 20MHz a 4MHz, para ellos nos guiamos del datasheet.

#include <16f628a.h>
#fuses hs,nowdt
#use delay(clock=4M)

void apagar()
{
output_b(0b00000000);

}

void encender()
{
output_b(0b11111111);
}
void letraU()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10000000);
delay_us(2400);
output_b(0b11111111);
delay_us(800);
apagar();
delay_us(800);
}
void letraC()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10000001);
delay_us(3200);
apagar();
delay_us(800);
}
void letraO()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10000001);
delay_us(2400);
output_b(0b11111111);
delay_us(800);
apagar();
delay_us(800);
}
void letraN()
{
output_b(0b11111111);
delay_us(800);
output_b(0b00001111);
delay_us(800);
output_b(0b00111000);
delay_us(800);
output_b(0b11100000);
delay_us(800);
output_b(0b11111111);
delay_us(800);
apagar();
}
void letraE()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10010001);
delay_us(3200);
apagar();
delay_us(800);
}


void letraA()
{
output_b(0b11111111);
delay_us(800);

output_b(0b00010001);
delay_us(2400);

output_b(0b11111111);
delay_us(800);

apagar();
delay_us(800);
}
void letraT()
{
output_b(0b00000001);
delay_us(1600);
output_b(0b11111111);
delay_us(800);
output_b(0b000000001);
delay_us(1600);
apagar();
delay_us(800);
}
void letraR()
{
output_b(0b11111111);
delay_us(800);
output_b(0b00011001);
delay_us(800);
output_b(0b00101001);
delay_us(800);
output_b(0b01001001);
delay_us(800);
output_b(0b10001111);
delay_us(800);
apagar();
delay_us(800);
}
void letraL()
{
output_b(0b11111111);
delay_us(1800);
output_b(0b10000000);
delay_us(3200);
apagar();
delay_us(800);
}
void letraD()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10000001);
delay_us(1600);
output_b(0b01000010);
delay_us(800);
output_b(0b00111100);
delay_us(800);
apagar();
delay_us(800);
}
void letraS()
{
output_b(0b10011111);
delay_us(800);
output_b(0b10011001);
delay_us(2400);
output_b(0b11111001);
delay_us(800);
apagar();
delay_us(800);

}
void main()
{
set_tris_b(0b00000000);
output_b(0b00000000);

while(true)
  {
  letraU();//listo
  letraC();//listo
  letraO();//listo
  letraN();//listo
  letraT();//listo
  letraR();//listo
  letraO();//listo
  letraL();//listo
  letraA();//listo
  letraD();//listo
  letraO();//listo
  letraR();//listo
  letraE();//listo
  letraS();//listo

  delay_ms(3000);
  }
}
Simulación ISIS
Características de carga


9. OBSERVACIONES Y CONCLUSIONES:

  • Nuestro proyecto sirve de gran utilidad por su versátil de control y re-programación que se puede ajustar a diferentes necesidades.
  • Está de más resaltar la gran importancia y avance tecnológico que tiene hoy en día el lenguaje C al igual que los pic que salen al mercado y las grandes e interesantes cosas que podemos hacer con ellos.
  • Se diseñó y se implementó los leds giratorios que muestran el mensaje al usuario todo esto gracias al pic 16f628a.
  • Fue importante entender perfectamente el funcionamiento del 16f28a; al principio nuestro código no funcionaba pero gracias a la intervención del profesor y algunos cambios que hicimos en fuses; elprograma funciono correctamente.
  • Era importante determinar la velocidad de giro de nuestros led´s ya que solo a  una velocidad específica el mensaje programado podría ser visualizado.
  • Finalmente se puede decir que este proyecto es factible y sencillo de armar, puesto que todos los dispositivos que intervienen en él, están disponibles en el mercado, aunque su información referente a su funcionamiento es poca se puede entender con ver vídeos sobre este.

10. INTEGRANTES:
  • Cruz Díaz, Jesús Andrée
  • Miovich Chepmapoco, Jefferson
  • Granda Alvarez, Waldir
  • Laura Tite, Jefferson
 

1 comentario:

PROYECTO FINAL

1. ARDUINO UNO: Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multid...