家电论坛

聆客音频
 注册  找回密码

QQ登录

只需一步,快速开始

手机号码,快捷登录

楼主: 乡村猎手

REVOX B710 MCU芯片MK3870替换方案(连载)

  [复制链接]

102

主题

1213

帖子

77

威望

超级会员

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

交易诚信度
69
注册时间
2002-11-22
发表于 2018-10-11 17:04 | 显示全部楼层
猎手兄高人,期待继续~

点评

叶兄弟过奖了。  发表于 2018-10-12 10:18
回复 支持 反对

使用道具 举报

744

主题

8069

帖子

11

威望

特级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

交易诚信度
64
注册时间
2011-8-7
发表于 2018-10-12 10:43 来自家电论坛网手机触屏版 | 显示全部楼层
刚搬过板凳来。学习。。。。。
回复 支持 反对

使用道具 举报

175

主题

910

帖子

20

威望

高级会员

Rank: 4Rank: 4Rank: 4Rank: 4

交易诚信度
15
注册时间
2008-3-18
 楼主| 发表于 2018-10-14 23:27 | 显示全部楼层
程序弄好了,将程序下载到芯片里就可以装机测试了,先到网上买个开发版,很便宜,而且对初学者特别合适,做了demo立马试一下就能看到效果。
装机时要注意,原机的复位是低电位有效,但51芯片是高电平有效,一开始没注意这个,没法工作。所以暂去没接这个口,运行也没问题,下次得装个非门转一下。
因为目前 实现 的这些逻辑较简单,所以基本装上就可以用。
但现在还只实现了基本的按钮响应,接下来要做计数器显示这部分,对于我这个第一次接触单片机来说,还是稍复杂了一点,时序总有点不对。等过几天再写一下详细的解决过程。
1539530347(1).png




REVOX STUDER 卡座专营及维修 ,闲鱼账号: chentijian
回复 支持 反对

使用道具 举报

175

主题

910

帖子

20

威望

高级会员

Rank: 4Rank: 4Rank: 4Rank: 4

交易诚信度
15
注册时间
2008-3-18
 楼主| 发表于 2018-10-15 19:05 | 显示全部楼层
下面我们看一下计数器是怎么显示的:是使用一片飞利浦的SAA1060芯片来驱动显示的,是将串行数据转成并行输出显示数据管,输出是是16位,每个数据码管需要8脚控制(数字7个,一个点),所以只能切换显示。也就是显示一、三个、然后再显示二四个(图上的AC1和AC2电压控制),来回切换。我们拍照的时候,如果快门速度较高时,就会看到这里显示的有两个是灭的,就是因为这个原因,实际是在闪烁而不是连续显示的。
这种芯片也是比较老的了,不象后来的显示芯片象B215机器就就是用I2C总线传输,因为不是标准的协议,就得看一下传输的时序是怎么样的。
从图上看,传输一次要19次时钟周期(这里的时钟并不是指单片机时钟而是输入时钟线的频率),前导0,然后16个数据位,第19周期是指存到A或B锁存器,最后一个周期保存数据 ,还有数据使能端(DLEN)要高电平。

710显示.png 1060.png 1060时序图.png

REVOX STUDER 卡座专营及维修 ,闲鱼账号: chentijian
回复 支持 反对

使用道具 举报

6

主题

27

帖子

0

威望

新手上路

Rank: 1

交易诚信度
0
注册时间
2018-6-22
发表于 2018-10-16 10:09 | 显示全部楼层
楼主是真正的高手
回复 支持 1 反对 0

使用道具 举报

175

主题

910

帖子

20

威望

高级会员

Rank: 4Rank: 4Rank: 4Rank: 4

交易诚信度
15
注册时间
2008-3-18
 楼主| 发表于 2018-10-17 12:12 | 显示全部楼层
本帖最后由 乡村猎手 于 2018-10-17 12:34 编辑

搞明白了怎么显示了,先写个显示的demo显示数字0,为了便于仿真,不停输出,实际使用的时候,是可以锁在的,不改变数字时,不用写入,然后再用proteus仿真一下,因为proteus里没有SAA1060这个元件,要不可直接看数码管显示,现在只能看虚拟仪器里的时序了,代码附后,代码写得效率可能不是很好,但看仿真的结果应该是没有问题。 1060仿真.png


