Diferencia entre revisiones de «Buzzer - DEMOQE128»

De Wikitronica
Saltar a: navegación, buscar
Línea 3: Línea 3:
 
===BUZZER===
 
===BUZZER===
  
Un buzzer es un dispositivo de señales de audio, el DEMOQE128 contiene un piezzo buzzer.
 
  
Antes de empezar a utilizar el buzzer se debe tener en cuenta un par de cosas importantes:
+
BUZZER
  
• El buzzer  es parte del hardware del DEMOQE128 no depende del micro controlador
+
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 metalica. Debe tener incluido un oscilador para ser considerado buzzer.
 +
 
 +
Algunos buzzer comerciales que se pueden encontrar actualmente  pueden ser:
 +
 
 +
 
 +
                                                                                 
 +
Piezo Buzzer (MSPS23H) Piezo Transducer (MSPT23A)
 +
Precio por unidad: US$0.22-0.25 /                         Precio por unidad US $ 0.1-0.5
 +
 +
Piezo Transduce (MSPT13C) SMD Magnetic Buzzer (MSES12D)
 +
Precio por unidad:  US $ 0.09-0.12 Precio por unidad: US $ 0.1-0.5
 +
 
 +
 
 +
 
 +
 +
Piezo Buzzer (MSPS43B)
 +
Precio por unidad: US $ 0.5-1.0
 +
 
 +
Como se puede observar existe una gran variedad de modelos de buzzer, desde magnéticos hasta piezoeléctricos, con distintos precios y especificaciones.
 +
 
 +
 
 +
-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  
 
• El buzzer no posee una estructura definida de control  
• La implementacion del buzzer depende del codigo.
+
• La implementación del buzzer depende del codigo.
  
  
  
El buzzer no posee ni registros de control ni una secuencia de instrucciones de control, para poder utilizarlo debemos trabajar  dentro del código. Se debe diseñar 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  arrojara los tonos programados.
+
Implementación:
 +
 
 +
Como se menciono 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  arrojara los tonos programados.
  
  
Línea 19: Línea 47:
  
 
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 seria 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 seria un buen ejemplo para la implementación de este método de diseño.
 +
 +
 +
  
  
Línea 35: Línea 66:
 
• La duración  en la que se repetirá la onda cuadrada deseada
 
• 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
 
• El diseño de los tiempos  entre tonos para evitar que se solapen
• La implementación de silencios para ayudar a la armonía y orden de los tonos des
 
  
  
Generación de un tono:
+
Inicializaciones de Buzzer:
  
Por interrupciones
+
Antes de empezar a codificar y trabajar con el buzzer se debe verificar que el DEMOQE128 posea los settings necesarios para su funcionamiento:
  
Pasos:
+
• 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:
  
 +
  
Colocar como salida el puerto PTBDD: permite generar una salida en el puerto
+
Tener en cuenta con que puerto trabaja el Buzzer y activarlo como salida. Para implementarlo se debe colocar el puerto PTBDD como salida ya que el buzzer trabaja con PTBD_PTB5.
  
• Habilitar interrupciones RTC (Real time counter) para determinar el periodo de la onda
 
  
• El periodo de la onda es determinado de la siguiente manera: Al entrar en la rutina de interrupción  por  RTC, se  niega el registro              PTBD_PTB5, esto determina la mitad del periodo.
 
  
• Se continua 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.
+
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. Si no se posee el conocimiento para usar el RTC también se puede crear un periodo “manualmente”. Teniendo como parámetro  la cantidad de ciclos de reloj que tendrá la onda cuadrada, Luego se debe  “cuadrar”  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.
 +
Además se debe utilizar una tabla de frecuencias para cada “nota”que se desea, si se quiere hacer un sonido especifico, el programa leerá estas variaciones y las tomara 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 no es tan
 +
 +
• El periodo de la onda es determinado de la siguiente manera:
 +
 +
El programa entrara en la rutina de interrupción que se diseño 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:
 
Nota= para cambiar el tono, se debe configurar el RTC de manera que module la duración entre interrupciones (esto cambiara el periodo de la onda). Ver configuración de RTC
 
