25 de octubre de 2010

Programando PIC con CCS ejercicio 1 (LED Piloto)


Con similitud a los vídeo juegos, los primeros ejercicios son sencillo, con mucha información y se pueden usar como pequeños bloques en un programa más complejo, este ejercicio me lo enseño un gran amigo que me ayudo a dar los primero pasos en PIC-C, consiste en un LED piloto (blinking LED) que es muy útil para saber si el Micro-controlador está colgado o darle una apariencia más interesante, me recuerdo en mi vida de estudiante los proyecto con más dispositivo de despliegue de información, las personas le mostraba más interés aunque hicieran algo muy sencillo.



Manos a la obra primero creamos en el PIC-C CCS el proyecto donde trabajaremos con el código fuente y luego el circuito para la simulación en ISIS Proteus.


En PIC-C CCS creamos un proyecto con las siguientes características:

  • Micro-controlador PIC 12C509A.
  • Frecuencia de reloj 500.000 Hz (recuerda es una simulación simple).
  • Seleccionamos un cristal de <= 4 MHz (tipo de oscilador).



Podemos colocar el nombre que deseamos al proyecto, como esta en una carpeta independiente le deje el mismo que sugiere el programa "main".

Copiamos el siguiente código:



En el menú podemos "abrir todos los archivos" y en el "main.h", se observa la frecuencia del oscilador que podemos modificar.


Para la simulación en ISIS Proteus buscaremos:

  • Micro-controlador PIC 12C509A.
  • Un resistor genérico y le cambiamos el valor de (1 a 1,2) kΩ
  • También una fuente de 5V.
  • Un diodo LED del color que queramos.

Y creamos el siguiente circuito, no es estrictamente necesario el LED ya que el ISIS Proteus indica el estado de los puertos (primera figura) 

La forma de colocar el LED es para que sea encendido cuando el puerto B0 (GP0) este en bajo, así se acostumbra usarlo para no provocar caídas de tensión en el micro y así evitar reset no deseados.


Recordemos modificar la frecuencia del reloj a 500 kHz y cargar el *.hex (main.hex).


A continuación explicaremos el código.


  • La línea 1 es para cargar el archivo *.h donde hay configuraciones del micro generadas a partir de la configuración del proyecto.
  • La línea 3 está el void main, su inicio está en el corchete de la línea 4 y se cierra en el corchete de la línea 18 donde se finaliza el programa, antes un Return (línea 17) vacío que se acostumbra usar en C aunque se puede obviar.
  • La línea 5 se declara una variable (contador) un entero de 32 bits y se inicializa en cero.
  • La línea 6 es la configuración del timer 0 que para este ejercicio no lo utilizamos.
  • La línea 8 (while (true)) hay un bucle infinito para que no se ejecute el código una sola vez, se ejecuta en un bucle sin fin, del código contenido entre los corchetes de las líneas 9 y 15.
  • El código es muy simple tenemos un contador que se incrementa en cada loop de bucle infinito.
  • En la línea 11 tenemos una condición, cuando esta se cumple se ejecuta los que está en los corchetes 12 y 15.
  • La línea 13 está la función output_toggle que cada vez que se ejecuta cambia el estado lógico de la variable o en este caso el puerto B0.
  • La línea 14 se resetea o reinicia el contador a cero.


Consideraciones:

Se debe recordar que el ISIS Proteus no se realiza una simulación en tiempo real, eso depende de la complejidad del circuito, del código y los recursos del computador. 

Si cambiamos la condición en la línea 11 aun un número mayor la frecuencia de encendido y apagado del led será más lenta igual de forma inversas, se debe tener en consideración que el valor de la condición de la línea 11 tiene relación directa con la frecuencia del reloj por eso si se realiza el ejercicio en un proto-board se debe modificar el reloj en el *.h al oscilador disponible, como también ajustar la condición de la línea 11

Ahora cuando hay más código y más funciones, la intermitencia del LED puede variar, como también la infraestructura del código podamos encontremos rutina que no deja avanzar hasta que se ejecute alguna condición, afectando en gran medida el incremento de la variable contador de la línea 5.




Ejemplo [UO] [MF]
  • Código fuente "LED01.c".
  • Circuito en Proteus "LED-01.PWI".


También te puede interesar:

Nota.

Debo insistir que no soy ningún experto en el tema, estoy aprendiendo y quiero compartir lo que aprendo, así que le invito que cualquier consejo o corrección, hacerlo en los comentarios ^__^

Fuentes:


Ultima modificación [Jue 13 Mar 2014]

1 comentario:

  1. Muy bueno si señor me ha encantado, sigue con estos tutoriales que son fabulosos, bien explicado y encima con video y todo, Gran Blog

    ResponderEliminar