找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于stc15w204s单片机与TM7707的驱动问题

查看数: 9709 | 评论数: 22 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-5-4 14:22

正文摘要:

//驱动程序 sbit AD7707_DRDY = P1^0; sbit AD7707_DIN  = P3^6; sbit AD7707_DOUT = P3^7; sbit AD7707_SCLK = P1^1; void write_byte1(uchar date); uchar read_byte1(); void init1(); void init2(); ...

回复

ID:388477 发表于 2023-9-9 15:54
zhang1314hong 发表于 2023-9-9 14:12
我现在是用tm7707,现在电压两路正常,但是计算公式不对啊,v=adc值/16777216,不是应该是v=2.5*adc值/1677 ...

找到问题了,是读取三个字节的数据后,组合错了,之前参看别人的例程没注意
TM_result=a[2]+(a[1]*256)+(a[0]*65536);这个就可以
ID:388477 发表于 2023-9-9 14:12
我现在是用tm7707,现在电压两路正常,但是计算公式不对啊,v=adc值/16777216,不是应该是v=2.5*adc值/16777216才对嘛,有没有遇到的朋友,感谢!
ID:236035 发表于 2021-7-28 16:00
sydaxia 发表于 2021-6-22 07:08
你好我也遇到了同样的问题 能具体的说一下嘛

参考7705的寄存器配置
ID:18016 发表于 2021-6-22 07:08
fkup 发表于 2021-5-12 14:50
已经解决了,应该是寄存器的配置

你好我也遇到了同样的问题 能具体的说一下嘛
ID:260951 发表于 2021-5-12 14:50
paladina 发表于 2021-5-12 09:42
数值稳定,那是不是你分压网络或2.5v基准的误差没计算调节好,采集计算时乘上一个误差系数就可以了吧

已经解决了,应该是寄存器的配置
ID:260951 发表于 2021-5-11 20:45
paladina 发表于 2021-5-11 14:32
P54可以输出时钟,但需要配置分频 后提供给TM7707. 在TM7707初始化函数里加入 CLK_DIV = 0xC0;          // ...

是的,我分频后2.75MHZ,频率整好了。但是采集总差点意思,数据总有些偏差,稳定性还可以,同一个电压前后测试,得到的数据一样,就是和正确值差点。  我想问一下你的这个主频是多少,分频后是多少,我用你的配置试了一下,采集的数据也是不对的。
ID:796531 发表于 2021-5-11 14:32
本帖最后由 paladina 于 2021-5-11 14:35 编辑

