Você está na página 1de 20

UNIVERSIDAD NACIONAL AUTONOMA

DE MEXICO
FACULTAD DE INGENIERIA

CROFI
Club de Robtica de la Facultad de Ingeniera
MICROCONTROLADORES PIC CON C APLICADO
A LA ROBOTICA

1
CROFI-UNAM

Temario.
1. Introduccin.
a. Qu es un microcontrolador?
b. Definicin de microcontrolador
c. Diferencia entre microcontrolador y microprocesador
d. Codigo Fuente
e. Ensambladores
f. Interpretes
g. Compiladores
2. La familia de los PICs
a. El porque los PICs se han colocado en el mercado
b. Gamas
i. Gama baja o bsica PIC16C5X
ii. Gama media PIC16FXXX
iii. Gama alta PIC17CXXX con instrucciones de 16 bits
iv. Gama mejorada PIC18FXXX con instrucciones de 16 bits
v. Los de 8 pines PIC12(C)FXXX

3. El PIC16F887
a. El microcontrolador PIC16F887
b. Recursos
c. Caractersticas
d. Diagrama de pines
e. Descripcin de los pines y puertos

4. Lenguaje C
a.
b.
c.
d.
e.
f.
g.

Compilador
Estructuras de control
Operaciones lgicas
Declaracin y uso de variables
Uso de funciones
Programa bsico
Simulador

2
CROFI-UNAM

5. Mdulos
a. Entradas y salidas digitales
b. Bootloader
c. Uso LCD 16x2
d. Convertidor A/D
e. Mdulo CCP, especficamente PWM
f. Comunicacin serie RS232
g. Comunicacin serie I2C
h. Comunicacin USB
i. Timers
j. Interrupciones
k. Uso LCD Grafico
l. Teclado matricial
m. Encoders
n. Motor a pasos
o. Servomotores

6. Proyecto
a.
b.
c.
d.
e.

Robot de Micromouse
Robot de laberinto
Limpiador de playa
Brazo robtico
Otro

3
CROFI-UNAM

TEMA 1 Introduccin
1Qu es un micro controlador?
Un microcontrolador es un tipo de computadora en miniatura que puedes encontrar en los
pequeos dispositivos electrnicos. Unos ejemplos comunes de aparatos que utilizamos a diario y
que en su interior tienen uno o varios microcontroladores se muestran en la figura siguiente. Si
estos dispositivos solo tienen botones y displays, es muy probable que posean un cerebro
constituido por un microcontrolador programable.

4
CROFI-UNAM

5
CROFI-UNAM

