2013/09/08

Arduino:自製並列埠燒錄線

這篇參考Arduino官方網站的Parallel Port Programmer,製作一條並列埠燒錄線,可以燒錄一般草稿碼(sketch)、也可以燒錄bootloader到Arduino的微控制器晶片裡,但不能作為電腦與Arduino之間溝通傳輸的管道,那需要序列傳輸介面。

並列埠(parallel port),又稱為列表機埠(printer port),通常拿來接印表機或掃描器,現在多半被USB取代,不過我的電腦很老舊,所以還有並列埠(也有序列埠),作業系統是Windows XP(XP再戰十年?),板子是Arduino Uno R3,軟體開發環境是1.0.5版。

零件與材料:

  • 並列埠與保護殼
  • 五條電線,一頭焊接在並列埠,一頭是杜邦端子插入杜邦母座
  • 2x3的杜邦母座,套入Arduino板的ICSP針腳
  • 220歐姆電阻,1個
  • 470歐姆電阻,2個
所需工具:
  • 烙鐵
  • 焊錫
並列埠的背面與正面,背面焊接電線與電阻,正面插入電腦的並列埠。


並列埠的保護殼。


五條電線,一頭已裝好杜邦端子金屬部分。


2x3杜邦母座,將杜邦端子金屬部分插入即可。


並列埠有25個腳,我們只需要其中5個,電路圖如下。


動手焊接吧,這就沒什麼好說的了,焊好後用絕緣膠帶捆起來避免短路,塞入保護殼,鎖好螺絲。


根據Arduino Uno板子上的ICSP針腳,將電線另一頭杜邦端子金屬部分插入2x3杜邦母座。


完成囉。


插入Arduino的ICSP,然後將並列埠插入電腦,並提供電源給Arduino板(譬如使用9V電池)。


以上是硬體的部份,軟體的部份需下載MIT's Microcomputer Project Laboratory的giveio,解壓縮後執行裡頭的ginstall.bat即可安裝,這是讓上層軟體可存取低階硬體資源(例如並列埠)的驅動程式。然後開啟Arduino IDE,選Tools-Board設定正確的板子(此處為Uno),從Tools-ProgrammerParallel Programmer,然後就可以透過File-Upload Using Programmer燒錄草稿碼(注意,這麼做bootloader會不見),而透過Tools-Burn Bootloader可燒錄bootloader。

不過當我燒錄某草稿碼後,想要燒錄bootloader,卻出現如下錯誤訊息:
...
bitbang_cmd(): [ 20 3F FE 00 ] [ FF FF FF FF ]
bitbang_cmd(): [ 28 3F FE 00 ] [ FF FF FF FF ]
bitbang_cmd(): [ 20 3F FF 00 ] [ FF FF FF FF ]
bitbang_cmd(): [ 28 3F FF 00 ] [ FF FF FF FF ]
# | 100% 16.58s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x7e00
         0x11 != 0xff
avrdude: verification error; content mismatch

avrdude done.  Thank you.

搜尋後也不知道怎麼解決,但只要拔掉並列埠重插、重置Arduino板的電源、重新開啟Arduino IDE,就可以成功燒錄bootloader。


參考資料:

2013/09/07

Arduino:9V電池扣+開關+2.1mm DC電源插頭

Arduino板子除了可從USB連線汲取電源,還有個DC電源插座,內徑2.1mm、外徑2.5mm、中心為正極,而且可接受電壓為6~20V的外部電源,但建議使用7~12V。

首先準備材料,9V電池,9V電池扣,DC電源插頭,洛克開關。


開始焊接吧,也沒什麼技巧,需切斷其中一條電線置入開關。要注意的是,正極(紅線)連接插頭的中心,負極(黑線)連接插頭的外緣。


完成囉,用絕緣膠帶纏繞裸露的地方吧,唉,真難看,算了不管了。插入Arduino板,耶!

2013/09/06

Arduino:Leonardo與Uno的差異比較

這一篇記錄Leonardo與Uno不同的地方,零零碎碎,雜七雜八。

