Autor Tema: TDA7317 e I2C  (Leído 2549 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ingeniero18

  • PIC10
  • *
  • Mensajes: 20
TDA7317 e I2C
« en: 04 de Septiembre de 2015, 00:59:22 »
Cómo andan? Me encuentro incursionando con la transmición serie I2C y voy a hacer mi primer programa para programar un TDA7317 que consiste en un ecualizador gráfico digital el cual es programado con este protocolo.
Programo con CCS y voy a usar un PIC18f452.
Estuve leyendo en qué consiste el protocolo y sus funciones para este compilador y lo entendí muy bien, el tema es que, como es mi primera vez, no puedo interpretar bien el datasheet del TDA7317, el cual considero muy completo respecto de otros datasheets de integrados que también requieren de programaciones similares.
El tema principal es que no entiendo cómo debo enviar los datos de programación: todo junto, por separado, haciendo start y stop el I2C en cada byte enviado, etc.

Adjunto el datasheet del integrado y si quieren chequear principalmente las páginas 6, 7 y 8 me sería de gran ayuda.
Muchas gracias!!!

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re: TDA7317 e I2C
« Respuesta #1 en: 04 de Septiembre de 2015, 15:47:49 »
Que tal ingeniero18,

Leyendo el datasheet del TDA7317 el frame consiste de:
Un bit de inicio (S)
Un byte de direccion (84h u 86h) 84h si el pin de ADDR lo conectas a GND
Despues es el bit de reconocimiento es es enviado por el TDA7317
Un byte para el volumen. El cual está divido en dos partes. Los bits A0 al A2 son para pasos finos de 0.375dB y los bits B0 al B2 son para pasos de 3dB
Una vez que evias el byte anterior el TDA te enviara un ACK bit de reconocimiento)
Entonces envias el siguiente byte el cual controla el ecualizador. Como te podras dar cuenta los bits D3 al D1 son para seleccionar la banda (1 al 5) y el bit D0 es para seleccionar corte o aumento y final,mente los bits C2 al C0 son los decibeles para dicha banda.
Despues el TDA envia un ACK y finalmente le envias un un bit de paro.

Ahora bien tu puedes tienes varias combinaciones dependiendo lo que necesites:

1)Enviar solamente el control del Volumen. Entonces el frame sería de la siguiente manera:
 S+TDA ADDRESS+ACK+Byte de Volumen+ACK+P
 Ejemplo: Colocar el volumen en -3.375 dB
 S+84h+ACK+00001001+ACK+P

2)Enviar control de ecualizador a una o varias bandas.
 a) Una banda: S+TDA ADDRESS+ACK+Byte del ecualizador+ACK+S
     Ejemplo. Colocar la banda 1 en 4dB de corte:
     S+84h+ACK+10001010+ACK+P
 b) Dos o mas bandas: S+TDA ADDRESS+ACK+Byte1 del ecualizador+ACK+Byte2 del ecualizador+ACK+Byte3 del ecualizador+ACK....P
     Ejemplo . Colocar la banda 2 y 4 en 0 y 10 dB de aumento (boost) respecivamente.
     S+84h+ACK+10010000+ACK+10110101+ACK+P
      Como te puedes dar cuenta puedes enviar un solo byte de control o varios, la clave esta en esperar el ACK del TDA para enviar el siguiente Byte y para terminar la comunicacion envias el bit de paro.

Basado en lo anterior puedes enviar bytes combinados de la forma como lo requieras. Espero haber sido lo suficientemente claro.

Saludos.

Elreypic.
     

Desconectado ingeniero18

  • PIC10
  • *
  • Mensajes: 20
Re: TDA7317 e I2C
« Respuesta #2 en: 04 de Septiembre de 2015, 18:23:00 »
Que tal ingeniero18,

Leyendo el datasheet del TDA7317 el frame consiste de:
Un bit de inicio (S)
Un byte de direccion (84h u 86h) 84h si el pin de ADDR lo conectas a GND
Despues es el bit de reconocimiento es es enviado por el TDA7317
Un byte para el volumen. El cual está divido en dos partes. Los bits A0 al A2 son para pasos finos de 0.375dB y los bits B0 al B2 son para pasos de 3dB
Una vez que evias el byte anterior el TDA te enviara un ACK bit de reconocimiento)
Entonces envias el siguiente byte el cual controla el ecualizador. Como te podras dar cuenta los bits D3 al D1 son para seleccionar la banda (1 al 5) y el bit D0 es para seleccionar corte o aumento y final,mente los bits C2 al C0 mi son los decibeles para dicha banda.
Despues el TDA envia un ACK y finalmente le envias un un bit de paro.

