2011/12/12(月)mbed向けにAD-128160-UARTのライブラリ作った

2011/12/12 18:14 mbedimportnucho
aitendoには高速1.77インチ液晶モジュールというとても便利そうなLCDモジュールが売っています。

このLCDの特徴としては
  • 3.3V単電源で駆動できる
  • 少ない信号線で制御できる(txとresetの二線のみ)
  • 点、直線、四角形、円などの図形を高速に描画できる
  • ASCIIフォントが組み込まれている。(設定を行うことで日本語も書き込めるみたいです)
  • miniUSB端子が付いており、PCからもコマンドを送ることで制御できる
などなど嬉しいことずくめです。これは一家にひとつ常備しておかなくてはなりませんね。知りませんけど。

というようにスペック上は魅力あふるるLCDなのですが、発売後数ヶ月経ってもaitendoが碌にデータシートを公開していないため、これまでは真っ暗な液晶を眺めながら可能性を想像する程度の置物レベルの価値しかありませんでした。
現在はGingaXさんが使い方をまとめてくださって、基本的な使い方はわかるようになったので今回はmbed用にライブラリをつくってみたという次第です。

使ってみる

写真

RIMG0592_org

回路図

AD_128160_UART_circuit

プログラム

#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にもあっさり対応できてます。

画像も表示させてみる

RIMG0595_org
どのくらいの発色なんかなーと16bit bitmapデータを作って表示させてみました。
まーまー綺麗に表示できますね。

こちらのプログラムも一応ここに置いておきます。
試すときの128x128の16bit bitmapは各自準備してください。。

2010/10/20(水)NokiaLCDライブラリに日本語フォントを組み込んだぞ

2010/10/20 11:53 mbedimportnucho
以前NokiaLCDにNOKIA3300用の設定を追加したものを書きましたが、
今回はさらに美咲フォントを組み込んで日本語表示ができるようにしました。

これにあたって
AD-12864-SPIのコントローラ
mbedからOLEDに日本語表示しましたよ
のお二方のプログラムをパクり…、もとい参考にさせて頂きました。どうもありがとうございます!

ついでに"\n"で改行されるようにもしたので、元からの変更点は
  • NOKIA3300用の設定の追加
  • 日本語フォントの追加
  • "\n"による改行の追加
となります。

動いたところ

101021-130328.jpg

昇圧回路をどこかにやってしまったので、またバックライトが点いてません…。
恰好悪いし見づらいのでそのうち写真差し替えます。
差し替えました。ぴかーん。

プログラム

上の写真はライブラリをインポートしてmain文を以下のようにしたものです。
#include "mbed.h"
#include "NokiaLCD.h"

NokiaLCD lcd(p5, p7, p8,p9,NokiaLCD::LCD3300); // mosi, sclk, cs, rst


int main() {
    lcd.background(0x0000FF);
    lcd.cls();
    lcd.fill(2, 51, 128, 10, 0x00FF00);
    lcd.fill(50, 1, 10, 128, 0xFF0000);
    lcd.locate(0,4);

    lcd.printf("   胎児よ\n\n");
    lcd.printf("   胎児よ\n\n");
    lcd.printf("   何故躍る\n\n");
    lcd.printf("   母親の心がわかって\n\n");
    lcd.printf("   おそろしいのか\n\n");

    for (int i=0; i<130; i++) {
        lcd.pixel(i, 80 + sin((float)i / 5.0)*10, 0x000000);
    }
}

NokiaLCDは元々Streamクラスという抽象クラスを継承しているので、純粋仮想関数となっている_putc()を書き換えるだけで簡単にprintfに対応させることが出来ました。

また、mbed Compilerは日本語の入力に対応していませんが、コピペで貼り付ければ一応表示できます
ただ"Invalid multibyte character sequence"というwarningが出てくるのと、一度閉じると文字化けしてしまうことに注意してください。

余談になりますが、フォントを移植しようとした際にコメント文に文字化けが入っていたのが原因でテーブルデータがずれて読み込まれるということがありました。
コピペで入力できるものの予期しない動作をする可能性があるので、本当はLynx-EyEDさんのようにフラッシュから読み込むという風にした方がいいかと思います。

それでは、作ったライブラリはここに置いておきます。
NokiaLCD_With_JapaneseFont

10/20追記

あら、「表示」と表示させようとしたら化けてしまいました。
液晶の表示向きの関係で90度回転させたやつが使えなかったので、適当に90度元に戻した奴を準備してたんですが、そのせいで一部のフォントが崩れたのかな…。
元気があるときに調べてみます。

2010/07/01(木)mbedでZY-FGD1442701V1を動かしてみた その1

2010/07/01 23:18 mbedimportnucho
ZY-FGD1442701V1とはaitendoで売られている1.44インチTFT液晶モジュールです。
3.3V単一電源で駆動できるほかデモプログラムも用意されているため、とりあえず動かして見るといったことが簡単にできます。
また、キャリーボード付きで1200円と非常に安価という特徴もあります。

ちょっと前に買って積んだままになっていたものを見つけたので、mbedを使って動かしてみました。

動かしてみたところ

100701-131252.jpg

ひどい写真だ…。
画面いっぱいに赤色を表示させています。

回路図

ZY_FGD1442701V1_sample.PNG

mbedも駆動が3.3Vなので、とてもシンプルな回路図となりますね。

プログラム

ZY_FGD1442701V1_sample
mbedにはBusOutというライブラリが用意されていて、今回はこのライブラリを使用しました。
この例のようにバイト単位で出力を行うときなど、繋ぐピンを意識せず処理を行うことができるので非常に便利です。


今回はとりあえずデモプログラムをmbed向けにほんの少しだけ書き換えただけです^^;
次回は16bitビットマップ画像をSDカードから読み込んで表示させてみたいと思います。

2010/06/05(土)HttpClientでRTCをセットする方法

2010/06/06 02:29 mbedimportnucho
先日、NTPサーバを使ってmbedのRTCに時間をセットするNTPClientというライブラリを紹介しましたが、
このライブラリだとセキュリティの問題などでネットワークの123番ポートが閉じられている場所では時間のセットができません

それでもなんとかRTCのセットができないかと調べたところ、日本標準時プロジェクトのようなサイトにhttpでアクセスして、時間が取得できそうだということがわかりました。
このサイトとhttpClientを利用して、RTCのセットを行う方法を紹介したいと思います。

今回つくったプログラムはここに置いておきます。
以下部分的な解説です。


    http.get("http://ntp-a1.nict.go.jp/cgi-bin/ntp", result,PAGE_SIZE);
    result[PAGE_SIZE]='\0';
NTPの情報ページをダウンロードしてきています。

    int start_body=strstr(result,"<BODY>")-result+7;
    int end_body = strstr(result,"</BODY>")-result-1;
    strncpy(buf, result+start_body, end_body-start_body);
    buf[end_body-start_body]='\0';
今回利用するサイトでは<BODY>と</BODY>の間に時間が書かれているので切りだしてきています。

    seconds = strtoul(buf,&e,10)-2208988800UL;
    seconds += 32400;
    set_time(seconds);
strtoulで切りだした文字列から数値に変換した後、NTP時刻とPOSIX時刻のオフセット(2208988800秒)を補正して、さらに日本のタイムゾーンに合わせています。
そしてset_time取得してきた時間をRTCにセットすることができます。
今のところ、3484746681.922というような少数を含む文字列をそのまま整数の数値に変換しようとしているので、そこはあんまりよくないかもしれません。
(strtoulがそこは無視してくれるので問題は起きていないのですが^^;)


以上簡単ではありますが、HttpClientでRTCをセットする方法の紹介でした。
NTPClientが使えない場所などで便利な場合もありそうです。

最後に注意点なのですが、日本標準時プロジェクトのサイトにも書いてある通り、1時間に20回以上のアクセスはしないようにしてくださいね。