Está en la página 1de 13

CURSO DE MICROCONTROLADORES

Todo lo expuesto en este documento es de distribucin libre, los logos e imgenes aqu
presentadas son propiedad de las respectivas marcas y empresas y son nicamente ilustrativas,
ninguna viene anexa con la intencin de obtener algn beneficio econmico. Este documento tiene
la finalidad de llegar a las personas que deseen aprender a programar microcontroladore s de
MICROCHIP. Este documento sirve exclusivamente como apoyo o material didctico para quien
desee incursionarse en el mundo de los microcontroladores. Sin ms por el momento reciban un
cordial saludo.
Les deseo el mayor de los xitos

ROMANO ESCOBAR JORGE ANTONIO

PROYECTO 1
Qu se aprender en este primer proyecto?
1.- Libreras
2.- FUSES (Fusibles)
3.- Frecuencia de Reloj (delay)
4.- Bloque de Funcin "MAIN"
5.- SET_TRIS_X(Y)
6.- Activar Salidas
7.- Tipos de Retardos
8.- Detectar Entradas
9.- Diferencia entre "IF" y "WHILE"
10.- Simulacin en PROTEUS

El compilador PCW es de vital importancia para la realizacin de proyectos a base de


microcontroladores, ya que tiene el entorno de trabajo en el cual se introducir el
cdigo que llevara a cabo el microcontrolador, a grandes rasgos solo bastara con
utilizar el botn COMPILE que servir para compilar y crear varios archivos, entre
ellos, un archivo de error, uno .cof y el ms importante de todos el .hex. El archivo
.hex es un cdigo hexadecimal (un tipo de numeracin que va desde 0 hasta F), que
utiliza el quemador de PIC para el grabado en el microcontrolador. En este caso
tambin este archivo .hex puede ser cargado en el simulador al igual que el .cof.
PIC = MICROCONTROLADOR

Lo importante a resaltar en este punto es como escribir el cdigo. Las reglas ms


importantes son:
Cada instruccin debe terminar con un puto y coma ;
Existen casos especiales que no deben utilizar punto y coma al terminar ;
Todo comentario de programa (texto que no se incluye) ser con doble
diagonal // seguido del texto a comentar.
Otra forma de hacer un comentario es empezando con diagonal asterisco /* y
terminando con asterisco diagonal */

QUE ES UNA LIBRERA?


Es un archivo en formato ".h" o ".c" que se incluye al cdigo del progra ma pero que no
podemos visualizar directamente en nuestra rea de cdigo. Es muy importante, ya
que estas libreras nos servirn para tareas muy tiles e importantes desde incluir el
PIC a utilizar hasta trabajar con LCD graficas.
Podemos observar en el cdigo del programa que se encuentra en la imagen que
tenemos lo siguiente:
#INCLUDE <18F4550.h>
EL TERMINO DE ESTA INSTRUCCION NO LLEVA PUNTO Y COMA AL FINAL

Esto incluir la librera del microcontrolador 18F4550, la cual incluye todo lo


relacionado con su funcionamiento, direccionamiento de puertos, pines, entradas
analgicas, puertos seriales, etc. En la siguiente imagen podemos observar una
pequea parte de lo que contiene la librera <18f4550>

FUSES
Los "FUSES" o "FUSIBLES" son palabras que sirven como configuracin de funciones
importantes del microcontrolador, como lo son oscilador para velocidad de trabajo
(interno, externo, de alta velocidad, de baja velocidad), proteccin de cdigo, uso de
puerto USB, master reset, watch dog, etc... Se configuran despus de incluir la librera
del microcontrolador a utilizar, en este caso se tiene:
#fuses INTRC_IO,MCLR,NOWDT,NOPROTECT,NOLVP,USBDIV,PLL1,CPUDIV1,NOVREGEN
EL TERMINO DE ESTA INSTRUCCION NO LLEVA PUNTO Y COMA AL FINAL

