まごころせいじつ堂

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

PS/2キーボード変換器の製作(11) スキャンコード取得

ArduinoでPS/2キーボードのスキャンコード取得が安定してできるようになった。ライブラリはarduino.ccのplaygroundで公開されているps2keyboardExt2を基本にps2keyboardの割り込み部分を混ぜた。ps2keyboardの方は外部割り込みでスキャンコードを受け取ったあとFIFOに入れている。(ここを自前で作ったら取り出し時に重複してしまった)

作りかけのライブラリとテスト用のスケッチ

Arduino UNOとLeonardoで挙動が違う部分に引っかかったので注意。
Arduino Leonardoの外部割り込み番号とピンの割り当てが異なる 

Arduino Leonardoの外部割り込み番号とピンの割り当てが異なる

PS/2キーボードのライブラリ改造を行なっていたら、Arduino Leonardoで動作がおかしい。Arduino UNO R3だと期待通りに動作する。どちらもマイコンからはピンが直接出ているので何が違うのか調べていたら、外部割り込みの番号とピン番号のアサインが違うことがわかった。

参考:Arduinoリファレンス attachinterrupt()

 再現環境を作った。(Arduino IDE 1.0.1、MacOSX)
 201207leonardo

以下のスケッチを使う。
// 20120703 Arduino IDE1.0.1
// Arduino UNO R3   INT_NUM=0,PIN=2 / INT_NUM=1,PIN=3
// Arduino Leonardo INT_NUM=0,PIN=3 / INT_NUM=1,PIN=2 (wrong)


#define INT_NUM 1
#define INT_PIN 3

int led = 13;
volatile int state = LOW;

void setup()
{
  pinMode(led, OUTPUT);
  pinMode(INT_PIN, INPUT_PULLUP);
  attachInterrupt(INT_NUM, blink, CHANGE);
}

void loop()
{
  digitalWrite(led, state);
}

void blink()
{
  state = !state;
}
 ピン2またはピン3に押ボタンを接続して、設定通りだとボタンを押せばLEDが反転する(チャタリングはとりあえず無視して)。
 Arduino UNO R3の場合は割り込み番号0、ピン2/割り込み番号1、ピン3の組み合わせで動作。
 Arduino Leonardoの場合は割り込み番号1、ピン2/割り込み番号0、ピン3の組み合わせで動作する。

この様に食い違っている。

PS/2キーボード変換器の製作(10) 整理

・PS/2キーボード→USB接続、US配列を日本語配列に変換する。工程整理。

■開発環境とマイコンは確定
・ArduinoIDE1.0.1とArduino Leonardo(互換品)で作成。オープンソース。再現性高い。
・送り返して書きなおしたりしなくても、先方でアップデート可能

☆印は優先、これらが出来れば最低限動作

□ハードウェア
□マイコン選定(AVR ATmega32U4搭載 Arduino Leonard互換ボード、複数の選択肢があることは重要)
 ※sparkfun ATmega32U4モジュール 今回は使わない http://www.switch-science.com/products/detail.php?product_id=982
☆PS/2ポートのPullUp抵抗無くせるか 設定確認
□ケース組み込み

□ソフトウェア
■構造
 ■PS/2キーボード入出力はArduinoのライブラリとして構成 → arduino.cc playgroundのps2keyboard/ps2keyboardext2を参考
 ■USB HIDキーボード出力はArduinoIDE1.0.1の機能を利用
 ■スキャンコード→USBのコードへの変換はスケッチで行う

・ライブラリ
□PS/2キーボード入力
 ■PS/2キーボードのスキャンコード Type2決め打ちでOK(Type1は古い機種、Type3は特殊で使われない)
 ☆スキャンコードを直接扱うrawread()を追加→作成済、未確認
 ☆スキャンコードをFIFOに入れる→キー取りこぼし対策
 ☆PrintScreen/Alt+PrintScreen
 □Pause(ただしPrintScreenができればたいしたことはない)
 □NumLock時挙動 キーパッド部分
□PS/2キーボード出力
 □コマンド送出 キーボード本体のLED制御
 □コマンド送出 キーボードリピート設定

