Audio IN OUT/es

From Qi-Hardware
Jump to: navigation, search

La siguiente Figura muestra el circuito de audio del Nanonote. En él se pueden observar las conexiones del micrófono, el audífono y el Parlante y como se encuentran conectados con el módulo análogo del Codec Interno. (los bloques amarillos representan bloques internos del procesador)

Audio Circuit.png

El procesador JZ4720, JZ4740 y JZ4725 permite la conexión directa de los audífonos a la salidas del amplificador y la conexión directa del micrófono, este chip posee un amplificador BG en la entrada del micrófono, con lo que no es neceario amplificar la señal proveniente de este, adicionalmente, el pin MICBIAS suministra el voltaje de polarización necesario para el funcionamiemto del micrófono [1]. Modificando el estado de los interruptores SW1 y SW2 podemos:

SW1 cerrado: Llevar las señal de audio proveniente del micrófono o las líneas de entrada LINEIN_L y LINEIN_R (No disponibles en el Nano) directamente a la salida y dependiendo del estado de SW2 mezclarlas con la señal proveniente de los conversores Digital/análogo (DAC) (SW2 cerrado) o no (SW2 abierto).

SW1 abierto SW2 cerrado: La salida del DAC se conecta al circuito de salida. Lo que permite reproducir la información proveniente del DAC, por ejemplo cuando se reproduce un archivo de sonido.

SW1 y SW2 abiertos: Ninguna señal está conectada al circuito de salida.

Las entradas del micrófono y de las entradas LINEIN_L y LINEIN_R ingresan directamente al conversor Análogo/Digital (ADC) lo que permite hacer grabaciones para su posterior procesamiento o reproducción. Si se desea trabajar con las señales provenientes de LINEIN_L y LINEIN_R se debe hacer cero la ganancia proveniente del micrófono (CDCCR2.MICBG = 0) de lo contrario la señal proveniente de esta línea se mezclará con la señal de entrada.

Contents

[edit] Audífonos

Como se mencionó anteriormente el procesador JZ4740 permite la conexión directa de audífonos a los pines de salida. Esto reduce la complejidad del circuito logrando así una reducción de costos. En la siguiente Figura podemos observar que a cada canal se conectan en serie un Condensador (C59 / C52) que se encarga de bloqear la componente DC, un transistor MOSFET de canal N (Q9 / Q10) que actúa como interruptor y una resistencia (R37 / R38) que limita la corriente del circuito de salida ante posibles cortocircuitos originados en el conectór del audífono. Las resistencias R40 y R41 se utilizan para indicar la presencia o ausencia de los audífonos. La señal POP se utiliza para controlar el estado de los "interruptores" Q9 y Q10

Audio Out.png

Cuando POP tiene un valor lógico alto (3.3V en este caso) el voltage Gate-Source de los transistores Q9 y Q10 es de 3.3V como el voltaje requerido para que el transistor entre en estado de saturación es 1.3V estos transistores pasarán a la region de saturación (Interruptor cerrado) con lo que el circuito queda de la siguiente forma:

Audio POP HI.png

Si hacemos que POP tenga un valor lógico bajo (0V) El voltage Gate-Source de los transitores Q9 y Q10 es 0V, con lo que los transistores se encuentran en estado de corte (Interruptor abierto) con lo que el circuito queda de la siguiente forma:

Audio POP LOW.png

Cuando el audífono se encuentra conectado (y cerramos los "interruptores" Q9 y Q10) el circuito equivalente se muestra en la siguiente Figura. Podemos observar que la señal que va hacia los audífonos tiene solo una componente AC, ya que la componente DC es bloqueada por los condensadores C59 / C63. La inductancia BD8 se utiliza para ????????????????

Headphone in.png

Cuando el audífono es removido (el circuito equivalente se muestra en la siguiente Figura) Se obtiene un cambio en el valor del voltaje en el nodo AMPIN Pasa de 3.3V (Como puede verse en la figura anterior) a un valor cercano a 0V.

Headphone out.png

[edit] Parlante

El parlante es manejado por un amplificador de potencia de dos canales, que puede ser habilitado utilizando un habilitador (pin 7 CE). Al deshabilitar el amplificador de audio, la potencia consumida por él es cero, lo que disminuye el consumo de potencia y aumenta la duración de la carga de la batería.