Ahora bien tu puedes tienes varias combinaciones dependiendo lo que necesites:

1)Enviar solamente el control del Volumen. Entonces el frame sería de la siguiente manera:
 S+TDA ADDRESS+ACK+Byte de Volumen+ACK+P
 Ejemplo: Colocar el volumen en -3.375 dB
 S+84h+ACK+00001001+ACK+P

2)Enviar control de ecualizador a una o varias bandas.
 a) Una banda: S+TDA ADDRESS+ACK+Byte del ecualizador+ACK+S
     Ejemplo. Colocar la banda 1 en 4dB de corte:
     S+84h+ACK+10001010+ACK+P
 b) Dos o mas bandas: S+TDA ADDRESS+ACK+Byte1 del ecualizador+ACK+Byte2 del ecualizador+ACK+Byte3 del ecualizador+ACK....P
     Ejemplo . Colocar la banda 2 y 4 en 0 y 10 dB de aumento (boost) respecivamente.
     S+84h+ACK+10010000+ACK+10110101+ACK+P
      Como te puedes dar cuenta puedes enviar un solo byte de control o varios, la clave esta en esperar el ACK del TDA para enviar el siguiente Byte y para terminar la comunicacion envias el bit de paro.

Basado en lo anterior puedes enviar bytes combinados de la forma como lo requieras. Espero haber sido lo suficientemente claro.

Saludos.

Elreypic.
     

Reypic... Te pasaste!!! Es la mejor respuesta q m han dado en años dentro de un foro.
Pruebo y t cuento.
Muchas gracias!!!

Desconectado ingeniero18

  • PIC10
  • *
  • Mensajes: 20
Re: TDA7317 e I2C
« Respuesta #3 en: 07 de Septiembre de 2015, 21:03:45 »
Que tal ingeniero18,

Leyendo el datasheet del TDA7317 el frame consiste de:
Un bit de inicio (S)
Un byte de direccion (84h u 86h) 84h si el pin de ADDR lo conectas a GND
Despues es el bit de reconocimiento es es enviado por el TDA7317
Un byte para el volumen. El cual está divido en dos partes. Los bits A0 al A2 son para pasos finos de 0.375dB y los bits B0 al B2 son para pasos de 3dB
Una vez que evias el byte anterior el TDA te enviara un ACK bit de reconocimiento)
Entonces envias el siguiente byte el cual controla el ecualizador. Como te podras dar cuenta los bits D3 al D1 son para seleccionar la banda (1 al 5) y el bit D0 es para seleccionar corte o aumento y final,mente los bits C2 al C0 son los decibeles para dicha banda.
Despues el TDA envia un ACK y finalmente le envias un un bit de paro.

Ahora bien tu puedes tienes varias combinaciones dependiendo lo que necesites:

1)Enviar solamente el control del Volumen. Entonces el frame sería de la siguiente manera:
 S+TDA ADDRESS+ACK+Byte de Volumen+ACK+P
 Ejemplo: Colocar el volumen en -3.375 dB
 S+84h+ACK+00001001+ACK+P

2)Enviar control de ecualizador a una o varias bandas.
 a) Una banda: S+TDA ADDRESS+ACK+Byte del ecualizador+ACK+S
     Ejemplo. Colocar la banda 1 en 4dB de corte:
     S+84h+ACK+10001010+ACK+P
 b) Dos o mas bandas: S+TDA ADDRESS+ACK+Byte1 del ecualizador+ACK+Byte2 del ecualizador+ACK+Byte3 del ecualizador+ACK....P
     Ejemplo . Colocar la banda 2 y 4 en 0 y 10 dB de aumento (boost) respecivamente.
     S+84h+ACK+10010000+ACK+10110101+ACK+P
      Como te puedes dar cuenta puedes enviar un solo byte de control o varios, la clave esta en esperar el ACK del TDA para enviar el siguiente Byte y para terminar la comunicacion envias el bit de paro.

Basado en lo anterior puedes enviar bytes combinados de la forma como lo requieras. Espero haber sido lo suficientemente claro.

Saludos.

Elreypic.
     

