07宝来经典车机CD收音机(RC668)改装增加蓝牙播放音乐

最新教程模拟碟盒通破老大众全系列

https://blog.csdn.net/songisgood/article/details/111869214

全网首发!大众奥迪DIY数码碟盒增加USB和蓝牙播放音乐功能使用原车接口无损改装

一、起因

      07款大众宝来经典12年的老廉颇了,车还能开,准备在战10年。07宝来只有个CD+收音机(西门子 RC668),由于车子岁数大了,收音机有杂音,而且山间小路还没有信号,所以花了15块买的CD刻碟听。这里要心疼15块钱一下,刻出来的碟片,放车上两三次基本都读碟失败了,很是郁闷。然后谁让咱是个电农了,能折腾,虽然收音机和CD不咋好使,可是功放是好使的啊,何不改装一下加个蓝牙,以后拿手机放歌,想想都爽歪歪。

二、方案

     在没有查找资料之前,想当然的方法就是,割断CD或者收音机的音频线,在用单片机或者蓝牙控制模拟开关切换信道。我的想法是用“最少的钱,办最大的事情”。然后上网搜索了一圈发现高手真不少,各种改装很是欢乐。其中下面这篇文章觉得写得最为详细http://www.xcar.com.cn/bbs/viewthread.php?tid=18654146

这个老师罗列了5种方案,而且都有人试过水,看到他们的改装我的最优选项是方案4通过模拟CD碟盒,将蓝牙加进去,听着原理也很简单,但是网上只能找到引脚定义,并不知道具体的通信协议。要想知道通信协议:方案一买个碟盒挂上,逻辑分析仪+示波器。方案二、买一个别人做好的模拟碟盒设备,分析协议。无论哪种方式都和我的第一原则抵触了,“花最少的钱,办最大的事”。所以最后也选择了老师的方案5。通过IIC控制TEF6894H 选择模拟输入信道,具体原理看上面的文章。

三、原理分析

      方案确定后,网上买了一套汽车拆机套装,由于看错了介绍买错了工具心塞,买了2次才买成。使用工具很容易将CD机拆下来。然后开始解剖车机,只需拧下两边的卡簧螺丝即可,车机的上下盖是卡上去的不需要拆螺丝。打开后在将CD卸下断开排线即可。在这个过程中有两个问题需要注意下。

1、拆下来的机头需要12V供电才能工作,这是车机的引脚定义图片。

      要想车机工作,至少要将S、K、SAF、电源正极接+12V,○接负极。我这这里吃了很大亏,由于没插头,只能用烙铁在电路板的背面,将S、K、SAF连到正极,由于晚上焊接,在加上老眼昏花焊接错误,导致开不开机,折腾了一天,被各种大佬嘲讽,说多了都是眼泪。

2、由于这个型号的车机断电重新上电会锁住机器,开机显示SAFE,接着显示1000。这个就是锁住的症状,如果记得密码输入就好,不记得了的话,网上有解码的,给出车机上的字码就能帮你查到密码,我不知道密码所以花钱买了个破解,十分心痛。

如果上述两个坑成功跳过后,就开始研究正题了,怎么通过IIC写入程序切换输入的信道。

RC668这个板子的做工很好,关键的线路上都有测试点,所以这里不需要破坏电路板,只需要将线焊接到测试点上即可,电源两个线没有焊接到测试点上,随便找了个地方焊接上了。上电通过逻辑分析仪抓取没有按键按下时的空闲波形,由于当时波形没有保存,只能用表格描述了。

总线状态IDELread(0x0c)read(0x0c)read(0x0c)IDELwriteIDEL重复操作
时间长度85ms不记得不记得不记得20ms不记得85ms重复操作

上表显示的是没有按键按下IIC总线的状态,通过分析发现,在没有按键按下的时候,总线只有读命令,写操作只写了个地址操作,我猜是检测TEF6894H 是否在线,通过借鉴上面的帖子,只需要写TEF6894H 的0x0B寄存器即可。寄存器如图所示。

这里要有两个问题需要注意。

1、如过要检查IIC的数据,或者往IIC总线上发数据,不对总线操作的时候一定不要上拉或者下拉总线,如果不知道咋操作请将IO设置成高阻或者开漏模式,防止干扰总线,总线被干扰是开不了机的。