Por ahora nos enfocaremos en tener en claro que INTR_IO es la configuracin de


oscilador interno, ms adelante se explicaran los dems FUSES.

FRECUENCIA DE RELOJ (DELAY)


Un aspecto importante de los microcontroladores es que trabajan a cierta frecuencia
de reloj, esta frecuencia ser su velocidad de procesamiento, cabe mencionar que cada
instruccin del lenguaje C toma como mnimo 4 ciclos de reloj, excepto aquellas que
muestran un retardo.
Pero, Que es un ciclo de reloj? Es algo similar a la velocidad de las computadoras, que
tienen 2.2Ghz, 1.6Ghz, 500Mhz, se sabe que entre ms "Ghz" tenga ms veloz ser la
PC para realizar tareas.

Pues pasa exactamente igual con los microcontroladores pero a pequea escala, un
microcontrolador puede trabajar hasta a 48MhZ y cunto es eso en tiempo? 1Hz es
un ciclo por segundo por lo tanto un microcontrolador que trabaja a 48Mhz tendr 48
millones de ciclos por segundo! Lo cual indica que tiene 48 millones de ciclos de reloj
por segundo, si esto se convierte a instrucciones el microcontrolador realizara 12
millones de instrucciones por segundo (dependiendo la ins truccin y retardos).
Por ahora no se usara demasiada velocidad, solo se trabajara con 4 millones de ciclos
por segundo o 4MHZ (4 millones de ciclos por segundo) esto se define como:
#use delay(clock=4000000)

#use usar delay retardo clock reloj


EL TERMINO DE ESTA INSTRUCCION NO LLEVA PUNTO Y COMA AL FINAL
LIBRERIAS, FUSES Y ESPECIFICACION DE RELOJ VAN AL PRINCIPIO DEL PROGRAMA

BLOQUE DE FUNCIN MAIN


Que es un bloque Funcin?
Es una serie de instrucciones contenidas entre llaves, que por lo general posee un
nombre y un valor especfico, estas instrucciones realizaran una operacin o actividad
que se encuentre contenida dentro de ellas.

El bloque de funcin MAIN realizara todo lo referente al programa principal del


microcontrolador, para "decir" que es una funcin, se pone antes del nombre de
nuestra funcin la palabra "Void". Ejemplo:
Void main()
{
...
}

Cabe mencionar que por la naturaleza del microcontrolador y el compilador todas las
instrucciones se realizaran PASO A PASO, no podr haber un salto de una instruccin a
otra o hacer todas las instrucciones a la vez sin antes haber pasado por una anterior,
ejemplo:
Void main()
{
Instruccin 1;
Instruccin 2; //Se ejecuta despus de Instruccin 1
Instruccin 3; //Se ejecuta despus de Instruccin 2
}

No se podr realizar la instruccin 3 sin antes haber pasado por 1 y 2. Todo lo


contenido en Void main() se ejecutara una y otra vez, no se podr detener, es por eso
que es la funcin principal. Continuando con el ejemplo anterior, se ejecutara la
instruccin 1, seguida de la 2 y la 3, al terminar de ejecutarse la instruccin 3 se
volver a ejecutar la 1 y as sucesivamente.
SET_TRIS_X(Y)
Aqu es donde se empezara con la programacin dentro del main SET significa
fijar pero, Qu significa TRIS? tris, es una configuracin interna del PIC que
permitir definir entra das y salidas fsicas del microcontrolador en sus distintos
puertos, el microcontrolador que utilizado tiene 5 puertos que son A, B, C, D y E, (en
donde X es la letra correspondiente al puerto a configurar). Visualicemos la siguiente
imagen para comprender este aspecto:

Como se puede observar se encuentran todos los pines correspondientes al Puerto A,


que van desde RA0, RA1 hasta RA6, en total son 7 pines desde RA0 hasta RA6, estos
pines pueden ser configurados como entradas o como salidas desde el set_tris_a,
supngase que se desea que todos los pines sean de entrada (E).

