martes, 17 de marzo de 2015

Microchip PIC: Buzzer Pasivo Zumbador + Beep + PIC18LF4550

En este capítulo no vamos a explicar ningún módulo interno del microcontrolador de la familia PIC, sino que vamos a usar un dispositivo externo y aplicar los conocimientos ya expuestos. En este caso, vamos a mostrar como trabajar con un Zumbador o Buzzer PASIVO.

Un zumbador o buzzer es un dispositivo externo que emite sonidos, no podremos reproducir música por ejemplo, solo tonos. Ahora bien, existen dos tipos de buzzer:


· Buzzer ACTIVO: Esta clase de zumbador, emite sonido cuando lo conectamos directamente a la fuente de alimentación.

· Buzzer PASIVO: En cambio, esta clase de zumbador, solo emite sonido si lo excitamos mediante un tren de pulsos.


El ejemplo que vamos a presentar aquí, consiste en un Buzzer PASIVO, y el programa que vamos a desarrollar consistirá en hacer sonar tres Beep, cada tres segundos.


Bien, el microcontrolador elegido en esta ocasión es el PIC18LF4550, y usaremos el módulo interno Timer1 para que supervise dos acciones:


· Acción 1: Generar retraso de tres segundos.

· Acción 2: Generar tres Beep.


En realidad, configuraremos el módulo Timer1 en modo timer de 16-bits y que produzca una interrupción cada, aproximadamente 50 ms, usaremos una variable contador para ajustar los tres segundos deseados. Una vez haya transcurrido los tres segundos, empezaremos a emitir los tres beep.


El resto del tiempo, el microcontrolador PIC18LF4550 estará en modo IDLE ( bajo consumo ).



El material que vamos a necesitar y su función, es la que se muestra a continuación:

· PIC18LF4550: Microcontrolador para este programa.

· Protoboard: Donde insertaremos nuestros componentes.

· PICKIT 3: Programador y depurador necesario para programar el código.

· Transistor NPN: Un transistor NPN de propósito general, en nuestro caso C9013.

· Resistor 220 Ω: Se conectará al pin RD2 ( tres de pulsos ) y a la base del transistor NPN.

· Resistor 4.7 kΩ: Un resistor que irá conectado entre los pines #MCLR y VDD.

· Buzzer Pasivo: Un zumbador del tipo PASIVO que irá conectado su pin positivo a la fuente de alimentación y el pin negativo al pin colector del transistor.


El firmware es el que se muestra a continuación:

/**
* @file      main.c
* @author    Manuel Caballero
* @date      14/3/2015
* @brief     Archivo principal.
* \copyright
*      AqueronteBlog@gmail.com
*
* Este archivo es propiedad intelectual del blog Aqueronte,
* cuya direccion web, es la siguiente:
*
*   http://unbarquero.blogspot.com/
*
* Se permite cualquier modificacion del archivo siempre y cuando
* se mantenga la autoria del autor.
*/
#include < xc.h >
#include < stdint.h >
#include "variables.h"
#include "functions.h"
#include "interrupts.h"

/**
 *  \brief     void main( void )
 *  \details   Este programa consiste en mostrar como funciona un Buzzer o
 *             zumbador PASIVO.
 *
 *             En este caso, el programa consiste en hacer sonar el buzzer PASIVO
 *             mediante tres Beep breves cada aproximadamente, 3 segundos.
 *
 *             Se usará el módulo Timer1, 16-bits, para gestionar tanto el
 *             tiempo 3 segundos deseado como los tres Beep del buzzer PASIVO.
 *
 *             El microcontrolador estará en modo bajo consumo Idle hasta que
 *             no se produzca una interrupción del Timer1.
 *
 *
 *  \author    Manuel Caballero
 *  \version   0.0
 *  \date      14/3/2015
 *  \pre       Este firmware está probado para el PIC18LF4550.
 *
 *  \pre       MPLAB X IDE v2.35.
 *  \pre       Compiler XC8 v1.33.
 */
void main( void ) {

   uint8_t var3seg     =   0;  /**< Variable contador que junto al Timer1 nos permite contabilizar 3 s */
   uint8_t var3beep    =   0;  /**< Variable contador que junto al Timer1 nos permite realizar tres Beep */


   conf_CLK    ();     // Configura Relojes
   conf_IO     ();     // Configura I/O
   conf_TA1    ();     // Configura Timer1

    
   INTCONbits.PEIE     =   1;    // Peripheral Interrupt Enable
   ei  ();                       // enable interrupts


   do{
     SLEEP();                    // uC modo IDLE

     if ( var3seg == 60 && var3beep < 6 )
     {
     // Tres Beep cada 3 segundos
       LATDbits.LD2        =   ~LATDbits.LD2;
       var3beep++;
     }
     else
     {
       if ( var3beep > 5 )
       {
       // Reset variables ( vuelta a empezar! )
         var3beep    =   0;
         var3seg     =   0;
       }

       var3seg++;
     }

   } while ( 1 );
}

Como vemos, el ejemplo es bastante simple, se recomienda bajar los archivos disponibles más abajo para indagar entre sus librerías y leer sus funciones de manera más detallada.

Un vídeo que demuestra lo explicado anteriormente se presenta a continuación:



Os pongo a vuestra disposición el programa en lenguaje C (XC8 y CCS) para que lo podáis descargar y probar:

Microchip PIC: PIC18LF4550  + Zumbador Pasivo + Beep
Compilador XC8Compilador CCS
CC
PIC18LF4550: Buzzer Pasivo + Beep 
PIC18LF4550: Buzzer Pasivo + Beep
PIC18LF4550: Buzzer Pasivo + Beep
PIC18LF4550: Buzzer Pasivo + Beep

· NOTA 1Lo comentarios están en formato doxygen. Aunque no se entrega dicha documentación ya que el MPLAB X no tiene ningún pulgin capaz de trabajar con dicho formato.

0 comentarios: