Diferencia entre revisiones de «Buzzer - DEMOQE128»

De Wikitronica
Saltar a: navegación, buscar
Línea 1: Línea 1:
 
[[Categoría: DEMOQE128]]
 
[[Categoría: DEMOQE128]]
                                                                                       [[Archivo:Buzzer demo.jpg|600px|thumb|right|Piezo Buzzer DEMOQE128]]     
+
                                                                                       [[Archivo:Buzzer demo.jpg|400px|thumb|right|Piezo Buzzer DEMOQE128]]     
  
=BUZZER=
+
=''BUZZER''=
  
 
+
Un ''buzzer'' es un transductor electro acústico o dispositivo de señales de audio que produce un tono
 
+
intermitente o continuo dependiendo de cómo se programe a trabajar; existen muchos tipos de ''buzzer''
 
+
 
+
 
+
Un buzzer es un transductor electro acústico o dispositivo de señales de audio que produce un tono
+
intermitente o continuo dependiendo de cómo se programe a trabajar; existen muchos tipos de buzzer  
+
 
desde electromecánicos hasta piezoeléctricos.   
 
desde electromecánicos hasta piezoeléctricos.   
  
  
El DEMOQE128 contiene un piezo buzzer. El corazón de un buzzer piezoeléctrico es un disco de piezo  
+
El DEMOQE128 contiene un piezo ''buzzer''. El corazón de un ''buzzer'' piezoeléctrico es un disco de piezo  
 
el cual consiste en una placa cerámica recubierto de una capa metálica. Debe tener incluido un  
 
el cual consiste en una placa cerámica recubierto de una capa metálica. Debe tener incluido un  
oscilador para ser considerado buzzer.  
+
oscilador para ser considerado ''buzzer''.  
  
Algunos buzzer comerciales que se pueden encontrar actualmente  pueden ser:
+
Algunos ''buzzer'' comerciales que se pueden encontrar actualmente  pueden ser:
  
  
Línea 26: Línea 21:
 
[[Archivo:BUZZER_magnetico.jpg|200px|thumb|right|SMD Magnetic Buzzer (MSES12D)Precio por unidad: US $ 0.1-0.5]]                                                                                   
 
[[Archivo:BUZZER_magnetico.jpg|200px|thumb|right|SMD Magnetic Buzzer (MSES12D)Precio por unidad: US $ 0.1-0.5]]                                                                                   
  
Como se puede observar existe una gran variedad de modelos de buzzer, desde magnéticos hasta piezoeléctricos, con distintos precios y especificaciones.
+
Como se puede observar existe una gran variedad de modelos de ''buzzer'', desde magnéticos hasta piezoeléctricos, con distintos precios y especificaciones.
Elegir cual de estos modelos es mejor depende enteramente de el uso que se le quiera dar. Un buzzer puede servir como alarma, beeper, avisos de fallos o aciertos en ciertos programas o incluso se puede implementar para lograr tonos armónicos o canciones.
+
Elegir cual de estos modelos es mejor depende enteramente de el uso que se le quiera dar. Un ''buzzer'' puede servir como alarma, beeper, avisos de fallos o aciertos en ciertos programas o incluso se puede implementar para lograr tonos armónicos o canciones.
Mas adelante explicaremos como se puede hacer un tono con el buzzer he incluso una secuencia de tonos que formen una canción y como crear silencios entre canciones.  
+
Mas adelante explicaremos como se puede hacer un tono con el ''buzzer'' he incluso una secuencia de tonos que formen una canción y como crear silencios entre canciones.  
  
  
=Inicializaciones de Buzzer=
+
=Inicializaciones de ''Buzzer''=
  
Antes de empezar a codificar y trabajar con el buzzer se debe verificar que el DEMOQE128 posea los  
+
Antes de empezar a codificar y trabajar con el ''buzzer'' se debe verificar que el DEMOQE128 posea los  
 
settings necesarios para su funcionamiento:
 
settings necesarios para su funcionamiento:
  
• Colocar los jumpers de manera que se permita la salida de la señal al buzzer. El buzzer  
+
• Colocar los jumpers de manera que se permita la salida de la señal al ''buzzer''. El ''buzzer''
 
depende de que el jumper J19 este colocado de la siguiente manera:
 
depende de que el jumper J19 este colocado de la siguiente manera:
  
[[Archivo:Jumper buzzer.jpg|289px|thumb|center|Jumper del Buzzer ]]  
+
[[Archivo:Jumper buzzer.jpg|289px|thumb|center|Jumper del ''Buzzer'' ]]  
  
• Tener en cuenta con que puerto trabaja el Buzzer y activarlo como salida. Se debe colocar  
+
• Tener en cuenta con que puerto trabaja el ''Buzzer'' y activarlo como salida. Se debe colocar  
el puerto PTBDD como salida ya que el buzzer funciona por medio de  PTBD_PTB5.
+
el puerto PTBDD como salida ya que el ''buzzer'' funciona por medio de  PTBD_PTB5.
  
  
Línea 49: Línea 44:
 
=Implementación=
 
=Implementación=
  
Antes de empezar a utilizar el buzzer se debe tener en cuenta un par de cosas importantes:
+
Antes de empezar a utilizar el ''buzzer'' se debe tener en cuenta un par de cosas importantes:
  
• El buzzer  es parte del hardware del DEMOQE128 no depende del micro controlador implementado.
+
• El ''buzzer'' es parte del hardware del DEMOQE128 no depende del micro controlador implementado.
• El buzzer no posee una estructura definida de control  
+
• El ''buzzer'' no posee una estructura definida de control  
• La implementación del buzzer depende del código.
+
• La implementación del ''buzzer'' depende del código.
  
  
Como se mencionó anteriormente para implementar el buzzer no contamos con registros de control ni con secuencias de instrucciones de control, para poder utilizarlo debemos trabajar  dentro del código.  
+
Como se mencionó anteriormente para implementar el ''buzzer'' no contamos con registros de control ni con secuencias de instrucciones de control, para poder utilizarlo debemos trabajar  dentro del código.  
 
Se debe programar  el código de manera que emule una señal periódica, de esta  manera podemos usar esta señal como salida para el dispositivo , el cual  arrojará los tonos programados.
 
Se debe programar  el código de manera que emule una señal periódica, de esta  manera podemos usar esta señal como salida para el dispositivo , el cual  arrojará los tonos programados.
  
Línea 62: Línea 57:
 
Como crear una señal periódica:
 
Como crear una señal periódica:
  
Se puede utilizar una señal periódica para implementar los tonos en el buzzer,  para efectos prácticos el buzzer  solo recibirá un 1 o un 0 dependiendo de en que tiempo se tome la señal y cuanto tiempo se mantenga en dicha salida. Una señal cuadrática sería un buen ejemplo para la implementación de este método de diseño.
+
Se puede utilizar una señal periódica para implementar los tonos en el ''buzzer'',  para efectos prácticos el ''buzzer'' solo recibirá un 1 o un 0 dependiendo de en que tiempo se tome la señal y cuanto tiempo se mantenga en dicha salida. Una señal cuadrática sería un buen ejemplo para la implementación de este método de diseño.
  
  
[[Archivo:Onda cuadrada.jpg|613px|thumb|center|Onda periodica de salida al Buzzer]]  
+
[[Archivo:Onda cuadrada.jpg|613px|thumb|center|Onda periodica de salida al ''Buzzer'']]  
  
  
Línea 84: Línea 79:
  
  
• Colocar como salida el puerto PTBDD. Esto permite generar una salida en el puerto que esta conectado al buzzer.
+
• Colocar como salida el puerto PTBDD. Esto permite generar una salida en el puerto que esta conectado al ''buzzer''.
 
   
 
   
 
     <pre> PTBDD= 0xff; </pre>
 
     <pre> PTBDD= 0xff; </pre>
Línea 123: Línea 118:
  
  
• Se continúa negando la salida PTBD_PTB5  por un tiempo indeterminado, esto genera un tono en la salida del buzzer, el cual reconoce los cambios en el periodo de la señal como el tono en cuestión.
+
• Se continúa negando la salida PTBD_PTB5  por un tiempo indeterminado, esto genera un tono en la salida del ''buzzer'', el cual reconoce los cambios en el periodo de la señal como el tono en cuestión.
  
 
Variación de tonos:
 
Variación de tonos:
Línea 129: Línea 124:
 
• Para cambiar el tono, se debe configurar el RTC de manera que module la duración entre interrupciones (esto cambiará el periodo de la onda).  
 
• Para cambiar el tono, se debe configurar el RTC de manera que module la duración entre interrupciones (esto cambiará el periodo de la onda).  
  
• En el caso que se quiera programar mas de una secuencia de tonos, o "canciones" juntas, un dato de interés podría ser que el buzzer no puede  
+
• En el caso que se quiera programar mas de una secuencia de tonos, o "canciones" juntas, un dato de interés podría ser que el ''buzzer'' no puede  
 
reconocer frecuencias ( expresadas en periodos) muy altas o muy bajas, lo cual usualmente es útil para hacer "silencios"entre una cancion y otra.
 
reconocer frecuencias ( expresadas en periodos) muy altas o muy bajas, lo cual usualmente es útil para hacer "silencios"entre una cancion y otra.
  
Línea 139: Línea 134:
 
• Al momento de implementar las interrupciones, si no se posee el conocimiento para usar el RTC también se puede crear un periodo “manualmente”, se debe tener  como parámetro  la cantidad de ciclos de reloj que tendrá la onda cuadrada. Luego se debe  “sincronizar”  el tiempo que tarda cada instrucción del programa  con respecto a la cantidad e ciclos de la onda. Para poder completar los ciclos faltantes (la onda usualmente se toma mas ciclos de reloj que las instrucciones de cambio de periodo) se pueden utilizar “nops” iterados dentro de las mismas instrucciones si se trata de assembler o ciclos si se trabaja con C.  
 
• Al momento de implementar las interrupciones, si no se posee el conocimiento para usar el RTC también se puede crear un periodo “manualmente”, se debe tener  como parámetro  la cantidad de ciclos de reloj que tendrá la onda cuadrada. Luego se debe  “sincronizar”  el tiempo que tarda cada instrucción del programa  con respecto a la cantidad e ciclos de la onda. Para poder completar los ciclos faltantes (la onda usualmente se toma mas ciclos de reloj que las instrucciones de cambio de periodo) se pueden utilizar “nops” iterados dentro de las mismas instrucciones si se trata de assembler o ciclos si se trabaja con C.  
  
• Se puede utilizar una tabla de frecuencias para cada “nota” que se desea, si se quiere hacer un sonido específico ( esto para cuando se desea generar mas de un tono), el programa leerá estas variaciones y las tomará como un cambio en el periodo, que en si es lo que define que nota tomara como salida el buzzer.  
+
• Se puede utilizar una tabla de frecuencias para cada “nota” que se desea, si se quiere hacer un sonido específico ( esto para cuando se desea generar mas de un tono), el programa leerá estas variaciones y las tomará como un cambio en el periodo, que en si es lo que define que nota tomara como salida el ''buzzer''.  
  
 
• Aunque es posible generar una onda de esta manera es mejor utilizar el RTC pues este diseño es muy poco eficiencia y se desperdicia la verdadera capacidad del DEMOQE128.  
 
• Aunque es posible generar una onda de esta manera es mejor utilizar el RTC pues este diseño es muy poco eficiencia y se desperdicia la verdadera capacidad del DEMOQE128.  
Línea 148: Línea 143:
 
;*** Rutina de generación de ondas cuadradas, de 30 ciclos de reloj *******;
 
;*** Rutina de generación de ondas cuadradas, de 30 ciclos de reloj *******;
 
;*** se llevará a cabo tantas veces como indique PERIODO,          ******* ;           
 
