Simulando con C18 y Proteus - Hotboards/CodeBank8 GitHub Wiki
En este tutorial se aprenderá como simular un programa destinado a correr en la tarjeta Pepper-8, usando el simulador gráfico ISIS Proteus de la empresa Labcenter. De igual manera se mostrará como migrar un programa simulado en Proteus a la Tarjeta Pepper-8m. Asumiremos que ya se tiene experiencia en el uso de la tarjeta Pepper-8m y como realizar simulaciones básicas con Proteus v8.
- 1.- Crea un proyecto en MPLABX y C18 con el siguiente código. Si por alguna razón no sabes como hacer esto puedes consultar el tutorial Mi Primer Programa con Pepper y C18
#include <p18cxxx.h>
#include "vectors.h"
#pragma code
void main(void)
{
unsigned short i;
ANCON0 = 0xff; /*desactivamos entradas analogicas*/
ANCON1 = 0xff; /*desactivamos entradas analogicas*/
TRISA &= ~(1<<1); //pin RA1 como salida
while (1)
{
PORTA ^= (1<<1); //invierto el estado del led
for(i=0;i<40000;i++); //retardo para observar el led
}
}
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode(void)
{
/*coloca aquí el código que llevará tu interrupción en caso de usarla*/
}
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode(void)
{
/*coloca aquí el código que llevará tu interrupción de baja prioridad en caso de usarla*/
}
- 2.- Programalo en tu tarjeta Pepper-8m para asegurarte que funcione. El código hará parpadear cada x tiempo el led Ambar.
- 3- Crea un nuevo proyecto en Proteus el cual contenga un esquemático pero que NO posea un proyecto de Firmware.
En proteus como tal no se encuentra la tarjeta Pepper-8m, pero si puedes encontrar el microcontrolador que tiene montado la tarjeta Pepper-8m el cual es el PIC18F45J50.
-
4.- Ensambla el siguiente circuito en Proteus con el microcontrolador pic18f45j50. El circuito simula el led ámbar que esta conectado en la tarjeta justo en el pin
1
del puertoA
- 5.- Antes de cargarle el archivo .hex que compilamos con MPLABX deberás tomar en cuenta los siguientes puntos.
El micro en la tarjeta pepper-8m tiene precargado el programa bootloader en las primeras 1000 direcciones hexadecimales. Mientras que el micro en proteus no.
Los programas que compilas para la tarjeta Pepper-8m se compilan para ser ejecutados a partir de la direccion 0x1000. mientras que en proteus deberás compilarlos para que se ejecuten a partir de la direccion 0x00.
-
6- Tomando en cuenta lo anterior debemos realizar algunas modificaciones tanto en el proyecto de MPLABX como en el código de tu programa.
-
7.- Deberás remover de tu proyecto el archivo rm18f45j50_g.lkr, tal como lo muestra la imagen. NOTA: el archivo ya no estara integrado a tu proyecto, pero seguirán existiendo en el directorio de tu proyecto.
-
8.- Recuerda que este archivo que retiramos del proyecto es el que permite a tu programa ser compilado a partir de la direccion 0x1000 y por ende ser programado mediante el bootloader de la Tarjeta Pepper-8m.
-
9.- El siguiente paso es escribir una simple línea de código en tu programa. La cual se encarga de anular el remapeo de los vectores de interrupción que se realizan en el archivo vectors.h. Es importante que esta línea,
#define NO_BOOT
se escriba antes de#include “vectors.h”
.
#include <p18cxxx.h>
#define NO_BOOT /*eliminamos el remapeo de vectores en vectors.h*/
#include "vectors.h"
#pragma code
void main(void)
{
unsigned short i;
ANCON0 = 0xff; /*desactivamos entradas analogicas*/
ANCON1 = 0xff; /*desactivamos entradas analogicas*/
TRISA &= ~(1<<1); //pin RA1 como salida
while (1)
{
PORTA ^= (1<<1); //invierto el estado del led
for(i=0;i<40000;i++); //retardo para observar el led
}
}
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode(void)
{
/*coloca aquí el código que llevará tu interrupción en caso de usarla*/
}
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode(void)
{
/*coloca aquí el código que llevará tu interrupción de baja prioridad en caso de usarla*/
}
NOTA: deberas actualizar tus archivos template a la version mas reciente (solo descarga los archivos a partir del día 17 de Abril de 2014). http://hotboards.org/images/cpus/pepper8m/template.zip.
-
10.- Compila el programa de la manera usual, solo has click en el icono del martillo y la escoba.
-
11.- En Proteus deberás cargar el programa ya compilado (archivo .hex). Doble click sobre el microcontrolador que esta en el circuito.
- 12.- En la ventana emergente click en el icono de la carpeta en la opción Program File: busca en el explorador de windows el archivo .hex de tu programa y seleccionalo. Recuerda la ruta del archivo esta en \test.X\dist\default\production\test.X.production.hex dónde text.X sería el nombre tu proyecto.
-
13.- Recuerda que por default el micro en la tarjeta Pepper-8m esta configurado para usar el cristal externo de 12MHz. Asi que en la opcion Processor Clock Frequency: escribe 12MHz. Seteadas estas dos opciones da click en Ok para terminar.
-
14.- El programa ya esta cargado en el micro del circuito de Proteus. Corre la simulación dando click en el icono de Run the simulation.
- 15.- Ahora podrás observar al led parpadeante de la misma forma a como lo hacía en al tarjeta Pepper-8m.
- 16.- Una vez que hayas simulado lo suficiente tu programa y deses cargarselo a la tarjeta de nueva cuenta, solo deberas agregar a tu proyecto el archivo rm18f45j50_g.lkr en el folder lógico Linker Files (que era donde estaba antes) y en tu archivo main.c comentar o borrar la línea `#define NO_BOOT``
Antes de dar por terminada la práctica es necesario analizar que no todos los pines en el micro de la Pepper-8m estan disponibles para ser usados, y por ende no deberías tomarlos en cuenta en tus simulaciones. El siguiente diagrama te muestra cuales son aquellos pines que no se pueden usar.
- RA1 está conectado al led ambar
- RA0 conectado al boton de usuario.
- RA6 y RA7 conectan al cristal externo de 12MHz
- RC4 y RC5 conectan al usb
La simulación en Proteus Es un proceso realmente sencillo y te facilitará el probar el código de tu programa antes de programarlo en tu tarjeta. Deberás recordar que las simulaciones no son 100% exactas a la realidad y tendrán su limitantes. Recuerda que el software Proteus no es libre y deberás pagar una licencia si quieres realizar simulaciones para microcontroladores PIC.