分類:嵌入式

AVR與Arduino Uno開發

AVR 是啥?

AVR 是 Atmel 公司的系列微控制器 ( MCU ) 產品。從 8 ~ 32 位元精簡指令集都有。

MCU 是把 CPU、RAM、ROM、I/O 介面等全包在一顆晶片。一顆 MCU 晶片可以看作一台超級迷你電腦。

很火熱的 Arduino 也是採用 AVR 微控制器,例如 Arduino Uno 採用的 AVR 微控制器型號是 ATMEGA328。說一下 328 的意義,「32」指它的Flash memory儲存容量為 32KB,「8」指 8 位元。

AVR 有 ISP (線上下載)功能,不需透過專用燒錄器燒錄程式,只要用傳輸線連接開發板與電腦,就可以使用軟體直接燒錄編譯後的機器碼到開發板上執行。

開發工具

這篇使用的是 Atmel 官方提供的免費 IDE: Atmel studio。不須註冊即可下載,但檔案大,網站推薦的線上安裝要花很久時間,內建 MCU 模擬器可測試使用,如果是微軟的開發者,會覺得親切,因為這個IDE是拿 Visual studio 來改。

閱讀單片機規格

我手上有一個開發板是 Arduino Uno R3 ,買的時候注意規格,這個板子採用 Atmel Atmega328P-PU 單片機。PIN 有 28 個,Package Type 是 28P3。

知道 AVR 單片機規格後,就到 Atmel 官網下載規格書(datasheet)
網址:http://www.atmel.com/products/microcontrollers/avr/default.aspx?tab=documents

規格書有精簡版(Summary)和完整版(Complete),可以兩個都下載,方便查閱。

在規格書查 Package Type 是 28P3—28-lead, 0.300” Wide, Plastic Dual Inline Package (PDIP)

可以找 Pin Configurations 圖示,知道各引腳功能:

555

比較特別是,Arduino 的 clock frequency 是 16 MHz

完整版文件有說明各引腳功能。
Portx是可設定電壓為高電平或低電平的Register。
PB[7:0]是Port B 編號0-7。

Register 暫存器

寫程式時,有三個暫存器必須知道。

  • DDRx – Data Direction Register 可讀可寫的暫存器,指定輸入/輸出。
  • Portx – Data Register 透過這類暫存器設定電壓為高電平或低電平。
  • PINx – Port Input Pins (read only) 可以知道哪個 Pin 的電壓是高電平或低電平。

PORTxn 的小寫 x 指 port 的編號(A,B,C…),n (1,2,3….)。DDRxn 和 PORTxn 關係見 datasheet 18.4.9

Arduino Uno 規格

因為使用 Arduino Uno R3 開發版,因此需要去了解這個板子和 ATmega328 的 Pin 的對應關係。以下是網路連結。

ATmega168/328-Arduino Pin Mapping

截圖如下:

66

如果手上有這板子可以明顯看出板子的 Pin 編號(紅字)與 ATmega328 的 Pin 編號(黑字)的對應關係。

測試 Atmel studio 寫程式燒錄至Arduino

新增 Atmel studio 專案

02

選擇板子的單片機型號

03

輸入以下程式

code2

按 F7 建置方案,正確的話,在「輸出」這視窗會有「建置成功」等文字。

接著我們要把 Atmel studio 編譯好的程式燒錄至 Arduino。請先安裝 Arduino studio。因為我們要透過這個 IDE 燒錄程式至 Arduino。

下載安裝 Arduino studio

官網下載。安裝後,會安裝驅動程式,當連接電腦與開發板,可從裝置管理員看到連接阜,我的連接阜是COM3,不同電腦可能有不同連接阜。

接著在 Atmel studio 上方選單開啟「工具/外部工具」,將開啟對話框。有三個欄位需要輸入:標題、命令、引數。

標題可自訂,命令請填入 Arduino studio 的 avrdude.exe 實體檔案路徑,比如我的路徑:C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe。

填寫引數:這裡需要 avrdude.conf 實體檔案路徑,另外要把 COM3 改為你裝置管理員的連接阜。填入以下:

-C "C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -p atmega328p -c arduino -P COM3 -b 115200 -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i

最後勾選「使用輸出視窗」。圖示:

04

完成後,在Atmel studio「工具/外部工具」可看見自訂的燒錄工具名稱。

05

將 Arduino 板子連上電腦,點選我們剛新增的選單「Connect Arduino Uno」,會調用 Arduino studio 將程式燒至開發版。

參考

AVR Tutorials 很讚的教學網站
http://www.instructables.com/id/How-to-Load-Programs-to-an-Arduino-UNO-From-Atmel-/
https://sites.google.com/a/mvmc.me.ncu.edu.tw/rossen/avr-tutorial/prog-basic
https://www.pololu.com/docs/0J36/3.b
http://www.eeworld.com.cn/mcu/article_2016091429441.html