2010年8月5日 星期四

Arduino 類比端子的臨時用途--成為數位端子

Arduino 的數位端子只有14個, Digital 0~13, 其中 0,1 作為 Serial 上下傳資料使用時不能作為其他用途, 若使用的數位端子少還沒有問題, 但為了控制 像 8x8 的 LED 矩陣, 基本就有 16支腳時, 就有點捉襟見肘, 總得想法子擴充一下 IO
常用的 LED 矩陣控制做法有幾種:
1 用 74154之類 IC自己接電晶體驅動 LED
2 用 TLC 5940 , MBI 5026 , MAX 7221/7219 , 等等恆流LED驅動IC 也可以
上面的作法可以依需求要多少有多少 IO可是若是只比固定接腳多一點, 如單顆 8x8LED 只要 16支腳, 找顆上面的 IC 去擴充, 還要考慮用SPI 還是 I2C...., 只要能再多個 3~4 支腳, 為何要這麼麻煩呢?

正在為了那多出來的少少接腳傷腦筋 東市買駿馬,西市買韉,南市買轡頭,北市買長鞭.....
碰巧重新翻看 Arduino 的Example - Display- RowColumnScanning 這個8x8 LED 矩陣程式

其中 有一段
Pin numbers:
Matrix:* Digital pins 2 through 13,
* analog pins 2 through 5 used as digital 16 through 19
Potentiometers:
* center pins are attached to analog pins 0 and 1, respectively
* side pins attached to +5V and ground, respectively.
????
這是說 類比端子也可以當作數位輸出端子用的意思嗎?
沒錯A0 as D14
A1 as D15
A2 as D16
A3 as D17
A4 as D18
A5 as D19

找出 Virtual BreadBoard 的 VBB 看接線圖, 真是用類比端子當數位端子接... ^_^
不用假裝花木蘭東買西買了 ^_^



以後單顆 8x8 LED 矩陣, 簡單利用 類比端子擴充使用就好了

pinMode(14,OUTPUT);

就可以用 A0 當作 D14 了。

2010年3月5日 星期五

Arduino Duemilanove 初體驗

Arduino Duemilanove

圖片摘自
arduino.cc
以前讀書的時候想玩微控制器要花幾千到幾萬才搞的定
自已 DIY 要搞定 硬體測試板, 燒錄器, 編譯軟體........
想到就覺得... >_< , 還是用學校現成的就好了..... 但是時代在改變
過年前在網路上看到的小玩具(參考 arduino.tw 網站)

2010 年過完年之後
網路上訂購的 Duemilanove (ATMega168-20PU, 也可用ATMega 328P) 來了,
(補充說明: 最新版本是 UNO, 用的全是 ATMega328P )
最近手邊最有趣的事非這個新玩具莫屬

是的, 就是它, 讓 Alan 動手玩微控制器的美夢成真了
先記錄一下到手後作的第一件事, 燒一顆備用的 MCU 以免手笨毀了手邊的唯一一顆
參考網路上的資料
Burning the Bootloader without external AVR-Writer

是的! 免用燒錄器, 寫入Bootloader
文件中使用的是Diecimila, 但有註明可用於Arduino NG, Arduino Duemilanove
(ATMega328P Fuse bit 設定與 ATMega168 不太一樣)

利用 Arduino 的 USB Chip FTDI公司的 FT232R 的 bitbang 模式, 將Bootloader寫入 ATMega168-20PU, 連燒錄器也免了, 不用買 MK II , USBasp, ...啥都不用


只要將x3 的4支腳焊上, 杜邦線接一接(有兩種接法都可以,請注意順序, 務必參考上面或下面的資料喔....)
** Arduino UNO 目前還看不到類似的作法, 原廠的Forum 也說 UNO 暫不能拿來作為 ArduinoISP使用, Duemilanove 也較便宜, 有Duemilanove 的人就可以省下 USBasp的錢囉.....

接線的方式有兩種

接完線長這樣

或這樣

從網路上下載下列的程式
serjtag
解壓縮後 Copy 至 C:\Program Files
avrdude.conf 將此檔案複製到 serjtag 的安裝路徑"C:\Program Files\avrdude-serjtag\binary" 中
此檔案修改加入ATmega328P,168P and 88P的晶片資料
avrdude-GUI
解壓縮後 Copy 至 C:\Program Files, 是 avrdude 的圖形介面(需要有 .NET Framwork 2.0)....
進一步要設定配合avrdude

打開 C:\Program Files\avrdude-GUI-1.0.x\avrdude-GUI
依設定及測試步驟操作即可完成寫入 Bootloader 的工作

i 設定 avrdude 程式的路徑: C:\Program Files\Avrdude-serjtag\binary\avrdude.exe
ii 設定Programmer TYPE :當然是 FT232R Synchronous BitBang (diecimila)
iii 選擇Device : 依您的晶片選擇
(ATmega168 選擇如圖, ATmega328p 請下拉後另選 "ATmega 328P (m328p)")
iV 程式參數: -P ft0 -B 4800 (-P ft0 是設定用 BitBang 模式 -B 是設定速度 4800 baud)
請注意 Port 欄不要設定任何參數, 留空白即可

將您的 Arduino 接上即可測試是否正確接線及燒錄
1 測試
按下 Fuse 的 Read 鈕 若可正確讀到 Fuse 的3 個值即表示您的接線及程式設定正確
若不正確, 請檢查接線或將 -B 4800 刪掉 試試看....
2燒錄
插上一個新的MCU (記得先拔掉USB接頭),
重新接上 Arduino, 啟動 avrdude-GUI 按 Chip Erase後, 再按 Read 讀取 Lock Bit 的值(確認是3F)
Fuse 欄位設定 hFuse=CA, iFuse= DF, eFuse= 後按 Write (ATMega8 適用)
Fuse 欄位設定 hFuse=DD, iFuse= FF, eFuse= 00 後按 Write (ATMega168 適用)
Fuse 欄位設定 hFuse=DA, iFuse= FF, eFuse= 05 後按 Write (ATMega328P 適用)

載入Bootloader 的 Hex 檔 (C:\Program Files\arduino-00xx\hardware\bootloaders\atmega\ATmegaBOOT_168_diecimila.hex 也可用於 Duemilanove) 其他的Arduino Bootloader在不同資料匣(如 C:\Program Files\Arduino\arduino-00xx\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex)
後按 Erase-Write-Verify 進行寫入
Lock Bit 欄位中寫入 "0F" 後按 Write
OK , 完成一顆新的 Arduino Ready 的 ATMega168-20PU/ATMega328p-pu 囉.....

將Arduino變身為真正的 AVR ISP 燒錄器
拿一個 Arduino 改造一下, 加上 供電的接腳, 即可將您的 Diecimila 或 Duemilanove 當成 AVR-ISP
接線修改如下:

Ya 一個現成的 USB介面 AVR 燒錄器(ISP) 就 OK 了
(** 我只拿來燒 過 ATMega168-20PU和ATMega328P-PU啦**)

詳細資料及照片來自於 Kimio Kosaka 的網站 , 我只是參考照做而已.... ^_^

Kimio Kosaka 還有另一篇大作 , "將 FTDI BitBang 整合進 Arduino IDE"

"FTDI Bitbang method" with the Arduino-IDE

這樣用 Arduino-IDE 就可以直接進行 Bootloader 燒錄囉....
(個人覺得, ardude-GUI , 就很好用了! 另外那篇, 有空再翻譯唄)
(這篇文章藝科資訊可能有人翻過, 不過要會員才給看, 不符合 Arduino 的開放精神喔... ^_^ )