#include "reg52.h"    //此文件中定义了单片机的一些特殊功能寄存器

sbit yData = P2^0;
sbit yDLEN  = P2^2;
sbit yCLK = P2^1;
const int   dailyCount = 200;



void delay(unsigned int i)
{
        while(i--);        
}


void disp(unsigned int num )
{
        unsigned char i ;

        unsigned char dispA[20];
        unsigned char dispB[20];

        unsigned char num1;
        unsigned char num2;        
        unsigned char num3;
        unsigned char num4;
    unsigned char segR[10]   ;  //右
           unsigned char segL[10];         //左

        //左
                 segL[0] = 0x12;
                 segL[1] = 0xFA;
                 segL[2] = 0x0E;
                 segL[3] = 0x2A;
                 segL[4] = 0xE2;
                 segL[5] = 0x63;
                 segL[6] = 0x2A;
                 segL[7] = 0x7A;
                segL[8] = 0x02;
                segL[9] = 0x22;
        
        
        
                //右
                segR[0] = 0x88;
                 segR[1] = 0xEB;
                 segR[2] = 0x85;
                 segR[3] = 0x83;
                 segR[4] = 0xE2;
                 segR[5] = 0x92;
                 segR[6] = 0x90;
                 segR[7] = 0xCB;
                segR[8] = 0x80;
                segR[9] = 0x82;

        
        num1=num /1000;
        num2=(num /100)%10;;
        num3=(num /10)%100;;;
         num4=num%10;




        dispA[0] = 0;
        dispB[0] = 0;


        for (i=0;i<8;i++)
        {
                dispA[i+1] =  (segR[num2]>>i)&0x01;
                dispB[i+1] =  (segR[num1]>>i)&0x01;        

                dispA[i+9] =  (segL[num4]>>i)&0x01;
                dispB[i+9] =  (segL[num3]>>i)&0x01;
        }
        


        dispA[17] = 1;
        dispB[17] = 0;

        dispA[18] = 0;
        dispB[18] = 0;

        dispA[19] = 0;
        dispB[19] = 0;

        yCLK = 1;



        for (i = 0;i<20;i++)
        {
                yCLK = 1;
                yData = dispA;
                delay(2);
                if(i>17)
                {yDLEN=0;}
                else
                {yDLEN=1;}

                delay(dailyCount);
                yCLK = 0 ;
                delay(dailyCount);
        }

        yCLK=0;
        yData=0;
        yDLEN=0;
        delay(dailyCount*10);
        


        for (i = 0;i<20;i++)
        {
                yCLK = 1;
                yData = dispB;
                delay(dailyCount/10);
                if(i>17)
                {yDLEN=0;}
                else
                {yDLEN=1;}

                delay(dailyCount);
                yCLK = 0 ;
                delay(dailyCount);
        }

        yCLK=0;
        yData=0;
        yDLEN=0;
        delay(dailyCount*10);
}




void main()
{
        while(1)
        {
                delay(4000);
                  disp(0);
        }               
}








REVOX STUDER 卡座专营及维修 ,闲鱼账号: chentijian
香港弦声音响
回复 支持 反对

使用道具 举报

9

主题

971

帖子

12

威望

高级会员

Rank: 4Rank: 4Rank: 4Rank: 4

交易诚信度
5
注册时间
2002-10-16
发表于 2018-10-17 12:18 | 显示全部楼层
陈哥厉害了,好久没有逛过这里的卡座论坛,竟然有这么牛的技术强帖 搞这个费时费力啊,先要搞明白输入输出的逻辑关系,再coding, debug,一套下来等于做个小型毕设了。

点评

我也是新手,只是瞎折腾,在行家眼里都是小儿科。你比我专业。  发表于 2018-10-17 12:35
回复 支持 反对

使用道具 举报

0

主题

235

帖子

2

威望

初级会员

Rank: 2Rank: 2

交易诚信度
0
注册时间
2013-11-20
发表于 2018-10-17 16:52 | 显示全部楼层
不错,这个帮顶
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

威望

禁止发言

交易诚信度
0
注册时间
2013-1-16
发表于 2018-10-18 15:10 | 显示全部楼层
技术派高手
回复 支持 反对

使用道具 举报

175

主题

