如何将芯片连接到Arduino 以刻录引导程序并上传草图

电子说

1.2w人已加入

描述

步骤1:计数问题

芯片

芯片

使用ATtiny84或ATtiny85时,很可能使用自己设计的试验板或电路。与Arduino Uno不同,标题上的插脚编号与Arduino IDE中的插脚编号匹配,您必须将“微小的东西”连接到实际的物理插脚。

软件中的物理引脚和引脚编号非常不同。例如,在ATtiny84上,物理引脚1用于Vcc,而在软件中,数字引脚1实际上是物理引脚12。您必须从上下文中了解正在讨论的是哪个引脚(物理或软件)(提示,大多数参考文献)。用于软件引脚)。在解释过程中,最好参考图表。

为了增加混乱,在相同的物理位置,模拟引脚可以具有与数字引脚不同的数字。 ATtiny85就是这种情况。例如,物理引脚7既是数字引脚2,又是模拟引脚1。数字引脚1是物理引脚6,它没有模拟输入。 (我只希望芯片设计人员为这可能造成的混乱为公司节省很多钱。)

这种情况是由于芯片设计人员而不是Arduino软件引起的。引脚号基于端口B和ADC的映射方式。引脚7是PB2(数字引脚2)和ADC1(模拟引脚1)。

步骤2:使用Arduino软件出现毛刺

在具有Arduino v1.0 +的Mac上,如果输入“ A1”的变量语句,则会出现错误“未声明A1”,请参见下面的代码。奇怪的是,在编程Arduino Uno时,模拟引脚引用为“ A1”,“ A2”等。

int AnalogPin1 = A1;//验证

int AnalogPin1 = 1时,这将产生错误;//而是选择A1,物理引脚7

int val = 0;

void loop()

