PICs y LEDs, una pareja perfecta

De Ucontrol
Saltar a: navegación, buscar

<keywords content="TTL 74Ls164N, electronica, circuito, pic, NE555, PIC BASIC, PIC SIMULATOR IDE, esquema, circuito impreso, proyecto, gratis, download, programa, CMOS, pin, e/s, i/o, ucontrol, PIC, 16F628a, 16f84a" /> <center>


Inicio Foro Revista uControl Circuiteca Microcontroladores Electrónica Básica Herramientas y Software Tutoriales Colaboradores Enlaces
¿Ya descargaste los ejemplares GRATUITOS de la Revista uControl? ¡No te los pierdas!.
<linkedimage>

wikipage=Dado electrónico con PIC tooltip=Dado electrónico con PIC img_src=Image:dado100.jpg img_width=150px img_alt=Dado electrónico con PIC </linkedimage>

Dado electrónico
<linkedimage>

wikipage=Como trucar un servo tooltip=Como trucar un servo img_src=Image:trucaservo150.jpg img_width=150px img_alt=Como trucar un servo </linkedimage>

¿Como trucar un servo?
<linkedimage>

wikipage=Comunicación inalámbrica entre PICs tooltip=Comunicación inalámbrica entre PICs img_src=Image:TXRX150.jpg img_width=150px img_alt=Comunicación inalámbrica entre PICs </linkedimage>

Comunicación inalámbrica
<linkedimage>

wikipage=CCS - Libreria de gráficos para GLCD K0108 tooltip=CCS - Libreria de gráficos para GLCD K0108 img_src=Image:GLCD-100.gif img_width=150px img_alt=CCS - Libreria de gráficos para GLCD K0108 </linkedimage>

Gráficos con CCS
<linkedimage>

wikipage=Funcionamiento de una matriz de LEDs tooltip=Funcionamiento de una matriz de LEDs img_src=Image:GNUxx.jpg img_width=150px img_alt=Funcionamiento de una matriz de LEDs </linkedimage>

Carteles de LEDs
Foroizq.jpg
Todos los articulos y proyectos de uControl tienen su lugar en el foro. Si tienes dudas o comentarios, busca o crea el hilo correspondiente, y tendrás una rapida respuesta.
Foroder.jpg
PICs y LEDs, una pareja perfecta

Introducción

PICs y LEDs, una pareja perfecta.

Los diodos LED son seguramente la forma más popular de señalización de estados en los equipos electrónicos. En este pequeño artículo, veremos la manera de sacar todo el provecho posible a estos coloridos componentes.

Contenido


Para que un LED funcione, necesitamos que una corriente lo atraviese. La intensidad de esta corriente debe ser cuidadosamente calculada, dado que si excedemos los límites especificados en la hoja de datos del componente, este se destruirá. La lista siguiente nos da una idea de que tensión aproximada necesita la juntura de los LEDs de colores comunes para funcionar:


  • Rojo = 1,6 V
  • Rojo alta luminosidad = 1,9v
  • Amarillo = 1,7 V a 2V
  • Verde = 2,4 V
  • Naranja = 2,4 V
  • Blanco brillante= 3,4 V
  • Azul = 3,4 V
  • Azul 430nm= 4,6 V


Para limitar la corriente que circula por el LED, lo más usual, es colocar un resistor en serie con él.

PICSYLEDS01.gif
Una resistencia en serie con el LED limita
la corriente que lo atraviesa.



El cálculo del valor de esta resistencia es muy sencillo, y solo implica el uso de la ley de ohm. Debemos restar la tensión del LED a la tensión de la fuente, y dividir el resultado por la corriente que deseamos atraviese el componente. Si usamos las unidades correctas (tensiones en Volts y corrientes en Amperes), el resultado estará expresado en Ohms.


PICSYLEDS02.gif
Esta fórmula permite calcular el valor de
la resistencia limitadora.


Veamos un ejemplo concreto. Supongamos que tenemos un LED rojo de alta luminosidad, que según su hoja de datos, necesita para funcionar correctamente, una corriente de 18 mA y una tensión entre ánodo y cátodo de 2 V, y queremos alimentarlo con una batería de 9V ¿Cuál será el valor de la resistencia limitadora?

Bien, si aplicamos la formula anterior, obtenemos que


PICSYLEDS03.gif
Reemplazamos los valores, y calculamos R.


Como puede verse, el valor para la resistencia es de 389 Ohms. Como no existen resistores comerciales de ese valor, utilizaremos el más cercano: 390 Ohms.

A menudo es necesario colocar dos o más LEDs en serie, entre sí. En ese caso, debemos asegurarnos que todos funcionan con la misma corriente, para evitar que alguno resulte dañado. Luego, simplemente reemplazamos en la formula que hemos visto el valor de V(LED) por la suma de las tensiones de cada uno de los LEDs implicados. Por supuesto, el valor de esta suma no debe ser mayor a la tensión suministrada por la fuente.

LEDS y PICS

Por supuesto, los LEDs resultan ser la lámpara ideal para los microcontroladores. Su bajo consumo de corriente hace que puedan manejarse directamente con sus pines (casi siempre) sin necesidad de etapas intermedias. Pero antes de realizar cualquier diseño electrónico, debemos asegurarnos que la corriente suministrada por las salidas del microcontrolador en cuestión es suficiente para el modelo de LED que vamos a emplear.

La figura siguiente ilustra la forma en que podemos conectar un LED a un PIC. Vamos a suponer que la tensión disponible en el pin del PIC es de 5V, que la corriente que atravesara el LED es de 15 mA, y que la caída de tensión en este es de 2V. Eso nos da un valor para R de 200 Ohms, por lo que utilizaremos una de 220 Ohms, valor disponible comercialmente, más cercano.