Microcontrolador
Dispositivo electrnico que posee todas las caractersticas de una PC, claro que en pequea escala.
Pues cuenta con puertos de entrada y salida de informacin, puertos de comunicacin, Unidad
aritmtica Lgica, memoria interna (RAM y ROM), y una Unidad Central de Procesos.
Microprocesador
Este elemento en cambio, solo es un Unidad Central de Procesos, que de manera externa (desde
un punto de vista de una PC) hay que conectarle la memoria, puertos y unidades de
almacenamiento (por eso se monta en una tarjeta madre para poder utilizarlo), tiene la ventaja de
ser mas escalable que un microcontrolador.
Algo muy importante cuando se estudia cualquier microcontrolador, es el entender cul es la
diferencia entre cdigo fuente, cdigo objeto, compilador y ensamblador.
Cdigo Fuente
EI cdigo fuente, es almacenado en el archivo fuente, este archivo est escrito con el American
Standar Code for Information Interchange (ASCII) y contiene las sentencias del programa y
comentarios (utilizados para que los humanos puedan entender lo que el programa est
ejecutando). EI archivo fuente es creado en un editor estndar (como NotePad o WordPad) o
puede ser construido en un editor IDE (ambientes de desarrollo integrado) que posee mltiples
aplicaciones que apoyan en el desarrollo de la aplicacin. EI archivo fuente es usado como entrada
para los ensambladores, interpretes o compiladores que producen las instrucciones necesarias
para controlar un dispositivo. En el caso de un ensamblador o compilador, el cdigo fuente es
convertido en un archivo objeto o archivo hex, que finalmente ser grabado dentro del
microcontrolador que controla el dispositivo. El intrprete es construido dentro del
microcontrolador del dispositivo y ejecuta el archivo fuente que es una serie de instrucciones y
comandos que determinan inmediatamente salidas a procesos intermedios.
El archivo fuente puede incluir otros archivos que proveen que adiciones al cdigo fuente o
prototipos para las libreras de funciones o datos requeridos por la aplicacin. Los archivos
include para ensamblar lenguajes de programacin generalmente terminan con *.inc que es la
extensin con la que terminan los archivos de sistema. Los archivos include para el lenguaje de
programacin C tienen como extensin una *.h los ensambladores y compiladores proveen de
estos archivos include para hacer las tareas del desarrollo de aplicaciones ms sencillas,
basndose en los requerimientos de tu aplicacin. Al finalizar las operaciones de ensamblar o
compilar se produce en un archivo objeto (usualmente terminado en *.obj) o un archivo hex. El
archivo hex es la aplicacin completa, lista para programarse dentro de un microcontrolador.
El archivo objeto est conectado a otros archivos objeto para producir el archivo hex. El ms
popular de los formatos para archivos hex es el formato Intel 8 bit conocido como INHXM8. Otros
ejemplo de un formato diferente utilizado por los microcontroladores y programadores de
microcontroladores de Motorola es el llamado *.S9 o *.S19.
6
CROFI-UNAM

Ensambladores
Al programar en un lenguaje ensamblador se producen los cdigos ms eficientes en cuanto a
tamao, numero de instrucciones y manejo de recursos del microprocesador. Si el objeto es
manejar en su totalidad y de manera eficiente un microprocesador o microcontrolador es
necesario programar en ensamblador ya que se tiene un mayor control sobre los recursos. Si los
recursos no son limitados en cuanto a la memoria, pues se puede comprar el dispositivo que
soporte las necesidades del lenguaje de alto nivel y adems se requiere realizar operaciones
aritmticas complejas la mejor opcin es programar en un lenguaje de alto nivel. Hay que decir
que el lenguaje ensamblador es complicado. A pesar de esto, es el lenguaje ms utilizado en los
robots prototipo.
Los pic tienen un juego reducido de 35 poderosas instrucciones (familia 16Fxxx). Cabe decir que
los diferentes tipos de microprocesadores tienen muchas instrucciones parecidas que son muy
similares, lo cual hace muy difcil el poder programar diferentes microcontroladores sabiendo
utilizar un lenguaje.
Las desventajas son:
1.- EI cdigo no es totalmente portable. (Un cdigo para un micro puede no funcionar en un micro
diferente).
2.- Es muy difcil explicar lo que uno piensa a la hora de hacer un programa a otro programador.
3.- Es difcil pasar de un lenguaje ensamblador a uno de alto nivel.
Las ventajas:
1.- Desarrollo de prototipos robticos sencillos.
2.- Programacin de interfaces dedicadas o especificas.
3.- Cuando nuestra aplicacin tiene mucho contacto con el exterior y el procesamiento no sea
complejo.

Interpretes
Cuando las computadoras estuvieron disponibles, prcticamente en todos los desarrollos en
software se utilizo un intrprete (usualmente BASIC) que era automticamente cargado dentro de
las computadoras cuando eran arrancadas por primera vez. Los intrpretes realizaban muchas de
las funciones bsicas que se consideran normales para los sistemas operativos. La IBM PC cambio
esto con la introduccin de un simple sistema operativo que poda ejecutar aplicaciones binarias o
ejecutar constructores con el interprete BASIC.

7
CROFI-UNAM

Un intrprete es un programa que corre dentro de la computadora y lee y ejecuta otro programa
que no necesita convertir a algn formato especfico para la computadora. Esto es solamente una
simple interfaz dentro de la computadora.

