"Programación de un microcontrolador de 8 bits"
En este trabajo, el objetivo es iniciarse en la programación de microcontroladores (en este caso, específicamente, el PIC16F84A), utilizando los lenguajes de programación Assembler y C. Además, se aprende sobre compiladores (MPASM para la programación en Assembler y PIC-C Compiler para la programación en C) y sobre simuladores (MPLAB SIM para la programación en Assembler y el Isis de Proteus para ambas programaciones). Para ello, se hizo que un LED parpareara cada aproximadamente 200ms.Por eso, el LED se iba a prender cuando el valor de RB7 fuese un 0 lógico y se iba a apagar cuando fuese un 1 lógico.
Luego, procedimos a escribir la programación para que el programa cumpliese su objetivo en lenguaje Assembler, utilizando el software que provee Microchip llamado MPLAB (contiene un editor de código, un ensamblador y un simulador). El código resultante en Assembler fue:
; ----------------------------------------------------------------- ; Descripción: ; Este programa hace parpadear a un LED conectado a RB7 ; ----------------------------------------------------------------- LIST p=PIC16F84A INCLUDE <p16f84a.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------------- RP0 EQU 5 LED EQU 7 ; ----------------------------------------------------------------- ; Variables CBLOCK 0x0c d1 d2 ENDC ; ----------------------------------------------------------------- ; ----------------------------------------------------------------- #DEFINE BANK1 bsf STATUS,RP0 #DEFINE BANK0 bcf STATUS,RP0 ; ----------------------------------------------------------------- ; ----------------------------------------------------------------- ; 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 Principal ; ----------------------------------------------------------------- Inicio ; Configuramos el bit 7 de Port B como salida (RB7) BANK1 bcf TRISB,LED BANK0 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 ; -----------------------------------------------------------------Nota: El código de la rutina del Delay de 200ms fue realizado mediante la página http://www.piclist.com/techref/piclist/codegen/delay.htm
Una vez realizado esto, se realizó la programación en lenguaje C, con el software CCS. El código resultante en C fue:
#include "D:\Led_84_C\Led_84_C.h" void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); while(TRUE) { output_high (PIN_B7); delay_ms (200); output_low (PIN_B7); delay_ms (200); } }
Código del Header (Led_84_C.h):
#include <16F84A.h> #FUSES NOWDT, XT, PUT, NOPROTECT #use delay(clock=4000000)
Con las dos programaciones realizadas decidimos simular las dos, para asegurarnos de que el software se comportase respetando la programación, verificando de ésta manera el funcionamiento de nuestro código.
Primero, utilizamos el simulador que incluye el MPLAB, el MPSIM. Con éste programa, verificamos el cambio de valor del pin RB7 y que éste se realizase según el tiempo establecido (200ms aproximadamente).
Luego, procedimos a realizar la simulación utilizando el software Isis de Proteus. Para ello, realizamos el circuito esquemático en este software, similar al realizado con el Kicad (con la diferencia de que el clock se configuró mediante herramientas de configuración del Isis, por lo que no se incluyó el oscilador de 4MHz, ni los dos capacitores que se utilizan para manejar el clock).
Después se cargó el archivo ".hex" generado por el compilador del CCS (el PIC-C Compiler) y se verificó el funcionamiento de encendido y apagado del LED y su velocidad mediante un osciloscopio del Isis, para asegurarnos de que funcionase correctamente a 200ms (aproximadamente). Luego se realizó lo mismo, pero con el ".hex" generado por el MPASM (ensamblador del MPLAB).
Se pueden ver las pruebas en el siguiente video:
Habiendo comprobado que todo funcionase según nuestros requerimientos, procedimos a armar el circuito esquemático realizado en el Kicad en una protoboard, incluyendo (en otro sector de la misma) todo el conexionado necesario para la programación del microcontrolador y para la alimentación de la placa con VCC de 5v obtenidos por el puerto usb de la computadora y GND o VSS, obtenida también por el puerto usb.
En la imagen anterior, se puede observar en el sector izquierdo de la protoboard el sector en que colocamos al microcontrolador cuando debía estar en funcionamiento, y en el derecho el conexionado para colocar al microcontrolador para pasarle la programación, mediante el programador PICKIT 2 Clone, realizado en la práctica 1, con el software "PICkit 2 Programmer", que se obtiene gratuitamente de la página oficial de Microchip (al igual que el MPLAB con todos sus componentes).
Luego, programamos al PIC16F84A con uno de los ".hex" generado anteriormente, comprobamos el tiempo de encendido y apagado del LED mediante un osciloscopio digital. Luego, hicimos lo mismo, pero con el otro ".hex". Los resultados se pueden apreciar en las siguiente imágenes:
![]() |
Medición del tiempo, para comprobar que tardase los 200ms que corresponden, según las instrucciones de la actividad, con la programación hecha en Assembler. |
![]() |
Medición del tiempo, para comprobar que tardase los 200ms que corresponden, según las instrucciones de la actividad, con la programación hecha en C. |
También, decidimos grabar un video del funcionamiento con el microcontrolador programado con uno de los archivos ".hex", utilizados también en el paso anterior:
Descarga de los archivos utilizados en éste proyecto (proyecto Kicad con el esquemático, diseño en Isis para simulación, proyecto de MPLAB y proyecto de CCS): http://www.mediafire.com/?v9htc2700g5lsd5
I just want to thank you for sharing your information and your site or blog this is simple but nice Information I’ve ever seen i like it i learn something today. Empresas de ensamble
ResponderEliminar