{val = AnalogRead(analogPin1) ;//这给出了物理引脚7上A1的模拟读数。}

这是令人困惑的事情;您还可以调出数字引脚1。

int digitalPin1 = 1;//这是物理引脚6

void setup()

{pinMode(digitalPin1,OUTPUT);//将引脚1声明为输出}

void loop()

{digitalWrite(digitalPin1,HIGH);//开启}

如果您的Windows或Mac带有Arduino 1.5.6,则可以改用“ A1”并减少它与数字pin1之间的混淆。但是,如果您习惯了另一种方法,它应该可以继续工作。

步骤3:使用SoftwareSerial进行通信

假设您想使用ATtiny85从其模拟引脚发送读数,您将如何处理?它具有有限的串行通信。 Arduino附带有一个软件库,可让您向草图添加串行通信,即SoftwareSerial。它很容易添加,但是它确实占用程序空间,您必须声明一些细节。

对于下面的ATtiny85示例,刻录引导程序以使用8 MHz内部晶体。否则,晶体需要相同的串行引脚。

首先,必须通过在开始时使用#include将库包含在草图中。

#include“ SoftwareSerial.h”

然后为该函数创建变量并调用该函数。

const int Rx = 3;//这是物理引脚2

const int Tx = 4;//这是物理引脚3

SoftwareSerial mySerial(Rx,Tx);

在setup()中,输入引脚是输入还是输出,并指定波特率

void setup()

{pinMode(Rx,INPUT);

pinMode(Tx,OUTPUT);

mySerial。开始(9600);//以9600位/秒的速度发送串行数据}

调用串行打印语句时,添加“ my”。

void loop()

{ mySerial.println(VAL);//将值发送到串行监视器^ Cmd-M}

现在,打开串行监视器以查看来自‘tiny’的值。

相同的指令可以应用于ATtiny84。使用该芯片,您可以拥有更多的引脚来支持外部时钟和串行通信。如果这样做,则需要为串行线选择其他引脚。

步骤4:示例代码。 ATtiny85_SoftwareSerial_Test

//对于ATtiny85打开LED和模拟读取

//RESET |针1针8 | 5V

//3/A3 |针2针7 | 2/A1

//4/A2 |引脚3引脚6 | 1/PWM

//GND |引脚4引脚5 | 0/PWM

//对于SoftwareSerial,您必须设置为内部时钟//以释放物理引脚2和3。

//这将使物理引脚6上的LED闪烁,读取引脚7上的模拟值,并将

//模拟值发送到串行监视器以进行显示。

#include“ SoftwareSerial.h”

const int LED = 1;//这是LED的物理引脚6

const int ANTENNA = 2;//这是物理引脚7,将导线连接为天线

const int Rx = 3;//这是物理引脚2

const int Tx = 4;//这是物理引脚3

SoftwareSerial mySerial(Rx,Tx);

int val = 0;//用于存储天线读数的变量

void setup()

{

pinMode(LED,OUTPUT);//告诉Arduino LED是输出

pinMode(Rx,INPUT);

pinMode(Tx,OUTPUT);

mySerial.begin(9600);//以9600位/秒的速度发送串行数据

}

void loop()

{

digitalWrite(LED,HIGH) ;//打开LED灯

延迟(500);

digitalWrite(LED,LOW);//关闭

delay(500);

val = AnalogRead(ANTENNA);//阅读天线

mySerial.println(val);//将值发送到串行监视器^ Cmd-M

digitalWrite(LED,HIGH);//打开LED灯

delay(10); digitalWrite(LED,LOW);//关闭

delay(500);

}

步骤5:示例代码,ATtiny84_SoftwareSerial

//对于ATtiny84,打开LED和模拟读取

//5V |针1针14 | Gnd

//10/X1 |引脚2引脚13 | 0/A0

//9/X2 |引脚3引脚12 | 1/A1

//RESET |引脚4引脚11 | 2/A2

//8 |引脚5引脚10 | 3/A3

//A7/7 |引脚6引脚9 | 4/A4

//A6/6 |引脚7引脚8 | 5/A5

//对于SoftwareSerial,您可以使用外部时钟,因为物理引脚2和3是免费的。

#include“ SoftwareSerial.h”

const内置LED = 5;//这是LED的物理引脚8

const int ANTENNA = 1;//这是物理引脚12,将导线连接为天线

const int Rx = 7;//这是物理引脚6

const int Tx = 6;//这是物理引脚7

SoftwareSerial mySerial(Rx,Tx);

int val = 0;//用于存储天线读数的变量

void setup()

{

pinMode(LED,OUTPUT);//告诉Arduino LED为输出

pinMode(Rx,INPUT);

pinMode(Tx,OUTPUT);

mySerial.begin(9600);//以9600位/秒的速度发送串行数据

}

void loop()

{

digitalWrite(LED,HIGH) ;//打开LED灯

delay(500);

digitalWrite(LED,LOW);//关闭

delay(500);

val = AnalogRead(ANTENNA);//读取天线

mySerial.println(val);//将值发送到串行监视器^ Cmd-M

digitalWrite(LED,HIGH);//打开LED灯

delay(10);

digitalWrite(LED,LOW);//关闭

delay(500);

}

第6步:电气问题

我发现串行通信只能在公共电源和地上工作。实际上,这意味着从USB –串行通信设备获取电源。 USB –串行通信设备可以是Arduino Uno板,独立的USB –串行板或AVR编程器,例如Reactor Core三合一编程器。

接线就像您期望的那样。 Arduino/USB设备的电源打开了“微型”电源(引脚1表示“ 84”,引脚8表示“ 85”)。相同的连接方式也适用于接地(“ 84”为引脚14,“ 85”为引脚4)。您分配给Rx的引脚(示例代码中的引脚3)连接到Arduino上的Rx线,引脚0/Rx。对分配给Tx的引脚(示例代码中的引脚4)执行相同的操作,将其连接到Arduino上的Tx线,引脚1/Tx。

我已阅读有关通过串行连接串联添加电阻的信息。 。我认为这不是必需的。 FTDI没有列出使用电阻器连接FT232RL USB/串行芯片的信息。从“小工具”到USB/串行设备,它们都应该是TTL。如果要格外小心,可以添加200 – 2K欧姆电阻。

如果有人知道这样做的充分理由,请发布。

我还看到在Uno板上的复位和接地之间增加了一个电容器。我不确定这应该做什么。它可以使Uno板上的ATmega328P保持复位状态,以便Uno不会使用串行线。我认为跳线可能会起作用。

如果您使用Arduino Uno桥接与计算机的串行通信,则需要加载一个不会干扰的草图。如果串行监视器上出现奇怪的字符,则表明信号损坏。您只需将串行线隔离为“微小”即可。如果您使用的是Reactor Core编程器,请断开串行跳线。

步骤7:其他

您是否必须使用内部时钟进行串行通信?否,对于Attiny85,可以使用另外两个引脚代替外部时钟所需的引脚3和4。如果两个引脚用于串行,两个引脚用于外部晶振,那么除非禁用复位,否则只有一个空闲引脚。这就是为什么最好使用内部时钟的原因。它将释放两个引脚。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分