基於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信號:

至此,實驗全部結束。

五、實驗用到代碼及仿真圖:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM