sábado, 10 de septiembre de 2016

Práctica #1

Después de haber creado nuestro primer programa y verlo correr, es momenro de dar comienzo a una serie de prácticas, las cuales nos permitirán familiarizarnos con los periféricos del MCU y su programación.

El desarrollo de las prácticas nos permitirá adquirir experticia en la solución de problemas reales con la aplicación de sistemas embebidos.

La primera práctica que desarrollaremos, consiste en la idea básica de control; a partir de la lectura del estado de un pulsador accionaremos 2 LED´s, los cuales permitirán al usuario del sistema, deducir el estado del pulsador de una forma visual.

Nuestro programa deberá quedar de la siguiente forma:


Y al correr nuestro código en el microcontrolador, este es el resultado:


Como podemos observar en el video, mientras el pulsador no esta presionado vemos a la izquierda de la tarjeta el LED azul encendido, pero cuando el pulsador es presionado, cambia de estado la entrada y el MCU apaga el LED azul y enciende el LED verde; todo esto ocurre en unos cuantos microsegundos y nosotros percibimos que todo sucede de manera simultanea.




sábado, 3 de septiembre de 2016

Hola Mundo!

Hola Mundo!

En la entrada anterior aprendimos como crear un proyecto en MPLABX, ahora vamos a crear nuestro primer programa; el clásico Hola Mundo! de los microcontroladores.

Ya tenemos instalado el software necesario para la programación de nuestro microcontrolador, pero adicionalmente para realizar esta tarea también necesitamos el hardware, que será el encargado de grabar la memoria del MCU con el programa que queremos ejecutar en el.
Existen varias opciones en el mercado en mi caso cuento con un clone del PICkit2, y con la versión original del PICkit3; aunque en el MPLABX el PICkit2 aparece en amarillo, funciona correctamente, sin embargo este programador ya fue descontinuado y no cuenta con mas soporte.


Continuamos con el proyecto que creamos en la entrada pasada...
en source files damos clic derecho nuevo, otros, microchip embedded, XC8 y seleccionamos main.c


clic en siguiente, le ponemos el nombre de nuestra preferencia y clic en finalizar.


Ahora es momento de empezar a escribir el código de nuestro programa

Lo primero que haremos será agregar la siguiente línea debajo de la cabecera <xc.h>

#define _XTAL_FREQ 20000000

con esta instrucción le estamos diciendo al compilador que el cristal que vamos a usar con el MCU es de MHz, el compilador usara este valor para hacer los cálculos necesarios que nos permitirán utilizar la función __delay_ms().

A continuación agregaremos la siguiente línea

__CONFIG(FOSC_HS&WDTE_OFF & PWRTE_ON & LVP_OFF & CP_OFF & CPD_OFF & BOREN_ON);

con esta sentencia le estamos indicando al compilador como debe programar los bits del registro de configuración del MCU.
Los bits de configuración, son un registro especial del MCU, el cual es necesario establecer correctamente para poder que el MCU "corra". En este registro le decimos al MCU a que velocidad va a funcionar, que dispositivo será su reloj, que funcionalidad tendrá el pin master clear, activaremos o no diferentes protecciones que están disponibles para el MCU.


en nuestro caso estamos configurando el registro de la siguiente manera:
FOSC_HS      => usaremos un cristal de alta velocidad (20MHz)
WDTE_OFF  => deshabilitamos el perro guardián 
PWRTE_ON  => habilitamos el retardo de inicio 
LVP_OFF      => deshabilitamos la opción de programación con bajo voltaje 
CP_OFF         => deshabilitamos la protección de código 
CPD_OFF      => deshabilitamos la protección de datos 
BOREN_ON  => habilitamos el reinicio por bajo voltaje


Ahora nuestra rutina principal, consistirá en encender y apagar un LED conectado al pin RC2; para llevar a cabo nuestro objetivo necesitamos configurar el pin RC2 como una salida, para ello pondremos el bit 2 del registro TRISC en 0; luego debemos establecer un valor a la salida ese pin, y lo haremos modificando el bit 2 del registro PORTC.


como podemos observar en la imagen, hemos cargado el registro del puerto C con el valor cero; luego en el registro TRISC pusimos en cero el bit 2, y finalmente, tenemos un ciclo infinito en el cual estamos cargando en el bit 2 del registro PORTC (RC2) la negación del mismo cada 500 milisegundos.


Descarga aquí el proyecto en MPLABX

miércoles, 31 de agosto de 2016

