如何连接 PIC 微控制器?

电器工程 微控制器 图片 嵌入式 C
2022-01-25 04:06:36

我对 PIC 微控制器和电气工程的世界完全陌生,所以请放轻松:)

无论如何,我设法将我的 PIC 16f627 编程为在按下按钮(触发按钮)时打开三个 LED,并在按下另一个按钮时开始关闭序列(基本上每个 LED 依次关闭,中间有 5 秒的延迟)按下(重置按钮)。我一直在 Velleman 的 K8048 PIC 编程器/实验板上对此进行测试。引脚 RA0 和 RA2 分别是触发和复位按钮的输入,而引脚 RB0、RB1 和 RB2 是 LED 的输出引脚。

使用实验板很棒,但我想将它移到实际电路中。问题是我不知道从哪里开始。我买了 3 个 LED(每个 3.3 伏)、一些按钮和电线,我构建了以下电路:

电路

(对不起,可怕的示意图)

在我构建的电路中,我首先测试了 LED 是否可以使用 3 节 1.5 伏 AA 电池并且它们工作正常,所以我认为不需要电阻器。

但是,这不起作用,我完全迷路了。作为参考,这是我的 PIC 代码。它使用 MikroC 用 C 语言编写。它适用于实验板上,所以我认为这不是问题

void main() {
    TRISB.RB0 = 0;
    TRISB.RB1 = 0;
    TRISB.RB2 = 0;
    PORTB.RB0 = 0;
    PORTB.RB1 = 0;
    PORTB.RB2 = 0;
    CMCON = 0x07;
    TRISA = 255;

    for(;;){
            if(PORTA.RA0 == 1 && PORTB.RB0 == 1 && PORTB.RB1 == 1 && PORTB.RB2 == 1){
                         delay_ms(5000);
                         PORTB.RB0 = 0;
                         delay_ms(5000);
                         PORTB.RB1 = 0;
                         delay_ms(5000);
                         PORTB.RB2 = 0;
            }
            if(PORTA.RA2 == 1){
                         PORTB.RB0 = 1;
                         PORTB.RB1 = 1;
                         PORTB.RB2 = 1;
            }
    }
}

任何帮助将不胜感激。谢谢!

4个回答
  1. 首先,当从电压源(例如电池、直流电源等)驱动时,您总是需要与 LED 串联电阻,
    这是因为 LED 具有非线性 IV 曲线,看起来就像一个高阻抗,直到阈值电压。 LED 然后非常急剧地上升,因此这意味着电压的非常微小的变化电流会发生很大的变化,因此几乎不可能以这种方式将电流设置为稳定值。
    通过使用正确值的串联电阻,您可以确保电流不会上升到足以损坏 LED 的程度。
    要计算电阻值,您需要知道 LED 正向电压 (Vf),然后从电源电压中减去 Vf 并除以所需电流,例如对于 5V 电源、2V Vf 和 15mA:

    (5V - 2V) / 0.020A = 200Ω (220Ω 的标准值就可以了——如果你没有这个值,那么在 20mA 到 5mA 范围内瞄准 150Ω 和 600Ω 之间的任何值)
    这是假设一个典型的 5mm 或 3mm LED 20mA的最大工作电流。

  2. 虽然它在您的示意图中显示“3 x 1.5V 电池串联”,但电池看起来实际上可能是并联连接的。T 确认,电池需要首尾相连,如下图所示:

    并联和串联连接

  3. 您需要在微控制器 Vdd 和地之间存在去耦电容器。不详述(在这里搜索,这方面有很多很好的答案)但它们基本上是为微控制器提供低阻抗的本地能量储备,以应对电源无法快速响应的高频电流需求足够的。
    理想情况下,您应该在电源和接地引脚上放置一个(100nF 或 1uF 陶瓷是相当标准的),尽可能靠近引脚。

  4. 如果没有晶体存在,请确保您使用的是内部振荡器。您的代码没有显示配置位设置,如果您忽略了它们,您需要添加它们以确保微控制器设置正确。CCS 手册应告诉您如何执行此操作。同样在配置位中,确保看门狗定时器设置为关闭,否则您的微控制器将不断重置(除非您定期调用 WDT 清除命令)

  5. 确保你有正确的 LED。

  6. 确保您将 MCLR 引脚拉高,否则您的 PIC 将保持在复位状态(除非您在配置位中关闭 MCLR)这通常通过一个电阻到 Vdd 来完成,值约为 10kΩ。数据表将在重置部分提供一个示例。(感谢 ajs410 提到这一点)

我强烈推荐 John Catsoulis 的 O'Reilly 系列书籍“设计嵌入式系统”,供您担任职务的人使用。有一个“电子学 101”一章可以让您快速掌握功能速度,以及其他关于实际构造的内容。

  1. 不要超过 5V,您的 PIC 可能会在 5V 电压以上被烧毁。您可以使用 9V 电池或带有线性稳压器(如 LM7805)的 AC/DC 适配器为您的电路产生 5V 电压。接线方式:

    http://stuff.nekhbet.ro/2006/06/18/how-to-build-a-5v-regulator-using-78l05-7805.html

  2. 就像大多数人所说的:不要忘记为 MCLR 引脚提供一个串行电阻。您可以使用上拉配置来重置您的 PIC。这是架构的链接:http ://www.mcuexamples.com/push-buttons-and-switch-debouncing-with-PIC.php

  3. 始终在 LED 之前使用串联电阻。它可以防止 LED 被烧毁并降低功耗。对于 3.3V LED,220 或 330 欧姆就可以了。

按钮功能很简单。当我们按下按钮时,两个触点连接在一起并建立连接。不过,事情并不是那么简单。问题在于电压作为电气维度的性质,以及机械接触的缺陷。也就是说,在接触或断开接触之前,由于机械接触的不均匀,或者由于按下按钮的不同速度(这取决于在按下按钮的人身上)。这种现象的术语称为开关(接触)去抖动。如果在编写程序时忽略了这一点,则可能会发生错误,或者程序可以为单次按钮按下产生多个输出脉冲。为了避免这种情况,我们可以在检测到触点闭合时引入一个小的延迟。这将确保按下按钮被解释为单个脉冲。去抖动延迟是在软件中产生的,延迟的长度取决于按钮和按钮的用途。通过在按钮上添加一个电容器可以部分解决该问题,但设计良好的程序是一个更好的答案。可以调整程序,直到完全消除错误检测。下图显示了按下按钮时实际发生的情况。可以调整程序,直到完全消除错误检测。下图显示了按下按钮时实际发生的情况。可以调整程序,直到完全消除错误检测。下图显示了按下按钮时实际发生的情况。

阅读更多:http ://romux.com/tutorials/pic-tutorial/push-buttons#ixzz43cAbVcWR