Beruflich Dokumente
Kultur Dokumente
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
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
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
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)
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
}
En forma de tabla:
PIN
Entrada 1
Salida 0
RA0
1
RA1
1
RA2
1
RA3
1
RA4
1
RA5
1
RA6
1
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
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);
Ejemplo:
if(input(pin_A0)) //condicin que har todo lo que este entre llaves
{
output_high(pin_A2);
delay_ms(1000);
}
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.
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.
SIMULACION EN PROTEUS
Para nuestra simulacin en PROTEUS necesitaremos disear el siguiente circuito:
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.