使Pic端口浮动

时间:2011-04-15 22:36:17

标签: c# processor pic electronics

我有一张照片18f87j50。在我的一个数字I / O让我们说RH7,我想用它来给我一个0-3,3V的信号。我将其配置为输出并产生Pwm,因此我在示波器上读取2V。然后我尝试“释放”端口使其漂浮在那个2V级别。当“释放”时,我将端口作为输入并确保实习生上拉被禁用。

但我真的不喜欢这个,看起来它几乎快速回升到3.3V,因为仍然会启用上拉。我没有负载端口。

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

我这样做了吗? - >端口输出,pwm信号到所需电平,禁用内部上拉,使端口输入如此浮动可以启动。

亲切的问候

3 个答案:

答案 0 :(得分:1)

如果将引脚设置为输入,则它不会处于任何特定电压。这种方法不起作用。

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

顺便说一句,我不确定你如何在数字输出上看到2V(假设你的电源为3.3V)。

答案 1 :(得分:1)

如果要保持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;

答案 2 :(得分:0)

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

第一条电路设计不良导致它无法正常工作,并且一旦pwm被杀死,电压水平就会下降。

现在它有效。当pwming在一个环路内产生2个电压输出1ms时,释放然后继续我的程序,电路保持最后的已知电压几秒钟而不会掉电。

特殊电路由一些电容器和一个OP组成。

所以......这是一个硬件故障!对不起。