Es obvio que cuando el audífono se encuentre conectado el amplificador debe ser deshabilitado para que no se reproduzca el sonido en ambas salidas, el circuito equivalente de esta situación se muestra en la siguiente Figura. Debemos analizar el estado de la señal CE del amplificador, el cual está determinado por el estado del transistor Q6 (MOSFET canal P), el voltage Gate-Source de este transistor es de 3.3V ya que las resistencias R36 y R42 llevan al Gate y al Source a 3.3V y 0V respectivamente; con lo que el transistor se encuentra en estado de corte, con lo que podemos eliminar a Q6 de este circuito con lo que la señal CE del amplificador toma un valor de 0V con lo que se deshabilita el circuito.

Audio SP.png

Cuando se remueve el audífono, es necesario que el amplificador pueda ser habilitado cuando el usuario lo desee, el circuito equivalente que resulta cuando se remueve el audífono se muestra en la siguiente Figura. De nuevo el valor del pin CE del amplificador depende del estado del transistor Q6 (el cual actúa como un interruptor), en este estado el Voltage del Gate de Q6 es VAMPIN el cual se puede calcular del divisor resistivo que resulta de R36 y el paralelo de (R40 + R37) con (R38 + R41) (La siguiente Figura muestra el circuito equivalente).

Audio SP WOHP.png

El voltage de Source viene dado por el valor de la señal AMPEN, si AMPEN tiene un valor lógico alto (3.3V) el voltage Gate-Source de Q6 es VGate(0) - VSource(VAMPEN) = -3.3V, con esto el transistor Q6 entra en el estado de saturación y el valor en el pin CE es igual a 3.3V; si AMPEN tiene un valor lógico bajo, el Voltage Gate-Source de Q6 es 0V con lo que el transistor Q6 se encuentra en estado de corte (interruptor abierto) por lo que el voltaje sobre el pin CE es 0V.


Audio SP WOHP2.png

[edit] Micrófono

Este circuito es muy sencillo debido a que el procesador incluye el soporte necesario para alimentar y amplificar la señal proveniente del micrófono. Este circuito se muestra a continuación.

Mic.png

[edit] CONTROL

Las señales POP y AMPEN permiten controlar la salida de audio hacia los audífonos y hacia el amplificador respectivamente. Estas señales son manejadas por dos Pines de entrada/salida de propósito general (GPIO) Como podemos ver en [Link página GPIOs] cada GPIO de este procesador permite habilitar un pull-up o un pull-down, en estado de reset los GPIOs son declarados como entradas y el pull-up es activado; por lo que una vez inicializado el Nano, "POP" y "AMPEN" están en un estado lógico alto, lo cual habilita el audífono y el amplificador.

En el archivo arch/mips/include/asm/mach-jz4740/board-qi_lb60.h se hace la declaración de estos pines:

  1. #define GPIO_AMP_EN             JZ_GPIO_PORTD(4)  // AMPEN
  2. #define GPIO_AUDIO_POP          JZ_GPIO_PORTB(29) // POP

Estos pines son declarados como salidas e inicializados en el archivo arch/mips/jz4740/board-qi_lb60.c

  1. static void __init board_gpio_setup(void)
  2. {
  3. ...
  4.   __gpio_as_output(GPIO_AMP_EN);
  5.   __gpio_set_pin(GPIO_AMP_EN);
  6.   __gpio_as_output(GPIO_AUDIO_POP);
  7.   __gpio_set_pin(GPIO_AUDIO_POP);
  8. ...
  9. }

