デジタル入出力

WOBはコンピュータですので当然のことながらデジタル入出力を持っています。デジタル入力とはたとえばスイッチのオン・オフを1本の線でセンスすること、デジタル出力とはたとえば1個のLEDを点灯・消灯する操作を1本の線で制御することです。

I/O領域からデジタル入出力に関係するI/Oマップを抽出します。上位8本+下位8本=合計16本のデジタル入出力をセンス/制御できるようになっています。ただし、WOBモニタやDeM仮想マシンを動かすのにすでに使用している端子がありますので、そこを避けて使ってください。

メモリ I/O命令 アクセス 対応するI/Oポート、
アドレス アドレス タイプ メモリ、メソッド カテゴリ 説明
3184-3187 46 R/W DDRB デジタル 方向切換え上位(各桁:0/1/2=入力/プルアップ付入力/出力)
3188-3191 47 R/W DDRD 方向切換え下位(各桁:0/1/2=入力/プルアップ付U入力/出力)
3192-3195 48 R/W PINB/PORTB 入出力上位(各桁0または1)
3196-3199 49 R/W PIND/PORTD 入出力下位(各桁0または1)

さらに上位・下位それぞれの内訳です。「空き」は実験に使える入出力端子です。

入出力上位

桁7 桁6 桁5 桁4 桁3 桁2 桁1 桁0
コネクタの端子名 なし なし D13 D12 D11 D10 D9 D8
CPUのピン名 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
用途 LED13*1 NWRE*2 空き 輝度*3 空き 空き 空き 空き

*1 基板実装済みの赤いLED。実験に使えます。
*2 ネットワークトランシーバの受信制御端子に接続されています。
*3 ディスプレイLEDの輝度制御端子に接続されています。

入出力下位

桁7 桁6 桁5 桁4 桁3 桁2 桁1 桁0
コネクタの端子名 D7 D6 D5 D4 D3 D2 D1 D0
CPUのピン名 PD7*1 PD6*1 PD5 PD4 PD3 PD2 PD1 PD0
用途 空き 空き FM音源 空き NW送信 NW受信 USB送信 USB受信

WOBに何も手を加えない状態でデジタル入出力を実験できるのは、ネットワークコネクタ近くにある赤いLED(LED13)だけです。ほかの「空き」端子を使う場合は付属の実験パーツの中のLEDが使えます。

*1 アナログ出力と兼用になっていますが、方向切換えへの書き込みでこれらの桁の方向が変わった(入力から出力へまたは出力から入力へ)とき、アナログ出力は対応するピンから自動的に切り離されますので、プログラム上でそのことを気にする必要はありません。

使い方(入出力共通)

  1. どの端子を使うか決める。上位・下位の違いで操作するアドレスが変わる。
  2. 0 入力
    1 プルアップ付入力*1
    2 出力

    「方向切換え」を8桁全部読み込んで、使う桁だけ変更した8桁を覚えておく。桁は端子の機能によって入力/プルアップ付入力*2/出力で0/1/2と変更する。(右図)

  3. 「方向切換え」に変更した8桁をまとめて書き込む。WOBモニタでまとめて書き込む方法はこちら
  4. 上記の操作をいったん終わらせてしまえば、端子の機能を変更しない限り以降この操作は必要ない。

*1 50kΩ程度の抵抗で電源に吊り上げた状態の入力。この端子とGND(グラウンド)間にスイッチを接続した場合、接点が外れた状態でも電圧「高」=論理「1」を与えることができ、中途半端な状態がセンスされるのを回避できる。

使い方(入力)

  1. 「入出力」を読み込む。入力およびプルアップ付入力に設定した桁が0または1で得られる。端子電圧が「低」の場合は0、「高」の場合1となる。

使い方(出力)

  1. 「入出力」を8桁全部読み込んで、使う桁だけ変更した8桁を覚えておく。桁は端子電圧を「低」にしたい場合は0、「高」にしたい場合は1と変更する。
  2. 「入出力」に変更した8桁をまとめて書き込む

サンプルコードはこちら