OK
看來還是有人喜歡玩這個的……
所以……今天大概講一講如何用 proteus 模擬 Arduino
Proteus http://pan.baidu.com/share/link?shareid=588774&uk=1379348432&third=15
Arduino 是基於 AVR 的開發板,有一個很好用的 IDE
在這裡推薦下載 0023 和1.x 兩個版本備用
因為 1.x 進行了很大的改動,導致 0023 上的許多函式都失去了作用
下載 IDE 在這裡 http://arduino.cc/en/Main/Software
下載 Arduino 1.0.5 就好
Windows ZIP file (for non-administrator install)
先說怎麼用 Proteus
這裡 http://tieba.baidu.com/p/2366848283 是一個小教程
因為 Arduino 是基於 AVR 的,因此,只要搭建一個 AVR 的最小系統就好
當然,要顧及到 IO 口的兼容問題
因此,這裡使用 ATMEGA328P
和 Arduino UNO 的芯片是一樣的
然後,設置 Arduino IDE,讓 IDE 現實出編譯好的 bin 放到哪裡了
這樣就可以在 proteus 裡面載入了
具體該怎麼做,那個帖子裡面說的很詳細
然後是 閃爍的小燈
根據帖子裡面的連線鏈接好 D1 R1
然後,在 Arduino IDE 打開 blink 的範例
File ﹣ Examples ﹣01.Basic - Blink
編譯(對號 按鈕)
然後把 hex 載入 proteus
就可以看到效果了
現在我們來講一下 Arduino IDE
五個按鈕,從左到右,是 編譯、下載、新建、打開、保存
下載,就是寫入到 Arduino 上的過程(如果是模擬,就不必使用這個)
當然,下載前需要安裝驅動程式(在 Windows 下需要)
還需要在 Tools Board 選擇正確地目標板
在 Tools - Serial Port 選擇正確的端口(win 下是 COM*,Linux/Uninx/Mac 下是 tty./cu.)
如果是模擬,剛才說的這些無視就好(關於 Serial Port 的問題),只要選 board 為 UNO 就行了,port 就不用管了(用手工載入 hex 的方法,就是帖子中提到的 Program File )
好了,讓我們回到 IDE 看一下 blink 的內容
File ﹣ Examples ﹣01.Basic - Blink
int led = 13;
/ the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
/ the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
void setup(),初始化函式,是在 Arduino 開機時,Arduino 內置的初始化過程之後,執行一次;
void loop(),循環體函式,是在 Arduino 運行過程中重複執行的。
在 setup 之前的是其他的初始化語句,比如常量和全局變量等
當然,你也可以自己創建其他函數,然後在 setup、loop 中調用
具體看一下 Arduino 背後的機制
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
上面這段來自 <Arduino IDE 根目錄>/hardware/arduino/cores/arduino/main.cpp
我們可以看出,在 main() 函式中,首先調用了 Arduino 內部的一個 init() 函式,然後再調用了你的 setup() 函式。
在之後,有一個無窮迴圈,在其中調用 loop() 和 serialEventRun()。
值得注意的是,在使用 Arduino 時,應避免一切可能導致 Arduino 的 bootloader 或者 main() 函式出現問題的行為,包括中斷、看門狗等(當然,這裡是指在裸的 AVR 單片機上使用的方法,對於這些方法,Arduino 提供了可供使用的替代用的函式)。
唔……今天大概就這麼多,之後我們討論下流水燈還有按鈕之類的東西。
请问,中途加入课程可以么? OwO