完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
您好,我的当前项目使用PIC18F25K50通过I2C与ADC接口,并通过USB将结果发送到PC。经过大量的努力,我已经成功地建立了USB接口,以微芯片应用程序库(MLA)中的示例代码为起点。这工作正常,并且和我的PC上的HID窗口通信。我还在MPLLABXIDE中使用MCC工具分别设置了I2C接口。这也没有问题,从ADC捕获读数。在mcc.c文件中,我编辑了所有的配置设置和振荡器设置to与USB版本相同。一切仍然正常。当我尝试组合这两个文件时,问题就开始了。MCC生成两对I2C所需的文件:i2c.h和i2c.cinter._manager.h和inter._manager.cStarting,从我的USB工作代码开始,我已经将这些文件复制到项目目录中。必要的代码行到main.c和system.c文件,例如:#include inter._manager.h INTERRUPT_GlobalInter.Enable();INTERRUPT_.pheralInter.Enable();当然还有调用I2C写和读的代码。我已经正确地完成了所有这些,因为编译(构建)没有错误。但是当我对芯片编程时,它不工作。现在,我有一个通常的.(1)永久循环,并且我有一个输出引脚设置以在循环开始时给出单个脉冲,我用“范围”监视。工作时,这个脉冲是不存在的,这有力地暗示了程序流被卡住了。仔细观察,我发现它只是在开机时出现。如果我只是注释掉调用I2C写和读的代码,然后恢复正常的正确操作。在我看来,所有这些都表明了USB和I2C生成/要求的中断中存在某种冲突,所以它会被卡住,等待一个永远不会发生的响应。不管是什么原因,现在是我的项目被卡住了!我没有尝试过使用Debug,主要是因为我不熟悉它,并且怀疑它不会识别出问题。如果需要的话,我可以把我的代码放在这篇文章中,但是相当多。我在微芯片网站上找不到在同一个设备上使用USB和I2C的任何东西。底线:Can anyon你建议我该怎么做,或者我应该在哪里寻求帮助?多谢,肯。
|
|
相关推荐
10个回答
|
|
|
嗨,杰克,我确实考虑过附加软件包文件,但是决定先解释一下问题。不管怎样,现在附在这里。有两种版本,正如名字所描述的。当然,没有ADC芯片,I2C版本不会给出合理的响应,但我认为即使这样,你也应该能够。看到它工作正常。K.OOPS,它只会让我附加一个文件(?)我将用第二份文件另行答复。肯。
|
|
|
|
|
|
你好,这里是第二个文件。肯。
|
|
|
|
|
|
大家好,一个月多过去了,我对我的帖子没有进一步的回应,所以我想是时候更新这个帖子了。我已经通过放弃使用MCC工具生成的I2C接口代码的所有尝试解决了这个问题。相反,我在SCK和SDA管脚上以简单的逻辑电平序列的形式编写了自己的I2C代码,满足了ADC芯片的要求。我认为这叫做“咬屁股”。虽然没有尝试记录错误,避免与USB接口的定时冲突,或者检查是否正确转换,但是看起来仍然可以工作,也许是因为ADC以连续的自由运行模式运行。通信。但我仍然担心为什么我不能得到由微芯片提供/生成的代码来工作。毕竟,这样做是为了省去我为标准功能重新发明新代码的麻烦。我确信在微芯片组织中一定有人知道如何用PIC18F25K50设备完成这项工作。问题是找到信息。也许我可以花很多时间阅读关于如何处理来自多个源的中断的数据表,但是再一次,我原本认为预先设计的代码的目标之一是节省我的努力。有人对此有进一步的评论或想法吗?谢谢,肯。
|
|
|
|
|
|
我总是喜欢在I2C模块上敲击
|
|
|
|
|
|
嗨,一个月前Ken.n没有注意到你的留言。我已经将MCC生成的I2C驱动程序用于一些不同的设备,并让它们第一次工作。但是,我观察到了一些缺点,并且做了一些改变。在我的印象中,PIC微控制器中的I2C硬件工作正常。I2C在概念上看起来很简单,但是I2C硬件已经按照预期检查了通信功能。如果出现问题,I2C硬件将设置状态标志,然后拒绝执行任何操作。直到软件解决问题。如果软件没有正确响应,I2C通信停止。进行自己的位转换,可以忽略任何问题并继续,就像串行通信一样。就像在主程序循环中一样,在进入和离开中断时可以切换引脚我将查看在消息3和4中发布的代码,但至少要花上几天时间。
|
|
|
|
|
|
您好,这是在Simulator中尝试构建并进入程序的一些初步观察:来自消息#3和#4的两个项目都不完整,目录:._C_Library只包含一个头文件,没有函数体的源代码。语句错误:#include"string_function.c"这个名称的文件....c在项目中找不到。File:._set.c也找不到。在构建程序时,有未定义的引用:_intToStr_ken表示函数的源代码:intToStr_ken(...)不是预先定义的。在main.c的第136行中调用该函数。对于不同的外围设备,当有几个初始化函数要从main调用时,通常一个好习惯是不启用全局中断,直到所有外围设备都已初始化。函数:ADC_Initialize();I2C1_Initialize();由SYSTEM_Initialize()函数在文件:mcc.c和:main.c"u._ms(30);//中都调用,这实际上是大约4mS"如果调用宏:u._ms(...)给出与预期显著不同的效果,则宏:#._XTAL_FREQ 16000000与实际时钟频率不同。我不知道这是来自MCC的错误,或者您手动更改了mcc.c中的振荡器设置,并且没有对mcc.hIn函数ADC_Initialize(...)进行相应的更改,MCC通过在其他设置操作之前设置模块启用位ADON演示了糟糕的编程实践勃起。在PIC18F25K50数据表页293中,这是设置操作的最后一步,在最终中断设置之前。ADC时钟分频器设置:如果启用PLL,ADCS FOSC/8;可能太低。在函数I2C_Initialize(...)//波特率生成器值:SSP1ADD 39;SSP1ADD=0x27;这里假设系统时钟fr对于I2C位传输频率==100kHz,equency==16MHz。如果为USB操作启用了PLL,则应该更改此值,除非I2C总线上的设备都能够以300kHz或400kHz的I2C频率运行。在USB项目中,缺少文件:app_device_._hid.happ_led_u***_status.hio_map。Mysil
|
|
|
|
|
|
嗨,两个项目都有重用错误,您可能收到关于如何在开发IDE中创建项目的错误建议或误导性说明。在两个项目的main.c文件中,对于各种C源代码文件都有许多include语句:include"pin_manager.c"include"这通常是错误的。它可能在一些简单的项目中工作,但是随着项目变得更大,或者更复杂,将导致项目变得难以编辑和调试,并且通常令人困惑。您可能已经收到在IDE项目中包括文件的指令:这意味着将每个文件引入IDE管理项目层次结构:MPLAB X窗口中的左上面板“项目”。将光标指向适当的文件夹,单击右按钮,然后选择:“添加现有项……”您可以创建新的逻辑文件夹,因为您可能发现它是逻辑的。不要为源文件写#include语句。c当有相应的头文件:filename.h以同样的方式将这些文件介绍给MPLAB X,对于头文件,在将调用相应文件的函数的文件中写入#include"filename.h"语句。侧头文件。通过这种方式,“u***.h”将使许多u***可用,“mcc.h”将使MCC创建的所有函数可用。注意:编译器不知道头文件的IDE视图。在Project Properties中,对于每个配置,在“XC8编译器”分支中有一个框:“选项C”。“ategories”>select:“Pre.and Messages”有一行:“Include directories”字段包含一个搜索列表,该列表可能有几个目录名。在DMM_Vol._v1项目中,该列表已经包含当前目录、bsp目录和u***目录。“erated_files”和“C_Programming/._C_Library”目录在搜索列表中。在字段的右端有一个浏览菜单按钮[…]。
|
|
|
|
|
|
你好,Mysil,谢谢你的回复和评论。正如你所说的,我提供的代码信息是不完整的。我原以为“package”工具包括了项目所需的所有文件,但是它错了——没有在项目目录中的文件被省略了。关于这一点,以及您关于丢失文件的其他注释,请放心,代码编译正确,没有错误。希望其他人尝试编译我的代码;我只是期待一些注释,您确实提供了这些注释。关于时钟频率,USB功能要求对48MHz时钟启用PLL,并设置OSCTUNE、OSCCON和OSCCON2来给出这个值。如果我记得正确的话,当我把设置xTalthFrq设置为48000000时,它反对这个值太大。在玩了一些之后,我只是将它设置为200万,这似乎是OLED显示器的正确值,只要_u._ms(或我们)宏被调整到适合,就可以正常工作。有点模糊,但我只是想让代码运行。您对函数I2C_Initialize(...)的评论表明这可能是个问题。所以,也许我应该试着用_XTAL_FREQ的设置做一些进一步的实验。你对初始化函数的评论是最相关的——我没记下你的评论,而且会试一试。------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------感谢您对“包含语句”和“逻辑文件夹中的文件”的注释。我必须承认,对于放置#include语句以及使用子目录的整个业务,我相当困惑。我的代码中的#include与取自Micro.Library for.(MLA)的USB接口的示例代码中给出的基本相同,因此这就是我的起点。我可能已经移动了一些_入侵_在早些时候试图让事情工作。无论如何,这与所有的项目都非常相关,所以我会仔细地记住你说的话,并将其应用到当前的项目中。我不得不说,尽管我抱怨,原来的问题现在对我来说是相当低优先级的。正如我在前面的回复中提到的,我已经通过位敲击I2C接口完成了完整的代码,并且我的主要任务是按下项目。所以,可能需要一些时间我才能回到对原始问题代码的调查中。但我会立即对您的第二次回复采取行动。非常感谢您的帮助。问候,肯。
|
|
|
|
|
|
你需要把这个排序。xxTalthFrq只是一个定义,所以没有办法会产生错误。你一定在我使用过的地方收到了一个错误,很可能是在一个AyWaWiTi Msor()中,或者是一个YavaWiTug()宏。把“xxTaluffFrq”设置为48000000,然后追查到底是什么给了一个错误。
|
|
|
|
|
|
我的道歉,你是对的,太大的价值在陈述中:Sy-DelayyMS(400);和类似的。(记不清确切数字)。问题之一是,我经常在代码工作之前进行剪切和更改,有时会忘记我所拥有的内容。我知道这不是建立一个坚固的项目的方法,我更喜欢严谨和学习如何正确地编码。但它会让我永远,生命太短暂,我只是为了自己的满足而做一个业余爱好者。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 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-2 06:00 , Processed in 1.131142 second(s), Total 92, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2259