・スケッチ
☆スキャンコード PS/2-US→USB-HID変換
□スキャンコード マルチメディア系の追加キー
☆make/release制御 USBは同時押し6個まで、PS/2は無制限 この調整

[MIPS]秋月PIC32MXをブレッドボードでLチカ

 従来のPICは食わず嫌いだったのだけど、MIPSと聞いてつい。

 秋月電子で普通のDIPパッケージで32bitMIPSアーキのマイコンが出た。190円〜220円。このうちフラッシュ32KB/RAM8KBでUSB付きのPIC32MX220F032Bを使ってみた。
PIC32MX220データシート
開発環境はPICkit3+MPLABXを使用した。PICkit2はPIC32に対応していないらしい。MPLABXはWindows/Linux/MacOSXに対応している。必要なのはXCコンパイラとMPLABX IDEのふたつ。これらをインストールする。

MPLABX

 PIC32を使用するには、[File][New Project...]からSamples/Embeded/PIC32 templateを選択する。
 次に作成したプロジェクトを選択した状態で[Files][Project Propaties]を開く。Configuration画面を以下の様に設定する。
Device:PIC32MX220F032Bを選択
HardwareTool:PICkit3以下に出ているシリアルナンバー(SN:BURxxxxxxxxx)を選択
Compiler Toolchain: PIC32用のCコンパイラが表示されていることを確認。

※MacOSX用でPICkit3が認識されていなかったのではまった。再インストールしたら認識した。Windows用は問題なし。

 では準備ができたので実験してみる。たけおかさんのを参考に(というよりまんまブレッドボードにのっけただけ)組み立てた。

PIC32MX220 (200円のMIPS CPU)を使う:たけおか ぼちぼち日記

配線はこんな感じ。
PIC32_01

電源供給はUSBシリアル変換モジュールAE-UM232Rからもらうことにした。PICkit3からの給電はしない(MPLABXのデフォルトでは給電なし)。
サンプルプログラムもたけおかさんのをそのままmain.cにコピペして使用。スミマセン。

pic32_02

シリアル通信を確認するにはFT232のドライバをインストールする必要がある。
Virtual COM Port Driver

MacOSX上では適当な端末ソフトが見つからなかったので、Arduino IDEのシリアルモニタを使用した。

 で、チカチカ成功。色々いじって点滅速度を変えたりシリアルに出力する文字変えたりして遊んでみた。


初期化の所で気になったのは以下。
SYSTEMConfigPerformance( SYSCLK );

これは動作周波数を引数として与えると、キャッシュ(実際はフラッシュROMのリード専用バッファに近い)の有効化やディレイの調整をまとめてやってくれるらしいのだが、PIC32MX220シリーズでは上限40MHzなのに80000000が指定されていた。80MHz動作はPIC32MX440シリーズのはす?この箇所を40000000に変更して確認したが、Lチカの周期は変わらなかった。どうやらPIC32MX220シリーズで40MHz以上の指定をしても上限40MHzになるみたいだ。なおシリアルの速度は変化しなかった。

 作例あり&ブレッドボードなので一晩でできました。みんなもやってみよう!

※LEDを2個同時に点灯させると若干暗くなる。I/Oはピンあたり15mA(シンク/ソース共)。


☆部品表

・PIC32マイコン
□PIC32MX220F032B

・秋月電子 USBシリアル変換モジュール
□AE-UM232R

・抵抗 1/8W
□10ohm
□330ohm x2
□10Kohm

・セラミック・コンデンサ
□0.1uF x2

・電解コンデンサ
□10uF 10V

・LED
□赤/緑/黄など適当に x2
(白/青はVFが3.3Vより上かもしれないので避ける)

□ブレッドボード
□ブレッドボード用配線材

□miniB USBケーブル

 

マイコン覚書き2012

色々調べて思った最近のマイコンに関するメモ。

・特徴
 安価:PIC、AVR 省電力:MSP430 高性能:ARM、PIC32(MIPS)

・フィジカルコンピューティング
 Arduino:プログラムを転送して実行、Gainer,Gainer-mini:パソコンの手足として動作

