Buscar este blog

miércoles, 22 de octubre de 2014

Como programar un microcontrolador parte 2

En esta segunda parte de como programar un microcontrolador vamos empezar a ejemplificar con un microcontrolador en particular puesto que lo dicho en la primera parte se explico que se necesita saber de cualquier microcontrolador en general.

Algunos colegas electronicos recomiendan que para aprender a programar un microcontrolador se debe de empezar por uno sencillo un ejemplo de esto puede ser el pic16f84 de la compañia de microchip, este microcontrolado es considerado de gama baja por sus limitadas prestaciones (numero de pines, perifericos, instrucciones reducidas, etc...), pero por experiencia propia les podria decir que no importa con que microcontrolador empiezen a programar todos basicamente todos se programan con la misma idea, solo cambian las instrucciones, la estructura de los programas.

Como les menciono parrafos arriba podemos programar cualquiera (Pic's, texas instruments, freescale) pero en los siguientes post se enseñara a programar con el pic18f4550 de gama media (temas basicos) y despues se enseñara a programar el msp430  de texas instruments y haremos una comparacion para que se den cuenta en que cambian las metodologias en cada microcontrolador de diferentes compañias, tambien se dara unos ejemplos de como programar los avr's de ATMEL para completar este pequeño cursillo, si despues se deseara profundizar en cualquier microcontrolador ya sabrian como hacerlo. Asi que empezemos con el pic 18f4550.

Empezando a programar el pic18f4550

Antes que nada para empezar a programar el pic en particular se necesita saber en que lenguaje se programara dicho microcontrolador. Para el pic18f4550 existen dos lenguajes en particular para programarlos (ensamblador y C), por "simplicidad" y no meternos tanto en la arquitectura de los microcontroladores en particular ya que lo que nos interesa en si es solo programarlos, es decir, ver al microcontrolador como una caja negra solamente, se optara en programarlo en lenguaje C y esto ademas es una gran ventaja ya que es el lenguaja preferido por su gran flexibilidad. El lenguaje ensamblador tambien es muy importante pero este requiere de un curso mas extenso y para ejemplificarlo con un microcontrolador en particular, pero la finalidad de este curso es mostrar como programar cualquier microcontolador con la misma idea por eso el lenguaje C es el ideal ya que lo unico que cambiaria seria los mnemonicos de cada microcontrolador.

Para empezar se necesita descargarse el IDE de MPLAB del siguiente link MPLAB puede descargar el IDE de MPLAB segun la version que soporte su computadora. Como por ejemplo yo tengo la version 8.92 para windows en 32 bits.Ustedes pueden elegir la version que requieran para el sistema operativo que usen, en nada cambiara la version para seguir este tutorial.

Una vez que instalen el MPLAB y abran el IDE les aparecera la siguiente imagen.





Lo que tienen que hacer para crear un nuevo proyecto es lo siguiente:

1) Ir a la pestaña Project --> Set Lenguage Tool Locations abrir esta pestaña
2)Se abrira una pestaña y buscar la parte dice Microchip C18 Toolsuite
3)En Executables ver que los 4 ejecutables correspondientes a C18 se encuentre en la direccion adecuada o se encuentren añanidos. En dado que no se encuentre disponible debes descargar la suite de C18 para empezar a programar y añadirlo en la direccion correspondiente.
4) Una vez verificado lo anterior en la pestaña de Project --> Project Wizard
5) Aparecera una ventana que nos dira WELCOME le daremos en siguiente
6) Seleccionaremos Device pic18f4550 y siguiente
7)Nos aparecera una nueva ventana y seleccionaremos Microchip C18 Toolsuite siguiente
8)Nos aparecera una ventana que nos pedira un nombre para nuestro proyecto, en este caso hay que darle primero en Browse para crear una nueva carpeta en la direccion que nosotros queramos. Creamos la carpeta y dentro de esa carpeta añadiremos un nombre nuevo de proyecto que terminara con .mcp que por default MPLAB lo añade al nombre que elijamos por lo que no es necesario porne la extencion .mcp damos en guarda y pondremos siguiente a esa ventana.
9) La siguiente ventana solo muestra si queremos añadir algun archivo en nuestro caso no es necesario por lo que le daremos en siguiente.
10) Ya por ultimo aparecera una nueva ventana que bastara darle clic en finalizar.

Ya con esto nos aparecera nuestro espacio de trabajo.



Teniendo nuestro espacio de trabaja nos enfocaremos en escribir nuestro primer programa.
Para esto lo primero que vamos a explicar como utilizar los puertos de entrada/salida del microcontrolador.


Lo principal y primero que tenemos que escribir en nuestro programa es incluir una directiva que le diga al programa que microcontrolador vamos a emplear en nuestro caso es el pic18f4550.


