5

我希望这是一个与 Atmel AVR 微控制器有关的简单问题。所以我想使用 ATtiny85 的模拟比较器来确定信号是高于还是低于阈值。该信号通常是“浮动的”,并在“活动”时拉向地线(即它是一个活动的低电平 - 集电极开路信号)。如果我通过执行以下操作启用输入引脚(也是比较器输入)上的上拉:

DDRB  = 0x00; // DDRB.1  = 0 = input 
PORTB = 0xFF; // PORTB.1 = 1 = internal pullup enabled

如果我使用模拟比较器并选择 PORTB.1 作为 AIN1,内部上拉电阻会应用于我的输入信号吗?我希望有人有个人经验来验证这种行为。希望这个问题对于堆栈溢出来说不是太“面向硬件”。谢谢!

编辑 针对以下关于“为什么不对其进行数字处理”的一些评论,这是因为我的“信号”是由传感器(即光学红外传感器)生成的。我不能保证它会拉低“足够硬”以在数字上被解释为零,所以我将使用内部 2.56V 参考作为我的开关阈值。我只是想了解“IR 事件”,所以这对我来说似乎是最简单的方法。

此外,通过使用模拟比较器,我可以使用 ISR“异步”检测事件。授予某些引脚可以在数字边缘调用中断,但不想依赖响应降至 V_IL 以下。

4

3 回答 3

4

数据表图 10-5 可以看出,模拟级的输入受到上拉的影响。

因此,您可以将内部上拉电阻与比较器一起使用。如数据表所述,您可能希望禁用该端口的数字输入级以降低功耗 - 当然前提是您不将其用于数字输入。

注意:浮动引脚会导致数字输入级的大量电流消耗。尽量避免它们。

于 2010-04-08T09:46:57.113 回答
2

我不能说它会起作用(我从未做过你描述的案例),但从电子角度来说,你的推理是合理的。当开关打开时,AIN1 会通过内部上拉看到 VCC,当开关闭合时,它们都会看到 0V。

VCC
|
100k(?)
|
AIN1
|
 /
|
GND

如果不实际阅读该处理器的数据表,您可能无法在配置为模拟输入的引脚上使用内部上拉电阻;在这种情况下,您可以使用芯片上的另一个引脚,配置为数字输入,用于上拉:

VCC
|
100k(?)
|
Other---AIN1
        |
        /
        |
        GND

但是,如果 AIN1 上的电压始终处于“既不是逻辑高也不是逻辑低”的范围内,这可能会使您的电流消耗相当高。

于 2010-04-08T03:27:09.980 回答
2

通常你会使用带上拉的数字输入,因为你似乎有一个数字输入信号。

有理由使用模拟输入吗?

于 2010-04-08T07:01:45.660 回答