Universidad Nacional Micaela
Bastidas de Apurímac
Informe Final:
ASIGNATURA : Sistemas Digitales
TEMA : Programacion para PIC-16F84
DOCENTE : Ing. Gladys ECHEGARAY P. ALUMNOS : Eber ESPINOZA CHIPANA
Christian QUISPE PANTOJA
Susan ANAMPA VALDEZ
CICLO : VIII
ABANCAY - APURÍMAC
2012
1. Objetivos
Afianzar los conocimientos obtenidos en clase sobre microcontroladores (PIC)
Programar el código para un carrito seguidor de línea haciendo uso del software CCS.
Modelar el carrito seguidor de línea haciendo uso del software Proteus.
2. Equipos y Materiales
2.1. Equipos
Computadoras
Memorias USB
2.2. Materiales
Software CCS
Software Proteus
3. Marco Teórico:
3.1 Microcontrolador
Un microcontrolador (abreviado μC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica. Un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.
Algunos microcontroladores pueden utilizar palabras de cuatro bits y funcionan a velocidad de reloj con frecuencias tan bajas como 4 kHz, con un consumo de baja potencia (mW o microvatios). Por lo general, tendrá la capacidad para mantener la funcionalidad a la espera de un evento como pulsar un botón o de otra interrupción, el consumo de energía durante el sueño (reloj de la CPU y los periféricos de la mayoría) puede ser sólo nanovatios, lo que hace que muchos de ellos muy adecuados para aplicaciones con batería de larga duración. Otros microcontroladores pueden servir para roles de rendimiento crítico, donde sea necesario actuar más como un procesador digital de señal (DSP), con velocidades de reloj y consumo de energía más altos.
3.2 Microcontrolador PIC-16F84
Es un MICROCONTROLADOR de 8 bits, perteneciente a la subfamilia de lagama media de los microcontroladores fabricados por compañía MicrochipTecnology. Posee memoria de programa tipo FLASH. Con tecnología CMOS,completamente estático, esto quiere decir que el reloj puede detenerse y los datos de la memoria no se pierden. Emplean arquitectura RISC (35instrucciones. El reset de encendido (POR) y el temporizador de reset, ofrecenla posibilidad de no usar circuito externo de reset.
Arquitectura Hardvard.
Estructura Fisica
3.3 Pines y Funciones
Los PUERTOS son el puente entre el microcontrolador y el mundo exterior.Son líneas digitales que trabajan entre cero y cinco voltios y se puedenconfigurar como entradas o como salidas.El PIC 16F84 tiene dos puertos. El puerto A con 5 líneas y el puerto B con 8líneas. Cada pin se puede configurar como entrada o como salidaindependiente programado por un par de registros diseñados para tal fin. Enese registro un "0" configura el pin del puerto correspondiente como salida y un"1" lo configura como entrada.
RA4/TOCKI= Pin de Entrada/Salida o entrada de Reloj Externo para el TMR0,cuando este pin se configura como salida es de tipo Open Drain (ST), cuandofunciona como salida se debe conectar a Vcc (+5V) a través de una resistencia.
PUERTO BRB0/INT= Pin de Entrada/Salida o entrada de interrupciónexterna. (TTL/ST)
3.4 Organización de la Memoria:
Hay dos bloques de memoria:
la memoria de programa y la memoria de datos. Cada bloque tiene su propiobus de acceso, de manera que se puede acceder simultáneamente a ambosbloques durante el mismo ciclo de instrucción. En general, para losmicrocontroladores, la
memoria de datos se asume como una RAM ,
esdecir, una memoria que puede ser leída y escrita pero que tiene la desventajade ser volátil, o sea, que su información se pierde al desenergizar el dispositivo.
De aquí en adelante se le llamará registro a cada posición de lamemoria
de datos.La memoria RAM de datos a su vez se divide en dos secciones:
•Registros de propósito general
Están dedicados a funciones dirigidas al control del dispositivo en sí mismo yde los módulos funcionales que lo componen.
•Registros de función especial
(SFRs: Special Function Registers)Son los registros que utilizará el usuario para almacenar los datos temporalesde su programa en particular, son los registros de trabajo del usuario.En el PIC16F84, del área de la memoria de datos también hace parte unaMemoria EEPROM de datos . Esta memoria no se encuentra directamentemapeada dentro la memoria de datos, pero se puede acceder indirectamente.El direccionamiento indirecto se realiza a través de un registro apuntador dedirecciones (09ho EEADR) que contiene la dirección de la EEPROM de datosen la cual se va leer o escribir. Los 64 bytes de EEPROM de datos tienen unrango de direcciones que abarca desde 00h a 3fh.
4. Procedimiento
4.1 Programacion del PIC:
Para ello ejecutamos el software CSS
Luego creamos un nuevo proyecto Wizard
Le ponemos un nombre y nos abrirá la siguiente ventana de configuración
En esta ventana se configuran las opciones de Device (escogemos el PIC16F84 para el cual desarrollaremos el Programa), Ositar Frecuency (Osilador de frecuencia usaremos 4000000HZ)
A continuación escribiremos el siguiente código:
Codigo Fuente:
//********************SEGUIDOR DE LINEA******************************//
//******************************************************************//
#include <16f84a.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#byte port_a = 5 //Direccion de Puerto_A en la Memoria
#byte port_b = 6 //Direccion de Puerto_B en la Memoria
#use fast_io(a) //Para configuracion de los Puertos.
#use fast_io(b)
//**************Configuracion de Puertos ENTRADAS/SALIDAS*****************
//************************************************************************
#define PuertoA_Entrada set_tris_a(0b00011) //A0 y A1 intradas y los demas salidas
#define PuertoB_Salida set_tris_b(0b00000000) // salidas
#define LimpiarSalidas port_b=0;
//************************************************************************
//************** Encender y Apagar Motor1 *******************************
//************************************************************************
#define Encender_MotorDerecha output_bit(PIN_B0,1)
#define Apagar_MotorDerecha output_bit(PIN_B0,0)
#define MotorDerecha_Gira_Adelante output_bit(PIN_B1,1)
#define MotorDerecha_Gira_Atras output_bit(PIN_B1,0)
//************************************************************************
//************** Encender y Apagar Motor2 *******************************
//************************************************************************
#define Encender_MotorIzquierda output_bit(PIN_B2,1)
#define Apagar_MotorIzquierda output_bit(PIN_B2,0)
#define MotorIzquierda_Gira_Adelante output_bit(PIN_B3,0)
#define MotorIzquierda_Gira_Atras output_bit(PIN_B3,1)
//************************************************************************
//**************Recepcion de Datos de Entrada del Puerto_B****************
//Movil vista de frente :un sensor colocado lado izquierdo
// :un sensor colocado lado derecho.
//Sensor sobre la linea negra: nivel logico alto (5 voltios)
//Sensores sobre fondo blanco: nivel logico bajo (0 Voltios)
//************************************************************************
#define SensorLuz_Izq1 input(PIN_A1)
#define SensorLuz_Der1 input(PIN_A0)
//************************************************************************
//*********************PROGRAMA PRINCIPAL***************************
//************************************************************************
main()
{
PuertoA_Entrada;
PuertoB_Salida;
LimpiarSalidas;
while(true)
{
//////////////////////Rutina simple inspeccion: BORDE DERECHO///////////////
///////////////////CONDICIONES PARA DOS SENSORES///////////////////////////.
if ((!(SensorLuz_Izq1))&(SensorLuz_Der1)) //01 GIRO DERECHA
{
Apagar_MotorDerecha;
Encender_MotorIzquierda;
MotorDerecha_Gira_Adelante;
MotorIzquierda_Gira_Adelante;
}
else
if ((SensorLuz_Izq1)&(!(SensorLuz_Der1)))//10 GIRO IZQUIERDA
{
Encender_MotorDerecha;
Apagar_MotorIzquierda;
MotorDerecha_Gira_Atras;
MotorIzquierda_Gira_Atras;
}
else
if ((SensorLuz_Izq1)&(SensorLuz_Der1))//11 AVANZAR HACIA ADELANTE
{
Encender_MotorDerecha;
Encender_MotorIzquierda;
MotorDerecha_Gira_Atras;
MotorIzquierda_Gira_Adelante;
}
else if ((!(SensorLuz_Izq1))&(!(SensorLuz_Der1)))//00 AVANZA HACIA ATRAZ
{
Apagar_MotorDerecha;
Apagar_MotorIzquierda;
MotorDerecha_Gira_Adelante;
MotorIzquierda_Gira_Atras;
}
else
{
}
}
return(0);
}
Captuta de Pantalla del Programa
4.2 Modelamiento en Proteus:
Para ello ejecutamos el software ISIS 7 Profesional
Apregamos los siguientes componentes desde:
Arrastramos a la ventana de diseño, y realizamos como se muestra en la siguiente figura:
Hacemos doble click sobre el PIC16F84 y realizamos la conexión con el programa antes creado, tal como se muestra a continuación:
Damos ok y ejecutamos el programa desde:
4.3 Funcionamiento:
Caso 1: Entradas 11
Ambos motores giran en sentido horario ya que las entradas se producen a nivel alto.
Caso 2: Entradas 10
El motor derecho empieza a girar en sentido antihorario mientras que el motor izquierdo sigue girando en sentido horario.
Caso 3: Entradas 01
El motor izquierdo empieza a girar en sentido antihorario mientras que el motor derecho gira en sentido horario.
Caso 4: Entradas 00
Ambos motores giran en sentido antihorario ya que las entradas se producen a nivel bajo.
4. Concluciones
El uso del programa CSS permite reducir código assembler
El uso de microcontroladores es una manera de realizar programación en tiempo real.
El carrito seguidor de línea es un robot con cierto nivel de inteligencia, que recibe señales atraves de sensores de luz y realiza acciones atraves de sus efecores que es el de seguir una línea negra.
5. Bibliografia
http://electronicadesarrollo.blogspot.com/2007/12/programacin-de-pics.html
http://es.wikipedia.org/wiki/Microcontrolador
http://tdrobotica.co/noticias/robotica/53
http://www.slideshare.net/Dizporac287/seguidor-de-linea-negra
Escuela Academico Profesional de Ingenieria Informática y Sistemas
Escuela Academico Profesional de Ingenieria Informática y Sistemas
20-4-2011
Laboratorio Nº 02: Mediciones Electrónicas y Elétricas
Laboratorio Nº 02: Mediciones Electrónicas y Elétricas13