P54可以输出时钟,但需要配置分频 后提供给TM7707. 在TM7707初始化函数里加入 CLK_DIV = 0xC0;          //P54=SYSCLK/4 。我做过好几块STC15+TM7707的板子了,没问题的,void TM770x_Config(void)
{
        CLK_DIV = 0xC0;        //P54=SYSCLK/4
       
        TM_RESET = 0;
        delay_ms(10);
        TM_RESET = 1;
       
        TM_DOUT = 1;
        TM_DIN = 1;
        TM_SCLK = 1;
        TM_CS = 1;
        TM_DRDY = 1;
        delay_ms(5);
       
        TM_WriteByte(0x40);
        TM_WriteByte(0x01);
        delay_ms(10);
       
       
        /* 通道1 */
        //滤波器低八位
        TM_WriteByte(0x50);
        TM_WriteByte(0x00);
        //滤波器高八位
        TM_WriteByte(0x20);
        TM_WriteByte(0x16);
       
        //自校准
        TM_WriteByte(0x10);
        TM_WriteByte(0x44);
        while(TM_DRDY) { _nop_(); }
       
        /* 通道2 */
        //滤波器低八位
        TM_WriteByte(0x51);
        TM_WriteByte(0x00);
        //滤波器高八位
        TM_WriteByte(0x21);
        TM_WriteByte(0x16);
       
        //自校准
        TM_WriteByte(0x11);
        TM_WriteByte(0x6C);
        while(TM_DRDY) { _nop_(); }
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:260951 发表于 2021-5-11 09:03
p54可以输出51内部晶振频率
ID:260951 发表于 2021-5-8 17:21
啤酒瓶子老大 发表于 2021-5-8 01:14
百度还说了一个问题。7707和7705的寄存器是不同的,你仔细看看7707的手册,如果还是没有头绪,就看看7705的 ...

有试过用7705的驱动代码,效果差不多,DRDY引脚会变为低电平,但是最后数据还是不对
ID:230742 发表于 2021-5-8 01:14
百度还说了一个问题。7707和7705的寄存器是不同的,你仔细看看7707的手册,如果还是没有头绪,就看看7705的手册。用7705的寄存器地址定义试一下。意思是市场上有些7707是7705仿制的。
ID:260951 发表于 2021-5-7 22:24
啤酒瓶子老大 发表于 2021-5-7 00:40
我帮你百度了一下,MCLK IN 和MCLK OUT 接的是一个晶振。
https://blog.csdn.net/qq_37387733/article/det ...

mclkin这个引脚常见的的确是接晶振,我这个受硬件限制,只能用io模拟了,但是我看7707这个需要一个2.4mhz的信号,用定时器貌似行不通。目前想到两个方案,一个是用pwm,用pwm的话就有个问题点是,stc15w204s这个芯片的pwm输出引脚是否可以随意指定,我这个是p5-4,手册上的pwm输出引脚都完美的避开了这个引脚,再有一个就是不知道pwm输出能否达到2.4mhz以上。第二个方案是,直接将单片机主频拉到了30mhz,然后while循环里面将p54取反,频率可以达到2.75mhz。但是这样做,mcu就只做io翻转了,读取7707这个芯片的值也不好弄了。我的想法是在定时器中断里面读,这样对mclkin这个引脚的频率影响也不会很大。
     mclkin这个地方的频率给上了,tm7707读取标志位也可以成功置位,但是苦恼的是读出的结果是错的,也还没搞清楚是读取错了,还是计算最终结果错了,基准电压是2.5v
ID:230742 发表于 2021-5-7 00:40
我帮你百度了一下,MCLK IN 和MCLK OUT 接的是一个晶振。
https://blog.csdn.net/qq_37387733/article/details/105136060
我建议还是接个晶振。毕竟单片机分频输出我也没用过。感觉单片机一忙别的,输出的频率就不稳了。比如开中断关中断。你要24位这么高的精度,然后不给他一个高精度的晶振。我看很难。
ID:260951 发表于 2021-5-4 21:45
请问一下,MCLK IN 这个引脚需要给怎样一个时钟啊,可以定时器模拟PWM作为时钟信号吗?
ID:260951 发表于 2021-5-4 21:33
人人学会单片机 发表于 2021-5-4 18:23
用他们官方的参考代码 准行

没找到官方的
ID:790408 发表于 2021-5-4 21:30
卡在AD7707_DRDY说明这个值一直为1呀
ID:790408 发表于 2021-5-4 21:29
你不因该说说那里有问题,你做了些什么处理等嘛,这不是让别人给你写代码嘛,
ID:260951 发表于 2021-5-4 21:22

阅读芯片手册,发现MCLKIN引脚需要时钟信号, 我贴出来的驱动程序,应该是那种有晶振电路的。而我的硬件设备没有这个,只能靠软件模拟时钟信号。我想读取标志位无变化,是不是我芯片初始化就没有成功。或是我模拟的时钟信号有问题
ID:260951 发表于 2021-5-4 21:16
cheny736 发表于 2021-5-4 20:35
你这个应该是改的AT89的程序,更换为stc15w204s需要注意端口模式的问题,试试在main中加入对端口的初始化, ...

IO口应该是没问题的
ID:230742 发表于 2021-5-4 20:59
你想问什么?
ID:466759 发表于 2021-5-4 20:35
你这个应该是改的AT89的程序,更换为stc15w204s需要注意端口模式的问题,试试在main中加入对端口的初始化,P0M0=0x00;P0M1=0x00;P1M0=0x00;P1M1=0x00;P2M0=0x00;P2M1=0x00;P3M0=0x00;P3M1=0x00;
我对比了一下你们的程序,没发现什么问题,可以试试加入上面的,如果不行,可以检查一下TM7707是不是好的,也可以检查一下电路连接!
ID:390416 发表于 2021-5-4 18:23
用他们官方的参考代码 准行
ID:796531 发表于 2021-5-4 14:22
fkup 发表于 2021-5-11 20:45
是的,我分频后2.75MHZ,频率整好了。但是采集总差点意思,数据总有些偏差,稳定性还可以,同一个电压前 ...

数值稳定,那是不是你分压网络或2.5v基准的误差没计算调节好,采集计算时乘上一个误差系数就可以了吧

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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