Compiladores
Los compiladores trabajan bajo una serie de reglas lgicas simples para convertir sentencias de
lenguajes de alto nivel al lenguaje ensamblador. Los modernos compiladores permiten simplificar
el cdigo ensamblador, dando como resultado aplicaciones ms pequeas y ms eficientes. Si
estas interesado en aprender un lenguaje ensamblador para un procesador especifico, no debes
de sorprenderte al descubrir que el cdigo que producen los modernos compiladores son unos
excelentes ejemplos para aprenderlo. Par ejemplo los programas en C son convertidos sentencia
por sentencia en instrucciones de lenguaje ensamblador (compilado) a partir de este cdigo
ensamblador se obtiene el cdigo objeto que finalmente es programado dentro del procesador.
La familia de los PICS
En la corta vida de los PICs ya ocupan las posiciones de cabeza en el ranking mundial,
compartiendo codo a codo con gigantes como Intel y Motorola. En 1990 ocupaban el puesto
vigsimo y actualmente son ms de 100 millones de PICs los que vende Microchip cada ao, lo que
ha alzado al segundo puesto del ranking mundial.
EI por que los PICS se han colocado en el mercado
Los PIC tienen una gran aceptacin en la comunidad de tcnicos y aficionados que trabajan con
microcontroladores. Las caractersticas que han provocado esta gran aceptacin son:

Sencillez de Manejo
Buena Informacin
Precio
Buen promedio de parmetros: velocidad, consumo, tamao, alimentacin, cdigo
compacto, etc.
Herramientas de desarrollo fciles y baratas
Diseo rpido
Disponibilidad inmediata
Compatibilidad del software en todos los modelos de la misma gama
Su coste es comparativamente inferior al de los competidores
Poseen una elevada velocidad de funcionamiento
Tienen un juego de instrucciones reducido
Bajo consumo unido a un amplio rango de voltajes de alimentacin.
Muchas herramientas se pueden recoger gratuitamente por Internet
(www.microchip.com).
8
CROFI-UNAM

Existen una gran variedad de herramientas que permiten grabar, depurar, borrar y
comprobar el comportamiento de los PICs.
La gran variedad de modelos de PIC permite elegir el que mejor responde a los
requerimientos de la aplicacin.

Gamas
Gama baja o bsica PIC16C5X
Se trata de una serie de PIC de recursos limitados, pero con una de las mejores relaciones
coste/presentacin. Sus versiones estn encapsuladas con 18 y 28 pins y pueden alimentarse a
partir de una tensin de 2.5 en el caso de los "LF", lo que les hace ideales en las aplicaciones que
funcionan con pilas. Tienen un repertorio de 33 instrucciones cuyo formato de 12 bits. No admiten
ningn tipo de interrupcin y la pila solo dispone de dos niveles.
Gama Media PIC16FXXX
Es la gama ms variada y completa de los PICs. Abarca modelos con encapsulado desde 18 patitas
hasta 68, cubriendo varias opciones que integran abundantes perifricos.
Dentro de esta gama se halla el PIC16F887 que es el microcontrolador que vamos a utilizar para el
desarrollo de proyectos. El repertorio de Instrucciones es de 35 a 14 bits cada una y compatible
con el de la gama baja. Sus distintos modelos contienen todos los recursos que se precisan en las
aplicaciones de los microcontroladores de 8 bits. Tambin dispone de interrupciones y unas Pila
(stack) de 8 niveles que permite el anidamiento de subrutinas.
Gama Alta PIC17CXXX con instrucciones de 16 bits

9
CROFI-UNAM

Se alcanzan las 58 instrucciones de 16 bits en el repertorio y sus modelos disponen de un sistema