#include <p18f4550.h> // Incluye directiva pic a usar


Lo siguiente que vamos a escribir es el cuerpo del programa para esto se va a emplear el siguiente codigo.


void main (void)
{

//Programa a escribir
}

Este codigo nos indica el programa principal. Dentro del programa principal vamos a escribir las instrucciones que queremos que haga el microcontrolador.

Lo siguiente que vamos a escribir es la configuracion de los puertos I/O  para esto escribimos
con los registros TRISA   y PORTA.

Con TRISx configuraremos los puertos ya sea como entrada o salida. la "x" nos indica el puerto que
emplearemos. Por ejemplo si queremos emplear el puerto A solo necesitamos escribir "TRISA" y si
queremos emplear el puerto C escribimos "TRISC".

Los puertos se pueden configurar de dos formas (como entrada o como salida). Para configurarlo
como entrada tenemos que escribir un 1 en el registro TRISx y para configurarlo como salida se tiene
que escribir un 0 en el registro TRISx.

Como en este ejemplo vamos a hacer parpadear un led del puerto A de una sola terminal (ya que
todo el puerto tiene 8 terminales) debemos escribir el siguiente codigo.

TRISA = 0XFE; // Aqui le decimos que la primera terminal del puerto A esta como salida.


Lo siguiente que debemos configurar es que si inicialmente el led va estar apagado o encendido para
este se configura el registro PORTx. Como en el caso anterior la "x" indica el puerto que queremos
configurar como es el puerto A escribimos PORTA, si fuera el puerto D se escribiría PORTD. Para
poner el puerto en bajo "apagado" se escribe en el registro PORTx un 0 y para ponerlo en alto
escribimos un 1 "encendido". El código quedaría de la siguiente forma.

PORTA= 0x00; // Inicialmente el led estara apagado.


Lo siguiente que hay que configurar es si los puertos van a funcionar como analogicos o digitales
en nuestro caso es obvio que serán digitales para esto se emplea el registro ADCON1 ya que
inicialmente los puertos están configurados como analógicos para esto emplearemos el siguiente
código.


ADCON1 |= 0x0f; // Configura las terminales como digitales


Mas adelante se explicara mas detalladamente este registro ADCON1.

Enseguida escribiremos nuestra primera condición en el programa ya que lo que haremos es hacer
prender y apagar nuestro led indefinidamente emplearemos un bucle infinito para esto la mejor
opción es la condicional "while". Con while las instrucciones que se localicen dentro se ejecutaran
hasta que la condición sea 0 pero en nuestro caso lo haremos indefinidamente por lo que bastara
poner un 1 dentro de la condición así la condición siempre sera diferente de 0 por lo que las
instrucciones se ejecutaran indefinidamente.


while(1)
{

//Todo lo que se encuentre dentro se ejecutara una y otra vez.

}


Dentro de la condicional while ejecutaremos las instrucciones de encendido y apagado por lo que
escribiremos el siguiente código.


PORTA = 0x01;
Delay10KTCYx (1000);
PORTA = 0x00;
Delay10KTCYx (1000);

Primero encenderemos el led con la instrucción PORTA =0x01;
Lo segundo es esperar 1 segundo que es el tiempo que el led estará encendido esto se hace con la
instrucción Delay10KTCYx (1000);

Donde el Delay10KTCYx(); es una función de C18 cuya libreria es la siguiente:

delays.h

Lo tercero es apagar el led con la instruccion PORTA= 0x00;
Lo cuarto y ultimo es esperar otro segundo que es el tiempo que el led permanecera apagado esto
se logra con la instruccion Delay10KTCYx (1000);

Apartir de aqui las instrucciones se volveran a ejecutar desde un principio. Encendiendo el led, esperando 1 segundo, apagando el led y volver a esperar otro segundo.

Por ultimo nuestro programa deberá quedar de la siguiente manera.


#include <p18f4550.h> // Incluye directiva pic a usar
#include <delays.h>//libreria del retardo
void main (void)
{

TRISA = 0x00; // Configurar puerto A como salida
PORTA=0x00; // Se pone el puerto A  apagado

// configura pines como digitales
ADCON1 |= 0x0f;

while(1)
{
PORTA = 0xf0;// Cuatro ultimos bits encendidos
Delay10KTCYx (1000);// Retardo
PORTA = 0x00;// Todo el  puerto A apagado
Delay10KTCYx (1000);// Retardo

}
}

En la siguiente parte veremos como generar un barrido de leds y como controlar un servomotor con
tan solo lo explicado en este capitulo.

0 comentarios:

Publicar un comentario

Electronica facilita