基于Proteus仿真的Arduino学习(1)——Arduino Uno最小系统及LED的简单使用

一、前言: 

A、Arduino简介

  Arduino是由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti。据说Auduino开发团队的领袖Massimo Banzi 之前是意大利Ivrea 一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。2005年冬天,Massimo Banzi 跟David Cuartielles 讨论了这个问题。David Cuartielles 是一个西班牙籍芯片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi 的学生David Mellis 为电路板设计编程语言。两天以后,David Mellis 就写出了程式码。又过了三天,电路板就完工了。这块电路板被命名为Arduino。几乎任何人,即使不懂电脑编程,也能用Arduino 做出很酷的东西,比如对传感器作出回应,闪烁灯光,还能控制马达。

2016-10-11

  现在,Arduino是一个开源的项目,它所有的设计资料都可以在其官网免费得到。严格来说,Arduino这个术语涉及硬件、软件、开发团队、设计原理,以及用户的互助精神。从笔者的实际生活体验看,通常所说的Arduino在90%的情况下是指Arduino的硬件开发板,可能是硬件更显而易见吧。Arduino的硬件开发板有许多种型号。它是一个单片机集成电路,它的核心就是一个单片机,开发板上的其他电路用来供电和转换信号。官方Arduino使用的是megaAVR系列的芯片,特别是ATmega8、ATmega168、ATmega328、ATmega1280以及ATmega2560,还有一小部分使用的是Arduino兼容的处理器。常见的Arduino主板有:

Arduino UNO

(Arduino Uno开发板基于ATmega328)
Arduino Leonardo

(Arduino Uno基于ATmega328)

Arduino Due

(Arduino Due基于Atmel SAM3X8E ARM Cortex-M3 CPU)

Arduino Yún

(Arduino Yún基于ATmega32U4和Atheros AR9331)

Arduino Micro

(Arduino Micro基于ATmega32U4)

以及Arduino Tre、Arduino Robot、Arduino Esplora、Arduino Nano、Arduino Zero等等。本文以Arduino系列的名星板——Arduino Uno R3为例进行仿真实验,其它板可以类推进行仿真。

B、实验开发工具介绍

1.Arduino IDE

Arduino IDE是专门为Arduino开发板量身定做的集成开发环境。

Windows下安装Arduino IDE教程:http://jingyan.baidu.com/article/ed15cb1b7a401e1be369811a.html

2.Proteus

  Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,

proteus安装教程:http://jingyan.baidu.com/article/ce436649d086713772afd34b.html

二、Arduino如何用Proteus仿真

  本文以Arduino Uno R3为例,仿真时一般选用ATMEGA328P单片机,仿真其他板时,选择对应的单片机即可,大体原理相似。

  其基本过程是:软件在Arduino IDE编程软件里编写,硬件在Proteus ISIS软件模块里通过绘制电气原理图建立。程序编写完后,选择Arduino IDE编程界面菜单栏的Tools菜单项,再选择Board→Arduino Duemilanove w/ATmega328,也可以选择Board→Arduino Uno,然后点击编译按钮,生成Hex文件(二进制机器码文件)。有了Hex文件,接着转到Proteus电气原理图,双击原理图中的型号为ATMEGA328P 单片机芯片,出现对话框,通过文件目录浏览的方法确定Hex文件存储位置,并进行一些单片机芯片工作状态参数的设置,最后点击Proteus ISIS软件界面左下方的播放按钮,就可以看到Arduino单片机在Proteus仿真环境中的运行效果。

  Arduino编译之后,Hex文件会自动删除,而在Proteus仿真的Arduino单片机中,需要使用Arduino软件产生的Hex文件,可是,Arduino  IDE默认使用完Hex文件会自动删除的,所以取不到hex文件,为了取出hex文件,加载到Porteus中的单片机ATMEGA328P,需要修改如下:

  点击Arduino软件界面菜单栏的文件->参数设置,打开对话框,在输出时显示详细信息一栏勾选编译、下载,如下图:

然后就可以获得hex文件的地址了。

确定了Hex文件,还有三个参数项要修订,一是“CLKDIV8(Divide clock by 8)”参数项修改为“Unprogrammed”;二是“CKSEL Fuses”参数项修改为“(1111)Ext. Crystal 8.0-MHz”;三是Advanced Properties的Clock Frequency参数项设为16Mhz。最后点击编辑对话框的“确定”按钮,然后就可以仿真了,如图:(双击ATMEGA328P)

三、用Proteus仿真Arduino Uno最小系统

1. ATMEGA328P-PU引脚图

此外,还需振荡电路,将AVCC和AREF接+5v。

用到的元器件有:CRYSTAL、22pF电容、ATMEGA328P、POWER端口、GROUND端口。

然后按下图连线:

即得到Arduino Uno的最小系统。

建议将Arduino Uno的最小系统导出区域,这样下次用的时候可以直接引进来。

四、用Proteus仿真实现LED输出SOS

1.代码如下:

