DUAL I2C CONT. for PiPA5756D - apple
2019/08/01 (Thu) 23:36:41
PiPA5756Dを使ってステレオ構成で1つのスピーカーに1つのTAS5756を使って音を出せるようにってできませんか?
TAS5756、データシートの図80にあるMONO構成でPiPA5756DのOUT1をRight、OUT2をLeftに使うような感じです。
PiPA5756Dで鳴らす2ウェイスピーカーを購入予定ですがバイワイヤーの対応のスピーカーが少なく悩み中です。
Re: DUAL I2C CONT. for PiPA5756D - ヒロ
2019/08/02 (Fri) 04:54:52
できるような、わからないような・・・という感じです。
まず、現状のソフトでは
STEREOの場合はOUT1=L、OUT2=R
MONOの場合はOUT1=(L+R)/2、OUT2=(L+R)/2
になっています。それにさらにL,R独立版の
L-chのみの場合はOUT1=L、OUT2=L
R-chのみの場合はOUT1=R、OUT2=R
を加えればいいことになります。
ここまではやり方はわかっています。
わからないのは、例えば
OUT1の出力は(HOT=A+,COLD=A-)
OUT2の出力は(HOT=B+,COLD=B-)
なので、モノあるいはL,R独立出力のときに
HOT=(A+とB+を結線) COLD=(A-とB-を結線)
という使い方ならば現状のままでもいいのですが、マニュアルにあるように
HOT=(A+とA-を結線) COLD=(B+とB-を結線)
という使い方のレジスタの設定方法がわかりません。
PUREPATH STUDIO用のTAS5756のFRAMEWORKがないと解決できないのかな、と思っていますが手元にはPCM5142のFRAMEWORKしかなく、どこを探せばよいやら・・・。
対策として、結線として
HOT=(A+とB+を結線) COLD=(A-とB-を結線)
という使い方をするのなら、対応はできそうです。
がL,R独立版を加えるが実際のところかなり大変で・・・
それとSTEREO、MONO、L、R版に対応させるにはプログラムの容量が不足することが予想されます。
いっそのことSTEREO、MONOは放棄して、TAS5756をLあるいはRのみで使うと割り切ればできそうではありますが。
書いていることわかりますか?
Re: DUAL I2C CONT. for PiPA5756D - ヒロ
2019/08/02 (Fri) 05:01:20
いまプログラムをみてみたら
PICの容量が64kBに対して使用量が57kB。
それにL,R版を追加すると単純に+18kBなので
75kBになって確実に不足しそうです。
もっとも、重複するデータがほとんどなので
解析すれば、圧縮できるはずですが・・・・
「・・・」が多いですね(笑。
Re: DUAL I2C CONT. for PiPA5756D - apple
2019/08/03 (Sat) 17:11:43
以前、自分でプログラム組んでできないかなーって思って藤原さんの「PiPA○○○は実現するか?の巻き! 2017.10.25」を読んでPlainAMPのプログラムを読み漁ってたんですけどその時は、以下のあたりが使えるんじゃないかなって考えてました。
https://github.com/PolyVection/PlainAMP/blob/master/plainamp.c
299行目からの
/** @brief Only LEFT
*
* Only use the left channel of the incomming signal
*
*/
void doL(int fd, int adr){
ioctl(fd, I2C_SLAVE_FORCE, adr);
transmit_registers(setL, sizeof(setL)/sizeof(setL[0]),fd);
printf("\n---------------------------------------------------------------\n");
printf("PlainAMP at 0x%02x is LEFT channel!\n",adr);
printf("---------------------------------------------------------------\n\n");
}
/** @brief Only RIGHT
*
* Only use the right channel of the incomming signal
*
*/
void doR(int fd, int adr){
ioctl(fd, I2C_SLAVE_FORCE, adr);
transmit_registers(setR, sizeof(setR)/sizeof(setR[0]),fd);
printf("\n---------------------------------------------------------------\n");
printf("PlainAMP at 0x%02x is RIGHT channel!\n",adr);
printf("---------------------------------------------------------------\n\n");
}
setLやsetRは
https://github.com/PolyVection/PlainAMP/blob/master/plainamp.h
62行目からの
cfg_reg setL[] = {
{ 0x00, 0x44 }, // SELECT PAGE 68 (CRAM B)
{ 0x5c, 0x7f }, // COEFF 201 (23:16)
{ 0x5d, 0xff }, // COEFF 201 (15:8)
{ 0x5e, 0xff }, // COEFF 201 (7:0)
{ 0x60, 0x00 }, // COEFF 202 (23:16)
{ 0x61, 0x00 }, // COEFF 202 (15:8)
{ 0x62, 0x00 }, // COEFF 202 (7:0)
{ 0x70, 0x7f }, // COEFF 206 (23:16)
{ 0x71, 0xff }, // COEFF 206 (15:8)
{ 0x72, 0xff }, // COEFF 206 (7:0)
{ 0x74, 0x00 }, // COEFF 207 (23:16)
{ 0x75, 0x00 }, // COEFF 207 (15:8)
{ 0x76, 0x00 }, // COEFF 207 (7:0)
{ 0x00, 0x2c }, // SELECT PAGE 44
{ 0x01, 0x05 }, // REQUEST CRAM SWITCH
};
cfg_reg setR[] = {
{ 0x00, 0x44 }, // SELECT PAGE 68 (CRAM B)
{ 0x5c, 0x00 }, // COEFF 201 (23:16)
{ 0x5d, 0x00 }, // COEFF 201 (15:8)
{ 0x5e, 0x00 }, // COEFF 201 (7:0)
{ 0x60, 0x7f }, // COEFF 202 (23:16)
{ 0x61, 0xff }, // COEFF 202 (15:8)
{ 0x62, 0xff }, // COEFF 202 (7:0)
{ 0x70, 0x00 }, // COEFF 206 (23:16)
{ 0x71, 0x00 }, // COEFF 206 (15:8)
{ 0x72, 0x00 }, // COEFF 206 (7:0)
{ 0x74, 0x7f }, // COEFF 207 (23:16)
{ 0x75, 0xff }, // COEFF 207 (15:8)
{ 0x76, 0xff }, // COEFF 207 (7:0)
{ 0x00, 0x2c }, // SELECT PAGE 44
{ 0x01, 0x05 }, // REQUEST CRAM SWITCH
};
Re: DUAL I2C CONT. for PiPA5756D - ヒロ
2019/08/03 (Sat) 18:52:31
私もそのページはよく読んだ覚えがありますが、
すっかり忘れていました。
一度試してみたいですね。
それにしても、暑いです~。
Re: DUAL I2C CONT. for PiPA5756D - ヒロ
2019/08/05 (Mon) 02:32:22
うまくいかないですね~。
上記のsetL,setRは係数を片寄せしているのは
わかるのですが、フィルタをつかったルーチンが
そこをつかっていない感じです。マニュアルに
情報がないのでなんともいえませんが・・・。