跟Uno比起來,Leonardo比較新、硬體規格比較強、價格比較便宜,但Uno資格較久,許多書籍、文件、網路上的分享心得、以及眾多程式庫,幾乎都 以Uno為基準,雖說兩者幾乎一樣,但仍有一些小差異,這些小麻煩對老鳥來說自然不會產生大問題,但對新手來說仍算是不低的障礙。所以第一次玩微控制器板或Arduino的朋友,我建議購買Uno。









Uno的微控制器是ATmega328P,有DIP也有SMD,另有一顆ATmega8U2(R1與R2)/ATmega16U2(R3),作為USB橋接功能;Leonardo的微控制器是ATmega32U4,只有SMD,32U4已包含USB功能。

Uno的USB插座是一般B型,Leonardo的USB插座則為Micro B型。

都有一個2.1mm/2.5mm的DC電源插座,都有重置按鈕,運作時脈都是16MHz,Flash memory都是32KB,Uno的bootloader約0.5 KB,Leonardo的bootloader約4 KB,
EEPROM都是1KB,SRAM(Uno 2KB,Leonardo 2.5KB)。

Uno與Leonardo板子的尺寸大小、排母數目與位置,都一樣,但功能有所不同。

數位腳位,Uno在板子上方有14個(標示為0~13),其中6個可PWM,以「~」額外標示,3、5、6、9、10、11,解析度8位元。Leonardo相同,PWM多了一個13。

類比輸入腳位,Uno在板子下方有6個(標示為A0~A5),解析度10位元。Leonardo多了6個,A6~A11(位於數位腳位4、6、8、9、10、12)。

I2C/TWI介面,Uno:SDA(A4、SDA)與SCL(A5、SCL)。Leonardo:SDA(2、SDA)與SCL(3、SCL)。

SPI介面,Uno:SS(10)、MOSI(11)、MISO(12)、SCK(13)。Leonardo跟Uno不同,SPI不在數位腳位,MOSI、MISO、SCK都在ICSP上,SS則位於板子左邊與RX LED相連。

外部中斷,Uno:2(int.0)、3(int.1)。Leonardo:3(int.0)、2(int.1)、0(int.2)、1(int.3)、7(int.4)。

Serial(序列介面),Uno:RX(0)與TX(1)連接8U2/16U2(USB轉TTL Serial的晶片),在程式裡以Serial物件存取。Leonardo:在程式裡Serial物件代表USB CDC(Connected Device Class),而Serial1物件才是RX(0)與TX(1)。Leonardo事實上擁有兩個序列埠,一個模擬而成的虛擬序列埠(不管是在電腦端還是在微控制器端),連接USB連線,另一個則是微控制器本身原本擁有的UART硬體。

因Leonardo使用內建USB功能的ATmega32U4,擁有非常強大的bootloader,除了可作為虛擬序列埠(COM port),也可模擬成USB鍵盤與滑鼠(標準的HID裝置,無需驅動程式)。連接Leonardo與電腦時,系統就會出現三個新硬體裝置:虛擬序列埠、USB鍵盤、USB滑鼠。其實Uno也可以模擬USB鍵盤與滑鼠,但必須透過DFU模式修改8U2/16U2的韌體。

自動軟體重置,Uno:8U2/16U2的DTR連接到Atmega328P的重置線路。Leonardo:當以1200鮑率開啟虛擬序列埠並關閉時就重置。

Uno因有一顆獨立晶片負責USB轉TTL Serial,所以當主晶片重置時,該連線並不會斷掉,但Leonardo會,原本若開啟電腦端的序列埠監控視窗,Uno就會重置,但Leonardo不會,以至於在setup()從序列埠傳出的資料,可能不會出現在電腦端,所以通常會加上while (!Serial);等待開啟序列埠。

因為Leonardo重置時虛擬序列埠會消失,所以在上傳(燒錄)時,Arduino IDE會等待,直到出現新的虛擬序列埠,然後再進行上傳動作。


參考資料: