まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

Leonardo

Arduino LeonardoとATmega32U4搭載マイコンのピン接続表

Arduino Leonardoと32U4を搭載したマイコン基板の端子について調べた。

本家Arduino Leonardo
ATmega 32U4-Arduino Pin Mapping  ※2012/5/28現在、表にミスあり。32U4のpin30に対応するのはDigitalPin10。
ATmega32U4搭載マイコンボード[スイッチサイエンス] ※現行品はシルク印刷にミスあり。
ダ・ヴィンチ32U[ストロベリーリナックス]

 これらのマイコン基板の端子とATmega32U4のピン対応一覧をExcelにまとめた。
一応テスタを使ってよくわからない所は確認したが、使うときは自己責任でどうぞ。

32U4.xls[Google Drive]

 
32U4 pin# Pin Name Leonardo 32U4Breakout Davinci
1 PE6(INT.6/AIN0) Digital Pin7 14.E6 30.PE6
2 Uvcc +5V 6.VCC 2.+5V
3 D- RD- - -
4 D+ RD+ - -
5 UGND UGND - -
6 Ucap UCAP - -
7 VUSB Vbus - -
8 PB0(SS/PCINT0) RXLED 1.B0 22.PB0
9 PB1(PCINT1/SCLK) SCK 2.B1 23.PB1
10 PB2(PDI/PCINT2/MOSI) MOSI 3.B2 24.PB2
11 PB3(PDO/PCINT3/MISO) MISO 4.B3 25.PB3
12 PB7(PCINT7/OCA0/OC1C/#RTS) Digital Pin11(PWM) 18.B7 29.PB7
13 RESET RESET 5.RST 3.RST
14 Vcc +5V 6.VCC 2.+5V
15 GND GND 21.GND 1,17,32 GND
16 XTAL2 XTAL2 - -
17 XTAL1 XTAL1 - -
18 PD0(OC0B/SCL/INT0) Digital Pin3(SCL)(PWM) 10.D0 4.PD0
19 PD1(SDA/INT1) Digital Pin2(SDA) 9.D1 5.PD1
20 PD2(RXD1/AIN1/INT2) Digital Pin0(RX) 7.D2 6.PD2
21 PD3(TXD1/INT3) Digital Pin1(TX) 8.D3 7.PD3
22 PD5(XCK1/#CTS) TXLED (TXLED) 9.PD5
23 GND1 GND 21.GND 1,17,32 GND
24 AVCC AVCC 6.VCC 2.+5V
25 PD4(ICP1/ADC8) Digital Pin4 11.D4 8.PD4
26 PD6(T1/#OC4D/ADC9) Digital Pin12 19.D6 (シルク誤記D6) 10.PD6
27 PD7(T0/OC4D/ADC10) Digital Pin6(PWM) 13.D7 11.PD7
28 PB4(ADC11/PCINT4) Digital Pin8 15.B4 26.PB4
29 PB5(PCINT5/OC1A/#OC4B/ADC12) Digital Pin9(PWM) 16.B5 27.PB5
30 PB6(PCINT6/OC1B/OC4B/ADC13) Digital Pin10(PWM) 17.B6 28.PB6
31 PC6(OC3A/#OC4A) Digital Pin5(PWM) 12.C6 12.PC6
32 PC7(ICP3/CLK0/C4A) Digital Pin13 20.C7 13.PC7
33 PE2(#HWB) HWB HWB 16.HWB
34 Vcc1 +5V 6.VCC 2.+5V
35 GND2 GND 21.GND 1,17,32 GND
36 PF7(ADC7/TDI) Analog In 0 23.F7 21.PF7
37 PF6(ADC6/TDO) Analog In 1 24.F6 20.PF6
38 PF5(ADC5/TMS) Analog In 2 25.F5 19.PF5
39 PF4(ADC4/TCK) Analog In 3 26.F4 18.PF4
40 PF1(ADC1) Analog In 4 27.F1 15.PF1
41 PF0(ADC0) Analog In 5 28.F0 14.PF0
42 AREF AREF 22.AREF 31.REF
43 GND3 GND 21.GND 1,17,32 GND
44 AVCC1 AVCC 6.VCC 2.+5V

Arduino IDE1.0.1とDavinciのLeonardo化

Arduino IDE 1.0.1がリリースされた。目玉はLeonardoの正式対応とマルチリンガル対応。MacOSXにインストールするとメニューが日本語化されていた。
 Leonardo正式対応ということで手持ちのDavinciを使ってUSB HID Keyboardのテストをやってみたが、コンパイルは通っても動作しない。これはDavinciのLeonardo相当ファームが古いのでは?と思い更新してみた。
 ファーム更新はAVR-ISP mkIIを使用する。Davinciにハンダ付けした6ピンのISP端子に写真の様に接続する。また、AVR-ISP mkIIでの書き込みでは別に電源が必要なため、DavinciにUSBケーブルを接続した。 また、Devinci上のショートプラグはショートしている。(写真右下にちょろっと見える)
2012isp
 
 書き込みはArduino-IDE1.0.1の[ツール]→[マイコンボード]でArduino Leonardoを選択。次に[ツール]→[書込装置]でAVRISPmkIIを選択。そして[ツール]→[ブートローダを書き込む]を実行。AVR-ISP mkII 装置のLEDがオレンジ色に光り、一分程で終了。
なぜか1回ではうまくいかず、DavinciをUSBケーブルでMac本体に接続してもシリアルポートを認識しなかった。2回目の書き込みでうまくいった。
ついでながら従来DavinciはWindows環境ではデバイスドライバをインストールできなかったのが、ファーム書き換えでArduino IDE1.0.1付属のデバイスドライバで認識できるようになった。まあLeonardoで書き換えられたんだからそうだろう。
 現在、発売されたばかりのArduino LeonardoとATmega32U4搭載マイコンボードを注文している。LeonardoのハードはほぼATmega32U4そのものなので、マイコンボードの方も書き換えられないかなあと思っている。

 HID-USB Keyboardのテストは以下。https://gist.github.com/2775713

/* Button for Keyboard (Arduino Leonardo only) */

/*
  Button
 
 Turns on and off a light emitting diode(LED) connected to digital  
 pin 13, when pressing a pushbutton attached to pin 2. 
 
 
 The circuit:
 * LED attached from pin 13 to ground 
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground
 
 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.
 
 
 created 2005
 by DojoDave 
 modified 30 Aug 2011
 by Tom Igoe
 
 This example code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to 
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int keymacroPin = 3;
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  pinMode(keymacroPin, INPUT);
  digitalWrite(buttonPin, HIGH);
  digitalWrite(keymacroPin, HIGH);

  Keyboard.begin();
}

void loop(){
  if (digitalRead(keymacroPin)==LOW) {
    // not implemented
  }

  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == LOW) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH); 
    delay(30);
    while(buttonState == LOW){
      buttonState = digitalRead(buttonPin);
      // Keyboard.press(ctrlKey);
      Keyboard.press(' ');
    }
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
    Keyboard.release(' ');
  }
  delay(100);
}

2012mouse

 これは以前作ったマウスクリックと同じようなもので、今回はボタンを押すとスペースキーを押しっぱなしにしたのと同じような動作になる。Arduino-IDE 1.0非公式のやり方ではKeyboard.write()でUSBキーボードの文字を押した動作になるが、押しっぱなしにする機能はなかった。Arduino1.0.1からはKeyboard.press()とKeyboard.release()で指示できる。このため前回はGoogle日本語モールス入力がスペースキーでは出来なかったのでマウスクリックにしたが、今回はスペースキーでOKになった。また、モディファイア(CTRLキー、SHIFTキー)も指示できるようだ。

 Mouse&Keyboardライブラリの使い方。Mouse & Keyboard libraries[arduino.cc]

モディファイアの定義などは以下にある。
hardware/arduino/cores/arduino/USBAPI.h

ちょっと抜き出すと:

#define KEY_LEFT_CTRL           0x80
#define KEY_LEFT_SHIFT          0x81
#define KEY_LEFT_ALT            0x82
#define KEY_LEFT_GUI            0x83
#define KEY_RIGHT_CTRL          0x84
#define KEY_RIGHT_SHIFT         0x85
#define KEY_RIGHT_ALT           0x86
#define KEY_RIGHT_GUI           0x87

#define KEY_UP_ARROW            0xDA
#define KEY_DOWN_ARROW          0xD9
#define KEY_LEFT_ARROW          0xD8
#define KEY_RIGHT_ARROW         0xD7
#define KEY_BACKSPACE           0xB2
#define KEY_TAB                         0xB3
#define KEY_RETURN                      0xB0
#define KEY_ESC                         0xB1
#define KEY_INSERT                      0xD1
#define KEY_DELETE                      0xD4
#define KEY_PAGE_UP                     0xD3
#define KEY_PAGE_DOWN           0xD6
#define KEY_HOME                        0xD2
#define KEY_END                         0xD5
#define KEY_CAPS_LOCK           0xC1
#define KEY_F1                          0xC2
#define KEY_F2                          0xC3
#define KEY_F3                          0xC4
#define KEY_F4                          0xC5
#define KEY_F5                          0xC6
#define KEY_F6                          0xC7
#define KEY_F7                          0xC8
#define KEY_F8                          0xC9
#define KEY_F9                          0xCA
#define KEY_F10                         0xCB
#define KEY_F11                         0xCC
#define KEY_F12                         0xCD




 うれしかったのは(1)Windowsでのデバイス認識、(2)USB-HIDキーボードの正式サポート。これであれがやっとできる!

参考:
2012/5/22 Arduino-1.0.1リリース[Arduino Wiki]
Arduino Leonardoへのガイド[スイッチサイエンス]

追記:モディファイアの設定も効いた。
      Keyboard.press(ctrlKey);
      Keyboard.press('a');
で全選択ができる(WindowsでCTRL+A)。
なお、ArduinoIDE1.0.1のMacOSX版では、Arduino(Leonardo)のシリアルポートがUSBケーブルの挿し直しなどで番号が変わってしまった場合にエラーとなる。ArduinoIDE1.0では接続すべきポートをサジェストしてくれていた。

ctrlaltdel.ino WindowsXPでこれを接続してボタンを押すとタスクマネージャが起動します。 

追記:
      Keyboard.press(shiftKey);
      Keyboard.press('2');
で表示されたのは'@'でした。つまりUSキーボード相当の扱いだと思われます。
 

Davinci(Leonardo) マウスクリック

DavinciでUSBキーボードまわりを調べているけど、ちょっとわからないのでUSBマウスのほうで遊んでみた。
Mouse.press()で左ボタンを押した状態、Mouse.release()で離す。
 ソースはこちら。→https://gist.github.com/2651911

2012mouse
Davinciの5番ピン(D2)とGND間にキーを付ける。これがUSBマウスの左ボタンに対応する。
おまけで4番ピン(D3)を押すとモールスコードを発生するようにした。
Google日本語入力モールスバージョンで遊んでみよう。

あと、Arduino IDEでわかったこと。
pinMode(番号、INPUT) ; digitalWrite(番号,HIGH); でプルアップが指定できる。
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