捣鼓TEA5767收音机_第1页
捣鼓TEA5767收音机_第2页
捣鼓TEA5767收音机_第3页
捣鼓TEA5767收音机_第4页
捣鼓TEA5767收音机_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、捣鼓TEA5767可能好多朋友说一个买收音机也就几块钱,何必花这么大精力鼓捣这个烂玩意,如果真有这个想法的朋友请打住,不要在往下面看了。之前也一直认为TEA5767较差,实际中发觉选择大厂的模块出来的音频经放大器推动后还是很有震撼力,大大超出我的预期。不过前提是使用好模块,而不是现在满淘宝卖的那种57块左右的那种简装版咯。TEA5767主要出来的音频没音量控制,也不够推动耳机。我就外加电子音量调节芯片、小功率放大、调节显示等。我电子音量选用M62429 显示选用了一种非常小尺寸的MINI1602 另外使用了手机上那种5向导航键、加了单键开关机电路,小功率放大选用2块TDA2822(3-6V)

2、就是TDA2822这次把我害惨了,PCB出来后所有正常,就是推动2个2W的小喇叭会有那种噗噗声,晕死。线路输出则很好,在网上一查,发觉很多朋友都有这个问题,现在这个玩意买不到贴片封装的原装进口的,而国产的做BTL方式放大时,由于内部2个放大器的参数国产工艺存在差异较大造成,而做普通双声道放大则不存在这个问题。唉 国货呀,你什么时候才能让人放心!发誓以后再一不会选择使用TDA2822这个垃圾了(需要的朋友 我可以送 现在看着就恼火)1、电路图2、PCB图和尺寸3、PCB实物4、之前调试的电路 还是一贯做法,洞洞板加飞线,不要吓着啦5、焊接后的样子因为彻底对TDA2822失望,所以板子上2个TDA

3、2822放大部分就不考虑安装了,下图中是安了其中一只TDA2822的6、几个主要的元件A、mini1602显示屏,非常小,这个玩意也少B、TEA5767这个玩意版本很多,质量也参差不起,用过3种,这种不错,不是那种简版,当然价格也高了C、M62429 立体声电子音量芯片D、按键电源按键选用443小巧高质量按键功能键使用手机上那种小巧的5向摇杆键E、带通滤波器(BPF)76108MF、钽电容G、mini1602贴片插座7、工作。使用30多厘米的漆包线绕着圈,加长效果更好8、功能设计、思路那个信号强度指示,占用4个字符,其中天线杆符号单独占一个,电平8级指示通过3个字符分割组成,看图应该明白的9、

4、成本做了50块PCB,制版打样费摊到6元左右/块PCB去掉2个TDA2822部分及相关不需要的后实际使用的元件 元件值以下面为准特别注意:组装时 R2电阻0欧姆一定要焊上10、参考程序和烧写文件烧写文件: 该文件只允许会员下载登录 | 注册新用户内部震荡 8M部分参考程序:Tea5767.c#include Tea5767.h#include TwiLib.h/ 初始化TEA5767void TEA5767_Init(ulong Freq,uchar Mono)/ 初始化TWI_Init();TEA5767_Adjust(Freq,Mono,TRUE); / 调整频率、声道void TEA57

5、67_Adjust(ulong Freq,uchar Mono,uchar MuteControl)uchar data5 = 0 ;ulong pll = TEA5767_GetPLLFromFreq(Freq);data0 = (uchar)(pll/256); data1 = (uchar)(pll%256);data2 = (Mono!=0)?0x09:0x01;data3 = 0x92;if( MuteControl )data0 |= 0x80;TWI_MasterSendBytes(TEA5767_TWI_ADDR,5,data);data0 &= 0x7f;DelayMs(50

6、0);TWI_MasterSendBytes(TEA5767_TWI_ADDR,5,data); / 信号强度uchar TEA5767_GetLevel()uchar data5 = 0 ;TWI_MasterRecvBytes(TEA5767_TWI_ADDR,5,data);return (data34);/ 由频率计算PLL(频率单位为KHZ)ulong TEA5767_GetPLLFromFreq(ulong Freq)ulong pll = (ulong)(Freq-225)*4000)/32768); return pll;/ 由PLL计算频率(频率单位为KHZ)ulong TE