int ledPin=13;
void setup(){
  pinMode(ledPin,OUTPUT);
}
void loop(){
 
  for(int i=0;i<3;i++){
    digitalWrite(ledPin,HIGH);
    delay(300);
    digitalWrite(ledPin,LOW);
    delay(600);
  }
  delay(2100);
 
  for(int i=0;i<3;i++){
    digitalWrite(ledPin,HIGH);
    delay(900);
    digitalWrite(ledPin,LOW);
    delay(600);
  }
  delay(2100);
 
  for(int i=0;i<3;i++){
    digitalWrite(ledPin,HIGH);
    delay(300);
    digitalWrite(ledPin,LOW);
    delay(600);
  }
  delay(2100);
}

2.仿真图如下:

直接将前面最小系统引入,然后在digital pin13口加电阻(1k),LED即可。

3.仿真过程:

编译完毕后,下方窗口显示如下:

.hex即为我们要用到的hex文件。直接复制地址,然后粘贴到Program File处,点确定:

然后点右下角三角开始仿真,仿真结果如下,开始输出SOS信号:

至此,实验全部结束。

时间: 2024-08-10 19:06:13

基于Proteus仿真的Arduino学习(1)——Arduino Uno最小系统及LED的简单使用的相关文章

基于Proteus仿真的Arduino学习(2)——LED点阵探究A(LED点阵基础)

一.前言: 随着LED的普及,以LED点阵为基础的显示设置层出不穷.例如,公交车的线路提示牌.高速公路的信息提示牌,安装在大楼上的广告屏幕等.下面,我们将由简单到复杂地探索各种LED点阵的使用方法,同样是基于Proteus的arduino仿真,以arduino uno R3为例,包含以下三个实验:LED点阵显示表情.LED点阵跑马灯.回纹灯.具体介绍如下: 二.仿真电路设计: 本次的三个实验用到的电路连接都是相同的,构建一个电路仿真图即可,仿真图如下: 电路图比较简单,只需将arduino最小系

Kienct与Arduino学习笔记(2) 深度图像和真实世界坐标系中的深度图

转载请注明出处:http://blog.csdn.net/lxk7280 首先,要接触一下KinectOrbit这个摄像机库,这篇文章中有这个库的下载网址和简单的介绍:http://blog.csdn.net/lxk7280/article/details/38184355.将下载得到的文件放到相应的Processing的一个子文件夹后,即可使用.    KinectOrbit库下的鼠标和键盘的操作方法: 1.右键拖拽:摄像机摇拍. 2.左键拖拽:绕对象旋转. 3.滚动:缩放操作. 4.P键保存

ROS与Arduino学习(三)订阅与发布

ROS与Arduino学习(二)订阅与发布 Tutorial Level:HelloWorld Next Tutorial: 本节介绍如何在arduino中发布与订阅消息.他和ROS通过串口进行节点通信. Tips 1 订阅 ros::Subscriber<std_msgs::Empty> sub("WWWW",&hhhhh); 其中WWWW是话题的名称,hhhhh是收到消息后调用的函数函数名称.sub是实例化订阅对象的名字,也可以是别的名字. nh.subscri

ROS与Arduino学习(七)小案例节点通信

ROS与Arduino学习(七)小案例节点通信 Tutorial Level:Logging日志 Next Tutorial: 原文地址:https://www.cnblogs.com/flyingjun/p/8952857.html

基于Bootstrap仿淘宝分页控件实现

.header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { text-align: center; margin-top: 20px; margin-left: 10px; margin-bottom: 20px } a { cursor: pointer; text-decoration: none; color: gray } a:hover { text

基于8086CPU微处理器的汇编学习之MOV指令

汇编指令:MOV的作用是往某个寄存器中存入数值. 格式:mov  寄存器名,数值                数值-->寄存器 mov  寄存器A,存器寄B          B-->A PS:必须前后位数匹配,如: mov   ah,bx     ;error   ah is 8 bit,bx is 16 bit mov   ah, bh    ;right    ah and bh all is 8  bit mov   cx,dx     ;right     cx and dx al

基于OpenGL ES 的深度学习框架编写

基于OpenGL ES的深度学习框架编写 背景与工程定位 背景 项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算框架. 同类型的库 caffe-android-lib 目前应该是最便于集成使用的深度学习框架库. tensorflow和mxnet据说也有对应的android库,因时间原因暂未测试. CNNdroid,网址https://zhuanlan.zhihu.com/p/25259452,这个是用 ren

基于8086CPU微处理器的汇编学习之ADD指令

ADD指令: 把两个数值相加,将结果放到第一个寄存器里面. 格式: ADD  寄存器名,数值 ADD  寄存器名,寄存器名 add ax,11 add bx,22 PS:清空数据: mov ax,0000 两者数值的存储容量位数要匹配 ----------------------------------------------------------------------------------------------- 用汇编语言编写一个小程序:1122H + 9000H +   AC02H

基于微信的SDK的学习与使用——实现产品支付(一)

声明本篇博客为作者原创,本篇是继支付宝支付之后本人又学习的第二种支付实现,本篇着重于原理与注意事项的学习. 参考  参考 微信支付的开发文档相比支付宝的比较简单,但是使用功能丝毫也不含糊,我觉得简单易读的文档是吸引开发者做出喜好选择的第一步.但是个人觉得,微信支付与支付宝的支付的实现思路大致雷同,并不能说是微信另开思路进行支付创新. 微信支付的官方文档中提供了扫码支付.公众号支付.App支付支付模式.开发者要实现用微信支付的功能,需要商户向微信官方申请微信支付权限,商户获得权限后,将支付账户信息