电子说
步骤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。如果两个引脚用于串行,两个引脚用于外部晶振,那么除非禁用复位,否则只有一个空闲引脚。这就是为什么最好使用内部时钟的原因。它将释放两个引脚。
全部0条评论
快来发表一下你的评论吧 !