de gestin de interrupciones sectorizadas muy potente. Tambin incluyen variados controladores
de perifricos, puertas de comunicacin serie y paralelo con elementos externos y un
multiplicador hardware de gran velocidad.
Quizs la caracterstica ms destacable de los componentes de esta gama es su arquitectura
abierta, que consiste en la posibilidad de ampliacin del microcontrolador con elementos
externos. Para este fin, las patitas sacan el exterior las lneas de los buses de datos, direcciones y
control, a las que se conectan las memorias o controladores de perifricos. Esta filosofa de
construccin del sistema es la que se emplea en los microprocesadores y no suele ser prctica
habitual cuando se emplean microcontroladores.
Gama Mejorada PIC18FXXX con instrucciones de 16 bits
En los inicios del tercer milenio Microchip present la gama mejorada de los microcontroladores
PIC con la finalidad de soportar las aplicaciones avanzadas en las reas de automocin,
comunicaciones, Ofimtica y control industrial. Sus modelos destacaron por su alta velocidad (40
MHz) y su gran rendimiento.
Los de 8 pines PIC12(C) FXXX
Se trata de PICs que ha acaparado la atencin del mercado. Su principal caracterstica es su
reducido tamao, al disponer un encapsulado de 8 patitas. Se alimenta con un voltaje de corriente
continua comprendido entre 2.5 V Y 5.5 V, Y consumen menos de 2 mA cuando trabaja a 5 V Y 4
MHz El formato de sus instrucciones puede ser de 12 o 14 bits y su repertorio es de 33 o 35
instrucciones, segn pertenezca a la gama baja o media respectivamente.

El PIC16F887
Recursos
Tiene una estructura de 4 bancos, seleccionables a travs de los bits RPO y RP1 del registro
STATUS. El nmero de puertos en los PIC16F886 y 883 es de 3 (28 pines) y el nmero de puertos
en los PIC16F887 y 884 es de 5 (40 pines).
Este microcontrolador pertenece a la familia PIC16F88x, donde posee todas las caractersticas de
sus predecesores mejoradas. Incorporan la memoria FLASH, con una capacidad de 4k 8k (segn
el modelo), sin cambiar la estructura interna del procesador y conservando el mismo repertorio de
instrucciones.
Caractersticas:

10
CROFI-UNAM

1.
2.
3.
4.
5.
6.
7.

a.

Poseen dos mdulos CCP (captura, comparacin y pwm).


Comunicacin Serie (RS232, I2C y SPI)
Comunicacin Paralelo
Convertidor A/D de 10 canales.
35 pines de I/O.
2 timers de 8 bits y 1 timer de 16 bits
Cristal interno de hasta 8MHz

Compilador.

El compilador a usar es el CCS C v4.109 del Custom Computer Services, el cual cuenta con una
Interfas de usuario amigable fcil de usar.

b.

Estructuras de control

Las estructuras de control permiten modificar el flujo de ejecucin de las instrucciones de un


programa. Todas las estructuras de control tienen un nico punto de entrada y un nico punto de
salida. Estas se clasifican en: secuenciales, iterativas y de control avanzadas. Siendo de esta forma
que la programacin se rija por los principios de la programacin estructurada.

11
CROFI-UNAM

Estructura If simple. Redirige un curso de accin segn la evaluacin de una condicin, ya sea falsa
o verdadera.
Estructura If-else. Si la condicin es verdadera, se ejecuta el bloque de sentencias 1, de lo
contrario, se ejecuta el bloque de sentencias 2.
IF (Condicin)
{Bloque de sentencias 1}
ELSE
{Bloque de sentencias 2}
Estructura while y do-while. Mientras la condicin sea verdadera, se ejecutarn las sentencias del
bloque. En el caso del do-while, el bloque de sentencias se ejecuta al menos una vez.
While(Condicin){
Bloque de sentencias
}
Do {
Bloque de sentencias
}while(condicin);

Estructura for. Ejecuta un bloque de sentencias un nmero determinado de veces.


For(condicin inicial, condicin final, incremento o decremento de
la cuenta){
Bloque de sentencias
}
Estructura switch. Es un selector de casos.
Switch(selector){
Case Opcion1:
{Bloque de sentencias 1}
Break
Case Opcionn:
{Bloque de sentencias n}
Break
Case default:
{Bloque de sentencias default}
}
Estructuras anidadas. Son aquellas donde el bloque de sentencias de una estructura, es otra
estructura de control.