PICSYLEDS04.gif
LED conectado entre PORTB.7 y GND.


Software

El siguiente programa en CCS permite probar el funcionamiento del circuito de ejemplo:


#include <16f628a.h>  //PIC utilizado         
#use delay (clock=4000000)       //Oscilador a 4Mhz
#use fast_io(b)   //Optimizamos E/S del PORTB
//------Programa principal--------------------------------------------------------
void main(void)
{
   set_tris_b(0x7F);   // RB7como salida, el resto como entrada.
  do{   
      output_low(PIN_B7);   //Apago el LED
      delay_ms(500);              //Espero 500ms.    
      output_high(PIN_B7);  //Enciendo el LED
      delay_ms(500);             //Espero 500ms. 
   }while(TRUE);                   //Repito el bucle
}


Y el siguiente hace lo mismo, pero está escrito en el BASIC del PIC SIMULATOR IDE:


AllDigital         ‘Desabilitamos comparadores
TRISB = %01111111 ‘RB7como salida, el resto como entrada.
 loop:
      PORTB.0 = 0   ‘Apago el LED
      WaitMs 500   ‘Espero 500ms.    
      PORTB.0 = 1   ‘Enciendo el LED
      WaitMs 500   ‘Espero 500ms.    
 Goto loop
END


En el ejemplo anterior, el LED encenderá cuando el pin 7 del puerto B se ponga en nivel alto. Pero también podemos conectar el LED de manera que se encienda al poner el pin en nivel bajo:


PICSYLEDS05.gif
LED conectado entre PORTB.7 y Vcc.


Si probamos cualquiera de los dos programas precedentes con este circuito, también funcionará, solo que el LED encenderá cuando debería estar apagado, y viceversa.

Nada impide manejar más de un LED a la vez. De hecho, se trata simplemente de repetir el esquema “resistencia limitadora – LED” tantas veces como sea necesario:


PICSYLEDS06.gif
8 LEDs conectados al puerto B del PIC16F628A


El código siguiente, en el mismo BASIC que usamos antes, permite realizar una cuenta en binario desde 0 a 255, al tiempo que muestra el resultado en los 8 LEDS conectados al puerto B:


AllDigital                     'Desabilitamos comparadores
TRISB = %00000000  'Todo el puerto b como salida.
Dim i As Byte

For i = 1 To 255
PORTB = i           'Enciendo leds
WaitMs 500       'Espero 500ms.
Next i
End      

También podemos ver un ejemplo en CCS. El programa siguiente consiste en un bucle infinito, que en cada repetición cambia el estado de las salidas del puerto B, encendiendo uno de los LEDs a la vez. Cuando llega a uno de los pines del extremo del puerto, realiza el efecto inverso hasta llegar nuevamente al otro. Luego se repite todo el ciclo. Se han empleado los operadores “<<” y “>>” para desplazar el contenido del puerto en uno y otro sentido.


#include <16f8627a.h>           //PIC utilizado         
#use delay (clock=4000000)     //Oscilador a 4Mhz
#use fast_io(b)                //Optimizamos E/S del PORTB
#byte portb = 0x6              //Direccion del PORTB
//------Programa principal-----
void main(void)
{
   int i;                        //Declaro la variable del for
   set_tris_b(0x00);             //Todo PORTB como salida.
   disable_interrupts(GLOBAL);   //todas las interrupciones desactivadas
   do{                           //Bucle infinito
      portb = 0x01;              //Estado inicial del puerto
      //----Bucle de "ida" ---------
      for (i=0;i<7;i++) {        //i cuenta de 0 a 6
        portb = portb << 1;      //Desplazo valor de PORTB una pos. a la izq.
        delay_ms(500);           //Espero medio segundo y...
      }
      //----Bucle de "regreso" -----
      for (i=7;i>0;i--) {        //i cuenta de 7 a 0
        portb = portb >> 1;      //Desplazo valor de PORTB una pos. a la der.
        delay_ms(500);           //Espero medio segundo y...
      }
   } while(TRUE);                //...repito el bucle
}

Hay casos en que se necesitan manejar un número elevado de LEDs, y los pines disponibles en el microcontrolador de turno resultan insuficientes. La solución es utilizar alguna técnica de multiplexado. Próximamente veremos cómo hacerlo.


Artículos relacionados

Este articulo forma parte de la Revista uControl #2
<linkedimage>

wikipage=Revista_Numero_0002 tooltip=uControl Revista #2 img_src=Image:UCR002Portada.jpg img_width=100px img_alt=uControl Revista #2

</linkedimage>

En este número comenzamos a escribir el software que hará de nuestro Relojito un proyecto terminado. Aprovechamos para aprender un poco más sobre programación, y presentamos las rutinas encargadas de controlar su funcionamiento en BASIC y CCS.

También aprenderemos a construir un oscilador de frecuencia variable, en el rango de los MHz. que será mucha utilidad en nuestro banco de trabajo. Los hemos bautizado "u-Scilador", el oscilador de uControl.

Puedes consultar el índice completo desde aquí.

Puedes descargar la Revista uControl desde aquí, de forma totalmente gratuita.

Autor

Ariel.jpg Datos del Autor
Nombre: Ariel Palazzesi
email: arielpalazzesi@gmail.com
Ver los artículos de este autor. Página con el perfil del autor.
</center>
Cclicence.png

Este contenido se rige por la licencia de Creative Commons "Licencia Creative Commons Atribución-No Comercial-Sin Obras Derivadas 3.0". Para más información, véase la licencia en su forma reducida y completa.

Herramientas personales