LSI Jiu-Jitsu

半導体とブラジリアン柔術

SSD1306 ~その1 基本編~

f:id:mohran:20170902171226j:plain

aitendoで購入したOLED(有機EL)モジュール「M096P4W(BL)」をラズパイから動作させる方法を纏めてみました。
主にコントローラー「SSD1306」の制御方法についてです。

まず初めに、基板の端子は下の写真の向きで左から
「SDA(I2C)」「SCK(I2C)」「GND」「VCC」
の並びになっています。

f:id:mohran:20170902171238j:plain

これをラズパイの各Pinと接続します。
Pin1(3.3V) - VCC
Pin3(SDA) - SDA
Pin5(SCL) - SCL
Pin9(GND) - GND
写真は秋月電子のブレッドボード接続キットを通して接続しています。

f:id:mohran:20170902171246j:plain


「SSD1306」のデータシートは、下記のサイトよりpdfをダウンロードしました。
https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf

f:id:mohran:20170902002802j:plain

以下、データシードを抜粋しながら記載していきます。

■ I2Cフォーマット

「SSD1306」にアクセスするI2C通信のフォーマットはこのようになっています。

f:id:mohran:20170902002920j:plain

スレーブアドレス(0x3c)の後に、コントロールバイト、データバイトの順に送信します。
コントロールバイトには「Co」と「D/C#」の2ビットが含まれております。
複数のデータバイトを送信したい時に「Co=1」で送信した時は、データバイトの次に再度コントロールバイトを送る必要がありますが、「Co=0」で送信した時は、データバイトのみを連続して送ることができます。
「D/C#」は、データバイトがコマンドかデータかの区別で、コマンドは設定レジスタ、データは画像データと考えて良いと思います。

ラズパイからI2C通信を行うには「Raspberry Piの設定」の「I2C」を有効にして再起動しておきます。

f:id:mohran:20170830130757p:plain

「I2C」が有効になっているとターミナルから「i2cset」コマンドでI2C通信を行うことが可能になります。

$ i2cset -y 1 0x3c \
        [コントロールバイト] \
        [データバイト] \
        [コントロールバイト] \
        [データバイト] \
        i

最後の「i」を入力するまでを「SSD1306」に送信してくれます。

例えば、下記のコマンド表は、画面の明るさを調整するコマンドですが、これを設定してみます。(Perlから)

f:id:mohran:20170902012151j:plain

#!/usr/bin/perl -w

$cmd  = 'i2cset -y 1 0x3c ';
$cmd .= '0x80 ';  # コントロールバイト Co=1, D/C#=0
$cmd .= '0x81 ';  # データバイト 明るさ設定
$cmd .= '0x80 ';  # コントロールバイト Co=1, D/C#=0
$cmd .= '0xff ';  # データバイト 明るさ最大値
$cmd .= 'i';

system($cmd);

「Co=1」 で送信しているので、データバイトの次に再度コントロールバイトを送信しています。

#!/usr/bin/perl -w

$cmd  = 'i2cset -y 1 0x3c';
$cmd .= '0x00 ';  # コントロールバイト Co=0, D/C#=0
$cmd .= '0x81 ';  # データバイト 明るさ設定
$cmd .= '0xff ';  # データバイト 明るさ最大値
$cmd .= 'i'

system($cmd);

これを「Co=0」で送信することにより、データバイトを連続して送信することができます。
特に理由が無ければ常に「Co=0」で送信していて問題無いと思います。

■ 画面構成

次に画面の構成ですが、「SSD1306」は縦8画素x横128画素を1ページとして、8ページ構成になっています。

f:id:mohran:20170902182600j:plain

ページ(縦位置)とカラム(横位置)を指定してから、コントロールバイトに「D/C#=1」をセットして画像データを送信することで、指定した座標から画像が表示されます。
縦8画素はちょうど1Byteなので、1ByteのうちLSBが画面上側、MSBが画面下側となっています。

f:id:mohran:20170902182613j:plain


■ アドレッシングモード

画像データを送信して、表示する方法として3種類のモード(アドレッシングモード)があり、コマンド「0x20」の後に送る値で指定します。

f:id:mohran:20170902182628j:plain