12
CROFI-UNAM

c.

Operaciones lgicas

Operadores relacionados. Son smbolos que se usan para comparar dos valores. Si el resultado de
la comparacin es correcto la expresin considerada es verdadera y representa el valor true (del
tipo boolean), en caso contrario es falsa y representa false.
Operador
<
>
==
!=
<=
>=

nombre
menor que
mayor que
igual a *
no igual a
menor que o igual a
mayor que o igual a

ejemplo
a<b
a>b
a==b
a!=b
a<=b
a>=b

significado
a es menor que b
a es mayor que b
a es igual a b
a no es igual a b
a es menor que o igual a b
a es menor que o igual a b

*Nota. No se debe confundir el operador asignacin = con el operador relacional igual a ==.
Operadores lgicos. Los operadores lgicos son:

&& AND (el resultado es verdadero si ambas expresiones son verdaderas)


||
OR (el resultado es verdadero si alguna expresin es verdadera)
!
NOT (el resultado invierte la condicin de la expresin)

AND y OR trabajan con dos operandos y retornan un valor lgico basadas en las denominadas
tablas de verdad. El operador NOT acta sobre un operando. Ejemplo:
(a<b) && (b<c)
es verdadero (true), si ambas son verdaderas. Si alguna o ambas son falsas el resultado es falso
(false).

d.

Declaracin y uso de variables

Una varable representa un dato guardado en la memoria del microcontrolador. La declaracin de


variables se hace de la siguiente forma:
Tipo nombre_varaible; // solo se crea la variable
Tipo nombre_varaible=valor; //se crea y se inicia en un valor
Ejemplo:

int i;
Int i=7;
13
CROFI-UNAM

En una linea se pueden declarer mas de una variable del mismo tipo con la opcion de inicializar o
no alguna variable.
Ejemplo:

int a, b=8, c, d;

Tipos de datos que se pueden usar en el compilador CCS C para el PIC:

Tipo
int1 o short
int8 , int o char
int16 o long
int32 o long long
float32 o float

Rango
Unsigned (sin
Signed ( con signo)
signo)
0a1
No aplica
0 a 255
-128 a 127
0 a 65535
-32768 a 32767
0 a 4294967296
- 2147483648 a 2147483647
-1.5x10^45 a 3.4x10^38

Tamao
1 bit
8 bits
16 bits
32 bits
32 bits

Las variables al declararse son por defecto sin signo.


Ejemplo:

e.

signed int a=-5;


Unsigned int a=5;

Uso de funciones
Declaracion de funciones. Cuando se declara una funcin, se le pone un tipo de variable
que puede regresar despus de su ejecucin, si la funcin no regresa algn valor en tipo
simplemente se coloca void, las variables 1 y 2 son las variables de entrada, y estas
solamente son locales a la funcin, se pueden omitir simplemente no colocndolas.
Tipo nombre_funcion(tipo variable1, tipo variable2, ){
Tipo valor;//declaracin de la variable valor
Bloque de sentencias
Return valor; // regresa la variable valor
}

14
CROFI-UNAM

f.

Programa bsico
//Este es un programa donde parpadea un led, donde se
//demuestra la estructura bsica de un programa
#include <16F887.h> // inclusin de archivos de cabecera
#fuses HS, NOWDT, NOPROTECT, NOLVP, NODEBUG, MCLR //Palabras
// de configuracin
#use delay(clock=20MHZ) //configuracin de la frecuencia de
//oscilacin del reloj
#use rs232 (baud=115200, xmit=PIN_C6, rcv=PIN_C7)
//Configuracin del puerto serie: Velocidad de transmisin,
//pin de transmisin, pin de recepcin

void main(){ // funcin principal

//...Aqu va el cdigo fuente del programa


//Cuando un programa se inicia dentro del microcontrolador
//PIC,
// lo primero que hace es entrar en esta funcin principal,
//si se
// tienen funciones extras, mediante esta parte del cdigo.

} // Fin de la funcin principal


g.

Simulador

