Ago 072013

 

Actualmente hay muchas opciones para programar una pequeña aplicación que active unas salidas y controle motores, luces, etc…

Sea cual sea la opción que escojamos siempre tendremos que tener unos elementos comunes:

  • Un editor procesador de texto.
  • Un compilador o ensamblador con depurador.
  • Un programador.

Editor

El editor de texto, es un programa para escribir, cuya función principal es ayudar a escribir. Según vamos escribiendo el editor nos colorea las palabras del lenguaje y sus posibles opciones, también las funciones, variables y código mal escrito que hace que el programa sea mas fácil de escribir y depurar errores. Una pieza fundamental por tanto será que tengamos un buen editor.

Compilador

El compilador, es un programa que traduce el código escrito en un lenguaje como c++ a código de ensamblador o a un archivo binario o hexadecimal directamente, lo cual es ejecutado directamente por un microprocesador o microcontrolador.
Un ensamblador, es un programa que traduce un tipo de código de muy bajo nivel (hay que colocar muchas instrucciones para que se realice una acción) a un archivo binario o hexadecimal.

Programador

Un programador tiene dos partes, un software pare el ordenador y un aparato físico que se encargan de enviar el archivo hexadecimal desde el ordenador en que se compila, al microcontrolador que lo debe ejecutar.

 

IDE todo en uno

Un IDE en inglés que significa “Entorno de Desarrollo Integrado” (Integrated Development Environment), es un conjunto de las cosas vistas antes, el IDE se compone de un editor de texto, un compilador, un ensamblador y un programador (software). La idea es que la mayoría de eestas cosas queden ocultas para simplificar la labor, por lo que muchas veces solo vemos el programa para escribir y un botón que compila, ensambla y traspasa el programa al micro, todo automáticamente.

Una buena opción para introducirse son las placas de Arduino que son una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de proyectos electrónicos.

Placa Arduino UNO

Placa Arduino UNO

Arduino: Una plataforma construida a partir de microcontroladores AVR de Atmel, son increíblemente baratos, poderosos, y no solo traen un IDE y un Bootloader, si no que además trae muchas funciones  en C++, gracias a lo cual, puedes hacer complejos programas en poco tiempo.

Un Bootloader, es un programa especial para el microcontrolador, que hace que no requiera un aparato especial para cargarle los programas que hace el usuario. Antiguamente en el comienzo de la programación con microprocesadores el programa del usuario se grababa en una o varias memorias EPROM las cuales se las podía borrar usando una luz ultravioleta y volver a usar grabando los datos con un programador. Con el uso del Bootloader el programa se carga rápidamente mediante una conexión USB con el ordenador.

Algunas de las placas de arduino son:

  • Arduino Nano.
  • Arduino Mini.
  • Arduino BT.
  • LilyPad Arduino.
  • Arduino Fio.
  • Arduino Pro.
  • Arduino Pro Mini.
  • Xbee shield.
  • Ethernet shield.
  • Arduino uno.

Hay otras alternativas como PICAXE que es el nombre de un sistema microcontrolador que se basa en una gama de circuitos integrados PIC.

El objetivo de estos circuitos era para su uso en la educación y para aficionados a la electrónica, también son utilizados en ámbitos técnicos y comerciales, incluyendo el desarrollo rápido de prototipos.

Enlaces para obtener mas información:

http://arduino.cc/es/

http://www.microchip.com/



May 272013

 

El microcontrolador PIC16F84 a la hora de programarlo podemos escoger la modalidad de oscilador que va a tener. Con dos bits (FOSC1 y FOSC0) seleccionamos entre las 4 opciones que disponemos:

  • LP Cristal para baja frecuencia y bajo consumo.
  • XT Cristal normal.
  • HS Cristal de alta velocidad.
  • RC Oscilador con resistencia y condensador.

Para escoger el oscilador que vamos a utilizar tendremos que programar la palabra de configuración.

La palabra de configuración se encuentra en la dirección de memoria de programa 2007 h. Esta posición está más allá del espacio de memoria de programa destinada al usuario y pertenece al espacio de memoria de prueba y configuración (2000h -3FFFh).

Solamente se puede acceder a este espacio durante la programación del dispositivo y en esta palabra nos encontraremos otras opciones del PIC16F84.

R/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/W
CPCPCPCPCPCPCPCPCPCP/PWRTEWDTEFOSC1FOSC0
B13B12B11B10B9B8B7B6B5B4B3B2B1B0

 

CP, bit 4 a 13: Bits de protección de código.

  • 1: Protección de código deshabilitada.
  • 0: Memoria protegida por código.

PWRTE, bit 3: Bit para habilitar el Power-up Timer o temporizador
de encendido.

  • 1: Power-up timer deshabilitado.
  • 0: Power-up Timer habilitado.

WDTE, bit 2: Bit para habilitar el Watchdog timer o temporizador
perro guardián.

  • 1: WDT habilitado.
  • 0: WDT deshabilitado.

FOSC1, FOSC0, bit 0 y 1: Selección del oscilador.

  • 00: Oscilador LP.
  • 01: Oscilador XT.
  • 10: Oscilador HS.
  • 11: Oscilador RC.
Modos soportados en la configuración del cristal de cuarzo.

Modos soportados en la configuración del cristal de cuarzo.