;*** se llevará a cabo tantas veces como indique PERIODO,          ******* ;           
;*** Luego negará la salida del Buzzer y repetirá el conteo de PERIODO ****;
+
;*** Luego negará la salida del ''Buzzer'' y repetirá el conteo de PERIODO ****;
 
;*** 30 ciclos * 250 ns (Tiempo de cada ciclo) = 7.5uS    *****************;
 
;*** 30 ciclos * 250 ns (Tiempo de cada ciclo) = 7.5uS    *****************;
 
;**************************************************************************;             
 
;**************************************************************************;             
Línea 195: Línea 190:
 
=Programa de Prueba=
 
=Programa de Prueba=
  
A continuación se pueden observar un link a youtube con un video de la implementación del buzzer, estan programados para sonar 2 fragmentos canciones del juego ZELDA, primero SERENADE OF WATER, luego y con un silencio de segundo y medio, sonará un fragmento de SONG OF STORMS.
+
A continuación se pueden observar un link a youtube con un video de la implementación del ''buzzer'', estan programados para sonar 2 fragmentos canciones del juego ZELDA, primero SERENADE OF WATER, luego y con un silencio de segundo y medio, sonará un fragmento de SONG OF STORMS.
  
 
http://www.youtube.com/watch?v=jyfUEQ8zmCY  
 
http://www.youtube.com/watch?v=jyfUEQ8zmCY  
Línea 201: Línea 196:
 
=Referencias=
 
=Referencias=
  
