lunes, 27 de febrero de 2012

ENCENDER UN LED

COMO ENCENDER UN LED MEDIANTE EL LENGUAJE C PARA PIC.


1. Primero debemos identificar la cabecera del pic a utilizar, para esto nos dirigimos a la ubicación de las librerías de microcontroladores que contiene CCS la cual se encuentra por defecto en:  C:\Program Files\PICC\Devices.
Una vez en esa carpeta buscamos la librería del pic a utilizar, en este caso el 16f628, que a diferencia del pic 16f84 tiene mas funciones y es mas económico. Dentro de la libreria encontraremos lo siguiente:

//////// Standard Header file for the PIC16F628A device ////////////////
#device PIC16F628A
#nolist
//////// Program memory: 2048x14  Data RAM: 223  Stack: 8
//////// I/O: 16   Analog Pins: 0
//////// Data EEPROM: 128
//////// C Scratch area: 77   ID Location: 2000
//////// Fuses: LP,XT,HS,EC_IO,NOWDT,WDT,NOPUT,PUT,PROTECT,NOPROTECT
//////// Fuses: BROWNOUT,NOBROWNOUT,NOMCLR,MCLR,NOLVP,LVP,INTRC,RC_IO
//////// Fuses: INTRC_IO,RC,NOCPD,CPD
////////
////////////////////////////////////////////////////////////////// I/O
// Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(),
//                         PORT_x_PULLUPS(), INPUT(),
//                         OUTPUT_LOW(), OUTPUT_HIGH(),
//                         OUTPUT_FLOAT(), OUTPUT_BIT()
// Constants used to identify pins in the above are:
*********************************************************************************
Al ubicar la linea fuses encontramos todas las instrucciones de manejo de ese microcontrolador en especial y podemos continuar con el encabezado el cual quedaría de la siguiente manera:


#include <16f628A.h>  // pic a usar
#fuses    XT,NOWDT,PROTECT,NOLVP,MCLR  // instrucciones de programador
#use  delay(clock=4000000)  // reloj
#byte port_a=5 // direccion de puerto A
#byte port_b=6  // direccion de puerto b


en donde.

XT: Tipo de cristal
NOWDT: No usar perro guardián.
PROTECT: Código protegido, al leer el pic programado se leerá el código en hexadecimal 0000 en todas las posiciones de memoria, lo cual es muy útil para evitar que copien o plagien nuestros códigos.
NOLVP: Evita el uso de bajo voltaje de programación.
MCLR: Activa el pin de Máster Clear el cual es un reinicio físico del microcontrolador sin necesidad de desconectarlo de la fuente de poder, en caso de necesitar usar este pin  podemos usar la indicación NOMCLR la cual deshabilita el reset y deja el pin habilitado como entrada. 


La instrucción #byte port_a=5  indica la dirección de el puerto a utilizar, como este nicrocontrolador solo tiene 2 puertos que son A y B tendrá la dirección 5 para el puerto A y la dirección 6 para el puerto b, sin embargo para microcontroladores con mas puertos esta posición es ascendente, es decir por ejemplo el puerto C obtendrá la dirección 7.

2. Ahora se escribe el código para encender el led.





main ()
{
   set_tris_b(0x00); // Puerto b puesto en 0
   port_b=0x00; // puerto b apagado
   while (true) // ciclo infinito
   {
     
output_high(PIN_B0);       Encender el pin B0  
   
   }
}    

Con la instrucción OUTPUT_HIGN podemos encender cualquier pin del microcontrolador que este configurado como salida, y con la instrucción OUTPUT_LOW podemos apagar cualquier pin que este encendido.

3. Programa completo

*********************************************************************************

#include <16f628A.h>  // pic a usar
#fuses    XT,NOWDT,PROTECT,NOLVP,MCLR  // instrucciones de programador
#use  delay(clock=4000000)  // reloj
#byte port_a=5 // direccion de puerto A
#byte port_b=6  // direccion de puerto b


main ()
{
   set_tris_b(0x00); // Puerto b puesto en 0
   port_b=0x00; // puerto b apagado
   while (true) // ciclo infinito
   {
     
output_high(PIN_B0);       Encender el pin B0  
      delay_ms(500);        Retardo de 500 milisegundos
output_low(PIN_B0);         Apaga el pin B0
delay_ms(500);        Retardo de 500 milisegundos
   }
}    

*********************************************************************************

De esta forma el pin B0 quedara intermitente ya que lo encendemos y lo apagamos y como esta dentro de un ciclo while (true) siempre se repetirá.





jueves, 9 de febrero de 2012

SOLUCIONES ELECTRÓNICAS CON PIC







Aquí encontrara información relacionada con la programación de pics en lenguaje C, ademas encontrara ejemplos de rutinas básicas que puede implementar con estos dispositivos.

Familias comunes