lunes, 3 de junio de 2013

Actividad 3 - Programación de un microcontrolador de 8 bits.

    Esta actividad está pensada para que puedan aprender a realizar todos los pasos necesarios para programar un sencillo microcontrolador de 8 bits, como es el PIC16F84A. El programa que ultilizamos para crear el código es el MPLAB y para el simulador un circuito con el integrado usamos el Proteus.

   Nos basamos en el siguiente esquemático:

   Para poder generar el código que hará que el integrado lo lea y lo ejecute, utilizamos el MPLAB, en el idioma Ensamblador, en el cual escribimos el código y éste lo traduce para que el integrado lo pueda entender y ejecutar.


;------------------------------------------------------------------------

; square.arm
; Genera una señal cuadrada en el pinRB7
; Hardware :
; Salida en RB7
; Clock @ 4MHz

;------------------------------------------------------------------------

; Autor:  Grupo7                Fecha: 22/5/13       Versión 1.0

;------------------------------------------------------------------------

  LIST                p=PIC16F84A
  INCLUDE             <p16F84A.inc>
  __CONFIG _XT_OSC & _PWRTE_ON & _CP_OFF & _WDT_OFF
  ERRORLEVEL -302

;------------------------------------------------------------------------

  ORG            0x000                      ; Vector de reset
  goto           Main                     
  ORG            0x004                      ; Vector de interrupción
  retfie                                    ; En caso de una interrupción, que proceda con el programa
 
;------------------------------------------------------------------------

Main

   bsf  STATUS, RP0                         ; Cambia al banco 1
   bcf  TRISB, 7                            ; se configura el bit 7 del puerto B como salida
   bcf  STATUS, RP0                         ; Cambia al banco 0
  
Loop
 
   bsf  PORTB, 7                ; se enciende el LED
   bcf  PORTB, 7                ; se apaga el LED
  
   goto Loop
  
;-----------------------------------------------------------------------

  END  
  
  Luego de haber creado nuestro código, vamos al simulador que tiene el MPLAB, que es el  MPLAB SIM, que se encuentra en la parte Debugger, en él tenemos la opción de que, con la flecha llamada "Run" vamos a simularlo en tiempo real nuestro código, en cambio, la otra, "Animate" nos muestra paso por paso como funciona el código, así podemos apreciar como trabaja. Abrimos el proyecto, en source files, seleccionamos el .asm (el programa fuente, o sea, el código mismo de arriba), le damos click derecho y elegimos Assemble. Si no indica ningún tipo de Error o Warning, el programa dirá Build Succeeded (aunque el programa tenga algún tipo de Warning, éste dirá igual Build Succeeded, lo recomendable es que se chequee donde se encuentra ese Warning para tenerlo en limpio), lo cual indica que el Ensamblador comprendió y entendió el codigo que nosotros escribimos y que esta listo para programar en el integrado.




   En el ISIS Professional 7, nos permite simular nuestro entrenador como si ya le hubieramos colocado nuestro código, esto (obviamente) se tiene que hacer antes de empezar a crear nuestra placa en el PCB, para que luego no ocurra el error de que no funcione luego de haber puesto los componentes y haber soldado (puede haber errores, pero serán reducidos si se tiene la precaución). Cuando colocamos los componentes, en el PIC16F84A, ingresamos nuestro archivo .hex, el cual sería el que luego grabaremos en nuestra placa "oficial". Colocamos el osciloscopio virtual sobre la salida y nos tendría que dar una señal cuadrada como en el gráfico de arriba. Si sale esa señal, significa que esta trabajando bien y ya podemos avanzar a crear el PCB del entrenador.   
   Luego de haber utilizado el KiCad para crear nuestra placa entrenadora, el resultado es el siguiente:

  Obviamente, luego de haber terminado de crear la placa, vamos a la opción Tools ---> DRC, que sería el Debugger, para saber que no hay ningún tipo de problema sobre mal funcionamiento o mal conexionado.

  Para poder programar en nuestra placa entrenadora, tenemos que usar el programa PICkit 2, en el cual cargamos nuestro archivo .hex, la placa programadora procesa ese archivo y lo convierte en números binarios (1 y 0), para que en la placa entrenadora, el PIC16F84A lo pueda comprender y hacer funcionar tal código.
   Cuando abrimos el programa, vamos a "Tools" y luego a "Check Communication", si no hay ningún tipo de problemas, el programa reconoce nuestro programador, en caso de que no, chequear la placa en caso de mala soldadura, estado de los componentes o algún contacto en donde no debería estar.

    Si lo reconoce, ir de nuevo a "Tools" y elegir "Troubleshoot...", esto se utiliza para comprobar que la alimentación del entrenador (el Vpp y Vdd) tengan sus respectivas tensiones. En caso de que no, el programa nos manda un alerta.
  Si aparece ésta ventana, indica que al programador le llegan los 5V de alimentación del puerto USB.
   Si aparece ésta notificación, significa que llegan los 12 V para la programación sin problemas.
 


   En esta parte del chequeo, nos indica que con un osciloscopio sobre nuestro progamador, nos fijemos si, cuando elegimos la opción "Toggle 30kHz" ya sea en el PGD o en el PGC, tengamos una señal en esa misma frecuencia, si elegimos la opción "High (VDD)" nos tendría que aparecer la alimentación, y si elegimos "Low (GND)", el osciloscopio tendría que mostrar 0V.
   Si se cumplen todos estos pasos sin problemas, significa que nuestro programador funciona correctamente. En ese momento, colocamos mediante un cable de datos en los puertos RJ12 del programador y del entrenador, para proceder a grabar nuestro PIC16F84A.
   Para poder grabar nuestro archivo .hex, primero, el programa PICkit 2 debe reconocer el entrenador mismo, en caso de que no lo reconozca, el programa no sabe a dónde y a qué va a grabar el archivo y no permite hacer tal proceso. Si o si debe reconocer el PIC16F84A, para que el programa permita importar el archivo ejecutable. Para saber si lo reconoció vamos a donde indica "Device:...", si dice "No device found", nos dice que no encuentra o no reconoce el dispositivo en el cual queremos grabar.