Como simulador de los programas usaremos un simulador de circuitos elctricos, este software se
llama Proteus Professional 7.6.

15
CROFI-UNAM

Sistema mnimo.
7.

16
CROFI-UNAM

Mdulos

a. Entradas y salidas digitales


Las entradas y salidas digitales estn agrupadas en 5 puertos, los cuales son:
Puerto A (A0 a A7).
Puerto B (B0 a B7).
Puerto C (C0 a C7).
Puerto D (D0 a D7).
Puerto E (E0 a E3).*
*El pin E3, solamente puede funcionar como entrada digital.
En este modo los pines pueden tener 2 estados, 0 (bajo, low, false, 0 volts) o 1 (alto,
high, true, 5volts).
En PICC las salidas para pines individuales se declaran de la siguiente forma (a modo de
ejemplo):
Output_high(PIN_B2);
// Pone en estado alto al pin B2
Output_low(PIN_B2);
// Pone en estado bajo al pin B2
Output_bit(PIN_B2,1);
// Pone en estado alto al pin B2
Output_bit(PIN_B2,0);
// Pone en estado bajo al pin B2
Output_toggle(PIN_B2); // Cambia el estado en el que se
encuentra actualmente el pin.
Las salidas a todo un puerto se declaran de la siguiente forma ( a modo de ejemplo):
Output_X(valor);
X representa el nombre del puerto ya sea: A, B, C, D o E; y el valor tiene que ser un
numero de 8 bits o segn sea la cantidad de pines en el puerto, donde el bit ms
significativo de valor es el pin X7 y el bit menos significativo del valor es el pin X0.
Se puede definir una etiqueta a una direccin de memoria, la cual puede ser un puerto
de salida, donde posteriormente se puede operar dentro del cdigo:
#byte PuertoB
0x06
memoria del puerto B.

// Se etiqueta la direccin de

Posteriormente se puede igualar a un valor, de igual manera que el anterior.

17
CROFI-UNAM

PuertoB=valor;
Para realizar una lectura digital de los pines individuales, se lee de la siguiente forma:
Input(PIN_B7);
Donde esta funcin devuelve un booleano, segn el estado en el que se encuentre el pin.
Para realizar una lectura digital de todo un puerto, se lee de la siguiente forma:
Input_X();
X representa el nombre del puerto ya sea: A, B, C, D o E; esta funcin devuelve un
nmero int8, donde representa el estado de las entradas de todo el puerto.
Programa Ejemplo, Parpadeo de un LED:
#include <16F887.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,MCLR
#use delay(clock=20MHZ)
#use rs232 (baud=115200, xmit=PIN_C6, rcv=PIN_C7)

void main(){ // funcion principal


while(true){ //Estructura de control ( permiten
//modificar el flujo de ejecucion de un programa)
output_high(PIN_B7); // Pone en estado alto al pin B7
delay_ms(100); //Retardo de 500ms
output_low(PIN_B7); // Pone en estado bajo al pin B7
delay_ms(100); //Retardo de 500ms

} // Fin del ciclo While


} // Fin de la funcin principal
b. Bootloader
El bootloader es un software que sirve para cargar un programa al microcontrolador sin la
necesidad de tener un programador de PIC dedicado, la desventaja es que este bootloader
tiene que cargarse por primera vez con un programador de PIC, y si es que el programa se
18
CROFI-UNAM

llega a daar se necesita volver a cargar el bootloader con el programador de PIC, la


ventaja es que no se necesita comprar el programador.
El software que se usa para cargar los programas con el bootloader se llama
TinyBootloader y se comunica mediante el puerto serial al microcontrolador.
c. Uso LCD 16x2

d. Convertidor A/D

e. Mdulo CCP, especficamente PWM

f.

Comunicacin serie RS232

g. Comunicacin serie I2C

h. Comunicacin USB

i.

Timers

j.

Interrupciones

k. Uso LCD Grafico

l.

Teclado matricial

m. Encoders
n. Motor a pasos

o. Servomotores
19
CROFI-UNAM

20
CROFI-UNAM

Você também pode gostar