・Arduinoについて
 ArduinoのコアはATmega328。これにUSB-シリアル変換が付く。
 3.3Vと5V動作の品がある。
 Arduino UNOはUSB-シリアル変換をAVRのUSB付きモデルであるATmega16U4や8U4が使われている。 
 Arduino LeonardoはATmega32U4 ワンチップで実現。
 開発環境がフリーで使いやすく、作例が多い。
 動作確認後、ATinyなどに実装することも可能。

・ARM系について
 STマイクロなど評価ボードが安い。他社も続々参入。
 開発環境は複数ある。ちょっととっつきにくい。

・PIC
 USBの使えるPICはGainer-miniやPinguinoで使える。

・PIC32
 MIPSアーキで高性能かつ安価。Arduinoのシールドが使えるボードがある。

 いずれも、I/O周り、メモリ容量、動作速度に気をつけながらC/C++言語で開発できる。命令セットアーキテクチャはギチギチにプログラムを押し込めようとしないかぎり知らなくてもいいのでは?

 H8,SHなどが流行ってた頃はマイコンいじってなかったので分からないけど、新規に使わなくてもよいかな。R8C、78K0、V850あたりも。

 やはりユーザが多いマイコンは作例も豊富、何か行き詰まった時に調べやすい。

メモ PS/2キーボードのUSB変換に関して

これまで調べたPS/2のスキャンコード、キー番号などに関する資料。

マイクロソフトの資料:
Enhanced Keyboards and Windows
Archive: Key Support, Keyboard Scan Codes, and Windows

キー番号、スキャンコードの組み合わせに関する説明:
Sazanami Online PS/2 インターフェイスの研究

Arduinoでキーボードをエミュレートする方法:
Arduino PS/2 Keyboard Emulator Issues
Arduino Forum › Hardware › Interfacing › Arduino as Keyboard

ArduinoをUSBキーボードにする方法:(Leonardo,Atmega32U4以外を使った方法)
Project Log : Arduino USB
Virtual USB Keyboard
practicalarduino / VirtualUsbKeyboard
Arduino Uno DFU プログラミング

 Arduino Leonardoは keyboard.press()とkeyboard.release()を使えば簡単にUSBキーボードをエミュレートできる。ただしUSキー配列なので変換テーブルなどが必要。
 PS/2のスキャンコードは可変長なのでやや扱いにくい。OADGでPS/2キーボードのキートップに対してキー番号が割り当てられているので、これを使えばすっきりする。
 だが、組み込み用途ではスキャンコード→キー番号→USBと変換すると冗長になる。今まで調べた例だとPS/2のスキャンコードからUSBのコードやASCIIコードに変換テーブルなりswich~case文で変換しているが、特殊キーや日本語配列の対応が考慮されていないため難しそう。そこでPS/2のスキャンコードを2バイトで表現し固定長にして、ASCIIコードやUSBのコードに変換しようと考えている。
例:1バイト目のbit7…make/break、bit0…拡張コードかどうか、2バイト目…スキャンコード
これだとスキャンコードの変換はほぼ流用できる。バッファは倍になるが、PS/2キーのバッファは16バイトなのでこれが32バイトになるだけ。

できるだけ再利用しやすい方向で考えたい。 

メモ Lattice Diamond1.4.2

Latticeの開発ツールDiamond 1.4.2が出たのでメモ。
Lattice Diamond 1.4.2 Design Software Available Now 


MachXO2対応がメインみたい。
MachXO2: The Do-it-All PLD for Low Density Applications

Arduino Leonardo USBキーの英語/日本語配列確認

Arduino Leonardoのkeyboard.press()でシフトキーを押した時の記号について。
以下のスケッチを使う。ピン2とGNDに繋いだスイッチを押すと[SHIFT]+[2]が出力される。