Las funciones relacionadas al manejo de los GPIOS están declaradas en el archivo arch/mips/include/asm/mach-jz4740/ops.h

  1. ...
  2. #define __gpio_get_pin(n)			\
  3. ({						\
  4. 	unsigned int p, o, v;			\
  5. 	p = (n) / 32;				\
  6. 	o = (n) % 32;				\
  7. 	if (__gpio_get_port(p) & (1 << o))	\
  8. 		v = 1;				\
  9. 	else					\
  10. 		v = 0;				\
  11. 	v;					\
  12. })
  13.  
  14. #define __gpio_get_port(p)	(REG_GPIO_PXPIN(p))
  15.  
  16. #define __gpio_set_pin(n)			\
  17. do {						\
  18. 	unsigned int p, o;			\
  19. 	p = (n) / 32;				\
  20. 	o = (n) % 32;				\
  21. 	REG_GPIO_PXDATS(p) = (1 << o);		\
  22. } while (0)
  23.  
  24. #define __gpio_clear_pin(n)			\
  25. do {						\
  26. 	unsigned int p, o;			\
  27. 	p = (n) / 32;				\
  28. 	o = (n) % 32;				\
  29. 	REG_GPIO_PXDATC(p) = (1 << o);		\
  30. } while (0)
  31. ...
  32. #define __gpio_as_output(n)			\
  33. do {						\
  34. 	unsigned int p, o;			\
  35. 	p = (n) / 32;				\
  36. 	o = (n) % 32;				\
  37. 	__gpio_port_as_output(p, o);		\
  38. } while (0)
  39.  
  40. #define __gpio_as_input(n)			\
  41. do {						\
  42. 	unsigned int p, o;			\
  43. 	p = (n) / 32;				\
  44. 	o = (n) % 32;				\
  45. 	__gpio_port_as_input(p, o);		\
  46. } while (0)
  47.  
  48. #define __gpio_port_as_output(p, o)		\
  49. do {						\
  50.     REG_GPIO_PXFUNC(p) = (1 << (o));		\
  51.     REG_GPIO_PXSELC(p) = (1 << (o));		\
  52.     REG_GPIO_PXDIRS(p) = (1 << (o));		\
  53. } while (0)
  54.  
  55. #define __gpio_port_as_input(p, o)		\
  56. do {						\
  57.     REG_GPIO_PXFUNC(p) = (1 << (o));		\
  58.     REG_GPIO_PXSELC(p) = (1 << (o));		\
  59.     REG_GPIO_PXDIRC(p) = (1 << (o));		\
  60. } while (0)

donde (arch/mips/include/asm/mach-jz4740/regs.h):

  1. ...
  2. #define REG_GPIO_PXDATC(n)	REG32(GPIO_PXDATC((n)))
  3. #define GPIO_PXDATC(n)	       (GPIO_BASE + (0x18 + (n)*0x100)) /* Port Data Clear Register */
  4.  
  5. #define REG_GPIO_PXFUNC(n)	REG32(GPIO_PXFUNC((n)))
  6. #define GPIO_PXFUNC(n)	(GPIO_BASE + (0x48 + (n)*0x100)) /* Function Clear Register */
  7.  
  8. #define REG_GPIO_PXSELC(n)	REG32(GPIO_PXSELC((n)))
  9. #define GPIO_PXSELC(n)	(GPIO_BASE + (0x58 + (n)*0x100)) /* Select Clear Register */
  10.  
  11. #define REG_GPIO_PXDIRC(n)	REG32(GPIO_PXDIRC((n)))
  12. #define GPIO_PXDIRC(n)	(GPIO_BASE + (0x68 + (n)*0x100)) /* Direction Clear Register */
  13.  
  14. #define REG_GPIO_PXDIRS(n)	REG32(GPIO_PXDIRS((n)))
  15. #define GPIO_PXDIRS(n)	(GPIO_BASE + (0x64 + (n)*0x100)) /* Direction Set Register */

De aquí podemos deducir los pasos que deben seguirse para configurar un GPIO como entrada o salida:

1. Definir la función del pin con el registro PXFUN, si PXFUN = 0 el pin puede ser usado como GPIO o como entrada de interrupción, si PXFUN = 1 el pin es configurado para realizar una función alterna si está asociado a un periférico.

2. Definir el registro PXSELX. Cuando PXFUN = 0, si PXSELX = 0 se usa como GPIO, si PXSELX = 1 se usa como fuente de interrupción. Cuando PXFUN = 1, si PXSELX = 0 se asigna la función alterna 0, si PXSELX = 1 se asigna la función alterna1.

3. Definir la dirección del GPIO; escribiendo un 1 en PXDIRS (salida) o en PXDIRC (entrada).

Para definir el estado de un pin de salida, el procesador cuenta con 2 registros uno para que el valor sea un valor lógico alto (PXDATS) y otro para que sea un valor lógico bajo (PXDATC).

Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export