2010/10/25

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.

Led Piloto
Figura-01


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 PIC12C509A.
  • Frecuencia de reloj 500.000 Hz (recuerda es una simulaci贸n simple).
  • Seleccionamos un cristal de <= 4 MHz (tipo de oscilador).

Selecionamos el PIC
Figura-02


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.

Fuses.
Figura-03

Para la simulaci贸n en ISIS Proteus buscaremos:

  • Micro-controlador PIC12C509A.
  • 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 (figura-01)


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.

Simulaci贸n en Proteus.
Figura-04

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

Selecionamos el c贸digo.
Figura-05


A continuaci贸n explicaremos el c贸digo.

C贸digo fuente.
Figura-06


  • 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.

Este ejemplo es para probar el concepto, algunos pin no est谩n disponibles en la simulaci贸n pero en un proyecto real si se usan as铆 que leen el datasheet de cada dispositivos a utilizar.

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] [MEGA]
  • 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 que tenga un consejo o una correcci贸n, hacerlo en los comentarios o los enlaces de contacto del blog.


Fuentes:




Ultima modificaci贸n [2016-03-20]
5 22XD: 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 p...
< >