/*
 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_PULLUP);
  pinMode(keymacroPin, INPUT_PULLUP);

  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(KEY_LEFT_SHIFT);
      Keyboard.press('2');
    }
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
    Keyboard.release('2');
    Keyboard.release(KEY_LEFT_SHIFT);
  }
  delay(100);
}


 これを以下の環境で確認した。SHIFT+2では……
MacOSX Lion/PowerBookPro13インチ 日本語キーボード : @マーク
Windows7 32bit DELL PRECISION4300 英語キーボード : @マーク
WindowsXP DELL Latitude D630 日本語キーボード : ”マーク
 
 Windows環境では本体のキーボードを押すのと同じ様に入力された。
 MacOSXではLeonardoをUSBで接続した時にHIDキーボードの識別をする画面が出るが、これをキャンセルすると英語配列として扱うようだ。

ArduinoIDE1.0.1/Leonardoで足らないキーを追加する 続き

前回の続き。
 Arduino LeonardoではHID USB Keyboardとしてkey.press()でキーボードのように振る舞うことが出来る。これはArduino IDE1.0.1ソース中の
hardware/arduino/cores/arduino 以下にある
HID.cpp
USBAPI.h
で定義されている。

 USBAPI.hで定義されていないキーを、以下にまとめた。

参考:Universal Serial Bus(USB) HID Usage Tables
USBキーボードのコード 


#define KEY_PRINTSCREEN		0xCE
#define KEY_SCROLL_LOCK		0xCF
#define KEY_PAUSE			0xD0

#define KEYPAD_NUM_LOCK		0xDB
#define KEYPAD_SLASH		0xDC
#define KEYPAD_ASTERISK		0xDD
#define KEYPAD_MINUS		0xDE
#define KEYPAD_PLUS			0xDF
#define KEYPAD_ENTER		0xE0
#define KEYPAD_1			0xE1
#define KEYPAD_2			0xE2
#define KEYPAD_3			0xE3
#define KEYPAD_4			0xE4
#define KEYPAD_5			0xE5
#define KEYPAD_6			0xE6
#define KEYPAD_7			0xE7
#define KEYPAD_8			0xE8
#define KEYPAD_9			0xE9
#define KEYPAD_0			0xEA
#define KEYPAD_DOT			0xEB
#define KEYPAD_NONUS_BACKSLASH	0xEC
#define KEYPAD_APPRICATION	0xED
#define KEYPAD_POWER		0xEE
#define KEYPAD_EQUAL		0xEF
#define KEY_F13				0xF0
#define KEY_F14				0xF1
#define KEY_F15				0xF2
#define KEY_F16				0xF3
#define KEY_F17				0xF4
#define KEY_F18				0xF5
#define KEY_F19				0xF6
#define KEY_F20				0xF7
#define KEY_F21				0xF8
#define KEY_F22				0xF9
#define KEY_F23				0xFA
#define KEY_F24				0xFB
#define KEY_EXECUTE			0xFC
#define KEY_HELP			0xFD
#define KEY_MENU			0xFE
#define KEY_SELECT			0xFF
#define KEY_STOP			0x100
#define KEY_AGAIN			0x101
#define KEY_UNDO			0x102
#define KEY_CUT				0x103
#define KEY_COPY			0x104
#define KEY_PASTE			0x105
#define KEY_FIND			0x106
#define KEY_MUTE			0x107
#define KEY_VOLUP			0x108
#define KEY_VOLDOWN			0x109
#define KEY_LOCKING_CAPS_LOCK	0x10A
#define KEY_LOCKING_NUM_LOCK		0x10B
#define KEY_LOCKING_SCROLL_LOCK		0x10C
#define KEYPAD_COMMA		0x10D
#define KEYPAD_EQUALSIGN	0x10E
#define KEY_INTERNATIONAL1	0x10F
#define KEY_BACKSLASH	0x10F
#define KEY_INTERNATIONAL2	0x110
#define KEY_KANA	0x110
#define KEY_INTERNATIONAL3	0x111
#define KEY_YEN		0x111
#define KEY_INTERNATIONAL4	0x112
#define KEY_XFER	0x112
#define KEY_INTERNATIONAL5	0x113
#define KEY_NFER	0x113
#define KEY_INTERNATIONAL6	0x114
#define KEY_PC98_COMMA	0x114
#define KEY_INTERNATIONAL7	0x115
#define KEY_INTERNATIONAL8	0x116
#define KEY_INTERNATIONAL9	0x117
#define KEY_LANG1			0x118
#define KEY_LANG2			0x119
#define KEY_LANG3			0x11A
#define KEY_KATAKANA		0x11A
#define KEY_LANG4			0x11B
#define KEY_HIRAGANA		0x11B
#define KEY_LANG5			0x11C
#define KEY_ZENHAN			0x11C
#define KEY_LANG6			0x11D
#define KEY_LANG7			0x11E
#define KEY_LANG8			0x11F
#define KEY_LANG9			0x120
#define KEY_ALT_ERASE		0x121
#define KEY_SYSREQ			0x122
#define KEY_CANCEL			0x123
#define KEY_CLEAR			0x124
#define KEY_PRIOR			0x125
#define KEY_RETURN2			0x126
#define KEY_SEPARATOR		0x127
#define KEY_OUT				0x128
#define KEY_OPER			0x129
#define KEY_CLEAR_AGAIN		0x12A
#define KEY_CLRSEL			0x12B
#define KEY_EXSEL			0x12C

#define KEYPAD_00			0x138
#define KEYPAD_000			0x139
#define KEYPAD_THOUSANDS_SEPARATOR	0x13A
#define KEYPAD_DECIMAL_SEPARATOR	0x13B
#define KEYPAD_CURRENCY_UNIT	0x13C
#define KEYPAD_CURRENCY_SUBUNIT	0x13D
#define KEYPAD_LEFT_PAREN	0x13E
#define KEYPAD_RIGHT_PAREN	0x13F
#define KEYPAD_LEFT_BRACE	0x140
#define KEYPAD_RIGHT_BRACE	0x141
#define KEYPAD_TAB			0x142
#define KEYPAD_BACKSPACE	0x143
#define KEYPAD_A			0x144
#define KEYPAD_B			0x145
#define KEYPAD_C			0x146
#define KEYPAD_D			0x147
#define KEYPAD_E			0x148
#define KEYPAD_F			0x149
#define KEYPAD_XOR			0x14A
#define KEYPAD_CARET		0x14B
#define KEYPAD_PERCENT		0x14C
#define KEYPAD_LESSTHAN		0x14D
#define KEYPAD_GREATERTHAN	0x14E
#define KEYPAD_AND			0x14F
#define KEYPAD_LOGICAL_AND	0x150
#define KEYPAD_OR			0x151
#define KEYPAD_LOGICAL_OR	0x152
#define KEYPAD_COLON		0x153
#define KEYPAD_HASH			0x154
#define KEYPAD_SPACE		0x155
#define KEYPAD_ATMARK		0x156
#define KEYPAD_EXCLAMATION	0x157
#define KEYPAD_MS			0x158
#define KEYPAD_MR			0x159
#define KEYPAD_MC			0x15A
#define KEYPAD_MADD			0x15B
#define KEYPAD_MSUB			0x15C
#define KEYPAD_MMUL			0x15D
#define KEYPAD_MDIV			0x15E
#define KEYPAD_SIGN			0x15F
#define KEYPAD_CLEAR		0x160
#define KEYPAD_CLEARENTRY	0x161
#define KEYPAD_BIN			0x162
#define KEYPAD_OCT			0x163
#define KEYPAD_DEC			0x164
#define KEYPAD_HEX			0x165


問題点:0x100以上のコードは正しく扱われない。HID.cpp中のKeyboard_::press()が8bitの範囲内でしか扱っていないためと思われる。コードの修正も必要になる。

 MacOSXに接続して、Arduino Leonardoに繋いだボタンを押すとシャットダウン画面が出るものを作ってみた。また、pinmode(buttonPin,INPUT_PULLUP); で明示的なプルアップ指示をしてみた。これはArduino IDE 1.0.1からの機能。

/*
 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

#define KEY_PRINTSCREEN         0xCE
#define KEY_SCROLLLOCK          0xCF
#define KEY_PAUSE               0xD0
#define KEYPAD_POWER		0xEE
#define KEY_VOLUP			0x108
#define KEY_VOLDOWN			0x109

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

  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(KEYPAD_POWER);
    }
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
    Keyboard.release(KEYPAD_POWER);
  }
  delay(100);
}


Arduino 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
記事検索
プロフィール

hardyboy

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