Cada entrada se definir como un 1 y cada salida como un 0, por lo tanto:

En forma de tabla:
PIN
Entrada 1
Salida 0

RA0
1

RA1
1

RA2
1

RA3
1

RA4
1

RA5
1

RA6
1

Ahora bien, para poder definir el puerto A como entradas se escribir:


set_tris_a(0b1111111);

Obsrvese que se coloco un 0b antes de los 1, que indica esto? Indica que se
trabajara con un numero binario (ceros 0 y unos 1). Un numero hexadecimal es
representado por 0x un decimal se representa directamente.
0b = Binario, 0x = Hexadecim al

Si se desea trabajar con RA0 y RA1 como entradas y el resto como salidas se tendr:
PIN
Entrada 1
Salida 0

RA0
1

RA1
1

RA2
0

RA3
0

set_tris_a(0b11000000);

RA4
0

RA5
0

RA6
0

Hasta ahora se ha descrito la siguiente parte del programa:

Se incluyo librera, se usaron fuses, se uso el delay con el que se trabajara, se inicio con
una llave { la funcin principal pero no se ha cerrado con una llave }, se declararon
entradas y salidas. Ahora bien, si la funcin main es la que se estar ejecutando una
y otra y otra vez Es necesario fijar nuevamente nuestras entradas y salidas con el
set_tris_a? No. Para evitar eso aprenderemos a usar una instruccin de condicin
llamada WHILE().
La instruccin WHILE() o mientras (de su significado del ingles), es una instruccin de
condicin, donde mientras lo que este dentro de ese par de parntesis sea 1 lo que
venga despus del WHILE se ejecutara, de ser 0 ese valor dejara de ejecutar el while.
En este caso deseamos que no se vuelva a configurar el set_tris_a, ya que eso a la larga
podra traer problemas durante la ejecucin, para esto se hace lo siguiente:
set_tris_a(0b110000000);
while(1)
{
//Aqu nuestro programa
}

Con esto se garantiza que jams saldr del while y no se configurara de nuevo el TRIS.
LOS WHILE NO LLEVAN PUNTO Y COMA AL FINAL

ACTIVAR SALIDAS
Ya que se ha realizado todo lo anterior se podr activar una salida del
microcontrolador, una salida en alto se ver representada por un voltaje de 5v,
cuando la salida sea nula o baja, se tendrn 0v.
La instruccin que permite una salida en estado alto es:
output_high(pin_A2);

Ntese que lo que viene incluido dentro de los parntesis es el pin que se desea que
tenga esa salida en alto (high) la palabra output viene de salida en ingles, en este
caso el pin_A2, puede ser cualquier otro pin, siempre y cuando se haya declarado
antes como una salida. Para poner una salida en estado bajo (apagarla) tenemos:
output_low(pin_A2);

TIPOS DE RETARDOS
Hasta ahora se tiene lo que permitir mantener en alto o bajo la salida deseada, si se
desea mantener en alto una salida durante determinado tiempo se utiliza una
instruccin conocida como retardo, recordemos que cada instruccin del lenguaje C
toma 4 ciclos de reloj en realizarse, pero cuando no se desea que pase de inmediato a
la siguiente instruccin se hace uso de los retardos, en este caso un retardo puede ser
definido de tres formas distintas:
delay_cycles(x); un retardo en ciclos de reloj
delay_us(x); un retardo en microsegundos
delay_ms(x); un retardo en milisegundos

En donde x ser el valor que se le asignara para el retardo, en este caso un retardo
de un segundo se ver definido por:
delay_ms(1000);

Debido a que 1000 milisegundos es un segundo. Si se quisiera un retardo de 5


segundos se colocara 5000 dentro de los parntesis de delay_ms().
DETECTAR ENTRADAS
Para la deteccin de si una entrada se encuentra en alto 1 (con 5v en un pin del PIC)
o en bajo 0 (con 0v en un pin del PIC) se har uso de la siguiente instruccin:
input(pin_A0)

