TRADUCTOR

sábado, 25 de mayo de 2013

Aprendiendo a programar PIC

Aprendiendo a Programar PIC

En esta actividad vamos a aprender el lenguaje de programación Assembler (Ensamblador) y el uso del programa MPLAB. 
MPLAB: este programa es una compilación de herramientas con las cuales podremos diseñar, simular y exportar una serie de instrucciones para enviar al programador y este al target. El programador PICKit2 necesita recibir su información en código hexadecimal.
Una de las herramientas del MPLAB es el editor de textos donde escribiremos las instrucciones que queremos que reciba el target en lenguaje Assembler, luego con otra herramienta simularemos su funcionamiento viendo el estado de los puertos y los registros de memoria del PIC a programar.
Por ultimo, luego de revisar el funcionamiento del programa, el MPLAB se encarga de crear un archivo .HEX el cual posee nuestro programa codificado en hexadecimal listo para ser enviado al PICKit2.

Directivas básicas del Assembler: 

  • LIST: indicamos que target vamos a utilizar. 
         Por ejemplo: LIST         p=PIC16F84A

  • INCLUDE: incluye al programa un archivo que nos brinda Microchip y que posee equivalencias entre una palabra del lenguaje Assembler y una posición de memoria.
          Por ejemplo: INCLUDE      <p16f84a.inc>
  • __CONFIG: configuramos el clock, el power on reset, el watch dog timer y el code protection.
         Por ejemplo: __CONFIG _XT_OSC & _PWRTE_ON & _CP_OFF & _WDT_OFF
        Clock: XT (cristal), Power on reset: Activado, Code protection: Desactivado y Watch dog timer: Desactivado

  • ORG: indicamos el comienzo de nuestro programa
          Por ejemplo: ORG      0x000
          (el programa empieza en la ubicación 0x000)

  • EQU: sirve para crear una equivalencia entre una palabra y un número
         Por ejemplo: Led       EQU       7
  • END: indicamos la finalización del programa
 Si queremos introducir un comentario al programa se utiliza ";" (punto y coma) y escribimos a continuación.


Instrucciones: son las operaciones que va a realizar el target (PIC). Las mas comunes son:

  • bsf x,a      significa Bit Set File y sirve para introducir un estado alto (1) en la posición de memoria "x", bit "a"
          Por ejemplo: bsf      PORTB,7
          El bit 7 del PORTB adquiere valor 1
  • bcf x,a      significa Bit Clear File y sirve para introducir un estado bajo (0) en la posición de memoria "x", bit "a"
          Por ejemplo: bcf      PORTB,7 
          El bit 7 del PORTB adquiere valor 0
  •  nop     significa no operation y sirve para dejar un espacio de memoria sin instrucción.
  •  movlw x      significa move literal to work y sirve para poner "x" (número hexadecimal) en el espacio work
          Por ejemplo: movlw    0x2B
          El byte del work pasaría a valer 2B, o sea 0010 1010 en binario.

  • movwf  x      significa move work file y sirve para mover el byte del work a una posición de memoria  "x".
          Por ejemplo: movwf    PORTB
          El byte de PORTB seria 2B osea 00101010 en binario.

  •  goto x         significa ir a y sirve para hacer un salto hacia la posición de memoria "x"

Actividad 3:

En un microcontrolador PIC16F84A vamos a conectar un led al pin RB7. El programa deberá encender y apagar ese led, usando un clock a cristal de 4MHz.


Foto del programa resuelto:

Con la primer instrucción ponemos el bit RP0 en 1 y logramos pasar a trabajar en el banco 1.
Luego colocamos un 0 en el bit 7 del TRISB, habilitando a RB7 como salida.
Con la tercer instrucción ponemos el bit RP0 en 0 y logramos volver a trabajar en el banco 0.
Después colocamos un 1 en RB7 para poder alimentar al led.
La instrucción nop está para generar una para mantener el led encendido por un espacio de memoria mas.
La sexta operación consiste en apagar el led con una instrucción bcf.
La ultima instrucción genera un salto hacia la cuarta instrucción y así vuelve a prender y apagar el led.
Por ultimo tenemos una directiva END para avisarle al Assembler que el programa termina ahí.

PICKit 2

El PICkit 2 es el software encargado de transmitir los datos del archivo .hex generado con el MPLAB por el puerto de USB hacia el programador. Lo podemos descargar desde la pagina de Microchip:


Una vez que lo abrimos nos aparecerá esta pantalla.


Una vez que lo abrimos nos aparecerá esta pantalla.

En la sección que dice Device: PIC... nos indicará el modelo del target que estamos utilizando.
Para cargar un archivo .hex al target debemos ir a File>Import hex file. Alli buscamos el directorio donde esta el archivo, lo seleccionamos y tildamos load.
Luego otra vez en la pantalla principal hacemos click en Write.

Si la carga fue satisfactoria nos aparecerá: 


A partir de aquí, el programa se estará ejecutando en nuestro target si este esta alimentado.

Realizamos un circuito en protoboard y le cargamos el programa antes visto:



 Luego medimos con el osciloscopio la señal saliente del RB7 para ver las variaciones:






 Comprobamos el funcionamiento del programa viendo la variación de estado del pin RB7.
La tensión de estado alto que medimos en la segunda imagen es de 2,64 V ya que estamos midiendo sobre el led y no sobre el pin del microcontrolador.
Notamos que el estado bajo posee 3 tiempos o posiciones de memoria mientras que el estado alto posee solo 2, esto se debe a que los saltos realizados con la instrucción goto consume 2 posiciones de memoria mas la instrucción bcf obtenemos las 3 posiciones en estado bajo.










No hay comentarios:

Publicar un comentario