0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:wv 2019-10-24 15:08 次阅读

步骤1:计数问题

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

使用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。如果两个引脚用于串行,两个引脚用于外部晶振,那么除非禁用复位,否则只有一个空闲引脚。这就是为什么最好使用内部时钟的原因。它将释放两个引脚。

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

    关注

    452

    文章

    49848

    浏览量

    419052
  • Arduino
    +关注

    关注

    187

    文章

    6455

    浏览量

    186252
收藏 人收藏

    评论

    相关推荐

    如何将LVDS/OLDI桥接到HDMI/DVI

    电子发烧友网站提供《如何将LVDS/OLDI桥接到HDMI/DVI.pdf》资料免费下载
    发表于 09-27 09:35 1次下载
    <b class='flag-5'>如何将</b>LVDS/OLDI桥<b class='flag-5'>接到</b>HDMI/DVI

    求助,如何将定制的2级引导加载程序上传到指定的2级引导区?

    如何将定制的 2 级引导加载程序上传到指定的 2 级引导区? 我的设备从 SPI 闪存启动。 在闪存中,2 级引导
    发表于 09-26 06:54

    如何将ESP2866更新到正确的AT Command固件?

    /mega-wifi-r3-atmega2560-esp8266-flash-32mb-usb-ttl-ch340g-micro-usb.html 在通电时,它会创建一个 WiFi AP,而不会被告知这样做(Arduino 草图什么都不做)。 我猜它在ESP8266上安
    发表于 07-19 08:37

    使用ESP8266arduino连接到thinkspeak云,无法将其连接到任何网页,为什么?

    我正在尝试使用 ESP8266 arduino 连接到 thinkspeak 云。所以我能够 esp 模块连接到我的家庭 wifi,但
    发表于 07-16 07:43

    如何将GPIO16连接到CHIP_PD获得深度睡眠模式?

    为了方便PCB布局(GPIO16 / PIN 8接近CHIP_PD / PIN 7),我们想知道是否可以GPIO16连接到nRESET / PIN 32以外的CHIP_PD,在退出深度睡眠模式
    发表于 07-08 06:34

    CYUSBKIT-003引导加载程序从主机接收固件后,引导加载程序是否会断开与主机的连接重新识别?

    连接重新识别? 是引导加载程序还是下载的固件? 2.当控制权从引导程序转移到固件时,固件是否
    发表于 05-29 06:42

    如何将TX模式设备MULTICH_CONNECT_PCB连接到RX模式设备?

    好的,正在查看 I2S 接口。 I2S 模块具有 tx/rx 模式。 如何将 TX模式设备MULTICH_CONNECT_PCB连接到 RX 模式设备? 在 RX 模式下,有没有时钟输入或帧输入?
    发表于 03-04 07:53

    如何实现数据线连接到SOM单元进行USB高速连接CC线路连接到CYPD3177来设置电压?

    我有一个应用程序,我必须将数据线连接到 SOM 单元进行 USB 高速连接,然后 CC 线路连接到
    发表于 02-23 07:39

    如何将KY-008连接到Arduino

     KY-008 是一种激光发射器模块,可产生点状激光束,可用作激光指示器或创建迷你激光表演。它与 Arduino、Raspberry PI、ESP32和其他流行的微控制器兼容。
    的头像 发表于 02-11 11:02 1285次阅读
    <b class='flag-5'>如何将</b>KY-008<b class='flag-5'>连接到</b><b class='flag-5'>Arduino</b>

    如何将LED连接到Arduino板并使其闪烁

     在本快速入门指南中,您将学习如何将 LED 连接到 Arduino 板并使其闪烁。
    的头像 发表于 02-11 10:53 1763次阅读
    <b class='flag-5'>如何将</b>LED<b class='flag-5'>连接到</b><b class='flag-5'>Arduino</b>板并使其闪烁

    如何将按钮连接到Arduino

    在本快速入门指南中,您将学习如何将按钮连接到Arduino板,并根据按钮是否被按下来读取HIGH或LOW。您将使用电路板上随附的发光二极管 (LED)通过按钮打开和关闭,以便验证按钮按下代码是否正常工作。
    的头像 发表于 02-11 10:52 2862次阅读
    <b class='flag-5'>如何将</b>按钮<b class='flag-5'>连接到</b><b class='flag-5'>Arduino</b>板

    如何将光敏电阻连接到Arduino板并读取电压

    在本快速入门指南中,您将学习如何将光敏电阻连接到Arduino板并读取电压。您将首先使用串行监视器来了解光传感器的行为方式,然后构建一个电路,在天黑时自动打开灯。
    的头像 发表于 02-11 10:45 3043次阅读
    <b class='flag-5'>如何将</b>光敏电阻<b class='flag-5'>连接到</b><b class='flag-5'>Arduino</b>板并读取电压

    如何将HC-SR04连接到Arduino并编写一个简单的程序来测量距离

    一种流行的Arduino超声波传感器是HC-SR04。它广泛用于非接触式距离测量,通常用于机器人和自动化项目。本指南向您展示如何将HC-SR04连接到
    的头像 发表于 02-11 10:17 1962次阅读
    <b class='flag-5'>如何将</b>HC-SR04<b class='flag-5'>连接到</b><b class='flag-5'>Arduino</b>并编写一个简单的<b class='flag-5'>程序</b>来测量距离

    如何将增量旋转编码器与Arduino连接

    在本教程中,您将学习如何将增量旋转编码器与Arduino连接读取旋钮的运动。这对于在机器人和其他应用程序中创建用户界面或读取机械位置非常
    的头像 发表于 02-11 10:00 1121次阅读
    <b class='flag-5'>如何将</b>增量旋转编码器与<b class='flag-5'>Arduino</b><b class='flag-5'>连接</b>

    使用Arduino IDE 2.0开发ESP32摄像头模块

    可以看到esp32选项。 编译并上传摄像头样例 1. 开发板连接到电脑USB接口。若开发板未集成USB串口,则需要通过一个USB串口适配器连接。 2. 点击顶部工具栏的开发板
    发表于 02-07 17:06