Donde lo que est contenido en parntesis es el pin a detectar. Pero no es suficiente


con detectar dicha entrada, por ejemplo, si se desea encender un LED al presionar un
botn no basta con detectar la entrada en alto, sino que tambin debe de hacerse algo
al recibir la entrada. En este caso se aprender el uso del IF(), un IF (que significa s del
ingles) es una instruccin de condicin, donde si lo que est en parntesis es 1
efectuara su instruccin, si lo que est en el parntesis es 0 lo ignorara y continuara.

Ejemplo:
if(input(pin_A0)) //condicin que har todo lo que este entre llaves
{
output_high(pin_A2);
delay_ms(1000);
}

Esto significa S la entrada en el pin A0 es 1 existir una salida en alto en el pin A2


con un retardo de 1 segundo.
LOS IF AL IGUAL QUE LOS WHILE NO LLEVAN PUNTO Y COMA AL FINAL

DIFERENCIA ENTRE IF Y WHILE


En esta parte es donde se realizara un programa completo para distinguir las
diferencias entre IF y WHILE, se comenzara incluyendo libreras, fuses y delay, seguido
de la funcin main, fijar los tris y colocar el while(1) para evitar configurar el tris
muchas veces.

RECUERDA CERRAR LAS LLAVES { } YA QUE ESTAS INDICAN DON DE EMPIEZA Y DONDE TERMINA
UN PROGRAMA, DONDE EMPIEZA Y DONDE TERMINA UN WHILE E INCLUSO DONDE EMPIEZA Y
DONDE TERMINA UN IF.

La funcin del programa ser la siguiente:


Mantendr encendido un LED con un segundo de retardo (tendremos una
salida en alto) por el pin A2.
S hay una entrada en el pin A0 apagaremos el LED por un segundo.
Mientras haya una entrada en el pin A1 apagaremos el LED.

Escribiendo lo que se necesita se tiene:

EL COPILADOR MUESTRA DON DE HABRE Y DONDE CIERRA UNA LLAVE (LO RESALTA DE COLOR
AZUL), ESTO ES MUY IMPORTANTE AL MOMENTO DE PROGRAMAR PARA NO TENER ERRORES.

Obsrvese que se tiene la salida en alto con la instruccin output_high, la condicin if


para la entrada A0, y la instruccin while para la entrada A1, ahora las diferencias
entre ambos.

Despus de tener todo el cdigo, es necesario compilar, si marca errores, verifiquemos


que ocurre, el compilador mostrara donde est el error. Ya que no existan errores se
podr pasar a la simulacin.

SIMULACION EN PROTEUS
Para nuestra simulacin en PROTEUS necesitaremos disear el siguiente circuito:

Consta de dos push buttons, resistencias, un LED y el microcontrolador a utilizar


(18f4550). Para cargar el programa bastara con dar doble click sobre el
microcontrolador, se tendr lo siguiente:

Dar click aqui y


buscar el archivo
.hex, despus de
eso, dar click en
OK

Una vez hecho esto, podremos continuar con la simulacin, ahora debemos dar click
en PLAY

Con eso sera suficiente para comenzar la simulacin, podemos dar click en los botones
y ver qu sucede si lo presionamos una sola vez y si los mantienes presionados, ah
notaremos la diferencia entre el IF y el WHILE.
Si lo aqu descrito es demasiado tedioso o muy fcil espero no se frustren, pero estoy
seguro que desconocan algunas cosas, lo hago con el fin de dar un aprendizaje de
calidad.
Ms adelante habr proyectos ms complicados y lo aqu presentado es bsico para
poder realizar los siguientes proyecto.
Este proyecto va dirigido para todos aquellos que desean aprender a programar desde
lo ms bsico.
Espero que les haya agradado la primera prctica, si se tiene alguna con esto por favor
pregunten. Saludos.