Objetivos para esta actividad
- Armar un circuito en el protoboard.
- Programar el microcontrolador en lenguaje ensamblador.
- Programar el microcontrolador en lenguaje C.
- Verificar el funcionamiento del programa usando el simulador integrado en el MPLAB y el programa PROTEUS.
- Verificar el funcionamiento final del conjunto hardware y software programando el microcontrolador, usando para ello el programador PICKIT2.
- Medir la forma de onda con el osciloscopio, capturarla mostrando el periodo/frecuencia de la señal mediante los cursores.
Introducción teórica:
Lenguaje Ensamblador:
Con el término de software se designan todas las
instrucciones con las que se indica a un microprocesador o microcontrolador que
hacer. El repertorio de instrucciones que el microprocesador reconoce se
denomina conjunto de instrucciones. Su forma dependerá del microprocesador que
se utilice. El conjunto de instrucciones necesarias para llevar a cabo una
tarea dada se llama programa.
Los microprocesadores trabajan en código binario. Las
instrucciones escritas en código binario se conocen como código de maquina.
Escribir programas en este código es un proceso tedioso que requiere habilidad;
esta sujeto a errores, dado que el programa es una serie de ceros y unos y no
es fácil comprender el significado de las instrucciones con solo observar la
secuencia. Una alternativa es utilizar un código taquigráfico de fácil comprensión
para representar como ADDA. Este código taquigráfico se conoce como código mnemónico,
y es un código “auxiliar para la memorización”. Este tipo de código se conoce
como lenguaje ensamblador. Escribir un programa utilizando mnemónicos es más
sencillo, porque son una versión abreviada de la operación que realiza una instrucción.
También, dado que las instrucciones describen las operaciones del programa, se
facilita su comprensión y se reduce la posibilidad de cometer errores,
comparando con las secuencias binarias de la programación en código maquina.
Sin embargo, todavía debe convertirse el programa ensamblador en código maquina,
ya que solo este reconoce el microprocesador. Esta conversión se puede hacer a
mano usando las hojas de especificaciones del fabricante que dan el código binario
para cada mnemónico. También existen programas de computo para hacer la convención,
estos programas se conocen como compiladores para lenguaje ensamblador.
Los lenguajes de alto nivel proporcionan un tipo de lenguaje
de programación que describe de forma mas cercana y mas accesible el tipo de
operaciones que se requieren. Ejemplos de estos lenguajes son BASIC, C, FORTAN
y PASCAL. Sin embargo, aun es necesario convertir estos lenguajes a código de
maquina usando un compilador para que lo pueda utilizar el microprocesador.
Programa utilizado para programar en lenguaje ensamblador: MPLAB
Descargué el programa MPLAB.IDE de la pagina oficial de Microchip, y cargué un vídeo de como lo instale, eligiendo las opciones necesarias a usar.
(El video, no esta muy bien hecho, por la primera vez que use un editor de videos: Camtasia, pido compasion!!)
Descargué el programa MPLAB.IDE de la pagina oficial de Microchip, y cargué un vídeo de como lo instale, eligiendo las opciones necesarias a usar.
(El video, no esta muy bien hecho, por la primera vez que use un editor de videos: Camtasia, pido compasion!!)
Lenguaje C:
C es un lenguaje de alto nivel que a menudo se utiliza en vez
del lenguaje ensamblador para programar microprocesadores.
Cuando se compara con el lenguaje ensamblador, tiene la ventaja de ser mas fácil de manejar y que
un mismo programa se puede usar con microprocesadores diferentes; para ello,
basta usar el compilador apropiado para traducir el programa C al código de
maquina del microprocesador involucrado. El lenguaje ensamblador varía
dependiendo del tipo de microprocesador mientras que C es un lenguaje
estandarizado por el ANSI (American National Standards Institute).
Programa utilizado para programar en lenguaje C: PIC C
Los microcontroladores y El PIC16F84A:
Un microcontrolador es un circuito integrado programable que contiene todos los
componentes necesarios para controlar el
funcionamiento de una tarea determinada, como el control de una lavadora, un
teclado de ordenador, una impresora, un sistema de alarma, etc. Para esto, el
microcontrolador utiliza muy pocos
componentes asociados. Un sistema
con microcontrolador debe disponer de una memoria donde se almacena el
programa que gobierna el funcionamiento del mismo que, una vez programado y
configurado, solo sirve para realizar la tarea asignada. La utilización de un
microcontrolador en un circuito reduce notablemente el tamaño y numero de componentes
y en consecuencia, disminuye el número de averías y el volumen y el peso de los
equipos, entre otras ventajas.
El microcontrolador es uno de los inventos más notables del
siglo XX. En el mercado hay gran cantidad de ellos, con multitud de
posibilidades y características. Cada tipo de microcontrolador sirve para una
serie de casos y es el diseñador del sistema quien debe decidir cual es el
microcontrolador mas idóneo para cada uso.
En los últimos años han tenido un gran auge los
microcontroladores PIC fabricados por Microchip Technology Inc. Los PIC
(Peripheral Interface Controller) son una familia de microcontroladores que ha
tenido gran aceptación y desarrollo en los últimos años gracias a que sus
buenas características, bajo precio, reducido consumo, pequeño tamaño, gran
calidad, fiabilidad y abundancia de información, lo convierten en muy fácil, cómodo
y rápido de utilizar.
El PIC16F84A esta encapsulado en un económico DIL de 18
pines, debido a sus múltiples aplicaciones y facilidad de uso es uno de los
microcontroladores mas utilizados en la actualidad para la realización de
proyectos sencillos.
Para empezar a escribir un programa sea en lenguaje ensamblador o lenguaje C, necesitamos tener como conocimientos previos:
- El pin out del uC.
- El Master Clear (reset).
- El reloj del sistema (Clock).
- Características eléctricas de los puertos.
- Conexionado de distintos periféricos externos.
- Arquitectura del uC PIC16F84A.
- Registros SFR y GPR.
- Registro de configuración.
- Instrucciones y Directivas.
- Primeros pasos en C.
- Funciones. Funciones de I/O discretas, de temporización en C. Sentencias.
Conexionado de distintos periféricos externos
- El Oscilador:
- Conectar el PIC con un LED:(en este practico lo conectamos con RB7)
- Boton de Reset (MCLR:Master Clear)
---------------------------------------------------
Problema a resolver:
Al microcontrolador PIC16F84A conectar un led al pin RB7. El
programa deberá encender y apagar ese led cada 200ms aproximadamente (+/- 5%), usando un clock a cristal de 4MHz.
- Dibujar el esquemático en el KICAD.
- Armar el circuito en el protoboard.
- Programar en lenguaje ensamblador al uC con el MPLAB, resolviendo el programa solicitado.
- Programar en lenguaje C al uC con el CCS, resolviendo el programa solicitado.
- Verificar el correcto funcionamiento, usando el MPSIM y el PROTEUS.
2. Armar el circuito en el protoboard.
3. Programar en lenguaje ensamblador al uC con el MPLAB, resolviendo el programa solicitado.
Programa escrito, trabajo hecho con la ayuda del Grupo 4:
------------------------------------------------------------------
;El programa hace titilar a una Led conectado a RB7
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
LIST p=PIC16F84A
INCLUDE <P16F84A.inc>
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;Config, es donde configuramos el tipo de oscilacion que vamos a usar...
ERRORLEVEL -302
;Equivalencias:
RP0 EQU 5
LED EQU 7
; Variables
CBLOCK 0x00
d1
d2
ENDC
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
goto Isr ; Vector de Interrupción
d2
ENDC
; Vectores
ORG 0x000
goto Inicio ; Vector de Reset
ORG 0x004
goto Isr ; Vector de Interrupción
; Rutina de servicio de interrupción
Isr
retfie
; Programa
Inicio
; Configuramos el bit 7 de Port B como salida (RB7)
bsf STATUS,RP0
bcf TRISB,LED
bcf STATUS,RP0
Loop
bcf PORTB, LED
call Delay_200ms
bsf PORTB, LED
call Delay_200ms
goto Loop
; Sub-Rutinas
; Delay = 0.2 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.2 seconds = 200000 cycles
; Error = 0 %
Delay_200ms
;199993 cycles
movlw 0x3E
movwf d1
movlw 0x9D
movwf d2
Delay_200ms_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_200ms_0
;3 cycles
goto $+1
nop
;4 cycles (including call)
return
END
-------------------------------------------------------------
4. Programar en lenguaje C al uC con el CCS, resolviendo el programa solicitado.
--------------------------------------------------------------
void main()
{
while(TRUE)
{
output_high (PIN_B7);
delay_ms (200);
output_low (PIN_B7);
delay_ms (200);
}
}
--------------------------------------------------------------------
5. Verificar el correcto funcionamiento, usando el MPSIM y el PROTEUS.
Verifique el funcionamiento del programa, con MPSIM, que es un simulador del MPLAB, lo que comprobe fue como cambia de 0 a 1, RB7, en el tiempo predeterminado (200ms). Luego verique lo mismo con el PROTEUS(Isis), dibujando el esquemático en el mismo y cargando el . hex.
FIN DEL TRABAJO PRÁCTICO:
Trabajo terminado: Led titilando, gracias al pic16f84, programado en ensamblador:
El vídeo no es de buena calidad, luego trataremos de subir algo mas "prolijo"...