Nota= para cambiar el tono, se debe configurar el RTC de manera que module la duración entre interrupciones (esto cambiara el periodo de la onda). Ver configuración de RTC
  
  
  
 +
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 especifico ( esto para cuando se desea generar mas de un tono), el programa leerá estas variaciones y las tomara 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ñoes muy poco eficiencia y se desperdicia la verdadera capacidad del DEMOQE128.
 +
 +
Un ejemplo de este diseño seria:
 +
 +
;**************************************************************************           
 +
;*** Rutina de generacion 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    *****************
 +
;**************************************************************************           
  
Para inicializar el buzzer se deben tener en cuenta los puertos y jumpers que hacen posible la conexión con el mismo.
+
Flanco:    NOP                  ;1 ciclo - Los NOP son para compensar los ciclos usados en cambiar el flanco
 +
            NOP                 
 +
            NOP                 
 +
            NOP                 
 +
            NOP                 
 +
            NOP                 
 +
            NOP                                   
 +
            NOP
 +
            NOP                 
 +
            NOP
 +
            NOP                 
 +
            NOP                 
 +
Cambio:    NOP                 
 +
            NOP
 +
            NOP                  ;1 ciclo
 +
            NOP                 
 +
            NOP                 
 +
            NOP                 
 +
            NOP                 
 +
            NOP                                   
 +
            NOP                 
 +
            NOP
 +
                             
 +
            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 termino el periodo, pasar al siguiente flanco
 +
           
  
PTBDD como puerto de salida para inicializar el buzzer, y que no reciba ningún tipo de información
+
;**************************************************************
El jumper J19 debe estar de la manera indicada para permitir el uso del dispositivo.
+

Revisión del 13:51 15 nov 2012


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 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 metalica. Debe tener incluido un oscilador para ser considerado buzzer.

Algunos buzzer comerciales que se pueden encontrar actualmente pueden ser:


Piezo Buzzer (MSPS23H) Piezo Transducer (MSPT23A) Precio por unidad: US$0.22-0.25 / Precio por unidad US $ 0.1-0.5

Piezo Transduce (MSPT13C) SMD Magnetic Buzzer (MSES12D) Precio por unidad: US $ 0.09-0.12 Precio por unidad: US $ 0.1-0.5



Piezo Buzzer (MSPS43B) Precio por unidad: US $ 0.5-1.0

Como se puede observar existe una gran variedad de modelos de buzzer, desde magnéticos hasta piezoeléctricos, con distintos precios y especificaciones.


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


Implementación:

Como se menciono 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 arrojara 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 seria un buen ejemplo para la implementación de este método de diseño.








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


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:


• Tener en cuenta con que puerto trabaja el Buzzer y activarlo como salida. Para implementarlo se debe colocar el puerto PTBDD como salida ya que el buzzer trabaja con PTBD_PTB5.


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. Si no se posee el conocimiento para usar el RTC también se puede crear un periodo “manualmente”. Teniendo como parámetro la cantidad de ciclos de reloj que tendrá la onda cuadrada, Luego se debe “cuadrar” 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. Además se debe utilizar una tabla de frecuencias para cada “nota”que se desea, si se quiere hacer un sonido especifico, el programa leerá estas variaciones y las tomara 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 no es tan

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

El programa entrara en la rutina de interrupción que se diseño 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: Nota= para cambiar el tono, se debe configurar el RTC de manera que module la duración entre interrupciones (esto cambiara el periodo de la onda). Ver configuración de RTC


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 especifico ( esto para cuando se desea generar mas de un tono), el programa leerá estas variaciones y las tomara 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ñoes muy poco eficiencia y se desperdicia la verdadera capacidad del DEMOQE128.

Un ejemplo de este diseño seria:

      • Rutina de generacion 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 *****************

Flanco: NOP  ;1 ciclo - Los NOP son para compensar los ciclos usados en cambiar el flanco

           NOP                   
           NOP                   
           NOP                   
           NOP                   
           NOP                   
           NOP                                     
           NOP
           NOP                   
           NOP
           NOP                   
           NOP                   

Cambio: NOP

           NOP
           NOP                   ;1 ciclo
           NOP                   
           NOP                   
           NOP                   
           NOP                   
           NOP                                     
           NOP                   
           NOP
                              
           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 termino el periodo, pasar al siguiente flanco