本文為大大維原創,最早於博客園發表,轉載請注明出處!!!
一、前言:
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仿真環境中的運行效果。
然后就可以獲得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信號:
至此,實驗全部結束。
五、實驗用到代碼及仿真圖:
Arduino最小系統仿真圖:
http://files.cnblogs.com/files/liujw2114/arduino%E6%9C%80%E5%B0%8F%E6%A8%A1%E5%9D%97.7z
SOS仿真輸出:
http://files.cnblogs.com/files/liujw2114/LED%E8%BE%93%E5%87%BASOS.7z