捣鼓TEA5767可能好多朋友说一个买收音机也就几块钱,何必花这么大精力鼓捣这个烂玩意,如果真有这个想法的朋友请打住,不要在往下面看了。之前也一直认为TEA5767较差,实际中发觉选择大厂的模块出来的音频经放大器推动后还是很有震撼力,大大超出我的预期。不过前提是使用好模块,而不是现在满淘宝卖的那种5-7块左右的那种简装版咯。TEA5767主要出来的音频没音量控制,也不够推动耳机。我就外加电子音量调节芯片、小功率放大、调节显示等。我电子音量选用M62429显示选用了一种非常小尺寸的MINI1602另外使用了手机上那种5向导航键、加了单键开关机电路,小功率放大选用2块TDA2822(3-6V)就是TDA2822这次把我害惨了,PCB出来后所有正常,就是推动2个2W的小喇叭会有那种噗噗声,晕死。线路输出则很好,在网上一查,发觉很多朋友都有这个问题,现在这个玩意买不到贴片封装的原装进口的,而国产的做BTL方式放大时,由于内部2个放大器的参数国产工艺存在差异较大造成,而做普通双声道放大则不存在这个问题。唉~~国货呀,你什么时候才能让人放心!发誓以后再一不会选择使用TDA2822这个垃圾了(需要的朋友我可以送现在看着就恼火)1、电路图2、PCB图和尺寸3、PCB实物4、之前调试的电路还是一贯做法,洞洞板加飞线,不要吓着啦~5、焊接后的样子因为彻底对TDA2822失望,所以板子上2个TDA2822放大部分就不考虑安装了,下图中是安了其中一只TDA2822的6、几个主要的元件A、mini1602显示屏,非常小,这个玩意也少B、TEA5767这个玩意版本很多,质量也参差不起,用过3种,这种不错,不是那种简版,当然价格也高了~C、M62429立体声电子音量芯片D、按键电源按键选用4×4×3小巧高质量按键功能键使用手机上那种小巧的5向摇杆键E、带通滤波器(BPF)76-108MF、钽电容G、mini1602贴片插座7、工作。。使用30多厘米的漆包线绕着圈,加长效果更好8、功能设计、思路那个信号强度指示,占用4个字符,其中天线杆符号单独占一个,电平8级指示通过3个字符分割组成,看图应该明白的9、成本做了50块PCB,制版打样费摊到6元左右/块PCB去掉2个TDA2822部分及相关不需要的后实际使用的元件元件值以下面为准特别注意:组装时R2电阻0欧姆一定要焊上10、参考程序和烧写文件烧写文件:该文件只允许会员下载登录|注册新用户内部震荡8M部分参考程序:Tea5767.c#includeTea5767.h#includeTwiLib.h//初始化TEA5767voidTEA5767_Init(ulongFreq,ucharMono){//初始化TWI_Init();TEA5767_Adjust(Freq,Mono,TRUE);}//调整频率、声道voidTEA5767_Adjust(ulongFreq,ucharMono,ucharMuteControl){uchardata[5]={0};ulongpll=TEA5767_GetPLLFromFreq(Freq);data[0]=(uchar)(pll/256);data[1]=(uchar)(pll%256);data[2]=(Mono!=0)?0x09:0x01;data[3]=0x92;if(MuteControl){data[0]|=0x80;TWI_MasterSendBytes(TEA5767_TWI_ADDR,5,data);data[0]&=0x7f;DelayMs(500);}TWI_MasterSendBytes(TEA5767_TWI_ADDR,5,data);}//信号强度ucharTEA5767_GetLevel(){uchardata[5]={0};TWI_MasterRecvBytes(TEA5767_TWI_ADDR,5,data);return(data[3]4);}//由频率计算PLL(频率单位为KHZ)ulongTEA5767_GetPLLFromFreq(ulongFreq){ulongpll=(ulong)(((Freq-225)*4000)/32768);returnpll;}//由PLL计算频率(频率单位为KHZ)ulongTEA5767_GetFreqFromPLL(ulongPll){ulongFreq=(ulong)(((float)Pll)*((float)8.192)+225);returnFreq;}Tea5767.h#ifndef__TEA5767__H__INCLUDED__#define__TEA5767__H__INCLUDED__#includecommon.h//TEA5767的TWI地址#defineTEA5767_TWI_ADDR0xC0//TEA5767基地址//初始化TEA5767(频率单位为KHZ)voidTEA5767_Init(ulongFreq,ucharMono);//调整频率、声道voidTEA5767_Adjust(ulongFreq,ucharMono,ucharMuteControl);//信号强度ucharTEA5767_GetLevel();//由频率计算PLL(频率单位为KHZ)ulongTEA5767_GetPLLFromFreq(ulongFreq);//由PLL计算频率(频率单位为KHZ)ulongTEA5767_GetFreqFromPLL(ulongPll);#endif//__TEA5767__H__INCLUDED__FM62429.c#includeFM62429.h//初始化函数voidFM62429_Init(ucharVolume){FM62429_PORT_INIT();FM62429_AdjustVolume(Volume);}//调整音量(0~84)voidFM62429_AdjustVolume(ucharVolume){uchari=0;ushortVolData=0;if(Volume0){Volume=Volume+3;VolData=(ushort)(Volume&0x7C);VolData|=(ushort)((Volume&0x03)7);}//D9、D10均为1VolData|=0x600;FM62429_SDA_L();FM62429_SCL_L();for(i=0;i10;i++){if(VolData&0x01)FM62429_SDA_H();elseFM62429_SDA_L();FM62429_SCL_H();FM62429_SDA_L();FM62429_SCL_L();VolData=1;}FM62429_SDA_H();FM62429_SCL_H();NOP();FM62429_SCL_L();}FM62429.h#ifndef__FM62429_H_INCLUDED__#define__FM62429_H_INCLUDED__#includeCommon.h//端口定义#defineFM62429_SDA_H()SET_BIT(PORTB,PB2)#defineFM62429_SDA_L()CLR_BIT(PORTB,PB2)#defineFM62429_SCL_H()SET_BIT(PORTB,PB5)#defineFM62429_SCL_L()CLR_BIT(PORTB,PB5)#defineFM62429_PORT_INIT()SET_BIT(DDRB,DDB2);SET_BIT(DDRB,DDB5)//初始化函数voidFM62429_Init(ucharVolume);//调整音量(0-83)voidFM62429_AdjustVolume(ucharVolume);#endif//__FM62429_H_INCLUDED__main.c#include#includecommon.h#includeLCD1602.h#includeTWILib.h#includeTea5767.h#includeFM62429.h#defineOPER_MODE_RADIO0//正常收音机模式#defineOPER_MODE_SET1//设置模式//正确保存标志#defineSAVE_MASK0x4B//'K'//设置模式#defineSET_MODE_SEARCH1//搜索#defineSET_MODE_SOUNDMODE2//立体声、单声道模式选中#defineSET_MODE_MIN1#defineSET_MODE_MAX2//声音模式#defineSOUND_MODE_STEREO1#defineSOUND_MODE_MONO2#defineSOUND_MODE_MIN1#defineSOUND_MODE_MAX2//音量#defineVOLUME_MAX84#defineVOLUME_MIN0#defineCHANNEL_NUM10#defineCHANNEL_MIN1#defineCHANNEL_MAXCHANNEL_NUM//搜索模式#defineSTATE_SEARCH1#defineSTATE_STORE2//最小频率#defineFREQ_MIN((ulong)87500)#defineFREQ_MAX((ulong)120000)//全局变量ucharOperMode=OPER_MODE_RADIO;//操作模式ucharSetMode=SET_MODE_MIN;//搜索频道ucharSoundMode=SOUND_MODE_MIN;//声音模式BOOLDoingMenu=FALSE;//是否处于选择菜单方式ushortBlinkCounter=0;//控制闪烁ucharVolume=42;//音量ulongChannelFreq=96600;//频道频率(单位为KHZ)ulongChannelSearch=FREQ_MIN;//搜索起始频率ucharChannelIndex=0;//当前播放的频道编号(1-10)ucharChannelSaveIndex=CHANNEL_MIN;ucharChannelState=STATE_SEARCH;//开关健(PD7)#definePOWER_ON()#definePOWER_OFF()SET_BIT(DDRD,DDD7);CLR_BIT(PORTD,PD7);//闪烁控制变量的最大值#defineBLINK_COUNTER_MAX10//是否闪烁#defineIS_BLINK()(BlinkCounterBLINK_COUNTER_MAX/2)//======================================================================================================//预先保持的10个频道//======================================================================================================ulongEEMEMChannelConfig[CHANNEL_NUM+1]={0};ulongChannelArray[CHANNEL_NUM+1]={0};//读取预先保持的频道voidReadChannelConfig(){ulongdata=0;ucharmask=0,i=0;//等待EEPROM空闲eeprom_busy_wait();//写入数据eeprom_read_block(ChannelArray,ChannelConfig,4*(1+CHANNEL_NUM));//解析第一个字节,构造第一个字节,从地位到高位分别是:ChannelIndex,Volume,SoundMode,SAVEMASKdata=ChannelArray[0];ChannelIn