![]() |
發布時間: 2023-7-18 17:08
正文摘要:I2C通訊下的IC地址是0x88(最后一位寫)因為pcb正反面畫錯,導致焊接時掰引腳,正面在下。驅動程序應該是沒錯的,因為檢查設備時可以收到“無設備”的應答也就是1,所以I2C是可以使用的。現在找不到這個IC,可能是焊 ... |
PT2314?也就是個音量控制,線路不復雜,不要焊在板子上,先建議焊電源線和兩個通訊線 送八位命令看看它有沒有ACK。 |
給個早期的C51的代碼你參考,PT2314電源最好用8V,PT2314E可以用5V電源,二者均不支持3V3,上拉電阻拉到PT2314供電上 #include"..\source\audio.h" //全局變量定義 unsigned char g_Audio_Volume; unsigned char g_Audio_Treble; unsigned char g_Audio_Bass; unsigned char g_Audio_Balance; unsigned char g_Audio_Channel; unsigned char code Volume_Buf[] = { 0, 2, 4, 6, 8,10,12,14,16,18, 19,20,21,22,23,24,25,26,27,28, 29,31,33,35,37,39,41,43,45,47, 48,49,50,51,52,53,53 }; /********************************************************************************************* Function: 此函數把一個字節數據輸入到I2C總線上,并確認傳輸有效 *********************************************************************************************/ bit PT2314_Write_Byte(unsigned char byte) { unsigned char temp = 0x00; bit Acknowledge = 0; for(temp=0;temp<8;temp++) { PT2314_SCL = 0; NOP; NOP; NOP; NOP; if(byte & 0x80) PT2314_SDA = 1; else PT2314_SDA = 0; NOP; NOP; NOP; NOP; PT2314_SCL = 1; byte =byte << 1; } PT2314_SCL = 0; PT2314_SDA = 1; NOP; NOP; PT2314_SCL = 1; NOP; NOP; while(!PT2314_SCL); if(PT2314_SDA) Acknowledge = 1; PT2314_SCL = 0; NOP; NOP; return(Acknowledge); //Acknowledge = 1數據寫入失敗 } //本函數進行命令寫入,進行設置命令傳輸。 void PT2314_Write(unsigned char temp1,unsigned char temp2) { unsigned char j = 5; PT2314_SCL = 1; //輸入設置 NOP; NOP; PT2314_SDA = 1; NOP; NOP; while(!PT2314_SCL); PT2314_SDA = 0; NOP; NOP; PT2314_SCL = 0; //I2C啟動 PT2314_Write_Byte(0x88); while(PT2314_Write_Byte(temp1 + temp2)&&(j--)); //寫入失敗反復寫5次 NOP; NOP; PT2314_SDA = 0; NOP; NOP; PT2314_SCL = 1; NOP; NOP; while(!PT2314_SCL); //I2C結束 PT2314_SDA = 1; } //本函數設置輸入音頻通道 void Set_PT2314_CHL(unsigned char temp_ch) { unsigned char temp; if(b_PT2314_Lound) { temp = temp_ch | 0x08; } else { temp = temp_ch |0x0c; } PT2314_Write(0x50,temp); } //本函數設置音量衰減,音量增大為衰減量減小 void Set_PT2314_VOL(unsigned char vol) { if(b_PT2314_Mute || (vol == 0)) { PT2314_Write(0x00,0x3f); } else { PT2314_Write(0x00,(63 - Volume_Buf[vol])); } } /*********************************/ #if 0 void Set_PT2314_FL(unsigned char fl) { PT2314_Write(0xc0,(0x1f - fl)); } void Set_PT2314_FR(unsigned char fr) { PT2314_Write(0xe0,(0x1f - fr)); } #endif /**********************************/ //下列函數設置高低音調 void Set_PT2314_TRE(unsigned char tre) { if(tre <= 7) { PT2314_Write(0x70,tre); } else { PT2314_Write(0x70,(23 - tre)); } } void Set_PT2314_BAS(unsigned char bas) { if(bas <= 7) { PT2314_Write(0x60,bas); } else { PT2314_Write(0x60,(23 - bas)); } } //此函數設置平衡 void Set_PT2314_BAL(unsigned char bal) { if (bal > 7) { PT2314_Write( 0xe0,(2 * (bal - 7)) ); //right PT2314_Write( 0xc0,0x00 ); } else if (bal < 7) { PT2314_Write( 0xc0,(2 * (7 - bal)) ); //left PT2314_Write( 0xe0,0x00 ); } PT2314_Write(0xe0,0x00); //聲場平衡恢復居中設置 PT2314_Write(0xc0,0x00); } /**************************************************************/ void Audio_Set_ALL(void) //音效設置 { Set_PT2314_CHL(g_Audio_Channel); Set_PT2314_TRE(g_Audio_Treble); Set_PT2314_BAS(g_Audio_Bass); Set_PT2314_BAL(g_Audio_Balance); Set_PT2314_VOL(g_Audio_Volume); } /**************************************************************/ void Audio_Channel_SELECT(void) //通道選擇 { g_Audio_Channel++; if(g_Audio_Channel >= 4) { g_Audio_Channel = 0; } if(g_Audio_Channel == DVD_MODE) { DVD_POWER = 1; } else { DVD_POWER = 0; } if(g_Audio_Channel == TUNER_MODE) { b_tuner_flag = 1; } else { b_tuner_flag = 0; } Set_PT2314_CHL(g_Audio_Channel); } /**************************************************************/ void Audio_Volume_UP(void) //主音量調節 { if(g_Audio_Volume < 36) { g_Audio_Volume++; } Set_PT2314_VOL(g_Audio_Volume); } void Audio_Volume_DW(void) { if(0 < g_Audio_Volume) { g_Audio_Volume--; } Set_PT2314_VOL(g_Audio_Volume); } /**************************************************************/ void Audio_Treble_UP(void) //高音調節 { if(g_Audio_Treble < 14) { g_Audio_Treble++; } Set_PT2314_TRE(g_Audio_Treble); } void Audio_Treble_DW(void) { if(0 < g_Audio_Treble) { g_Audio_Treble--; } Set_PT2314_TRE(g_Audio_Treble); } /**************************************************************/ void Audio_Bass_UP(void) //低音調節 { if(g_Audio_Bass < 14) { g_Audio_Bass++; } Set_PT2314_BAS(g_Audio_Bass); } void Audio_Bass_DW(void) { if(0 < g_Audio_Bass) { g_Audio_Bass--; } Set_PT2314_BAS(g_Audio_Bass); } /**************************************************************/ /* void Audio_Balance_RIGHT(void) //平衡調節 { if(g_Audio_Balance < 14) { g_Audio_Balance++; } Set_PT2314_BAL(g_Audio_Balance); } void Audio_Balance_LEFT(void) { if(0 < g_Audio_Balance) { g_Audio_Balance--; } Set_PT2314_BAL(g_Audio_Balance); }*/ /**************************************************************/ /*void Audio_Lound_SWITCH(void) //等響開關 { b_PT2314_Lound = ~b_PT2314_Lound; Set_PT2314_CHL(g_Audio_Channel); } /**************************************************************/ void Audio_MUTE(void) //靜音 { AMP_MUTE = ~AMP_MUTE; b_PT2314_Mute = ~b_PT2314_Mute; Set_PT2314_VOL(g_Audio_Volume); } /**************************************************************/ void Audio_Init(void) //音效初始化 { g_Audio_Volume = DEFAULT_VOL; g_Audio_Treble = DEFAULT_TRE; g_Audio_Bass = DEFAULT_BAS; g_Audio_Balance = DEFAULT_BAL; g_Audio_Channel = DVD_MODE; Audio_Set_ALL(); } #ifndef _AUDIO_H_ #define _AUDIO_H_ #include "public.h" #include "configure.h" //////////////////////////////////////////////////////////////////////////////// //常量定義 #define DEFAULT_BAL 7 #define DEFAULT_TRE 7 #define DEFAULT_BAS 7 #define DEFAULT_VOL 12 #define DVD_MODE 3 #define AUX_MODE 2 #define PC_MODE 1 #define TUNER_MODE 0 //全局函數申明 extern void Audio_Set_ALL(void); extern void Audio_Channel_SELECT(void); extern void Audio_Volume_UP(void); extern void Audio_Volume_DW(void); extern void Audio_Treble_UP(void); extern void Audio_Treble_DW(void); extern void Audio_Bass_UP(void); extern void Audio_Bass_DW(void); extern void Audio_MUTE(void); extern void Audio_Init(void); #endif |
解決方案: 1、查硬件線路,供電及各點電位正常。 2、再仔細閱讀芯片手冊。是否按手冊要求做了。 |
如果驅動程序沒錯,那肯定先檢查焊接是否正確。 |
嘗試用個 IIC地址掃描程序 看看會不會掃描出其他地址 萬一芯片是非正品呢 |