•Imagenes de buzzer------------- www.soundbuzzer.com
+
•[http://www.soundbuzzer.com Imágenes de los ''buzzers'']
  
•Imagen de pin------------------ Manual del DEMOQE128
+
•[http://cache.freescale.com/files/microcontrollers/doc/user_guide/DEMOQE128UM.pdf?fpsp=1&WT_TYPE=Users%20Guides&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation DEMOQE128UM]

Revisión del 16:41 20 nov 2012

Piezo Buzzer DEMOQE128

BUZZER

Un buzzer es un transductor electro acústico o dispositivo de señales de audio que produce un tono intermitente o continuo dependiendo de cómo se programe a trabajar; existen muchos tipos de buzzer desde electromecánicos hasta piezoeléctricos.


El DEMOQE128 contiene un piezo buzzer. El corazón de un buzzer piezoeléctrico es un disco de piezo el cual consiste en una placa cerámica recubierto de una capa metálica. Debe tener incluido un oscilador para ser considerado buzzer.

Algunos buzzer comerciales que se pueden encontrar actualmente pueden ser:


Piezo Buzzer (MSPS23H)Precio por unidad: US$0.22-0.25
Piezo Transducer (MSPT23A)Precio por unidad US $ 0.1-0.5
Piezo Buzzer (MSPS43B)Precio por unidad: US $ 0.5-1.0
SMD Magnetic Buzzer (MSES12D)Precio por unidad: US $ 0.1-0.5

Como se puede observar existe una gran variedad de modelos de buzzer, desde magnéticos hasta piezoeléctricos, con distintos precios y especificaciones. Elegir cual de estos modelos es mejor depende enteramente de el uso que se le quiera dar. Un buzzer puede servir como alarma, beeper, avisos de fallos o aciertos en ciertos programas o incluso se puede implementar para lograr tonos armónicos o canciones. Mas adelante explicaremos como se puede hacer un tono con el buzzer he incluso una secuencia de tonos que formen una canción y como crear silencios entre canciones.


Inicializaciones de Buzzer

Antes de empezar a codificar y trabajar con el buzzer se debe verificar que el DEMOQE128 posea los settings necesarios para su funcionamiento:

• Colocar los jumpers de manera que se permita la salida de la señal al buzzer. El buzzer depende de que el jumper J19 este colocado de la siguiente manera:

Jumper del Buzzer

• Tener en cuenta con que puerto trabaja el Buzzer y activarlo como salida. Se debe colocar el puerto PTBDD como salida ya que el buzzer funciona por medio de PTBD_PTB5.


 PTBDD= 0xFF; 

Implementación

Antes de empezar a utilizar el buzzer se debe tener en cuenta un par de cosas importantes:

• El buzzer es parte del hardware del DEMOQE128 no depende del micro controlador implementado. • El buzzer no posee una estructura definida de control • La implementación del buzzer depende del código.


Como se mencionó anteriormente para implementar el buzzer no contamos con registros de control ni con secuencias de instrucciones de control, para poder utilizarlo debemos trabajar dentro del código. Se debe programar el código de manera que emule una señal periódica, de esta manera podemos usar esta señal como salida para el dispositivo , el cual arrojará los tonos programados.


Como crear una señal periódica:

Se puede utilizar una señal periódica para implementar los tonos en el buzzer, para efectos prácticos el buzzer solo recibirá un 1 o un 0 dependiendo de en que tiempo se tome la señal y cuanto tiempo se mantenga en dicha salida. Una señal cuadrática sería un buen ejemplo para la implementación de este método de diseño.


Onda periodica de salida al Buzzer


Al momento de crear la señal hay que tomar en cuenta ciertas cosas para el tipo de tono que se quiera producir, entre esas están las siguientes:

• La cantidad de ciclos de reloj de la onda • La duración en la que se repetirá la onda cuadrada deseada • El diseño de los tiempos entre tonos para evitar que se solapen



Generación de solo un tono

Por interrupciones RTC

• Colocar como salida el puerto PTBDD. Esto permite generar una salida en el puerto que esta conectado al buzzer.

 PTBDD= 0xff; 


• Habilitar interrupciones RTC (Real Time Counter):

Las interrupciones RTC se usaran para determinar el periodo de la onda.

En assembler

  	
            
            LDA #$04
            STA SCGC2         ; Habilita BUS clock para RTC , SYSTEM CLOCK GATING CONTROL REGISTER, PROCESO
            
            LDA #$00
            STA RTCMOD             	;Se inicializa el módulo Real Time Counter, real time counter módulo
            LDA #$1E              	 	;para que active la bandera RTIF cada 1s   , interrupciones cada seg
            STA RTCSC                  ;      real time estado y registros de  control

En lenguaje C

  	
            SCGC2=0x04;            //Habilita BUS clock para RTC , SYSTEM CLOCK GATING CONTROL REGISTER, PROCESO
            RTCMOD=0x00;           //Se inicializa el módulo Real Time Counter, real time counter modulo
            RTCSC=0x1E;            //para que active la bandera RTIF cada 1s   , interrupciones cada seg
                                  //real time estado y registros de  control 	
                          

• El periodo de la onda es determinado de la siguiente manera:

El programa entrara en la rutina de interrupción que se diseñó anteriormente por RTC, durante esta rutina se negara la salida PTBD_PTB5, esto determina la mitad del periodo. Si se observa la onda cuadrada se puede notar que con cada cambio de flanco o salida negada la amplitud de la onda cambia de “0” a “1”, cuando la onda haga dos cambios (vuelva al estado que se toma como referencia) se cumple un periodo, por eso cada interrupción por RTC representa medio periodo.


• Se continúa negando la salida PTBD_PTB5 por un tiempo indeterminado, esto genera un tono en la salida del buzzer, el cual reconoce los cambios en el periodo de la señal como el tono en cuestión.

Variación de tonos:

• Para cambiar el tono, se debe configurar el RTC de manera que module la duración entre interrupciones (esto cambiará el periodo de la onda).

• En el caso que se quiera programar mas de una secuencia de tonos, o "canciones" juntas, un dato de interés podría ser que el buzzer no puede reconocer frecuencias ( expresadas en periodos) muy altas o muy bajas, lo cual usualmente es útil para hacer "silencios"entre una cancion y otra.

Generación de tonos manual (sin RTC)

• Los primeros pasos de inicialización son exactamente iguales con o sin RTC


• Al momento de implementar las interrupciones, si no se posee el conocimiento para usar el RTC también se puede crear un periodo “manualmente”, se debe tener como parámetro la cantidad de ciclos de reloj que tendrá la onda cuadrada. Luego se debe “sincronizar” el tiempo que tarda cada instrucción del programa con respecto a la cantidad e ciclos de la onda. Para poder completar los ciclos faltantes (la onda usualmente se toma mas ciclos de reloj que las instrucciones de cambio de periodo) se pueden utilizar “nops” iterados dentro de las mismas instrucciones si se trata de assembler o ciclos si se trabaja con C.

• Se puede utilizar una tabla de frecuencias para cada “nota” que se desea, si se quiere hacer un sonido específico ( esto para cuando se desea generar mas de un tono), el programa leerá estas variaciones y las tomará como un cambio en el periodo, que en si es lo que define que nota tomara como salida el buzzer.

• Aunque es posible generar una onda de esta manera es mejor utilizar el RTC pues este diseño es muy poco eficiencia y se desperdicia la verdadera capacidad del DEMOQE128.

Un ejemplo de este diseño sería:

;************************************************************************** ;           
;*** Rutina de generación de ondas cuadradas, de 30 ciclos de reloj *******;
;*** se llevará a cabo tantas veces como indique PERIODO,           ******* ;           
;*** Luego negará la salida del ''Buzzer'' y repetirá el conteo de PERIODO ****;
;*** 30 ciclos * 250 ns (Tiempo de cada ciclo) = 7.5uS    *****************;
;**************************************************************************;            

MOV 0, COUNTER;
MOV 0, COUNTER_2

Flanco:     NOP                   ;1 ciclo - Los NOP son para compensar los ciclos usados en cambiar el flanco
            LDA COUNTER 
            INCA
            STA COUNTER
            BNE COUNTER, #12,Flanco                   
                        
Cambio:     NOP                   
            LDA COUNTER 
            INCA
            STA COUNTER
            BNE COUNTER, #10,Cambio  
                               
            AIX #-1                ;2 ciclos
            CPHX #$0000           ;3 ciclos - Revisa si el contador llega a cero, compare hx con el valor
            BNE Flanco            ;3 ciclos - Si aun no se termina el periodo, decrementar contador, NECESITA DE  RESULTADO DE LA funcion anterior para actuar
            
            COM PTBD              ;5 ciclos
            LDHX periodo          ;5 ciclos
            BRA  Cambio           ;3 ciclos - Si ya terminó el periodo, pasar al siguiente flanco
            

;**************************************************************

•Para el uso de esta instrucción también se necesita el uso de una tabla de frecuencias que representen una escala de notas o tonos, el programa leerá la "canción"que no sera mas que una combinación de las frecuencias de la tabla y las traducirá a cambios en periodo como se mencionó anteriormente. un modelo de dicha tabla podría ser:

 
;Tabla de Notas musicales ordenadas por octava: do, do#,re,re#,mi,fa,fa#,sol,sol#,la,la#,si 
                    ;do, do#,re,re#,mi, fa, fa#,sol,sol#,la,la#,si
SILENCIO:   DC.W    $FFFF
OCTAVA1:    DC.W    509,480,454,428,403,381,359,339,320,302,285,269    ;3
OCTAVA2:    DC.W    254,240,226,213,201,190,179,169,160,151,143,135  ;4
OCTAVA3:    DC.W    126,119,113,106,100,94,89,84,79,75,71,66       ;5
OCTAVA4:    DC.W    63,59,56,53,50,47,44,42,39,37,35,33          ;6  

•Aun así se recomienda de nuevo no utilizar este método sino uno que implique la variación del periodo por medio de RTC, lo que haría que la cantidad de líneas de código de el programa disminuya significativamente ademas de ser la manera correcta de programar y aprovechar eficientemente las funciones del DEMOQE128.

Programa de Prueba

A continuación se pueden observar un link a youtube con un video de la implementación del buzzer, estan programados para sonar 2 fragmentos canciones del juego ZELDA, primero SERENADE OF WATER, luego y con un silencio de segundo y medio, sonará un fragmento de SONG OF STORMS.

http://www.youtube.com/watch?v=jyfUEQ8zmCY

Referencias

Imágenes de los buzzers

DEMOQE128UM