2、在总线上插入IIC写命令的时候,一定要避开IIC总线冲突,要在总线空闲的时候插入数据防止总线互相干扰。

为了解决第二个问题,所以在编写IIC程序的时候要解决IIC总线占用和同步问题。

四、程序编写

本着“钱少办大事”的原则,找到了之前做项目剩下的板子和芯片(STC8F1K08),可以满足IIC总线监测和同步功能。STC8F1K08为8脚单片机带硬件IIC,正好不用模拟IIC了,满足需求。STC8F1K08管脚图如下:

 IIC通信问题解决了,那么IIC时序同步监测总线空闲怎么实现呢?这里通过分析分析IIC通信协议,总线空闲时SDA和SCL是高电平,通信的时候总线会发生跳变,而且通过分析发现空闲时IIC总线上的读命令和写命令时间长度不超过5ms,那么就可以检测IIC总线边沿跳变当最后一次跳变5ms后还有跳变发生时,就可以认为总线进入空闲状态了。这时就可以像总线上发送命令了。那么如何实现边沿跳变检测呢?因为每传输一个bit SCL都会发生跳变,所以这里检测SCL边沿跳变情况。SCL和外部中断INT0共用P3.2,这为IIC总线空闲检测便利,只有当IIC空闲的时候才发送数据,所以P3.3和P3.2在发送的时候设置成双向口即可,然后开启外部中断0设置成检测跳变沿(其实设置成非电平触发模式都可以)。在外部中断中打开定时器,清零5ms计数,检测同步是否锁定,如果锁定则解除锁定,清除同步标志位。主程序如下:

/********************************Copyright (C) **********************************
**                        					king song
**                                     
**                       
**
**-------------------------------------------------------------------------------
** File		     name: main
** Author 			   : king song
** Create Date		 : 2019.06.22
** version			   : 1.0.0
** Description		 : main
** Email Address 	 : xxxxxxx@qq.com
** Technology blogs: 
** others			     : 
**----------------------------Modification--------------------------------------
Modification History	:
Data			By			Version			
================================================================================*/

 #include "stc8a8k64s4a12.h"
#include "userapp.h"
#include "watchdog.h"
#include "timer.h"
#include "uart.h"
#include "iic_master.h"


void Delay1000ms();		//@22.1184MHz

/***********main函数************************/
void main()
{
	unsigned char i = 0;

	
		P3_Mode_OUT_OD(PIN_2);			//  开机初始化 IIC IO状态 防止锁死IIC总线
		P3_Mode_OUT_OD(PIN_3);

		Delay1000ms();
		AUXR = 0x00;
	
		InitUart();

    IT0 = 1;                                    //使能INT0下降沿中断
    EX0 = 1;                                    //使能INT0中断
    EA = 1;
	
		timer0Init();

//		WDT_CONTR = 0x27;                           //看门狗溢出时间4
		
		
		while(1)									
		{
			
			
			appUserSever();

		}

}





