zhang1314hong 发表于 2023-9-9 14:12 找到问题了,是读取三个字节的数据后,组合错了,之前参看别人的例程没注意 TM_result=a[2]+(a[1]*256)+(a[0]*65536);这个就可以 |
我现在是用tm7707,现在电压两路正常,但是计算公式不对啊,v=adc值/16777216,不是应该是v=2.5*adc值/16777216才对嘛,有没有遇到的朋友,感谢! |
sydaxia 发表于 2021-6-22 07:08 参考7705的寄存器配置 |
fkup 发表于 2021-5-12 14:50 你好我也遇到了同样的问题 能具体的说一下嘛 |
paladina 发表于 2021-5-12 09:42 已经解决了,应该是寄存器的配置 |
paladina 发表于 2021-5-11 14:32 是的,我分频后2.75MHZ,频率整好了。但是采集总差点意思,数据总有些偏差,稳定性还可以,同一个电压前后测试,得到的数据一样,就是和正确值差点。 我想问一下你的这个主频是多少,分频后是多少,我用你的配置试了一下,采集的数据也是不对的。 |
本帖最后由 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_(); } } |
p54可以输出51内部晶振频率 |
啤酒瓶子老大 发表于 2021-5-8 01:14 有试过用7705的驱动代码,效果差不多,DRDY引脚会变为低电平,但是最后数据还是不对 |
百度还说了一个问题。7707和7705的寄存器是不同的,你仔细看看7707的手册,如果还是没有头绪,就看看7705的手册。用7705的寄存器地址定义试一下。意思是市场上有些7707是7705仿制的。 |
啤酒瓶子老大 发表于 2021-5-7 00:40 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 |
我帮你百度了一下,MCLK IN 和MCLK OUT 接的是一个晶振。 https://blog.csdn.net/qq_37387733/article/details/105136060 我建议还是接个晶振。毕竟单片机分频输出我也没用过。感觉单片机一忙别的,输出的频率就不稳了。比如开中断关中断。你要24位这么高的精度,然后不给他一个高精度的晶振。我看很难。 |
请问一下,MCLK IN 这个引脚需要给怎样一个时钟啊,可以定时器模拟PWM作为时钟信号吗? |
人人学会单片机 发表于 2021-5-4 18:23 没找到官方的 |
卡在AD7707_DRDY说明这个值一直为1呀 |
你不因该说说那里有问题,你做了些什么处理等嘛,这不是让别人给你写代码嘛,![]() |
啤酒瓶子老大 发表于 2021-5-4 20:59 阅读芯片手册,发现MCLKIN引脚需要时钟信号, 我贴出来的驱动程序,应该是那种有晶振电路的。而我的硬件设备没有这个,只能靠软件模拟时钟信号。我想读取标志位无变化,是不是我芯片初始化就没有成功。或是我模拟的时钟信号有问题 |
cheny736 发表于 2021-5-4 20:35 IO口应该是没问题的 |
你想问什么? |
你这个应该是改的AT89的程序,更换为stc15w204s需要注意端口模式的问题,试试在main中加入对端口的初始化,P0M0=0x00;P0M1=0x00;P1M0=0x00;P1M1=0x00;P2M0=0x00;P2M1=0x00;P3M0=0x00;P3M1=0x00; 我对比了一下你们的程序,没发现什么问题,可以试试加入上面的,如果不行,可以检查一下TM7707是不是好的,也可以检查一下电路连接! |
用他们官方的参考代码 准行 |
fkup 发表于 2021-5-11 20:45 数值稳定,那是不是你分压网络或2.5v基准的误差没计算调节好,采集计算时乘上一个误差系数就可以了吧 |