Reypic... retomando con el tema, paso a consultarte: tomando como ejemplo lo siguiente que me escribiste...
a) Una banda: S+TDA ADDRESS+ACK+Byte del ecualizador+ACK+P
 
Mi dudas son las siguientes:
1) S, que sería el bit de inicio, ¿lo genera el micro cuando escribo i2c_start()?
2) El ACK ¿el micro lo manda automáticamente luego de haber terminado de enviar cada byte o debo hacer un i2c_stop()?
3) S, que sería el bit de parada, ¿lo genera el micro cuando escribo i2c_stop()?

Gracias!!!!
« Última modificación: 07 de Septiembre de 2015, 21:10:03 por ingeniero18 »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re: TDA7317 e I2C
« Respuesta #4 en: 08 de Septiembre de 2015, 11:35:07 »

Reypic... retomando con el tema, paso a consultarte: tomando como ejemplo lo siguiente que me escribiste...
a) Una banda: S+TDA ADDRESS+ACK+Byte del ecualizador+ACK+P
 
Mi dudas son las siguientes:
1) S, que sería el bit de inicio, ¿lo genera el micro cuando escribo i2c_start() La respuesta es sí?
2) El ACK ¿el micro lo manda automáticamente luego de haber terminado de enviar cada byte o debo hacer un i2c_stop()?
    Según el manual de CCS la función i2c_write() genera el ACK y te regresa el valor del ACK, el cual si es 0 significa ACK recibido, si el valor devuelto es 1 significa NO ACK. No debes hacer i2c_stop entre cada dato solo es uno al final de todo el frame tal como lo explique.
3) P, que sería el bit de parada, ¿lo genera el micro cuando escribo i2c_stop() ?

Gracias!!!!

[/quote]

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2059
Re: TDA7317 e I2C
« Respuesta #5 en: 08 de Septiembre de 2015, 12:30:47 »
Si estas operando con el bus I2C el ack lo manda el esclavo, en tu caso lo manda el TDA, para confirmar que recibio bien la informacion, el bit de stop (P) lo genera el master,  para decirle al esclavo que el master no va a enviar mas datos; por lo general antes de enviar el bit de parada el master envia un Nack y luego el bit de parada (P). para finalizar la transmision.

Saludos

Desconectado ingeniero18

  • PIC10
  • *
  • Mensajes: 20
Re: TDA7317 e I2C
« Respuesta #6 en: 10 de Septiembre de 2015, 01:41:55 »
Gente!!! Ya hice mi programita y lo probé en el proteus con resultados favorables!!! 
Mi siguiente pregunta: para ustedes, se podrá probar el integrado con sólo poner la circuiteria de una banda o será necesario armar todas a fin de obtener un resultado en su salida???

Desconectado ingeniero18

  • PIC10
  • *
  • Mensajes: 20
Re: TDA7317 e I2C
« Respuesta #7 en: 11 de Septiembre de 2015, 01:41:54 »
Gente!!! Les comento que el integrado anda de diez... programé el micro como me lo fueron indicando y sin ningún inconveniente logré hacerlo funcionar.

A tener en cuenta dos cosas para el que le interese: según el datasheet, el volumen está casi a cero al iniciar el TDA7317, por lo que al menos la primera vez hay que darle ganancia a este bloque, y si se quiere ensayar una sola banda, las demás deben estar cortocircuitadas para que no influyan en la salida.

Muchas gracias por todo!!!!

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re: TDA7317 e I2C
« Respuesta #8 en: 11 de Septiembre de 2015, 10:37:46 »
Excelentes noticias ingeniero18. Felicidades por el logro.

Elreypic.

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re:TDA7317 e I2C
« Respuesta #9 en: 20 de Enero de 2016, 11:29:35 »
Gente!!! Les comento que el integrado anda de diez... programé el micro como me lo fueron indicando y sin ningún inconveniente logré hacerlo funcionar.

A tener en cuenta dos cosas para el que le interese: según el datasheet, el volumen está casi a cero al iniciar el TDA7317, por lo que al menos la primera vez hay que darle ganancia a este bloque, y si se quiere ensayar una sola banda, las demás deben estar cortocircuitadas para que no influyan en la salida.

Muchas gracias por todo!!!!

Podrias pasar el codigo y el circuito por favor.
« Última modificación: 20 de Enero de 2016, 11:57:32 por marcoscab1166 »


 

anything