910

帖子

20

威望

高级会员

Rank: 4Rank: 4Rank: 4Rank: 4

交易诚信度
15
注册时间
2008-3-18
 楼主| 发表于 2018-11-10 15:05 | 显示全部楼层
有段时间没有更新了,继续:后来加入了开关机处理、倒带到头的检测、磁带转轴检测(处理计数和停转的停止),两个电机不同步的停机处理。 这些加入后,基本就可以了。
但是,问题来了,磁带快进或倒带的时候,计数器不准确,因为显示的时候,发送的信号需要一定长度,这样,检测磁带转到的脉冲取样率就不够了,会漏掉一些脉冲。

所以要对于转动的检测要用用计数器和中断来实现,之前在逻辑分板仪里看到原装芯片发出的时钟是长短不一的,现在想想应该就是中间处理中断才会出现这种情况。
如果要改成中断方式,那么这两个脚要接到专门的I/O口,这样要改那个转换座才行,而且原来那个转换座看起还是不是太爽。所以还是重新弄个转换座。
思路是使用一个小封装的单片机,这样,整个东西弄出来就和一个ic差不多大小,之前手工焊过一次了,这次直接做个pcb.
pcb倒是很简单,但对于从没画过的小白来说还是有点麻烦,从选什么软件画,安装软件,选元件,如果没有度娘还真不知道怎么下手。
不过最后交给TB客服看文件只是修改了一次(没有画外形),对最终结果还是挺满意的,比想象中还要顺利。
下面的图是预想类似的效果及画册的PCB图,因为没有高频电路,所以不太要考虑走线的问题,能用就行。


效果.png pcb.png
REVOX STUDER 卡座专营及维修 ,闲鱼账号: chentijian
回复 支持 反对

使用道具 举报

175

主题

910

帖子

20

威望

高级会员

Rank: 4Rank: 4Rank: 4Rank: 4

交易诚信度
15
注册时间
2008-3-18
 楼主| 发表于 2018-11-19 00:09 | 显示全部楼层
最终的样子就是这样啦。现在这样好看多了。就弄了这些功能:播放,录音,停止,快进,快退 ,clear ,倒带或快进自停,磁带不转自停,两主轴速度不同步自停,计数器手动加1,计数器清零。一点小经验就是,代码里应该要对所有IO要重命名,不要直接使用使用ic的的管脚的名称,这样的话,使用不同的ic时,程序改动就会很少。



微信图片_20181119000945.jpg





REVOX STUDER 卡座专营及维修 ,闲鱼账号: chentijian
回复 支持 反对

使用道具 举报

5

主题

325

帖子

1

威望

初级会员

Rank: 2Rank: 2

交易诚信度
0
注册时间
2017-3-3
发表于 2018-11-19 00:47 | 显示全部楼层

回复 支持 反对

使用道具 举报

14

主题

1122

帖子

11

威望

中级会员

Rank: 3Rank: 3Rank: 3

交易诚信度
0
注册时间
2001-11-21
发表于 2019-1-31 14:42 | 显示全部楼层
思路清晰,技术高超!说明以现在的技术对付老机器还是游刃有余哈
有朋自远方来,不亦乐乎!
回复 支持 反对

使用道具 举报

42

主题

536

帖子

16

威望

高级会员

Rank: 4Rank: 4Rank: 4Rank: 4

交易诚信度
6
注册时间
2010-9-16
发表于 2019-2-5 13:37 来自家电论坛网手机触屏版 | 显示全部楼层
感谢楼主的无私奉献!
回复 支持 反对

使用道具 举报

41

主题

1819

帖子

11

威望

中级会员

Rank: 3Rank: 3Rank: 3

交易诚信度
0
注册时间
2006-7-16
发表于 2019-8-17 11:59 | 显示全部楼层
强帖留名,楼主高手
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

活动推荐上一条 /1 下一条

Archiver|手机版|手机版|客服:010-60152166 邮箱:zx@jd-bbs.com QQ:895456697|广告合作|账号注销|家电联盟网

京公网安备 11010602010207号 ( 京ICP证041102号,京ICP备09075138号-9 )

GMT+8, 2025-5-2 12:11 , Processed in 0.163984 second(s), 27 queries , Gzip On.

快速回复 返回顶部 返回列表