摘要:我有两个电路:一个在电路板上,一个在 PCB 上。我有两个微控制器:一个商业微控制器(预编程)和一个个人微控制器(我尝试用它们重新创建商业微控制器)。商业 uC 在两种电路中都可以使用,而我重新创建的 uC 仅在面包板上工作。我不明白如何一个人可以同时工作而另一个人不能。
语境
免责声明:原理图、图像、代码等所有资源都可以在下面找到。我试图尽可能彻底地回答这个问题。
我买了一个简单的电子骰子电路,只需按一下按钮即可“滚动”骰子。这使用 LED 和 uC 来完成并预先编程(见下图)。按下按钮时,LED 将闪烁,松开时,滚动的数字将保持 3 秒,直到 LED 熄灭。这非常简单,仅由 LED、电阻器、电池、按钮和 Atmel 的 ATTiny13 uC 组成。
我的目标是自己重新创建 uC 的编程并最终自己构建类似的电路(从小处开始,对吗?)。
现在,我有了商业版的原理图(见下面的第一张图片),并在我的面包板上重建了它(见下面的第二张图片)。我通过从商业版本中取出 ATTiny13 验证了这个电路(由于有插座,它是可拆卸的)并将其放入我自制的电路中。一切都完美无缺。
然后我开始编写我自己的第一个ATTiny13。我做了一些简单的 LED 闪烁测试,然后从网站上尝试了一个骰子脚本来测试它(见下面的代码)。所有这些在我的面包板上都很好用。掷骰子也会很好用。
此刻,我将它放入商业 PCB(具有相同的原理图),没有任何效果。闪烁脚本或骰子脚本都不会导致任何 LED 闪烁。按下按钮不会改变任何东西。
我想到了很多事情,这可能是一个问题,但归结为一点:“当 PCB 和面包板上的电路确实是相同的原理图并且相似时,在一个上工作的 uC 应该在其他。” 这对商业来说是正确的,但对我来说却不是。我对此感到非常困惑,我有限的电子知识现在正在赶上我。也许PCB的行为毕竟不同?我彻底检查了两个电路,它们似乎与原理图完全一样。
对于正确方向的任何帮助或提示,我感到非常高兴。目前我什至不知道要注意什么。我想我可能会在这里监督一些基本的事情。
感谢您抽出宝贵时间阅读和回复,非常感谢!
资源
基本信息
R1 - 5.6k 欧姆
R2 - 10k 欧姆
R3 R4 R6 - 15 欧姆
R5 - 120 欧姆
Vcc为三节1.5V电池(4.5V)
微控制器:ATTiny13 数据表
对于编程,我使用 Arduino IDE 和 Arduino Nano 作为 ISP(我遵循了本指南)。我使用以下设置对 ATTiny 进行编程(尽管我对这些设置的含义几乎一无所知):
BOD: 4.3V
EEPROM:保留 EEPROM
时钟: 1.2 MHz,内部 osc。
时间:禁用微型
电路原理图
面包板电路
PCB电路
代码
/*
* The LEDs are arranged like this
*
* LED3 LED6
* LED2 LED7 LED5
* LED1 LED4
*
*
*
* AtTiny13 Pins
* ---------------------
* 1_o___8 5V
* LED34 2_____7 LED25
* LED7 3_____6 LED16
* GND 4_____5 BTN
* -----------------------
*
*
*/
// The pins will be addressed using their PB Number (see above)
int pinLed16 = 1;
int pinLed25 = 2;
int pinLed34 = 3;
int pinLed7 = 4;
int pinButton = 0;
int buttonState;
long ran;
int time = 2000;
void setup ()
{
pinMode (pinLed16, OUTPUT);
pinMode (pinLed25, OUTPUT);
pinMode (pinLed34, OUTPUT);
pinMode (pinLed7, OUTPUT);
pinMode (pinButton, INPUT);
// This resulted in an error, so it is commented out for now.
//randomSeed(analogRead(A3));
}
void loop()
{
buttonState = digitalRead(pinButton);
if (buttonState == HIGH){
ran = random(1, 7);
if (ran == 1){
digitalWrite (pinLed7, HIGH);
delay (time);
}
if (ran == 2){
digitalWrite (pinLed16, HIGH);
delay (time);
}
if (ran == 3){
digitalWrite (pinLed34, HIGH);
digitalWrite (pinLed7, HIGH);
delay (time);
}
if (ran == 4){
digitalWrite (pinLed16, HIGH);
digitalWrite (pinLed34, HIGH);
delay (time);
}
if (ran == 5){
digitalWrite (pinLed16, HIGH);
digitalWrite (pinLed34, HIGH);
digitalWrite (pinLed7, HIGH);
delay (time);
}
if (ran == 6){
digitalWrite (pinLed16, HIGH);
digitalWrite (pinLed25, HIGH);
digitalWrite (pinLed34, HIGH);
delay (time);
}
}
digitalWrite (pinLed16, LOW);
digitalWrite (pinLed25, LOW);
digitalWrite (pinLed34, LOW);
digitalWrite (pinLed7, LOW);
}