使Pic端口浮动

本文关键字:Pic | 更新日期: 2023-09-27 17:50:23

我有一个pic 18f87j50。在我的一个数字I/O上,比如说RH7,我想用它来给我一个0- 3,3v的信号。我将其配置为输出并产生PWM,因此我在示波器上读取2V。然后我试着"释放"。端口使它漂浮在那里,在这个2V电平。当"releasing"我把端口作为输入,并确保实习生上拉是禁用的。

但是我真的没有成功,看起来它很快就浮回3.3V,几乎就像上拉一样仍然是启用的。我在港口没有货物。

下一步是在那里放置一个运算放大器来产生0-10V信号。

我这样做对吗?→端口输出,pwm信号到所需的电平,禁用内部上拉,使端口输入可以启动浮动

使Pic端口浮动

如果你将引脚设置为输入,它将不会处于任何特定的电压。这个方法行不通。

如果你想要一个可控的电压水平,你唯一的选择(不使用额外的硬件)是使用CVREF引脚,它可以按照数据表第24章的描述进行控制。

顺便说一句,我不确定你怎么能在数字输出上看到2V(假设你的电源是3.3V)

如果你想保持由PWM产生的2V电平,你不能关闭PWM。

我不知道你"释放"这个端口想达到什么目的。

我在硬件方面帮不上太多的忙。

注释后更新:

如果可以,使用一个引脚,你有硬件支持的PWM做你想要的。如果你不能改变布局,你可能需要在软件中继续这样做。我不知道你在芯片上对RH7有什么硬件支持,对PWM的分配随处理器引脚数而变化。

这是我用来在基于PIC18F87J60的产品中配置PWM的一些代码。一旦设置好了,就不会再涉及软件了。

/*
 * Configure the powersupply to the external serial port.  To do this,
 * we configure a PWM to control the isolated 3V power supply.
 */
TRISC1 = 1;
TRISC2 = 1;
PR2 = 0xFF;
CCP1CON = 0x0c;     /* PWM mode, active high, single output */
CCP2CON = 0x0e;     /* PWM mode, active low, single output */
CCPR1L = 0x80;      /* 50% duty cycle */
CCPR2L = 0x80;      /* 50% duty cycle */
ECCP1AS = 0;        /* auto shutdown off */
ECCP2AS = 0;        /* auto shutdown off */
PIR1bits.TMR2IF = 0;
T2CON = 0x04;       /* Enable T2 timer, prescale and postscale 1:1 */
while (!PIR1bits.TMR2IF)
    ;
TRISC1 = 0;
TRISC2 = 0;

实际上,当我第一次写这个问题时,我忘记提到我有一个特殊的电路直接连接到端口输出。当pwm释放时,它包含该电路保持特定电压电平几秒钟。

第一个电路设计得很差,导致它不能正常工作,并且一旦pwm被杀死,电压水平就会下降。

现在它工作了。当pwming在1ms的循环内创建2个电压输出时,释放然后继续使用我的程序的其余部分,电路保持最后已知电压几秒钟而不下降。

特殊电路只是由一些电容器和一个op组成。

所以…这是硬件故障!不好意思

相关文章:
  • 没有找到相关文章