7、A5767_GetFreqFromPLL(ulong Pll)ulong Freq = (ulong)(float)Pll)*(float)8.192)+225);return Freq;Tea5767.h#ifndef _TEA5767_H_INCLUDED_#define _TEA5767_H_INCLUDED_#include common.h/ TEA5767的TWI地址#define TEA5767_TWI_ADDR 0xC0 / TEA5767基地址/ 初始化TEA5767(频率单位为KHZ)void TEA5767_Init(ulong Freq,uchar Mono);/ 调整

8、频率、声道void TEA5767_Adjust(ulong Freq,uchar Mono,uchar MuteControl);/ 信号强度uchar TEA5767_GetLevel();/ 由频率计算PLL(频率单位为KHZ)ulong TEA5767_GetPLLFromFreq(ulong Freq);/ 由PLL计算频率(频率单位为KHZ)ulong TEA5767_GetFreqFromPLL(ulong Pll);#endif / _TEA5767_H_INCLUDED_FM62429.c#include FM62429.h/ 初始化函数void FM62429_Init(u

9、char Volume)FM62429_PORT_INIT();FM62429_AdjustVolume(Volume);/ 调整音量(084)void FM62429_AdjustVolume(uchar Volume)uchar i = 0;ushort VolData = 0;if( Volume 0 )Volume = Volume+3;VolData = (ushort)(Volume&0x7C);VolData |= (ushort)(Volume&0x03)7);/ D9、D10均为VolData |= 0x600;FM62429_SDA_L();FM62429_SCL_L();