void Delay1000ms()		//@22.1184MHz
{
	unsigned char i, j, k;

	i = 113;
	j = 53;
	k = 228;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

IIC总线同步空闲状态发送程序

/********************************Copyright (C) **********************************
**                        					 king song
**                       
**
**--------------File Info---------------------------------------------------------
** File		     name: userapp.c
** Author 			   : king song
** Create Date		 : 2019.06.22
** version			   : 1.0.0
** Description		 : 
** Email Address 	 : xxxxxxx@qq.com
** Technology blogs: 
** others			     : 
**----------------------------Modification--------------------------------------
Modification History	:
Data			By			Version			
================================================================================*/

#include "userapp.h"
#include "uart.h"
#include "intrins.h"
#include "string.h"
#include "iic_master.h"

sbit    SDA         =   P3^3;
sbit    SCL         =   P3^2;

sbit    BLE_STA     =   P5^4;


/同步锁定和同步标志主要通过这两个标志位实现一个空闲中断插入1条命令/

unsigned int syn_count = 0;							//同步总线空闲时间计数
unsigned char syn_flag = 0;							//同步总线标志位
unsigned char syn_lock = 0;							//同步总线标志位

unsigned char ble_flag = 0;							//蓝牙发送标志和发送次数计数

extern unsigned char  uart_flag ;				//串口命令标志位


void appUserSever(void)
{

	if((syn_flag == 1)&&(	syn_lock == 0))
	{
	
		if((BLE_STA == 1)&&(ble_flag == 0))
		{
			ble_flag = 1;

		
		}else if((BLE_STA == 0))
		{

		   ble_flag = 0;
		}
		
		
		
		if((uart_flag == 1)||((ble_flag>0)&&(ble_flag<30)))			// 串口 发送切换到蓝牙命令或者手机连接上设备了切换到蓝牙模式
		{
			uart_flag = 0;
			switchBLE();
			ble_flag++;

			P3_Mode_OUT_OD(PIN_2);																//发送完数据后继续监听总线状态
			P3_Mode_OUT_OD(PIN_3);

		}

		
		syn_lock = 1;
	}
	
}

void TM0_Isr() interrupt 1
{

	
			syn_count++;
	
			if(syn_count>5)					//延时5ms
			{
//				EX0 = 0;    					//关闭中断
				syn_flag = 1;
				EX0 = 1;              //使能INT0中断
				TR0 = 0;
			}
	

}
void INT0_Isr() interrupt 0
{
		TR0 = 1; 

		syn_count = 0;
		if(syn_lock == 1)
		{
			syn_lock = 0;
			syn_flag = 0;

		}
//		if(SCL ==1)      						//   
//		{

//		}									
//		else                    						//反转
//		{

//		}
            
	
	
                               

}

该程序主要实现通过串口发送命令或者蓝牙连接成功自动将车机的音频输入信号切换到外部CD输入。如果想退出蓝牙模式只需要按车机面板上FM/AM/CD切换按钮即可恢复正常车机工作模式。

五、焊接调试

首先按照上述设计,焊接电路,蓝牙模块选择的是JDY-66双模蓝牙,既可以传音频又可以串口透传,可以将蓝牙串口接到单片机上通过手机遥控实现更多更能。如下图所示为将蓝牙模块和单片机做小系统焊接到一起,由于电源取的是车机的5V电源,蓝牙模块供电最大4.2V,这里直接在电源上串联个1N4007实现降压,上电实测电源电源在4.1V左右满足要求。电源和IIC总线焊接到4pin的XH连接器上方便拆卸,对应机头上焊接XH工头,由于JDY-66输出的是差分音频信号,而车机输入的是单端信号无法匹配,所以信号直接用变压器转换一下,网上有JDY-66配套的差分转单端的模块,我就是买了变压器转换模块。所以将两路差分信号加上GND总共5根线也焊接到XHl连接器上。

 

 注意:车机的音频输入信号可以直接通过车机后面的端子直接送入如下所示。由于我没有对应的插座所以直接在背面的PCB上直接飞线出音频输入信号了。

 为了方便以后升级将单片机的串口引出,并在程序里面设计了软复位,监测到ISP下载指令就会复位进入下载模式,下载程序再也不用断电了。然后在废物堆里面找到了一个装TO220 MOS管的壳正好可以将电路板塞进去。 在放进壳里之前用胶枪将各个焊点和容易短路的地方打上胶枪防止短路。然后将电路板放进去,两边塞上一半泡沫,留一半空隙用来散热。

 

 车机焊接的接口和安装没有拍照片,将来有机会再补上吧。

六、总结

从拆机头到装回去总共折腾了1天半,写这个博客又差点写了5个小时,从时间成本分析,不合算不如买一个划算,但是从另外一个角度来说,终于DIY一个有用的东西了,可以根据自己的需求改改改。由于使用的是蓝牙模块是双模的还支持串口透传,卖家还提供了Android APP源码 那么可以加上手机修改SSID、手机端升级程序等没啥用的功能了。最后希望能给想改装的朋友提供个思路,有不懂的地方可以给我留言或者私信。太困了有空再勘误吧,哈哈哈!

七、程序奉上

https://download.csdn.net/download/songisgood/12021668

八、

为想要交流学习或者没有积分获取资料的朋友新建一QQ群,欢迎加入交流学习!或者发私信。

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值