发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 无法使PWM输出在PIC24F16KM102上工作
92 PWM adc LED
分享
我是PIC控制器的新手。我已经成功地使ADC工作,并设置了定时器来切换LED的。我甚至有引脚20来输出s/w产生的PWM,但是只有几百赫兹。但是,我不能得到输出比较模块输出PWM。我已经阅读了所有可用的手册并尝试了一切。请给出一些关于我遗漏或做错的建议。在模拟器上运行我的代码并监视OC1A,它显示OC模块控制pin和pin设置为Dout,但是在部分运行代码时没有输出。配置://PIC24F16KM102配置位设置//FBS#pragma配置BWRP=OFF//引导段写保护(禁用)#pragma配置BSS=OFF//引导段保护(无引导程序闪存段)//FGS#pragma配置GWRP=OFF//通用段写保护(可以写入通用段)#pragma配置GCP=OFF//通用段代码保护(无保护)//FOSCSEL#pragma config FNOSC = FRCPLL//振荡器选择(带后标器和PLL模块的快速RC振荡器(FRCDIV+PLL))#pragma config SOSCSRC = DIG//SOSC源类型(与外部源一起使用的数字模式)#pragma config LPRCSEL = LPRC//LPRC振荡器功率和准确度(低功率,低精度)ACY模式)#pragma config IESO=OFF//Internal External Switch Over bit(禁用内部外部切换模式(禁用双速启动)//FOSC#pragma config POSCMOD=NONE//主振荡器配置位(禁用主振荡器)#pragma config OSCIOFNC=IO//CLKO Enable Co配置位(端口I/O启用(CLKO禁用)#pragma配置POSCFREQ=LS//主振荡器频率范围配置位(主振荡器/外部时钟输入频率小于100kHz)#pragma配置SOSCSEL=SOSCLP//SOSC功率选择配置位(次级振荡器)r配置用于低功耗操作)pragma config FCKSM=CSECMD//时钟切换和监视器选择(启用时钟切换,禁用故障安全时钟监视器)//FWDTpragma config WDTPS=PS32768//看门狗定时器后级选择位(1:32768)\pragma config FWPSA=PR128//WDT Pre缩放器位(WDT预缩放比为1:128)#pragma配置FWDTEN=OFF//看门狗定时器启用位(硬件禁用WDT;SWDTEN位禁用)#pragma配置WINDIS=OFF//Windowd看门狗定时器禁用位(标准WDT选择(禁用窗口WDT)//FPOR#pragma配置BOREN=BOR3//Br自带复位启用位(在硬件中启用了BrownOut复位,禁用了SBOREN位)\pragma配置PWRTEN=ON//上电定时器启用位(启用了PWRT)\pragma配置I2C1SEL=PRI//备用I2C1引脚映射位(对I2C1使用默认SCL1/SDA1引脚)\pragma配置BORV=V30//Brown out复位电压位(布朗-出重置设置为最高电压(3.0V))#pragma配置MCLRE=ON//MCLR管脚启用位(RA5输入管脚禁用,MCLR管脚启用,启用RA5输入管脚禁用,MCLR管脚启用)//FICD\\#prag\#pragma配置ICICICX1=PGx1//ICD管脚放置选择位(EMUC/EMUC/EMUC/EMUD共享PGC1 PGC1 PGC1 PGC1/PGC1/PGD1)PGC1/PGD1)OCC设置:ANSB&&;=0xFEFF;=0xFEFF=0xFEFFFF;//8位TRISA&=0xFFBF;//将引脚20RA6定义为输出引脚20RA6作为输出引脚20RA6定义为输出TRISB&=0x7EE7;//将引脚20RA6引脚20RA6定义为输出TRISB&&;//将引脚20RA6定义为输出TRISB&&=0x77EE7;//将引脚2020RA6定义引脚20RA6引脚20RA6定义为输出引脚20RA6定义为输出TRISB&TRISB&&&;//将引脚20针20RA6定义引脚20RA6定义为输出引脚20RA6定义为输出引脚20RA6定义为输出TRISB&&&&;//将引脚20XXX7F;/设置PWM频率,A应产生f=25kHzw16预分频器CCP1CON1L=0x00C5;//位15禁用PWM,位11=0设置同步模式//位7,6设置预分频器32,位3-0=0x0101设置PWM模式CCP1CON1H=0x0000;CCP1CON2L=0xC000;//位15允许从关机重新启动PWM。//bit 14设置关机延迟,直到下一次翻转CCP1CON2H=0x8100;/ /位15套等待下一次翻转。用于NEG//位8的Olin 8100允许在OC1A(引脚20)上输出CCP1CON3L=0x0000;CCP1CON3H=0x000A;//引脚驱动在关闭时不活动。CCP1PRH=0x0000;CCP1PRL=0x027F;//实时PWM值8MSB(10个)CCP1CON1L|=0x8000;//启用PWMMain代码:int main(void){int COUNTER;/*Infinite Loop*/.(1){COUNTER+;COUNTER--}}
0
2019-11-11 06:24:09   评论 分享淘帖 邀请回答

相关问题

19个回答
请张贴您的真实代码,而不是片断。如张贴,您的主要功能从不调用代码来设置PWM。
2019-11-11 06:42:02 评论

举报