Juego de instrucciones del PIC16F84.



Sep 242012

 

Imagen de un PIC16F84

Pin Out del PIC16F84

 

 

 

 

 

 

Cuando necesitamos que transcurra un determinado tiempo de espera antes de que ocurra un evento como por ejemplo el encendido de una luz, LED, activación de una bobina de un relé o lectura de una determinada entrada, se suele recurrir a los retardos. Prácticamente casi todos los programas de microcontroladores PIC usan en algun momento una rutina de retardo.

El típico programa del parpadeo de un LED hace uso de estas rutinas para generar una demora entre los cambios de estado de un LED que se enciende y se apaga, el tiempo que tenemos entre el encendido y apagado viene determinado por la rutina de retardo..

Los retardos en los PIC los podemos generar de dos formas diferentes:

  • Por Software.
  • Por Hardware mediante el Timer TMR0.

Los retardos por Software consisten en que el pic se quede ejecutando unos bucles que van decrementado unos contadores cargados previamente con el tiempo de retardo, cuando los contadores llegan a 0 la rutina de retardo queda terminada y el microcontrolador sigue ejecutando otros procesos.

Los retardos por Hardware se realizan mediante el temporizador/contador TMR0 que es un registro de 8 bits, es decir, un particular tipo de registro cuyo contenido es incrementado con una cadencia regular y programable directamente por el hardware del PIC. Como es de 8 bits, el máximo de la cuenta está en 255.

El TMR0 tiene las siguientes modos de operación:

  • Temporizador/Contador de 8 bits.
  • Divisor de 8 bits programable por software.
  • Selección de reloj interno y externo.
  • Interrupción por desbordamiento.
  • Selección del flanco del reloj externo.

Este registro puede usarse para contar eventos externos por medio de un pin de entrada especial que hace que trabaje en modo contador o para contar pulsos internos de reloj de frecuencia constante en modo temporizador. Además, en cualquiera de los dos modos, se puede insertar un prescaler, es decir un divisor de frecuencia programable que puede dividir por 2, 4, 8, 16, 32, 64, 128 o 256. Este divisor puede ser utilizado alternativamente como prescaler o del TMR0 o como del Watch Dog Timer, según se lo programe.

Características de la subrutina Delay:

  • Utiliza 3 contadores anidados. (c1,c2 y c3)
  • No permite realizar ninguna acción hasta que acaba la rutina.

 

Si queremos conseguir 5 segundos de retardo tendremos que consumir 5000000 ciclos de reloj, esto sera valido solamente si el microcontrolador PIC trabaja con un Clock de 4 MHZ, ejecutándose un ciclo de instrucción en 1 uS. Tendremos que tener en cuenta que las instrucciones que realizan saltos consumen 2 ciclos de reloj cuando realizan un salto. Modificando los registros de la subrutina Delay podremos programar cualquier tiempo.

; Delay = 5 seconds
; Clock frequency = 4 MHz
	cblock
	c1
	c2
	c3
	endc

Delay

	movlw	0x2C
	movwf	c1
	movlw	0xE7
	movwf	c2
	movlw	0x0B
	movwf	c3
Delay_0
	decfsz	c1, f
	goto	$+2
	decfsz	c2, f
	goto	$+2
	decfsz	c3, f
	goto	Delay_0

	goto	$+1
	nop

	return

 

Programa de ejemplo de una rutina de retardo implementada en un PIC16F84 que hace parpadear un LED por el Pin RB0,

;---------------Encabezado-------------

	LIST	p=16f84
	radix	hex

;------------mapa de memoria---------

estado	equ	0x03	     ; Haciendo asignaciones
TRISB	equ	0x06
ptob	equ	0x06

reg1	equ	0x0C	     ; Estos 3 registros los utilizaré
reg2	equ	0x0D	     ; para hacer el retardo
reg3	equ	0x0E

;-------Configuración de puertos-------

reset	org	0x00 	     ; Origen del programa, aquí comenzará

	goto 	inicio	     ; salta a la etiqueta inicio.
inicio	bsf	estado,5     ; Pone rp0 a 1 y pasa al banco1
	movlw	b'00000000'  ; Carga W con 00000000
	movwf	TRISB	     ; y pasa el valor a TRISB.
	bcf	estado,5     ; pone rp0 a 0 y regresa al banco0

;----Aquí enciende y apaga el LED-----

ahora	bsf	ptob,0	     ; Pone un 1 en RB0 enciende el LED
	call	retardo	     ; Llamamos a la subrutina retardo.

	bcf	ptob,0	     ; Pone a 0 RB0 apaga el LED
	call	retardo	     ; Llamamos a la subrutina retardo.
	goto 	ahora	     ; Repite el bucle infinitamente.

;**************** Rutina de Retardo ***************************

retardo	movlw	10	     ; Cargamos los 3 registros con los valores de retardo.
	movwf	reg1

tres	movlw	20
	movwf	reg2

dos	movlw	30
	movwf	reg3

uno	decfsz	reg3,1	     ; Se van decrementando los registros anidados.
	goto	uno
	decfsz	reg2,1
	goto	dos
	decfsz	reg1,1
	goto	tres
	retlw	00

	end

Vídeo tutorial de como generar retardos por Software y por Hardware mediante el temporizador.