2011/12/12(月)mbed向けにAD-128160-UARTのライブラリ作った
2011/12/12 18:14
このLCDの特徴としては
- 3.3V単電源で駆動できる
- 少ない信号線で制御できる(txとresetの二線のみ)
- 点、直線、四角形、円などの図形を高速に描画できる
- ASCIIフォントが組み込まれている。(設定を行うことで日本語も書き込めるみたいです)
- miniUSB端子が付いており、PCからもコマンドを送ることで制御できる
というようにスペック上は魅力あふるるLCDなのですが、発売後数ヶ月経ってもaitendoが碌にデータシートを公開していないため、これまでは真っ暗な液晶を眺めながら可能性を想像する程度の置物レベルの価値しかありませんでした。
現在はGingaXさんが使い方をまとめてくださって、基本的な使い方はわかるようになったので今回はmbed用にライブラリをつくってみたという次第です。
使ってみる
写真
回路図
プログラム
#include "mbed.h" #include "AD128160.h" AD128160 lcd(p9,p20);//tx reset //2バイトRGBをつくるための関数 int rgb565(int r, int g,int b) { int rgb; rgb = (r & 0xF8) << 8; /* RRRRR----------- */ rgb |= (g & 0xFC) << 3; /* -----GGGGGG----- */ rgb |= b >> 3; /* -----------BBBBB */ return rgb; } int main() { lcd.backgroudColor(rgb565(255,0,0));//文字の背景色を赤に設定 lcd.locate(2,lcd.rows()/2); //大体真ん中あたりに移動して lcd.printf("Hello World!\n"); //お馴染みの文を表示 lcd.color(rgb565(0,255,0)); //図形の色を緑に設定 lcd.box(12,76,116,100,0); //塗りつぶしなしで矩形表示 lcd.box(8,120,124,146,1); //塗りつぶしありで矩形表示 lcd.color(rgb565(255,0,0)); //図形の色を赤に設定 lcd.circle(16,40,16,0); //塗りつぶしなしで円表示 lcd.circle(48,40,16,1); //塗りつぶしありで円表示 lcd.circle(80,40,16,1); //塗りつぶしありで円表示 lcd.circle(112,40,16,0); //塗りつぶしなしで円表示 }細かいライブラリの使い方なんかはクラスリファレンスを読んでください。
ライブラリをつくるときにStreamクラスを継承して_putc()メンバー関数をLCDにあわせて作成することでprintfにもあっさり対応できてます。
画像も表示させてみる
どのくらいの発色なんかなーと16bit bitmapデータを作って表示させてみました。
まーまー綺麗に表示できますね。
こちらのプログラムも一応ここに置いておきます。
試すときの128x128の16bit bitmapは各自準備してください。。
2011/12/06(火)DSO Nano v2が壊れたのでテキトー修理
2011/12/06 06:21
ちゃんとした計測器として使えるかどうかはさておいて、ちょっとした波形をみてキャプチャしたり、ちょっとしたPWMを出力したりなどと出来るため、そこそこ便利に使っていました。
しかしこのたび「うぇーいうぇーいアババ」とそこらのバカ学生顔負けの使い方をしていたらショートさせてしまい、PCと繋いでも認識されずに通信ができなくなってしまいました。
一応修理を行ったので、そのことを記録しておきます。もしも同じような壊し方をした人がいらっしゃれば参考に…。
修理
とりあえず分解してみると、のようにL2とL3が焦げていました。
回路図を確認するとこれらはフェライトビーズのようです。
フェライトビーズとはノイズをカットするための部品で、直流成分に対しては0.数Ωなのに対して100MHzには数百Ωになったりする偉いやつです。
しかしフェライトビーズが手元になかったので、「まぁノイズカットはなくても大丈夫っちゃ大丈夫だろ…大丈夫だよな…」と
このようにジャンパしたら無事に?PCから認識されて通信が可能になりました。やってみるものですね。まぁ壊すときも同じような流れだったんですけど。
問題なくファームの更新なども行えることを確認しましたが、このままでは良い子も悪い子もあんまり真似しない方がいい状態かと思います。
フェライトビーズを置き換えれば完全に大丈夫なのでしょうが、どの値を付ければいいのかちょっとよくわかりません。サイズがおんなじこのあたりを使えば良いのかな。。
参考
DSO nano V2の回路図2011/09/06(火)RSC-U485のまがい物をつくる
2011/09/06 03:01
2012/1/13追記
この記事のコメントで,以下のようにすることでUbuntuでもRSC-U485が認識することをまえださんから教えて頂きました.
ありがとうございます!
Ubuntu 9.10 では RS-U485 を
# modprobe ftdi_sio vendor=0x1115 product=0x0008
で認識しました.
回路
FT232RLはデフォルトだとCBUS2がTXDENとして機能しているそうなので、CBUS2をREとDEに接続することでRS485通信を行えます。
見た目
秋月のFT232RLモジュールの下にLTC485CN8が置いてあります。
ついでにハブとしての回路も持たせてみてます。ちょっとスイッチが小さいのが心配ですが。。
これで一応WindowsでもLinuxからでもRS405CBが制御できるようになりました。
パクリ元
FT232RLでRS-485通信(爪車さん)2011/09/04(日)ArduinoでRS485通信をしてみる
2011/09/04 15:36
LTC485CN8を使ってみる
回路図
説明
LTC485CN8はDE,RE端子の状態によって送信、受信のモードを切り替えて使います。つまりマイコンは,DE,REに直結した端子をHIGHにしてから送信、LOWにしてから受信というように処理を行えばいいわけですね。
あとはまぁ別に普通のシリアル通信です。
余談となってしまうんですが,RS405CBの設定で返信ディレイ時間が用意されている理由は、送受信の切り替えに時間がかかるマイコンを使ったときに調整するためなのかなぁと思ってます。
RS405CBはFutabaのロボット用サーボの開発成果を全て盛り込んだという触れ込みだけあって、色々気が使われてる印象がありますね。
プログラムはちょっと長いので続きを読むに置いときました。
参考という名のパクリ元
RS-485の接続(爪車さん)FT232RLでRS-485通信(爪車さん)
爪車さんはシミュレータを使いこなしつつ二足歩行ロボをやってらっしゃる凄い方です。
2011/08/28(日)PCからRS405CB/RS406CBを制御する
2011/08/28 13:08
いろんなパラメータがあって安全装置も入っているこの素敵サーボをJavaとPythonで制御するライブラリを書いたので,サーボの使い方と一緒に置いておきます.
配線
RS405CB/RS406CB取扱説明書より
数珠繋ぎは6つまでということに注意です.
サーボにIDを振る
このサーボはサーボ同士を繋げていって一本の配線で6つのサーボまでを制御することができます.そのためにはそれぞれのサーボにIDを付けてあげなければいけないので,その作業を行います.
まずはこちらのサンプルプログラムからVB版をダウンロードします.
ソフトを起動して,電池や安定化電源の電源を入れた後,以下の手順を実行します.
- RSC-U485のささっているポートを選ぶ(コントロールパネル>システム>デバイスマネージャで確認できる)
- 画像2のボタンを押す(自動で設定が読み込まれるはず)
- 適当なサーボIDを選択し,setボタンを押す
- 画像4のボタンを押し,書き込みが終了した旨のメッセージを待つ
設定やパラメータなどもここから弄れます.
プログラム
試したい盛りでgithubなんぞ使ってますが,いまひとつ操作に慣れてない感じですね.RSC_U485_Java
RSC_U485_Python
あらかじめ,Java版の場合はrxtxを,Python版の場合はpyserialをインストールして置いてください.
クラスの使い方はコードに入ってるドキュメントを見れば大体わかると信じてます.
Java版だとこういった感じで使用します.
public static void main(String[] args) { RSC_U485 servo = new RSC_U485("COM17", 115200); System.out.println("ID1のサーボのトルクをオン"); servo.torque(1, true); System.out.println("最高速度で100度の位置へ回転"); servo.move(1, 1000, 0); try { Thread.sleep(500);//しばし待つ } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("現在角度:"+servo.getAngle(1)); System.out.println("1秒かけて0度の位置へ"); servo.move(1, 0, 100); try { Thread.sleep(1000);//しばし待つ } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("現在角度:"+servo.getAngle(1)); }ちなみにJavaとPythonで書いたのはWindowsからもUbuntuからも制御したかったのが理由なのですが,
UbuntuでRSC-U485を認識させる
2012/1/13追記この記事のコメントで,以下のようにすることでUbuntuでもRSC-U485が認識することをまえださんから教えていただきました.
ありがとうございます!
Ubuntu 9.10 では RS-U485 を
# modprobe ftdi_sio vendor=0x1115 product=0x0008
で認識しました.
資料
説明書サンプルプログラム