完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
您好,我正在寻找帮助或建议为特定的计数任务编程PSoC4。我的当前项目是通过捕获在音频信号的一个或多个周期期间出现的1MHz时钟脉冲的数量来建立精确的音频计数器。在低频段,一个周期就足够了,但是在较高的频率下,我需要在许多周期内测量以获得准确的结果(计数为50000或更多)。我使用的是PSOC4的外部晶体以确保精度。因此,我需要两个计数器,一个捕获总计数,一个保持输入周期数的计数。不幸的是,PSoC4没有足够的逻辑资源来实现两个足够长的计数器,加上需要将计数发送给处理器的状态寄存器。因此,我想知道我是否可以利用处理器中的SyBoT定时器和/或嵌套向量中断控制器(NVIC)来直接计算周期数。它实际上需要以最大50kHz的速率捕获脉冲,并且我不确定它是否能够以这种速率处理中断。那么,可以告诉我这是否可行?如果是,我需要一些帮助来编写代码来处理中断,因为这是一个我没有经验的领域。我总是发现,执行类似任务的代码示例是最好的起点,所以如果有人指向我现有的代码示例,这将是理想的。我意识到我总是可以使用一个更大的PSoC部分,但是PSoC4就是我所拥有的,如果可能的话,我愿意坚持下去。非常感谢任何人提供的帮助。
|
|
相关推荐
24个回答
|
|
|
基本频率计数器是耦合到计数器使能/读/状态寄存器的门。
SyTobe被CPU时钟计时,所以你可以使用它来生成门。 HTTP://www. CyPress?COM/?ID=4和;RID=94607 然后使用24位UDB计数器,实用工具逻辑组件库中的20位基本计数器,或者 组合7位计数器和软件计数其溢出,因为这将相对较低。 速度。 你想要测量的范围、分辨率(我看到1兆赫)和F的准确度是多少? 问候,Dana。 |
|
|
|
|
|
由于您通过引入晶体驱动时钟解决了项目的第一部分,剩下的就足够简单了。而不是计数中断驱动的单脉冲,这将消耗大量的MIPS在1兆赫,你可以使用计数器和中断时,计数器溢出。计数器、计数脉冲和计数PF周期都可以使用软件和硬件方法的组合,而不必破坏资源的可利用量。
尽管如此,您可以使用SyTalm计时器,并在计数倒计时时生成中断。查看系统参考指南(从创建者帮助菜单访问)第15章。 鲍勃 |
|
|
|
|
|
当计数低频时,倒易计数器更实用。
附加信息,超过你想知道的计数器。 AN52-1时间和频率的基本原理 HTTP://www. KeVis.COM/MIN/FACET.JSPX?CC=美国& LC= En&Km=AN52-1和Sm=G 2002年时间间隔测量基础 HTTP://www. GoGoLe.COM/URL?RCCT=J&P;ESCR= S&RAMP;源=Web&CAMP;VED= 0CCAQFJAA&A;URL= HTTP%3A%2F%2FWW.LAPAPTIL.COF2FPDF %2FAN200 -3。PDF&Em=SP6PoVQHL8YFGWSLXHWWBW &;UG= AFQJCNNGBPWCSPHKOBTNTnGVSR9XOEQ和BVM=BV 82001339,D EXY SA= T AN-200对频率计数器规范的理解 HTTP://www. GoGoLe.COM/URL?SA= T&RC==&;ErrC=S&OP;Cd=0CCFQFJAA&A;URL= HTTP %3A%2F%2FWW.LAPAPTIL.COF2FPDF %2FAN200 -4。PDF&EP=C5PVIPNSKVNV AHKGB &;UGG=AFQJCNHMLDQ5HS3SELDLD1NYRYCOQHJDW和BVM=BV 82001339,D EXY。 AN—1288计时技术 HTTP://www. GoGoLe.COM/URL?= J&P;ESCR= S&RAMP;源=0Cccqfjaa&;URL=HTTP %3A%2F%2FLATICATA.CONT%2FLITWEB%2FPDF %2F5965-7984E。PDF&EQ= PVPKYKGWGOT8YGAWA&USG=AFQJCNHD145GPHYX85 TKFPNA1HD4QUOG和BVM=BV 82001339,D Exy SA= T&RCT 问候,Dana。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
嗨,Dana,我怀疑只是把代码粘贴到帖子里不是做事情的正确方法。所以我道歉,我已经附加了工作区捆绑包文件。问候,肯。
FrqqMeer-0.0.CyWrk.SaveV01.Zip 1兆字节 |
|
|
|
|
|
an52-1时间和频率http://www.keysight.com/main/facet.jspx基础?&;CC =美国&;LC =英格&;K = an52-1 &;SM = G an200-3基本时间间隔测量http://www.google.com/url?SA = T &;RCT= J &;q = &;ESRC = S &;源=网站&;CD = 1 &;VED = 0ccaqfjaa &;URL = HTTP 2f 2fwww 3a % % % % %。leapsecond .com 2fpdf 2fan200-3 .pdf &;EI = sp6pvoqhl8yfgwslxihwbw &;USG = afqjcnerngbpwcsphkaobtnn_gvsr9xoeq &;BVM = BV。82001339,d.exy an200-4了解频率计数器规格HTTP://www. GoGoLe.COM/URL?SA = T &;RCT= J &;q = &;ESRC = S &;源=网站&;CD = 1,= 0ccwqfjaa &;&;URL = HTTP 2f 2fwww 3a % % % % %。leapsecond .com 2fpdf 2fan200-4 .pdf &;EI = C5 pvpirnskvnv ahkgb &;USG = afqjcnhmildqb5hs3se65ld1nrycoqhjdw &;BVM =公司。82001339、计时http://www.google.com/url d.exy an-1289科学吗?SA = T &;RCT= J &;q = &;ESRC = S &;源=网站&;CD = 1,= 0cccqfjaa &;&;URL = HTTP 2f 2fliterature 3a % % % % %。安捷伦.com 2flitweb 2fpdf 2f5965-7984e PDF & %。;EI = q5-pvpexkygwggto8ygiaw &;USG = afqjcnhd145gpheyx85tkfpna1hd4qauog &;容量= 82001339,d.exy BV。
|
|
|
|
|
|
我想你想把这个代码移到你的while循环之外。
而{},你继续重置音轨… 全局可中断/ /允许全局中断/映射SytSISR到用户定义的ISR。/SyStKyIrqn已经定义在CIEEJCM0PSOC4.4.H文件为-1 CyIntSetSysVector((SysTykIrqn+1),KeN-ISR);SysTykSeRe= SysTykSyFig(TIKS);/ /启用具有所需的TIKE号的SyTurn定时器。在这种情况下,马克斯 在另一个主题中,考虑使用缓冲器来处理LCD显示,如果 你在一个快速循环写液晶显示器你得到“工件”在液晶显示器上,可以看起来像 废话。所以反应是拖延,所以MIPS被扔掉是没有好处的。 原因。使用缓冲区消除了这种情况。例如,你有一个2×16的显示器,所以你 设置一个2×17数组,用null填充两个行的最后一个元素。然后你想要的每一次 要写到LCD,首先检查Buff字符,以查看它是否与你相同。 想写。如果是你什么都不做。如果需要更新,则只更新字符 已经改变,然后写缓冲器输出到LCD。现在不需要延迟。 问候,Dana。 |
|
|
|
|
|
嗨,Dana,鲍伯,谢谢你,你给了我很多信息,这需要一点消化——我还没看过你给柜台的所有链接。无论如何,回答你的第一个问题:范围是7Hz到100kHz。我希望在所有频率的50000的一个部分的准确性。这可能远远超出了我的模拟电路可以达到的稳定性,但我已经把它作为一个目标。一个1MHz的计数时钟将在低端给出大约143000个计数,这是可以的。在高端,我将得到每周期10个计数,所以将需要计算和5000个周期来获得我想要的分辨率。你提到一个倒数计数器对低频更实用。如果我理解正确,那就是我正在做的——我正在测量输入信号周期并转换到处理器中的频率。你们两个似乎都建议在硬件中使用少量的计数阶段,并捕获其溢出来继续在软件中计数。在我看来,这是最简单的方法,如果我理解正确,就不需要使用SyBar定时器。现在我的问题是:如何将溢出脉冲送到处理器?我认为它需要中断,所以我应该使用中断组件吗?(直到现在我只使用状态寄存器组件来捕获数据)中断组件数据表提供了一些关于编码的基本API信息,但是一个更完整的例子将非常有帮助。我已经查看了PSoC创建者起始页上的示例项目,但找不到任何显示中断的内容。不知你能否给我一个例子的链接?再次感谢。问候,肯。
|
|
|
|
|
|
我已经把您建议的代码行移到while循环之外。结果与以前一样。我也尝试移动行:CyDelay(30U);//允许30MS流逝CurrnthVal**(MySys+0x00 8);/ /然后读取while循环外的SyBurk电流值寄存器。再次,结果与以前相同,CurrestyVaL显示为0。我想这与我的第一个代码类似,只是我只执行一次SyBoT操作,而不是永远重复它们。所以我希望看到CurrntayVala的非零值。您使用缓冲区来处理LCD显示的意见是正确的;我确实得到了一个垃圾质量显示,并用延迟来修复它。你的建议听起来不错,所以我现在就试试看。多谢。问候,肯。
|
|
|
|
|
|
使用Syle和基本计数器设置为20位或更大,您将
不必计数侧翻脉冲来实现级联,计数器大。 足以捕获最大值。 实现ISR的两种方法,一种使用ISR组件的W/O,看看你的 组件(像计数器/计时器)ISR文件(启用中断) 在其全局属性或API调用创建此文件)中,您将看到 文件/文件顶部定义/变量声明的占位符 在ISR地方本身。将代码放在那里可以防止编译器 重写时重写该代码。 另一种方法是使用ISR组件,它创建自己的文件,或者您。 可以创建C ISR,如AP注释所示。 HTTP://www. CyPress?COM/?RID=38267 AN54060-PSoC®3、PSoC 4和PSoC 5LP中断 记住声明ISR中使用的变量变量。 HTTP://www. BARRG.P.COM/EnguldDeSts/Hoto-to/C挥发关键字 如果你声明一个值,比如全局。 UIT32 32挥发性MyFrq=0; 然后,在ISR中,它位于另一个文件中,而不是Meal.C,您 必须在该文件中声明变量为外部变量 外部UTIT32挥发性MyFrFq; 问候,Dana。 |
|
|
|
|
|
我假设您想测量连续的SyTUL测量之间经过的时间。因为该代码在下面。如果问题说明了SyBLE中断,请参阅附上的项目中的注释代码。
奥迪赛1 {定义24位的SysTykxMax ValxxFFFFFF//max允许的Syle计数器值 … int(){Unt3**MySys=(UINT32*)SysTykBase://指向寄存器的Sytle结构(参见CaleE.CM0.H)UINT32 SysCntVAL;//您试图检索的SyBar计数器的值为(;;){SysStKyMax Valg(SysStKyMax VALL);//重置计数器设置为最大值,1次,将不重复。AD SysSntVall=*(MySys+0x002);//记录当前值//CyDelayUS(1000);//100US:2449;1000 US:24051;CyDelay(100);//10ms:240056,100ms:2400055,必须小于SysTykxMax ValSysNtVALL=*(MySys+0x002);/ /减去先前值/ /替代方式…//SysTyksCONFIG(/SysTyksMax Valf);//设置为最大24位值,1次计数器,将不重新加载///CyDelayUS(1000);//100US:2461;1000 CyDelay:(24063);//10ms:240067,100ms:2400067,必须小于SysTykxMax Val//SysCntVals= SysTykxMax Valx *(MySys+0x002);//~67刻度误差fStAsTestFF(STRMSG1),%DRN“,SysCntVal”;//RePrimtKS逝去的UARTURL PATSHIPE(STRMSG1);CyDelay(50);} SysTyk4Y01.CyWrk.SaveV01.Zip 206.3 K |
|
|
|
|
|
嗨,Dana,我用一个18位的基本计数器来计数1MHz的脉冲。这足够大了。为了计算在较高频率下的信号脉冲的数目,我认为我应该使用ISR组件来允许在软件中计数。我已经在中断上下载了App Note AN90799,这给了非常全面的指导加上例子,所以我想我应该能够从中找出做什么。谢谢你指引我到那个应用笔记。你在答复中的进一步说明是有帮助的,并且建议它不要太难。所以现在我要走了,继续下去,虽然我可能需要再回来,如果我被卡住了!再次感谢。问候,肯。
|
|
|
|
|
|
再次问好,终于成功了!我已经尝试过你在上一篇文章中建议的代码,它是有效的!现在我可以通过设置从SysTykBaseBasic偏移的地址指针作为2而不是8来读取当前值寄存器的内容。这是造成所有问题的原因。但是我很困惑为什么2是偏移量,当CoeLyCM0.h文件和你以前的文章指出偏移量应该是8。下面是从CAREYCMO.H开始的代码片段,从第408行开始:/**简要结构类型来访问系统定时器(SytBar)。*/TyBuffsStruts{SysIO UIT32 32 T CTRL;/*!偏移量:0x000(R/W)SyStand控件和状态寄存器*/YixIO UIT32 32 t加载;偏移量:0x00(R/W)SyBUL重载值寄存器*/YixIO UIT32 32 t Val.;/*!偏移量:0x00 8(R/W)SyBUL电流值寄存器*/YI I uTIN 32×TILB;偏移量:0x00 C(R/)SyTube校准寄存器* /对此有何评论?多谢,肯。
|
|
|
|
|
|
如果你想运行你的程序在非常高的频率,你会吃了
所有机器都是MIPS。我不能用一个固定的值说话,但是& lt;100千赫。 我认为是谨慎的。使用HW为& gt;100千赫。 问候,Dana。 |
|
|
|
|
|
|
|
|
|
|
|
我的计划是先在硬件中划分几个阶段,这样用中断来计数的频率大约为1kHz(每毫秒1个脉冲)。你认为这样行吗?问候,肯。
|
|
|
|
|
|
这里是主要的简化(经过一些修补)。该代码在大小/速度优化下正确运行。
奥迪赛1 {定义24位的SysTykxMax ValxxFFFFFF//max允许的Syle计数器值 UUNT32 SysNTVAL;/ /您试图检索的SyBar计数器的值 浮点x= 1.0f;//某些变量与SysTykSyFig(SysTykMax VALL)工作;//重置计数器设置为最大值,1次,不重载。 x+=(浮点)0.0001; SysCntVal= SyStKyMax Val-(SytLo& & Gt;Valm);//获取经过的蜱(min偏移3滴答)SAMFETF(STRMSG1,“%D,%FRN”,SysCntVal,X);/ /报告结果UARTURL PATSHIPE(STRMSG1); |
|
|
|
|
|
您可以在这里通过“HLI”(FrqMebe捆绑)找到对等计数器的PSoC3实现:
HTTP://www. CyPress?COM/?APP =论坛和ID ID=2232和;RID=66882 PSOC5在这里: HTTP//BLG.HEDRIKLIPKA.DE/CARIVES/2013/12/PSoCuffyNyCyTyOffy3.HTHTML 这里解释: HTTP//BLG.HEDRIKLIPKA.DE/CARIVES/2012/04/FrqMeMeLyION.HTML 这里演示: HTTPS://www. Youtub.com /手表?V= 4OK3SyZsZuu 奥迪赛1 |
|
|
|
|
只有小组成员才能发言,加入小组>>
786个成员聚集在这个小组
加入小组cyUSB3014一直显示2.1,不能到3.0情况,谁遇到过
7088 浏览 0 评论
2474 浏览 1 评论
2166 浏览 1 评论
4031 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
2073 浏览 6 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
7567浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
6114浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
742浏览 2评论
710浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
7962浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 09:30 , Processed in 1.837405 second(s), Total 110, Slave 93 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1116