完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好。我仍在我的项目“自动化”我的铁路立体图N刻度。我在MPLABX IDE上使用pic16F873-04和XC8。请不要问我为什么使用这个设备。我已经在其他线程中回复了很多次。我想把4个控制器连接到一个主控上,现在我正在尝试开发i2c通信,但是我有一些问题。将来可能切换到RS485,但现在i2c是我的目标。在下一张图片中会有一些传感器,并且每个需要告诉其他控制器wich传感器在网络中激活:例如,排除pic1(master),pic2会有sens2,pic3 sens3,pic4 sens4……d,通过主推,发送SeN2和SeN4到PIC3的状态。我想这是很清楚的。我不解释其他的组合。因此,在网络中,必须运行从主节点开始的指令,或者通过从节点发送的指令。目前我正试图将主节点连接到一个从节点。请看这个但是不关心eprom。我想通过按主开关来接通从机上的led。转发主从机的代码。它来自这里,http://EndoRo.COM/I…Mealer-MPLAB-XC8/,并根据我的需要进行修改。传输在这个链接上是可见的HTTPS://www. Youtub.com /手表?V=W56PNRPU144。您可以通过主控和接收PROP来检查寻址组。在这个视频中,主开关在RC0上,现在在RC1上。在第二组中,您可以看到0x31上的寻址,并且数据总是由接受者发送到ON上。我认为这是不好的,因为相同的信号就像没有奴隶连接。我认为主代码有一些问题,我不能为这个问题从奴隶那里找到答案。有人能帮我找到解决办法吗?对不起,很多评论都是意大利语。
|
|
相关推荐
18个回答
|
|
|
P.S.为什么要把总线速度作为参数传递给I2CJMaskIn()函数?这不必要地使事情复杂化。仅仅使它恒定,并且让编译器执行计算比在运行时执行要容易得多。
|
|
|
|
|
|
那么,你有什么建议吗?你对这个问题有什么看法?你有什么建议?你可以写一些代码吗?
|
|
|
|
|
|
不,这有两点不对。第一,我说了“等待”,即等到前一个动作完成,然后接收的ACK状态将处于ACKSTAT位,ACKDT用于发送,而不是接收。只读一次。如果它是高的(那是NAK),那么奴隶就没有反应。没有必要等待它变低,以后再也不会这样了,所以中止并报告一个错误。你有什么建议?你可以写一些代码吗?不要将32位值作为参数“c”传递给init代码(这相当低效),只需在C filethen中早一点进行更改,现在表达式中的所有数字在编译时都是已知的,所以编译器只需计算所需的常数值就可以写入SSPADD,.她在运行时必须进行32位计算。8位处理器中的32位运算总是低效的。
|
|
|
|
|
|
不,这有两点不对。第一,我说了“等待”,即等到前一个动作完成,然后接收的ACK状态将处于ACKSTAT位,ACKDT用于发送,而不是接收。只读一次。如果它是高的(那是NAK),那么奴隶就没有反应。没有必要等待它变低,之后它永远不会变低,所以中止并报告一个错误。好的,你的意思是简单地_u._us(10)或者更多,或者最好添加一个“I2C_Master_Wait()”,其中它呈现SSPCON2:4位4ACKEN:Acknowledge Sequence Enable bit(仅在I1415C主模式下)在Ma中ster接收模式:1=在SDA和SCL管脚上启动Acknowledge序列并发送ACKDT数据位。由硬件自动清除。0=Acknowledge序列空闲。也许将来我会这么做,在优化时刻,我习惯于分组定义和数据区中的其他内容…所以,现在我不关心这个,不管怎么理解,这对我来说是新的。谢谢,我不知道所有的程序员都在耍花招。
|
|
|
|
|
|
好的,您是指简单地_u._us(10)或更多,还是最好添加一个“I2C_Master_Wait()”,其中它呈现SSPCON2:4位4ACKEN:Ac.Sequence Enable位(仅在I14C主模式下),在主接收模式:1=在SDA和SCL管脚上初始化Ac.sequence并发送ACKDT数据位。通过硬件.0=Acknowledgesequenceidle自动清除。也许将来我会这么做,在优化时刻,我习惯于分组定义和数据化区域中的其他事情……所以,现在我不关心这个,不管怎么理解,这对我来说是新的。谢谢,我不知道所有的程序员都在耍花招。
|
|
|
|
|
|
使用I2C_Master_Wait()这是用于发送确认序列,而不是用于接收确认序列。也许将来我会这么做,在优化时刻,我习惯于分组定义和数据区中的其他事情……所以,现在我不关心这个,不管怎么理解,这对我来说是新的。谢谢,我不太懂程序员的诀窍。我个人认为我建议的方法比较简单。将值作为参数传递给函数是更复杂的方法。
|
|
|
|
|
|
抱歉,但是读代码不明白我需要在哪里添加I2C.MigMistWaIT()?它已经在任何例程中了:-I2C_Master_Start-I2C_Master_RepeatedStart-I2C_Master_Stop-I2C_Master_Write-I2C_Master_ReadInsert,它在代码中就像向前插入一样,只是要在两个序列之间乘以延迟?这是你的意思吗?
|
|
|
|
|
|
正如我所说的,你需要在读AkStAT位之前完成它。I2C_Master_Start();//Start条件I2C_Master_Write(0x30);//7位地址+Write I2C_Master_Wait();//等待直到Master_Write完成//READ ACKSTAT HERE。如果它高,则发送停止条件并中止。I2C.MistMrimeWrrad(RC1<lt;1);//写入数据I2ClMistuxSth();//停止条件
|
|
|
|
|
|
可以理解。现在等待周期中的while条件是“.((SSPSTAT&0b00000100)|(SSPCON2&0b00011111))”,我需要更改while条件。AksAT将被添加到一会儿,我会试试看。
|
|
|
|
|
|
好的,现在SCD是5v,SCL是0v。现在,Slave不发送AKC。我把它放在主主代码RC7=ACKSTAT中,实际上它是关闭的。从代码中可能存在错误吗?在哪里?
|
|
|
|
|
|
你究竟为什么要那样做?这与我一直要求你做的不一样。等待ACKSTAT是错误的,错误的,错误的。再一次,你等待写完成,然后你读ACKSTAT一次,只有.0是ACK,这意味着它工作.1是NAK,这意味着它不是,这意味着你做错了什么。再看一遍绝对没有意义。NAK本身不会改变为ACK。
|
|
|
|
|
|
对不起,我误解了。你是指这样的事吗?你喜欢休息,还是“中止”意味着其他?
|
|
|
|
|
|
对不起,我在用示波器做一些测量。我正在逐行注释主代码,在while循环中。0x30=0b00110000->7bit=0110000+0(/W发送数据)+1(NoAc.)=total 9.clock0x18=0b00011000->7bit=0011000+0(/W发送数据)+1(NoAc.)=total 9.clock.,查看这个链接:https://cdn.sp。com/./6/4/7/1/e/51ae0000ce395f645d000000.在A2A1A0时钟电平中,SDA是低的,然后是8°SDA是低的(主发送),然后总是高的(从机不响应)。地址是否与0x18对应?其他问题:SDA在SCL后下降250U。这将是相反的顺序吗?看这里,12秒从开始:HTTPS://www. Youtub.com /手表?v=W56Pnrpu144对于地址的正确编码,我必须检查电平,低或高,或在边缘,上升i下降,以验证SDA状态?
|
|
|
|
|
|
然而,RC7上的AcStAT总是打开,并且以这种方式的IF循环中的中断总是被激活。受示波器影响,主端总是没有寻址,每400毫秒。如果我把RC7 led放入从代码中,在“中断I2C_Slave_Read()”之前,led总是打开的。如果我把它放入if循环中,如果(SSPIF==1)led总是关闭的。这个中断不是由ma发送的。或者它不被奴隶阅读。在这一点上,是主人还是奴隶不工作?
|
|
|
|
|
|
所以这表示您的通信根本没有工作。您的范围是否确认发送了正确的START,然后发送了正确的地址,并发出第九个时钟脉冲以获取ACK/NAK位?SDA信号的电平是什么,而SCL信号是第九次的高电平?
|
|
|
|
|
|
请检查从左到右发回的相同链接,https://cdn.spark..com/./6/4/7/1/e/51ae0000ce395f645d000000.png。首先我有一个区别,可能是造成问题的主要原因。在后面的帖子中,我写道:SDA在SCL之后下降250uS。这将是相反的顺序吗?在SDA序列中,在寻址7个时钟(A6-A0)之后,我有对应于R/nW(从主设备发送)的低电平的第8时钟脉冲,第9时钟具有高电平(ack未接收)。
|
|
|
|
|
|
你确定没有SDA和SCL交换吗?图是正确的,SDA在引脚15上,SCL为14。
|
|
|
|
|
|
我想不行,董事会在家里。然而,最重要的是,网络中的所有SDA都是连接的,并且所有SCL都是连接的,就像我发回的一些帖子的示意图一样。现在示意图中的eprom没有。目前我的板只有2微米,两个引脚14和两个引脚15都连接。我来查一下,但我肯定。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5795 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1126浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 06:04 , Processed in 1.201804 second(s), Total 106, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2031