【问题标题】:Enable port RA0 as input and retrieve value LDR from led启用端口 RA0 作为输入并从 led 检索值 LDR
【发布时间】:2011-03-28 19:29:39
【问题描述】:

我正在使用带有微芯片 v8.63 的 picdem 18F4550 和 C18 编译器。

我将启用 PortA 设置为输入,我将在端口 RA0 上连接一个 LDR。 如下(我认为)

TRISAbits.TRISA0 = 1; <= set RA0 as input

现在我想要 LDR 的值(如果 LED 亮,电压/值),我可以说:

int colorLed = PortAbits.RA0;

现在在 int 类型的变量中有我的 Led 的值/电压。

如果我错了,请纠正我。

【问题讨论】:

标签: c embedded microcontroller pic microchip


【解决方案1】:

听起来您想测量模拟电压,在这种情况下,您需要将引脚用作AN0,而不是RA0。您应该阅读datasheet 的第 21 节,但总而言之,您需要使用寄存器 ADCON0ADCON1ADCON2 配置 A-D 转换器,并阅读出现在 ADRESH:ADRESL 上的结果。

请注意,您可能使用数字输入读取 LDR,但您将无法对其进行校准。使用模拟输入稍微复杂一些,但更灵活。

【讨论】:

  • 值得注意的是,RA0 与 AN0 复用。该引脚必须配置为 AN0 功能。
  • 感谢您的回复。但我只是要求启用 RA0 作为输入,然后给我错误的数据表,我有 18F4550 的 c 编译器的数据表。但是我没有找到启用这个端口。
  • @yannick:这是正确的数据表。在这种情况下,简单地使用 RA0 作为输入是行不通的;您需要将该引脚用作模拟输入,在这种情况下,它称为 AN0。
  • @yannick,使用 ADC 的模拟输入将读取电压而不是 LDR 的电阻,因此请安排您的电路,以便 LDR 两端有电压,例如作为分压器。 ADC 输入不会提供电压来测量您的电阻。
【解决方案2】:

默认情况下,PORTA 可以用作数字输入或模拟输入。

要使用 LDR,您很可能需要将 PIN 配置为模拟输入。

不过,这仍然取决于您想做什么。也许你应该提供一些关于你的项目的详细信息。

查看此链接以获取 PIC18F4550 datasheet

您只能在PIC184550here上找到更详细的资源

同样,您可能希望提供有关您的应用程序的更多详细信息,以便我们更好地为您提供帮助。

【讨论】:

  • 如果 LED 亮起(例如端口 RB4 上的红色),这就是目的。然后 LDR 检测到这一点,我希望将它的值存储在一个变量中。然后,(我已经创建了一个程序),带有盒子的微处理器播放这种颜色的声音(说“红色”)。你可以称我的项目为“颜色传感器”。目的是让盲人可以通过播放声音“看到”颜色。希望我的解释在我的努力中更清楚。
  • 单靠LDR不能区分颜色,它只响应光的强度,不足以判断颜色。试用此link,该电路的功能与您尝试做的类似。您将需要 3 个 LDR 来分别检测红色、绿色和蓝色的强度,并使用强度读数来确定哪种颜色的光落在它上面。因此,从根本上说,LDR 必须连接到模拟引脚。另外,请查看此link 以获取颜色检测芯片。
猜你喜欢
  • 2021-06-26
  • 2018-06-30
  • 2018-02-08
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多