@ QHP,OP下一篇文章可能会保持适度,所以这里有可能发布的代码:
2019-11-11 06:47:58 评论

举报

品尝少数民族报告!!!!
2019-11-11 07:07:00 评论

举报

非常感谢你的快速回答。我上传了dan1138的建议代码,但是我在引脚17或20上仍然没有活动。我有用于驱动PWM的应用板的旧十六进制代码。此代码运行良好,并在引脚20上给出了预期的活动。因此,我知道这部分没问题,而且电路板上的电路没有阻止引脚切换。看来我的问题不在于代码或配置。仍然卡住:
2019-11-11 07:20:26 评论

举报

我只能说oop,我漏掉了一点。字面上刚好是一位。具体来说,当使用自触发模式时,CCP1CON1H寄存器中的RTGEN位必须设置为一位。这里是此次“应该”工作的修订代码:
2019-11-11 07:34:40 评论

举报

谢谢丹1138,一直旅行到结婚。将在星期四尝试。
2019-11-11 07:46:51 评论

举报

我尝试了dan1138的修改代码,但是仍然没有得到任何关于18号引脚17的信息。这是否是由于选择汇编程序或者它的设置造成的?我使用XC16(V.1.31),除了添加之外没有做任何设置更改。并且…C包含“全局选项”“预处理和消息”目录
2019-11-11 07:59:58 评论

举报

我最后一个帖子出错了。我在17或20脚上没有动作。
2019-11-11 08:16:10 评论

举报

DAN1138,我使用您的代码不变,并且没有添加。我的代码中使用的开漏只用于故障排除。与PWM关机相同。我还有其他引脚连接到控制LED和读取输入电压。我将隔离所有不参与PWM电路的引脚,然后再试一次。明天我将报告我的发现。
2019-11-11 08:21:27 评论

举报

除非我在系统时钟设置中产生了一个骨头错误,这个代码应该使PWM引脚工作:
2019-11-11 08:28:01 评论

举报

我已经连接了一个全新的部件(PIC24F16KM202不能从DigiKi获得KM102)。上电引脚13和28。接地在8和27上。将我的PICTIT3(引脚1到5)连接到引脚1, 13, 8、4, 5。我独自坐在我的实验台上。我使用MPLAB X IDE v3.55命令“Make and Program Device Main Program”MPLAB报告用上面的代码编写了一部分:连接到MPLAB PICkit 3……当前在PICkit 3Firmware套件版本上加载了固件……01.47.12Firmware类型……ds……PIC33F/24F/24HTarget电压检测目标设备PIC24F16KM202找到。设备ID修订=0设备擦除...编程...以下存储区域将被编程:程序存储器:开始地址=0x0,结束地址=0x3ffconfigurationmemoryProgramming/VerifyCompleteDisconnectPickit3和po在引脚17或20上没有任何部分:(我也尝试了PICKIT连接和调试器运行。我暂停PIC和单步,CCP1TMRL每一步递增2。我不知所措。
2019-11-11 08:34:02 评论

举报

你所做的似乎是正确的。如果代码正确,则PWM输出必须正常。我重新检查了我发布的代码,没有发现任何错误。请使用调试模式读取这些寄存器值:如果这些值都正确,则PWM输出必须存在,并且您的测试方法不正确。
2019-11-11 08:41:16 评论

举报

所有的数值都是正确的。也许PWM频率不是25KHz,并且对于你的仪表来说太高而无法测量。检查针是否正在脉冲的“低技术”方法是使用带有串联电阻的LED来查看是否有脉冲出现。
2019-11-11 09:06:07 评论

举报

为了确认我不是完全不能修改dan1138的代码,我用11行切换引脚2(RA0)。将if语句中的值分别更改为50000和100000,将频率减半到1.8赫兹。
2019-11-11 09:14:57 评论

举报

我把IF语句值改为3和6,得到25.17 kHz,然后改为1和2,得到56.4 kHz。不是3X,但我希望其他的线路消耗一些处理时间。然后我把140号线改为“X”,定义了pWMLY周期(FCYC//(5000 0L*1L)),AM仍然没有看到PIN 17上的任何东西。下周将返回我的范围,但不要期望看到任何不同的东西。
2019-11-11 09:21:26 评论

举报

嗨,你确定PIC正在按你期望的频率运行吗?你是否在一个引脚上切换LED以确保它是正确的频率?当做
2019-11-11 09:33:45 评论

举报

您已经验证您的PIC24F16KM202是用您正在构建的代码编程的。系统时钟正在运行,您的表可以测量56KHz的频率。这只留下我发布的代码有故障。在PIC24F16KM202中初始化PWM时一定有遗漏的地方。is功能块似乎与PIC24FJ1024GB610中使用的功能块相同,并且所发布的代码在该部分上工作。到目前为止,我一直无法找到我没有正确配置PWM的内容。DIP-28包中的PIC24F16KM102在DigiKey中列出为过时。我找不到原因。
2019-11-11 09:39:17 评论

举报

我发现了我的骨头错误。第一个问题是时钟切换不能使PIC24F16KM202在32MHz下运行。第二个问题是CCP1必须在设置周期和占空比寄存器之前选择PWM缓冲模式。此代码是固定的,并验证它确实在PIC24FKM202上工作:
2019-11-11 09:50:42 评论

举报

只有小组成员才能发言,加入小组>>

64个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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