「0x00」Horizontal Addressing Mode
f:id:mohran:20170902182642j:plain
右方向に表示が進み、指定したカラム位置まで進むと次のページへ進みます。

「0x01」Vertical Addressing Mode
f:id:mohran:20170902183020j:plain
縦方向に表示が進み、指定した最終ページまで進むとカラム位置が右に1画素進みます。

「0x02」Page Addressing Mode
f:id:mohran:20170902183236j:plain
Horizontalと同じく右方向に進みますが、次のページには進まずに同じページ内でループします。

HorizontalモードとVerticalモードでは、カラム位置の指定はコマンド「0x21」で指定し、ページ位置は「0x22」で指定します。

「0x21」の後に送る1Byte目で開始カラム位置、次の1Byteで最終カラム位置を0~127の範囲で指定します。
f:id:mohran:20170902192612j:plain

「0x22」の後に送る1Byte目で開始ページ位置、次の1Byteで最終ページ位置を0~7の範囲で指定します。
f:id:mohran:20170902192626j:plain

Horizontalモードで、0x21 0x02 0x7d 0x22 0x01 0x06 と送ることで、このような順序で表示されます。
f:id:mohran:20170902193541j:plain


Pageモードでは、座標指定の方法が変わります。
「0xB0」~「0xB7」の1コマンドでページ位置を指定します。
f:id:mohran:20170902194546j:plain

カラム座標は、開始位置のみの指定となります。
「0x00」~「0x0F」で開始位置の下位4Bitを指定し、「0x10」~「0x1F」で上位4Bitを指定します。
(カラムは0~127なので、7Bitで良いはずなのですが、データシートは8Bit指定になっていました)
f:id:mohran:20170902194554j:plain

以上がアドレッシングモードについてですが、座標指定に関してデータシート上はPageモードとHorizontal/Verticalモードで個別の指定方法が記載されていますが、実使用としてはモードに関係無くどちらの座標指定でも可能なようです(笑)
個人的にはHorizontalモードが一番使いやすかったのでこれだけで十分かなぁ、と思っています。


■ コンフィグレーション

pdfの下の方にあるアプリケーションノートにコンフィグレーションのフローが載っていました。

f:id:mohran:20170922230755j:plain

パネルの設定などを行っていますが、このモジュールはデフォルト設定で使用できるので下の2つの「チャージポンプ設定」と「表示On」のみ設定すれば画面が表示されます。

チャージポンプの設定はアプリケーションノートに記載されています。

f:id:mohran:20170922231631j:plain


下記のコマンドで、チャージポンプと画面表示を有効にしてみます。

#!/usr/bin/perl -w

$cmd  = 'i2cset -y 1 0x3c ';
$cmd .= '0x00 ';  # コントロールバイト Co=0, D/C#=0
$cmd .= '0x8d ';  # チャージポンプ設定
$cmd .= '0x14 ';  # チャージポンプOn
$cmd .= '0xaf ';  # 画面表示On
$cmd .= 'i';

system($cmd);

SSD1304内の画像データRAM(GDDRAM)が初期化されていないためノイズのような画面が表示されました。

これをHorizontalモードで初期化してみます。

#!/usr/bin/perl -w

$cmd  = 'i2cset -y 1 0x3c ';
$cmd .= '0x00 ';  # コントロールバイト Co=0, D/C#=0
$cmd .= '0x20 ';  # アドレッシングモード指定
$cmd .= '0x00 ';  #   Horizontalモード
$cmd .= '0x21 ';  # カラム指定
$cmd .= '0x00 ';  #   開始位置(0)
$cmd .= '0x7f ';  #   終了位置(127)
$cmd .= '0x22 ';  # ページ指定
$cmd .= '0x00 ';  #   開始ページ(0)
$cmd .= '0x07 ';  #   終了ページ(7)
$cmd .= 'i';

system($cmd);


# ゼロで初期化
$cmd  = 'i2cset -y 1 0x3c ';
$cmd .= '0x40 ';  # コントロールバイト Co=0, D/C#=1
$cmd .= '0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ';  # 8バイト
$cmd .= '0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ';  # 8バイト
$cmd .= '0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ';  # 8バイト
$cmd .= '0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ';  # 8バイト 合計32バイト
$cmd .= 'i';

system($cmd);

画像データを32バイト送信したので左上から右に32画素クリアされました。

ちなみに1度の送信でデータバイトは32バイトまでしか受け付けてくれないようで、33バイト以上だと下記のエラーが発生しました。

Error: Too many arguments!
Usage: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]

これは、i2cset コマンドの制限のようで、PICなどのマイコンから制御する際は33バイト以上でも問題なく送信できました。


32バイト送信を4回繰り返して1ページ初期化。

更に7回繰り返して1画面全体を初期化することができます。


次に、ある特定の位置に表示を行ってみます。

3ページ目の30カラムから40カラムにかけて塗りつぶしてみます。

#!/usr/bin/perl -w

$cmd  = 'i2cset -y 1 0x3c ';
$cmd .= '0x00 ';  # コントロールバイト Co=0, D/C#=0
$cmd .= '0x20 ';  # アドレッシングモード指定
$cmd .= '0x00 ';  # Horizontalモード
$cmd .= '0x21 ';  # カラム指定
$cmd .= '30 ';    #   開始位置(30)
$cmd .= '39 ';    #   終了位置(39)
$cmd .= '0x22 ';  # ページ指定
$cmd .= '3 ';     #   開始ページ(3)
$cmd .= '3 ';     #   終了ページ(3)
$cmd .= 'i';

system($cmd);


$cmd  = 'i2cset -y 1 0x3c ';
$cmd .= '0x40 ';  # コントロールバイト Co=0, D/C#=1
$cmd .= '0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff ';
$cmd .= '0xff 0xff ';
$cmd .= 'i';

system($cmd);

一部分だけ塗りつぶすことができました。

このように座標位置を送信→画像データを送信の繰り返しで表示を行います。
以上がSSD1306の基本的な使い方でした。

Raspberry Piデビュー

f:id:mohran:20170830120359j:plain

秋月電子Raspberry Pi 3を買いました。

きっかけは、aitendoで見つけたこちらのOLED(有機EL)モジュール「M096P4W」です。

f:id:mohran:20170830120738j:plain

I2C通信を使って128x64のパネルを表示できるそうです。

これをPICから制御してみたいと思ったのですが、その前にI2Cの制御が充実しているラズパイで動かして使い方をマスターしようと考えました。

 

ラズパイは全く触ったことが無いので、こちらのサイトを参考にインストールを行いました。

trendy.nikkeibp.co.jp

 

以下は設定などです。

 

ラズパイとWindowsのディスプレイを共用させたのですが、切り替えがめんどうなのでWindowsからsshでログインすることにしました。

ラズパイの設定画面でSSHを有効にします。

f:id:mohran:20170830130757p:plain

 

ラズパイの無線LAN固定IPアドレスに変更します。

$ sudo vi /etc/dhcpcd.conf


~~ こちらを追加して再起動 ~~ interface wlan0 static ip_address=192.168.xxx.xxx/24 static routers=192.168.xxx.xxx static domain_name_servers=192.168.xxx.xxx

 

クライアントターミナルは「Tera Term (v4.95)」を使いました。

ttssh2.osdn.jp

 

インストール時のコンポーネントの選択で「Tera Term Menu」をOnにしておきます。

f:id:mohran:20170830132702j:plain

 

インストール完了後「Tera Term Menu」を実行すると右下にアイコンが現れます。

f:id:mohran:20170830133804j:plain

 

右クリックの「リスト編集」からログインサーバーのラズパイを設定します。

ホスト名    : 先ほど設定したラズパイの無線LAN IPアドレス

ユーザー名  : pi

パスワード  : raspberry (初期パスワード)

ttsshを使う : On

左向きの三角をクリックして登録します。

 f:id:mohran:20170830134016j:plain

 

「Tera Term Menu」の左クリックから「Pi」をクリックしてラズパイにログイン完了です。

f:id:mohran:20170830135035j:plain

 

OLEDパネルの制御IC「SSD1306」について色々と調べて、なんとか文字や画像を表示させることができました。

f:id:mohran:20170830120440j:plain

f:id:mohran:20170830120447j:plain

 

青パネルでも表示させてみました。

f:id:mohran:20170830120415j:plain

f:id:mohran:20170830120431j:plain

 

SSD1306は、慣れると簡単ですが、それまでが少しとっつき難い感じのコントローラでした。

詳しい制御方法についてはそのうち纏めてみたいと思います。

第11回全日本マスターズ選手権

2月25日に墨田区体育館で行われた

JBJJF - 第11回全日本マスターズ選手権

に出場して参りました。

久しぶりの土曜日試合です。

マスターズは3度目の出場。

過去2回はいずれも銀メダルに終わっておりワタクシの中で一番欲しいタイトルです。

今年こそはと意気込んで挑戦しました。

と言っても今年は紫帯。

そう簡単に取れるほど甘くはありません。

 

トーナメントは5人で争いますので、2人が3試合となります。

前日のトーナメント発表。

なんと、3試合の山にアサインされていました!

まぁ、考えようによっては負ければメダル無し。

勝てば最低でも銅メダル。

1試合も勝てずに負けて貰う通称「負けメダル」は欲しく無いので良い位置だったと思うようにしました。

初戦の相手選手は極めが強くて有名な選手で紫帯歴も長い方です。

胸を借りるつもりで挑戦しました。

 

引き込み成功。

パスガードのプレッシャーを耐えてスイープチャンスを伺います。

2分後、スイープ成功。

と思ったら柔らかくて力強い足が回ってきました。

マズい!

と離れようとした瞬間にガッチリ三角締めの型にもって行かれました。

外そうとしても物凄い脚力に・・意識が・・うすれ・・て・・。

最後の力で。

タップ!!

初戦敗退です・・。

 

結局この選手は次の準決勝も同じ展開でスイープされてから三角締め勝利

決勝は逆にスイープされる前にオモプラッタを極められてと。

紫帯で戦った行くには、まだまだ足りないな、と痛感した試合でした。

 

来年のマスターズまでにはもっとレベルを上げて優勝を目指したいと思います!

 

COPA Las Conchas 2017

先週日曜日の1月29日に

COPA Las Conchas 2017

に出場して参りました。

この大会は道場からも多数の仲間たちが出場し、道場内のお祭り的な大会でもありました。

しかし、ワタクシは紫帯デビュー戦。

試合自体も昨年の9月以来。

かつて無いほどの極度の恐怖心と緊張に襲われておりました。

おまけに試合5日前のスパーリングで倒れ際に左手を着いてしまい左肘を負傷し、ボッコリ腫れて痛みが出ています。

肘が痛いからキャンセル、風邪引いたとウソをついてキャンセル、逃げることばかり考えてしまっておりました。

これではダメだ!

紫帯を頂いた時に決意した

 

前だけを見て進む!

 

この言葉を思い出して自分を奮い立たせました。

試合当日、会場でチームのみんなと会ったら不思議と恐怖心が薄れていきました。

試合は三つ巴戦の2人側に配置されましたので、初戦で負けてももう1試合あります。

2連敗を覚悟しながら初戦の試合開始。

引き込み成功で下から伺いますが、相手選手の力が強い!

ガードに精一杯でアタックに行けません。

残り30秒でようやくスイープチャンスに移行できましたが不完全。

バックも取りかけたところでタイムアップ。

ポイントは0-0のままです。

アドバンテージがあれば貰えていたかも知れませんが、ASJJFルールなのでこのままサドンデスに突入です。

サドンデスも引き込み成功。

すると相手選手の疲れもあったのかあっさりスイープ成功。

なんと、紫帯デビュー戦を勝利することができました!

恐怖心から解放され、タオルで顔を覆っていると思わず涙がこぼれてきました(笑)

30分後に決勝戦です。

初戦の相手選手は敗者2回戦も負けてしまったので決勝戦は初戦とは別の選手となりました。

勝戦開始。

初戦と比べていくらか気持ちがラクになった状態で挑めます。

 

引き込み失敗!!

ワタクシが引き込むのを見透かされていたのでしょう。

引き込みと同時にタックルを合わせられてテイクダウンの2Pを取られてしまいました。

アタックを仕掛けるも全く成功しません。

相手選手も無理に攻めてはきません。

残り時間1分。

起き上がり際にタックルを仕掛けられたのでガブってバックを狙いました。

もたれながら倒れこんでバックポジション成功。

P4-2で逆転できました。

しかしすぐさま逃げられてしまい怒涛のパスアタックです。

残り時間30秒。

必死にガードを固めてタイムアップ。

2試合を勝利して優勝することができました!

大変な2試合でしたが感無量です。

しかし、試合内容は反省点ばかり。

先生からダメ出しもたくさん受けました。

「でもまぁ、褒めてあげましょう」

とも。

アメとムチ(笑)

嬉しかったです。

 

次戦は2月25日の第11回全日本マスターズです。

去年もラスコンチャス→マスターズの流れでした。

今回の優勝に奢らず、もっともっと精進して参りたいと思います。

頑張ります!

 

写真の左は去年のメダル、右が今年のメダルです。 

来年も続けば良いですけど・・。

 

f:id:mohran:20170204235213j:plain

今年買った道着

2016年は2着の道着を購入しました。

 

1着目はオリジナルブランドの

 

SYSTEM19

 

道場関係の方が自分でデザインからパキスタンでの製造発注など、ひとりで作りあげた道着です。

ブルテリアの直前に購入して2回勝って優勝。

今のところ勝率100%道着です(笑)

f:id:mohran:20161231134639j:plain

A1を購入しましたがイサミのA1とほぼ同じ大きさでした。

縮みも無く着心地も良かったです。

 

 

2着目は

 

VHTS - NY EDITION

 

最近大注目のブランドVHTSのNY EDITIONです。

f:id:mohran:20161231134644j:plain

シンプルな黒一色に一目惚れして、関東選手権出場のために購入しました。

A1を購入したのですが、上着が若干大き目な感じがしましたが洗濯したら縮んでピッタリサイズになりました。

お台場のOWN ONE SHOPで左腕に

01 HatsuneMiku.

刺繍を入れて貰いました(笑)

f:id:mohran:20161231134647j:plain

黒以外のパッチや刺繍が入っていない道着なので、赤文字が良い感じで目立ちます。

大変気に入っています。

 

基本的に黒道着は試合用にしており、2着とも試合用として購入しました。

それまで試合用にしていたALMAの黒道着は練習用に。

2017年はどんな道着が欲しくなるでしょうか。

第10回関東柔術選手権

腰の怪我もほぼ癒えて骨盤矯正も終了しました。

身体の歪みも大分解消されたようです。

自分でもなんとなく立ち姿勢が良くなったような気がします。

なにより普通に柔術ができることに幸せを感じています。

整形外科の先生が言った通り完治まで3ヶ月かかりました。

 

そして9月18日に台東リバーサイドで行われた

 

JBJJF - 第10回関東柔術選手権

 

へ参加して参りました。

この大会は、紫帯を貰う前にエントリーしていたので青帯を巻いての最後の大会出場です。

階級別ワンマッチでしたが、最後だからと締め切り直前に無差別級にも追加エントリーを行いました。

 

始めに階級別の試合です。

両者引き込みからワタクシが起き上がり上を選択しました。

アドバンテージリード。

相手選手はラッソー使いのようで右腕にガッチリと左足を巻きつかれてしまいました。

なんとか外そうとしましたが、カウンターの煽りでスイープされてしまいました。

今度は自分が下から攻めてやっとスイープ成功。

ラッソーを警戒しましたが、またもや巻きつかれてしまいました。

煽りから尻餅をついてしまいアドバンテージ献上。

残り時間30秒、巻かれた状態から強引にパス狙いで攻めましたがタイムアップ。

結局ポイント2-2、アドバンテージ1-1でレフリー判定となりました。

手が上がったのは・・

 

相手選手でした。

 

残念。

青帯ではワンマッチの勝率は100%でしたが遂に土がついてしまいました。

優勝して青帯を卒業したかったのに・・。

負け銀メダルです。

無差別級は記念出場のつもりでいたので、勝てる気は全くしません。

4人トーナメントだったので、優勝までは2回勝たないといけません。

なんとか1回戦を突破できるように気持ちを切り替えます。

1回戦の相手選手は2階級上の選手でした。

引き込み成功。

しかし担ぎやめくりからの怒涛のパスで攻めてきます。

なんとかいなすことができてスイープ成功。

抑え込もうとしたところで回転して逃げられたので追いかけてバック狙い。

1分後にようやくバックポジションキープで4ポイント。

6-0でリードできました。

チョークを狙いますが力の差がありすぎて腕が首に入りません。

あれよあれよと逃げられて、相手選手が上になりました。

まだ時間は2分ほど残っているので相手選手はパス狙いのラッシュをかけてきます。

ひたすらガード。

腕十字を狙われたところでスイープとなり、結局8-0で勝つことができました。

なんとか1勝することができましたが腕がパンパンです。

 

このマットで行われる次の試合は決勝で対戦することになる選手同士の対戦です。

ちゃんと見ておこうと思ったら・・。

1名欠場だったようで、不戦勝で3階級上の選手が上がってきました。

しかも外国人選手・・。

20分後、当たって砕けろ精神で試合開始。

引き込み成功。

相手選手も一瞬遅れて座りました。

おそらくWガードでは無い。

立ち上がると案の定、スイープとみなされて2ポイント先制。

相手選手は下からアキレス腱固めの体制から50/50を狙ってきます。

力が強くて簡単に倒されてしまいました。

しかし倒れながらも裾を掴むことができたので、強引に起き上がってスイープ成功。

その後はまたスイープされてとスイープ合戦の繰り返し。

6-4とリードできたところで、頑張って耐えしのんで試合終了。

なんと、無差別級で優勝することができました!

 

感無量です。

青帯を優勝で終えることができました。

紫帯で戦うにはまだまだ、心技体が不足していますがコツコツと頑張って修行を積んでいきたいと思います。

 

f:id:mohran:20161231134637j:plain

そして紫帯

腰の怪我から2ヶ月少々。

痛みはだいぶ無くなりましたが骨盤矯正には通っています。

そんな中に行われた道場主催のバーベキュー。

横須賀の海岸で行われました。

ワタクシの通っている道場は毎年、夏のバーベキューと、冬の忘年会で帯の授与式が行われます。

真夏の海岸で行われた楽しいバーベキュー。

若い人たちは水着を持って来ており海に入って遊んでいます。

ワタクシは・・

日焼けしたくないので長袖。

タープの下で気の合う仲間とチビチビとビールを飲んでいます。

 

宴も終盤にさしかかり行われた帯授与式。

先生が取り出したのは青帯と紫帯、それぞれ1本づつ。

今回のバーベキューに参加できなかった昇段者の方には数日前に授与されていました。

バーベキューに来ているなかで青帯の昇段は・・。

予想通りの方です。

おめでとう!!

 

そして紫帯。

あ、あれ・・?

ちょっと・・ま・・て・・よ・・。

今日来ている青帯選手の中でブルテリアで優勝したのはワタクシだけ・・。

 

なんと!!!!!!

 

 

 

f:id:mohran:20161231003152j:plain

 

頂いてしまいました!!!!

 

名前を呼ばれた瞬間、頭が真っ白に。

ルーキーズで御子柴くんがキャプテンを任命された時の絶句した表情。

 

f:id:mohran:20161231134343j:plain

 

お・・・俺が  紫帯・・・!

 

これと全く同じ顔をしていたと思います。

そして暴徒と化した若者達に担がれて海に投げ込まれて・・。

手荒い祝福。

着替え持ってきて無いのに(笑)

 

自分が紫帯を巻く姿なんて一度も想像したことが無かったので、本当にサプライズでした。

青帯でちょうど10勝。

優勝5回、準優勝2回の戦績でした。

正直、自分の年齢カテゴリでようやく勝てるようになってきたので、このまましばらくはこの調子で・・と思っていたのですが。

 

「ラクさせねーよ!上行ってもっと苦労してこい!!」

 

と先生からの言葉に涙が溢れ出てきました。

先生に認めて貰えての愛のムチ。

もっともっと精進しないといけません。

紫帯でも勝てるように今まで以上に頑張る決意をしました。

 

前だけ見つめて進みます!