10、for( i = 0; i = 1;FM62429_SDA_H();FM62429_SCL_H();NOP();FM62429_SCL_L();FM62429.h#ifndef _FM62429_H_INCLUDED_#define _FM62429_H_INCLUDED_#include Common.h/ 端口定义#define FM62429_SDA_H() SET_BIT(PORTB,PB2)#define FM62429_SDA_L() CLR_BIT(PORTB,PB2)#define FM62429_SCL_H() SET_BIT(PORTB,PB5)#define FM6242

11、9_SCL_L() CLR_BIT(PORTB,PB5)#define FM62429_PORT_INIT() SET_BIT(DDRB,DDB2);SET_BIT(DDRB,DDB5)/ 初始化函数void FM62429_Init(uchar Volume);/ 调整音量(-83)void FM62429_AdjustVolume(uchar Volume);#endif /_FM62429_H_INCLUDED_main.c#include #include common.h#include LCD1602.h#include TWILib.h#include Tea5767.h#inc

12、lude FM62429.h#define OPER_MODE_RADIO 0 / 正常收音机模式#define OPER_MODE_SET 1 / 设置模式/ 正确保存标志#define SAVE_MASK 0x4B / K/ 设置模式#define SET_MODE_SEARCH 1 / 搜索#define SET_MODE_SOUNDMODE 2 / 立体声、单声道模式选中#define SET_MODE_MIN 1#define SET_MODE_MAX 2/ 声音模式#define SOUND_MODE_STEREO 1#define SOUND_MODE_MONO 2#define

13、 SOUND_MODE_MIN 1#define SOUND_MODE_MAX 2/ 音量#define VOLUME_MAX 84#define VOLUME_MIN 0#define CHANNEL_NUM 10#define CHANNEL_MIN 1#define CHANNEL_MAX CHANNEL_NUM/ 搜索模式#define STATE_SEARCH 1#define STATE_STORE 2/ 最小频率#define FREQ_MIN (ulong)87500)#define FREQ_MAX (ulong)/ 全局变量uchar OperMode = OPER_MOD

14、E_RADIO; / 操作模式uchar SetMode = SET_MODE_MIN; / 搜索频道uchar SoundMode = SOUND_MODE_MIN; / 声音模式BOOL DoingMenu = FALSE; / 是否处于选择菜单方式ushort BlinkCounter = 0; / 控制闪烁uchar Volume = 42; / 音量ulong ChannelFreq = 96600; / 频道频率(单位为KHZ)ulong ChannelSearch = FREQ_MIN; / 搜索起始频率uchar ChannelIndex = 0; / 当前播放的频道编号(1-

15、10)uchar ChannelSaveIndex = CHANNEL_MIN;uchar ChannelState = STATE_SEARCH;/ 开关健(PD7)#define POWER_ON() #define POWER_OFF() SET_BIT(DDRD,DDD7);CLR_BIT(PORTD,PD7);/ 闪烁控制变量的最大值#define BLINK_COUNTER_MAX 10/ 是否闪烁#define IS_BLINK() (BlinkCounter BLINK_COUNTER_MAX/2)/=/ 预先保持的10个频道/=ulong EEMEM ChannelConfi

16、gCHANNEL_NUM+1 = 0 ;ulong ChannelArrayCHANNEL_NUM+1 = 0 ;/ 读取预先保持的频道void ReadChannelConfig()ulong data = 0;uchar mask = 0 , i = 0;/ 等待EEPROM空闲eeprom_busy_wait();/ 写入数据eeprom_read_block( ChannelArray,ChannelConfig, 4*(1+CHANNEL_NUM);/ 解析第一个字节,构造第一个字节,从地位到高位分别是:ChannelIndex,Volume,SoundMode,SAVEMASKda

17、ta = ChannelArray0;ChannelIndex = (uchar)(data & 0xFF);data = 8;Volume = (uchar)(data & 0xFF);data = 8;SoundMode = (uchar)(data & 0xFF);data = 8;mask = (uchar)(data & 0xFF);if( ( mask != SAVE_MASK ) |( ChannelIndex CHANNEL_MAX ) |( SoundMode SOUND_MODE_MAX ) |( Volume VOLUME_MAX ) ) ChannelIndex = 0

18、;Volume = 42;SoundMode = SOUND_MODE_STEREO;for(i = 0; i CHANNEL_NUM+1; i+ )ChannelArrayi = 0;else ChannelFreq = ChannelArrayChannelIndex;/ 写设置void WriteChannelConfig()/ 构造第一个字节,构造第一个字节,从低位到高位分别是:ChannelIndex,Volume,SoundMode,SaveMaskulong data = SAVE_MASK;data =8; data |= SoundMode;data =8;data |= V

19、olume;data =8;data |= ChannelIndex;ChannelArray0 = data;/ 等待EEPROM空闲eeprom_busy_wait();/ 写入数据eeprom_write_block( ChannelArray,ChannelConfig, 4*(1+CHANNEL_NUM) ); / 显示存储频道信息void DisplayFreqSave(uchar Index)uchar i = 0;uchar buffer17 = 0 ;/ 显示音量、声音模式for( i = 0;i 16; i+ )bufferi = ;buffer0 = S;buffer1

20、= T;buffer2 = O;buffer3 = R;buffer4 = E;buffer5 = :;buffer6 = C;buffer7 = H;buffer8 = (Index/10)+0;buffer9 = (Index%10)+0;LCD1602_Display_String(1,0,buffer);/ 显示频率信息void DisplayFreqInfo(ulong Freq,uchar Index)uchar i = 0,j = 0;ulong data = 0;uchar buffer17 = 0 ;/ 显示频率data = Freq/10;for( i = 0;i 16;

21、i+ )bufferi = ;if( Index 9999 )data %= ;bufferj+3 = (data/10000)+0;data %= 10000;bufferj+4 = (data/1000)+0; data %= 1000;bufferj+5 = (data/100)+0; data %= 100;bufferj+6 = .;bufferj+7 = (data/10)+0; data %= 10;bufferj+8= (data%10)+0;bufferj+9= M;bufferj+10= H;bufferj+11= Z;elsebufferj+3 = (data/1000)

22、+0;data %= 1000;bufferj+4 = (data/100)+0; data %= 100;bufferj+5 = .;bufferj+6 = (data/10)+0; data %= 10;bufferj+7 = (data%10)+0;bufferj+8= M;bufferj+9= H;bufferj+10= Z;LCD1602_Display_String(2,0,buffer);/=/ 按键处理/=/ 按键S1-S5(PD2-PD7)/ 是否为单个键按下#define IS_KEY_PRESSED(k) (k) 0) & (k) & (k)-1) = 0 )/#defi

23、ne GET_KEY_CODE() (PIND) & 0x1F)#define KEY_CODE(n) (uchar)1) = 2;keycode = keycode;keycode &= 0x3F; / 6个键return keycode;/ 读取按键uchar GetKey( )uchar key = 0;static uchar lastkey = 0; / 记录上次的按键/ 读取键盘key = GET_KEY_CODE();if( !IS_KEY_PRESSED(key) )lastkey = 0;return 0;/ 确定是否新的键按下if( lastkey = 0 ) lastke

24、y = key; / 保存本次扫描结果DelayMs(10); / 去抖处理key = GET_KEY_CODE();if( key = lastkey )return key;return 0;/=/ 设置函数/=void SetHandler()uchar key = 0;/ 切换闪烁标志BlinkCounter+;if( BlinkCounter BLINK_COUNTER_MAX )BlinkCounter = 0;/ 确定是否为选择菜单if( DoingMenu )key = GetKey();if( key = KEY_S1) / 设置键(确认)DoingMenu = FALSE;

25、 / 结束菜单选择if( SetMode = SET_MODE_SOUNDMODE )SoundMode = SOUND_MODE_MIN;elseChannelState = STATE_SEARCH;else if( key = KEY_S4 ) / 左移键if(SetMode = SET_MODE_MAX )SetMode = SET_MODE_MIN;elseSetMode+;else / 显示菜单/ 选中的菜单应该闪烁(SETMODE)LCD1602_Display_String(1,0,(const uchar*) FM RADIO );LCD1602_Display_String

26、(2,0,(const uchar*)1:SEARCH 2:MODE );if(IS_BLINK()if( SetMode = SET_MODE_SEARCH )LCD1602_Display_Char(2,0, );elseLCD1602_Display_Char(2,9, );elsekey = GetKey();if( SetMode = SET_MODE_SOUNDMODE ) / 声音模式if( key = KEY_S1) / 确认/ 结束设置OperMode = OPER_MODE_RADIO;else if( key = KEY_S4 ) / 左移键if(SoundMode =

27、SOUND_MODE_MAX )SoundMode = SOUND_MODE_MIN;elseSoundMode+;/ 保存声道模式 WriteChannelConfig(); else / 显示菜单/ 显示声音模式菜单,选中的声音模式闪烁LCD1602_Display_String(1,0,(const uchar*)MODE );LCD1602_Display_String(2,0,(const uchar*)1.STEREO 2.MONO);if(IS_BLINK()if( SoundMode = SOUND_MODE_STEREO )LCD1602_Display_Char(2,0,

28、);elseLCD1602_Display_Char(2,10, );else / 搜索频道if(ChannelState = STATE_SEARCH)if( key = KEY_S1)ChannelState = STATE_STORE;else if ( key = KEY_S2 )if( ChannelSearch FREQ_MIN )ChannelSearch -= 100;TEA5767_Adjust( ChannelSearch,(SoundMode = SOUND_MODE_MONO),FALSE);elseLCD1602_Display_String(1,0,(const u

29、char*)SEARCHING. );DisplayFreqInfo(ChannelSearch,CHANNEL_MAX+1);else / 选择存取频道if( key = KEY_S1)/ 显示正在存储信息LCD1602_Display_String(1,0,(const uchar*)STOREING. );DisplayFreqInfo(ChannelSearch,CHANNEL_MAX+1);/ 存储频道信息ChannelArrayChannelSaveIndex = ChannelSearch;WriteChannelConfig(); / 显示存储完成信息LCD1602_Displ

30、ay_String(1,0,(const uchar*)STORE OK! );DisplayFreqInfo(ChannelSearch,CHANNEL_MAX+1);/ 自动移动到下一个频道 if(ChannelSaveIndex CHANNEL_MIN )ChannelSaveIndex-;else if( key = KEY_S5 )if( ChannelSaveIndex CHANNEL_MAX )ChannelSaveIndex+;elseDisplayFreqSave(ChannelSaveIndex);DisplayFreqInfo(ChannelSearch,CHANNEL_

31、MAX+1); /=/ 显示音量、信号强度、声音模式、频率/=void DisplayChannelInfo()uchar i = 0;uchar buffer17 = 0 ;uchar level = TEA5767_GetLevel(); / 0-15for( i = 0;i 16; i+ )bufferi = ;/ 显示音量、声音模式buffer6 = V;buffer7 = O;buffer8 = L;buffer9 = :;buffer10= (Volume/10)+0;buffer11= (Volume%10)+0;if( SoundMode = SOUND_MODE_STEREO

32、)buffer14= S;buffer15= T;elsebuffer14= M;buffer15= O;LCD1602_Display_String(1,4,&buffer4);LCD1602_Display_Volume();LCD1602_Display_Level(level);/ 显示频率DisplayFreqInfo(ChannelFreq,ChannelIndex);/ 正常收听函数void RadioHandler()DisplayChannelInfo();/ 关机函数void PowerOff()LCD1602_Display_String(1,0,(const uchar*)Power Off . );LCD1602_Display_String(2,0,(const uchar*) );DelayMs(500);POWER_OFF(); /=/ 主函数/=int main()uchar key = 0;/ 初始化端口(S1-S5)DDRD = 0;PORTD = 0xFF; / 先把音量改为0FM62429_Init(0);/ 处理开关键POWER_ON();/ 读取频道配置ReadChannelConfig();/ LCD初始化LCD1602_Init()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论