PAPER DE INVESTIGACION
CURSO:
MICROCONTROLADORES
TITULO:
PROGRAMACION
DE UNA MAQUINA EXPENDEDORA UTILIZANDO EL PIC16F877A
AUTORES:
QUISPE CONDORI RAFI
SENCARA AJAHUANA EMIL
TOLENTINO SAMAR GUSTAVO
TECSUP
RESUMEN
Fundamentalmente en este
trabajo expondremos sobre el uso del PIC para programar una máquina
expendedora, siendo éstas una prioridad en la vida cotidiana de los seres
humanos, debido a su revolución en la industria tecnológica. También daremos a
conocer los conceptos y características necesarias para la realización del
proyecto además de los detalles exactos de cómo realizar la programación y la
simulación respectiva. Es necesario tener en cuenta que este trabajo se realizó
sin fines de lucro por lo que su utilidad es responsabilidad del usuario.
PALABRAS CLAVES: programar, máquina
expendedora, microcontrolador PIC
ABSTRACT
Fundamentally in this work we will discuss the
use of the PIC to program a vending machine, being these a priority in the
daily life of the human beings, due to its revolution in the technological
industry. We will also disclose the concepts and characteristics necessary for
the realization of the project as well as the exact details of how to carry out
the programming and the respective simulation. It is necessary to take into
account that this work was carried out non-profit so its usefulness is the
responsibility of the user.
KEYWORDS:
program, vending machine, PIC microcontroller
INTRODUCCION
El presente trabajo tiene como
objetivo servir como manual para todas aquellas personas interesadas en la
programación en el PIC16F877A, consta de la programación básica, así como el
funcionamiento de la misma.
Los microcontroladores PIC
suponen un avance significativo en la materia de dispositivos digitales
empleados en el control de sistemas, su reducido tamaño así como sus elevadas
prestaciones lo convierten en un ejemplo indispensable en el campo de los
microcontroladores.
Las máquinas expendedoras se encuentran
en oficinas, salas de espera, terrapuertos, aeropuertos, etc. A nosotros se nos
dio la intriga de saber cómo es que se programaron dichas máquinas, además de
querer programar alguna. Después de realizar algunas investigaciones observamos
que la programación se podía resolver con la ayuda del PIC y ahora podemos
presentar una idea básica de programación para aquellos interesados en
programar una máquina expendedora. Es necesario saber que el lenguaje que
utilizamos es el C.
MICROCONTROLADOR
¿Qué es?
Se denomina
microcontrolador a un dispositivo programable capaz de realizar diferentes
actividades que requieran del procesamiento de datos digitales
y del control y comunicación digital
de diferentes dispositivos. Los microcontroladores poseen
una memoria interna
que almacena dos tipos de datos;
las instrucciones, que corresponden al programa que
se ejecuta, y los registros, es
decir, los datos que el usuario maneja, así como registros especiales para el
control de las diferentes funciones del
microcontrolador.
PIC16F877A
En este proyecto se
utilizó el PIC 16F877. Este microcontrolador es fabricado por MicroChip familia a
la cual se le denomina PIC. El modelo 16F877 posee varias características que
hacen a este microcontrolador un dispositivo muy versátil, eficiente y práctico
para ser empleado en la aplicación que posteriormente será detallada.
Características:
·
Soporta modo de comunicación serial, posee dos
pines para ello.
·
Amplia memoria para datos y programa.
·
Memoria reprogramable: La memoria en
este PIC es la que se denomina FLASH; este
tipo de memoria se puede borrar electrónicamente (esto corresponde a la
"F" en el modelo).
·
Set de instrucciones reducidas (tipo RISC), pero
con las instrucciones necesarias para facilitar su manejo.
MAQUINA EXPENDEDORA
¿Qué es?
Es una máquina
que proporciona productos a los consumidores. Este consiste en
vender sin la necesidad de que haya un dependiente para cobrar; un empleado se
encarga de reponer los productos y de adquirir el dinero obtenido.
Imagen 3
(ejemplo de una maquina expendedora)
|
Funcionamiento de una máquina expendedora
Las máquinas
expendedoras cuentan con sensores de luz que miden el tamaño de la
moneda que introducimos. Posteriormente, esta pasa por unos sensores
electromagnéticos que identifican el material del que está compuesta la moneda.
De este modo, separan las de curso legal de las falsas. Además las máquinas
modernas cuentan con sensores de infrarrojos para identificar si el
producto que hemos comprado cae correctamente. En caso de que no sea así, se
activará el mecanismo para repetir el proceso de nuevo.
Imagen 4
(Diagrama
de bloques de una máquina expendedora)
|
METODOLOGIA
UTILIZADA
PARTICIPANTES
Para la
realización del proyecto solo fue necesario la investigación y preocupación de
tres estudiantes de “Electrónica y Automatización Industrial”
INSTRUMENTOS
Para
realizar el proyecto hicimos uso del PIC16F877A y de los siguientes programas:
·
CCS COMPILER
·
PROTEUS 8.5
·
PICKIT 2
PROCEDIMIENTO
Ahora
presentamos la programación de la maquina expendedora:
...................................................................................................................................................................
#include <16f877a.h>
#use delay (clock=20M)
#fuses HS, NOPROTECT, NOWDT
#define LCD_ENABLE_PIN PIN_D3
#define LCD_RS_PIN PIN_D2
#define LCD_RW_PIN PIN_A0
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
#define use_portb_kbd TRUE
#include <kbd4x4_1.c>
void main()
{
char k;
int x;
int car;
lcd_init ();
kbd_init ();
port_b_pullups (TRUE);
{
lcd_gotoxy (2,1); //Uvicamos la palabra en la primera fila y la primera columna
printf(lcd_putc, " Bienvenido"); // manifestamos la palabra en nuestro lcd
lcd_gotoxy (1,2); //Uvicamos la palabra en la segunda fila y la primera columna
printf(lcd_putc, " Venta segura");
delay_ms(3000); // Le damos un retardo de 3000 ms
lcd_putc("\f"); // borramos la palabra para entrar a otra instruccion
for (car = 0;car<=16;car++)
{
lcd_gotoxy(car,1);
printf(lcd_putc, "Bienvenido");
delay_ms(300);
lcd_putc("\f");
}
for (car=16;car>=1;Car--)
{
lcd_gotoxy(car,1);
printf(lcd_putc, "Bienvenido");
delay_ms(300);
lcd_putc("\f");
}
}
while(true)
{
if(input(pin_A1)==1) // INSERTAR NONEDA DE UN SOL
{
k=kbd_getc();
x=k-48;
if(k!=0)
{
lcd_gotoxy(1,1);
if(x>=1 && x<=9) // CONCIONES DE LA CANTIDAD DEL PRODUCTO
{ printf(lcd_putc,"\fpro:%i",x);
if(x>0 && x<2) // CONDICIONES DEL TECLADO
{
printf(lcd_putc, "\fProducto:AGUA");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"despachando...");
output_high(pin_c0);
delay_ms(2000);
output_low(pin_c0);
printf(lcd_putc,"\fhasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos,");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>1 && x<3)
{
printf(lcd_putc, "\fProducto:gaseosa");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"falta credito");
delay_ms(550);
printf(lcd_putc,"\ninserte$: 3.00");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>2 && x<4)
{
printf(lcd_putc, "\fProducto:cerveza");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"falta credito");
delay_ms(550);
printf(lcd_putc,"\ninserte$: 5.00");
delay_ms(500);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>3 && x<5)
{
printf(lcd_putc, "\fProducto:CIGARRO");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"falta credito");
delay_ms(550);
printf(lcd_putc,"\ninserte$: 7.00");
delay_ms(500);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>=5 && x<=9)
{
printf(lcd_putc, "\f Elija Otro");
delay_ms(200);
printf(lcd_putc,"\n");
printf(lcd_putc," Producto");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
}
}
}
if(input(pin_A2)==1) // una modeda de 3 soles
{
k=kbd_getc();
x=k-48;
if(k!=0)
{
lcd_gotoxy(1,1);
if(x>=1 && x<=9)
{ printf(lcd_putc,"\fproducto:%i",x);
if(x>0 && x<2)
{
printf(lcd_putc, "\fProducto:AGUA");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc," despachando....");
output_high(pin_c0);
delay_ms(2000);
output_low(pin_c0);
printf(lcd_putc,"\n");
printf(lcd_putc,"vuelto $: 2.00");
output_high(pin_c4);
delay_ms(2000);
output_low(pin_c4);
printf(lcd_putc,"\f");
printf(lcd_putc," hasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>1 && x<3)
{
printf(lcd_putc, "\fPro:gaseosa");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"despachando...");
output_high(pin_c1);
delay_ms(2000);
output_low(pin_c1);
printf(lcd_putc,"\f");
printf(lcd_putc," hasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>2 && x<4)
{
printf(lcd_putc, "\fProducto:cerveza");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"falta credito");
delay_ms(550);
printf(lcd_putc,"\ninserte$: 5.00");
delay_ms(500);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>3 && x<5)
{
printf(lcd_putc, "\fProducto:CIGARRILO");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"falta credito");
delay_ms(550);
printf(lcd_putc,"\ninserte$: 7.00");
delay_ms(500);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>=5 && x<=9)
{
printf(lcd_putc, "\f Elija Otro");
delay_ms(200);
printf(lcd_putc,"\n");
printf(lcd_putc," Producto");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
}
}
}
if(input(pin_A3)==1) //moneda de 5 soles
{
k=kbd_getc();
x=k-48;
if(k!=0)
{
lcd_gotoxy(1,1);
if(x>=1 && x<=9)
{ printf(lcd_putc,"\fpro:%i",x);
if(x>0 && x<2)
{
printf(lcd_putc, "\fProducto:AGUA");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc," despachando....");
output_high(pin_c0);
delay_ms(2000);
output_low(pin_c0);
printf(lcd_putc,"\n");
printf(lcd_putc,"vuelto $: 4.00");
output_high(pin_c4);
delay_ms(2000);
output_low(pin_c4);
printf(lcd_putc,"\f");
printf(lcd_putc," hasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>1 && x<3)
{
printf(lcd_putc, "\fProducto:gaseosa");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc," despachando....");
output_high(pin_c1);
delay_ms(2000);
output_low(pin_c1);
printf(lcd_putc,"\n");
printf(lcd_putc,"vuelto $: 2.00");
output_high(pin_c4);
delay_ms(2000);
output_low(pin_c4);
printf(lcd_putc,"\f");
printf(lcd_putc," hasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>2 && x<4)
{
printf(lcd_putc, "\fProducto:cerveza");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"despachando...");
output_high(pin_c2);
delay_ms(2000);
output_low(pin_c2);
printf(lcd_putc,"\f");
printf(lcd_putc,"\fasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>3 && x<5)
{
printf(lcd_putc, "\fProducto:CIGARRILO");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc,"falta credito");
delay_ms(550);
printf(lcd_putc,"\ninserte$: 7.00");
delay_ms(500);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>=5 && x<=9)
{
printf(lcd_putc, "\f Elija Otro");
delay_ms(200);
printf(lcd_putc,"\n");
printf(lcd_putc," Producto");
delay_ms(100);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
}
}
}
/*if(input(pin_A4)==1)
{
k=kbd_getc();
x=k-48;
if(k!=0)
{
lcd_gotoxy(1,1);
if(x>=1 && x<=9)
{ printf(lcd_putc,"\fproducto:%i",x);
if(x>0 && x<2)
{
printf(lcd_putc, "\fProducto:AGUA");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc," despachando....");
output_high(pin_c0);
delay_ms(2000);
output_low(pin_c0);
printf(lcd_putc,"\n");
printf(lcd_putc,"vuelto $: 9.00");
output_high(pin_c4);
delay_ms(2000);
output_low(pin_c4);
printf(lcd_putc,"\f");
printf(lcd_putc,"hasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>1 && x<3)
{
printf(lcd_putc, "\fProducto:gaseosa");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc," despachando....");
output_high(pin_c1);
delay_ms(2000);
output_low(pin_c1);
printf(lcd_putc,"\n");
printf(lcd_putc,"vuelto $: 8.00");
output_high(pin_c4);
delay_ms(2000);
output_low(pin_c4);
printf(lcd_putc,"\f");
printf(lcd_putc,"hasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>2 && x<4)
{
printf(lcd_putc, "\fProducto:cerveza");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc," despachando....");
output_high(pin_c2);
delay_ms(2000);
output_low(pin_c2);
printf(lcd_putc,"\n");
printf(lcd_putc,"vuelto $: 5.00");
output_high(pin_c4);
delay_ms(2000);
output_low(pin_c4);
printf(lcd_putc,"\f");
printf(lcd_putc,"hasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>2 && x<4)
{
printf(lcd_putc, "\fProducto:CIGARRO");
delay_ms(550);
printf(lcd_putc,"\n");
printf(lcd_putc," despachando....");
output_high(pin_c3);
delay_ms(2000);
output_low(pin_c3);
printf(lcd_putc,"\n");
printf(lcd_putc,"vuelto $: 3.00");
output_high(pin_c4);
delay_ms(2000);
output_low(pin_c4);
printf(lcd_putc,"\f");
printf(lcd_putc,"hasta luego....");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
if(x>=5 && x<=9)
{
printf(lcd_putc, "\f Elija Otro");
delay_ms(200);
printf(lcd_putc,"\n");
printf(lcd_putc," Producto");
delay_ms(1000);
printf(lcd_putc,"\f");
printf(lcd_putc," Bienvenidos");
printf(lcd_putc,"\n");
printf(lcd_putc," Venta segura");
}
}
}
}
*/
}
}
...................................................................................................................................................................
Para
realizar la programación anterior se tuvo que revisar comandos que
anteriormente (en el presente blog) se estuvo ejecutando en diferentes
sesiones.
Los resultados anteriormente
mostrados fueron ejecutados en los programas CCS COMPILER y PROTEUS 8.5, ambos
programas se leen mutuamente. Como se pudo observar nuestra programación al
compilarlo funciona correctamente sin ningún error, además nuestro proteus fue
ejecutando la acción necesaria cada vez que se estableció un pulso en los
diferentes valores de dinero.
CONCLUSIONES y OBSERVACIONES
- Para poder poder realizar este proyecto se tuvo que aprender previamente estos código ya se estaban practicando en el Laboratorio en diferentes simulaciones en el entrenador como en proteus.
- Ya que estos códigos son libres tenemos la gran libertad de probar con ellos y realizar programas como nuestro proyecto.
- Se observa que gracias al programa proteus podemos probar, si lo que nuestra programación esta correcto o no.
- También al usar un bucle infinito como es (while true) nos ayuda a ver ciclicamente nuestra programación con respecto lo que se muestra en la pantalla LCD.
- En síntesis se aprendió a programar con un conjunto de códigos que fueron útiles para realizar nuestro proyecto. OJO (nuestro proyecto se puede perfeccionar mas con mas investigación, etc.)
AUTORES: TOLENTINO, QUISPE
No hay comentarios:
Publicar un comentario