MPLABX

Instalación de MPLABX

Para comenzar esta aventura en el universo de los microcontroladores, lo primero que necesitaremos será instalar el entorno de desarrollo MPLABX y el compilador XC8, los cuales podrán descargar desde el sitio web del fabricante http://www.microchip.com/mplab/mplab-x-ide.
Una vez descargados los dos archivos, procedemos a instalarlos siguiendo para ello el asistente de instalación.


El lenguaje de programación C, nos permite tener control del hardware a nivel de BIT, y al mismo tiempo, es posible realizar cualquier tipo de operación matemática como si fuera una calculadora científica; es por esto que hoy en día C es considerado un lenguaje de nivel intermedio.
El compilador XC8 hace uso de todas las etiquetas originales del data sheet, para hacer referencia a los BIT, y a los registros del MCU. De esta manera la programación se hace mas amena y simple para el programador.

Creando un proyecto en MPLABX

Ahora que hemos instalado el entorno de desarrollo, procederemos a crear nuestro primer proyecto:

Ejecutamos el MPLABX y esta es la pantalla de inicio


damos clic en el boton New Project 


seleccionamos la categoria Microchip Embedded, y en proyecto seleccionamos Standalone Project y clic en Next 


ahora seleccionamos la familia Mid-Range 8-bit MCUs (PIC10/12/16/MCP) y el dispositivo PIC16F887 de las listas desplegables; y en la ventana siguiente seleccionamos el programador que tengamos disponible; en mi caso es el PICKit3.


en la ventana que nos aparece a continuación, seleccionamos el compilador XC8, y clic en Next para continuar


finalmente le damos un nombre al nuevo proyecto  y clic en Finish para terminar


ahora tenemos nuestro proyecto creado, y listo para empezar a escribir el código.

Bienvenidos

Bienvenidos

Este blog, estará dedicado al microcontrolador PIC 16F887 de Microchip.

A partir de hoy, comenzaremos con una serie de post con el fin de aprender a programar este microcontrolador a traves del entorno integrado de desarrollo MPLABX y el compilador XC8, ambos proporcionados por el fabricante.

He escogido esta referencia por ser uno de los mas sencillos, pero robustos microcontroladores de 8 bits, el cual cuenta con suficientes perifericos como para desarrollar aplicaciones avanzadas.


El PIC 16F887 es un computador con un conjunto de instrucciones reducidas, con arquitectura Hardvard; esto es la memoria de código y la memoria de datos son independientes, lo cual fascilita el trabajo en paralelo de las dos memorias.

Carácteristicas básicas:

  • arquitectura RISC
    • El microcontrolador cuenta con solo 35 instrucciones diferentes
    • Todas las instrucciones son uni-ciclo excepto por las de ramificación
  • Frecuencia de operación 0-20 MHz
  • Oscilador interno de alta precisión
    • Calibrado de fábrica
    • Rango de frecuencia de 8MHz a 31KHz seleccionado por software
  • Voltaje de la fuente de alimentación de 2.0V a 5.5V
    • Consumo: 220uA (2.0V, 4MHz), 11uA (2.0 V, 32 KHz) 50nA (en modo de espera)
  • Ahorro de energía en el Modo de suspensión
  • Brown-out Reset (BOR) con opción para controlar por software
  • 35 pines de entrada/salida
    • alta corriente de fuente y de drenador para manejo de LED
    • resistencias pull-up programables individualmente por software
    • interrupción al cambiar el estado del pin
  • memoria ROM de 8K con tecnología FLASH
    • El chip se puede re-programar hasta 100.000 veces
  • Opción de programación serial en el circuito
    • El chip se puede programar incluso incorporado en el dispositivo destino.
  • 256 bytes de memoria EEPROM
    • Los datos se pueden grabar más de 1.000.000 veces
  • 368 bytes de memoria RAM
  • Convertidor A/D:
    • 14 canales
    • resolución de 10 bits
  • 3 temporizadores/contadores independientes
  • Temporizador perro guardián
  • Módulo comparador analógico con
    • Dos comparadores analógicos
    • Referencia de voltaje fija (0.6V)
    • Referencia de voltaje programable en el chip
  • Módulo PWM incorporado
  • Módulo USART mejorado
    • Soporta las comunicaciones seriales RS-485, RS-232 y LIN2.0
    • Auto detección de baudios
  • Puerto Serie Síncrono Maestro (MSSP)
    • Soporta los modos SPI e I2C