2014年9月19日 星期五

Arduino:Leonardo與Uno的比較

Arduino Uno R3 Front and Back

Arduino Uno R2 Front

Arduino Uno Front  and Back
Arduino Leonardo Front with headers and Rear

UNO: 
MicrocontrollerATmega328
Operating Voltage5V
Input Voltage (recommended)7-12V
Input Voltage (limits)6-20V
Digital I/O Pins14 (of which 6 provide PWM output)
Analog Input Pins6
DC Current per I/O Pin40 mA
DC Current for 3.3V Pin50 mA
Flash Memory32 KB (ATmega328) of which 0.5 KB used by bootloader
SRAM2 KB (ATmega328)
EEPROM1 KB (ATmega328)
Clock Speed16 MHz


MicrocontrollerATmega32u4
Operating Voltage5V
Input Voltage (recommended)7-12V
Input Voltage (limits)6-20V
Digital I/O Pins20
PWM Channels7
Analog Input Channels12
DC Current per I/O Pin40 mA
DC Current for 3.3V Pin50 mA
Flash Memory32 KB (ATmega32u4) of which 4 KB used by bootloader
SRAM2.5 KB (ATmega32u4)
EEPROM1 KB (ATmega32u4)
Clock Speed16 MHz


Uno的bootloader約0.5 KB
Leonardo的bootloader約4 KB,


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

數位腳位,板子上方有14個(標示為0~13),其中6個可PWM,以「~」額外標示;
解析度8位元
       UNO:3、5、6、9、10、11。
Leonardo:3、5、6、9、10、11、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)。
        UNO R3上方插槽較R2多兩腳(與Leonardo插槽相同),如下圖示(來源:網昱多媒體 Arduino UNO介紹),新增的SCL和SDA插孔,分別和類比腳位A5與A4相連,新增這兩個插孔的好處是,做實驗時從板子的標示(註:標示在板子背後),能立即分辨SCL和SDA。
Arduino UNO控制板的接腳說明


 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會等待,直到出現新的虛擬序列埠,然後再進行上傳動作。

資料來源: