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回以上のアクセスはしないようにしてくださいね。

2010/06/04(金)mbedのNTP Clientを試してみた

2010/06/04 01:33 mbednucho
mbedにはRTC(リアルタイムクロック)という現在時刻を刻み続けることのできる部品が乗っています。
VBピンに2.1Vから3.6Vの電池を繋いでおけば、mbedの電源を切っても時間を覚えておくことが可能です。

mbedのベータテスト中の新しいCookbookページの中にそのRTCの時間をネットワークから設定するNTP Clientというライブラリが追加されていました。
今回はこれと前回使ったText LCDライブラリを利用して、ネットワークから同期して時間を合わせる時計を作ってみることにしました。

100604-012951.jpg


今回つくったプログラムはここに置いておきました。
中身はほとんどサンプルファイルのままなのですが、本質的な部分と思われる個所だけ以下に抜き出しておきます。
    Host server(IpAddr(), 123, "ntp.jst.mfeed.ad.jp");
    ntp.setTime(server);//RTCに時間をセットする

    ctTime = time(NULL);//RTCの時間を呼び出す
    ctTime += 32400; //世界標準時刻から日本標準時刻に直すために、32400秒(9時間)進める
    strftime(buf,sizeof(buf), "%A %m/%d/%Y %H:%M:%S\n", localtime(&ctTime));//フォーマットに直して
    printf("\r\nTime is now : %s JST\r\n", buf);//表示

また、新CookBookの中には新しいTextLCDのライブラリも追加されていましたので、今回は新しい方のライブラリを使用しました。
配線とTextLCDオブジェクトを作る際の引数がほんの少しだけ変わっているので注意してください。
(R/WをGNDを接続するようになり、TextLCDオブジェクトにそのピンを指定しないようになっています)


イーサネットが標準でついていると、このような拡張性があるのが嬉しいですね。

2010/06/02(水)mbedでTextLCDを動かしてみた

2010/06/03 01:48 mbednucho
4年くらい前に買ってずっと眠らせたままだったキャラクタLCDを発掘したので、
ちょうどいい機会だと思いmbedのサイトのCookBookの中のTextLCDを試してみました。


モジュールの形は違いますが、入力電圧が5Vであること、Voに接続する抵抗が100Ωということ以外、回路図はmbedのサイトのものと同一です。
サンプルプログラムのコメントアウト文でd0, d1, d2, d3と書いてありますが、回路で実際に繋ぐのはLCDのDB4,DB5,DB6,DB7であることに注意してください。

まずはcookbookのものをそのまま動かしてみました。
#include "mbed.h"
#include "TextLCD.h"

TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3

int main() {
    lcd.printf("Hello World!");
}
100603-015247.jpg



次にmain文の中をこんな感じに書き換えてみました。
            lcd.locate(0,0);
            lcd.printf("test1");
            lcd.printf(" %s","test2");
            lcd.locate(0,1);
            lcd.printf("%d",12345678);
100603-015131.jpg


LCDの行を変更するときはlcd.locateを使うみたいです。
同じ行にprintfをしていくと、この例の1行目のように後ろに付け加えられていくので、新しく表示したい場合はlcd.cls()を使いましょう。
%dや%sなどのprintfのフォーマットがそのまま使えるのがとても便利ですね。


今回はこんなところです。
とにかく扱いが簡単なので、ちょっとした表示に良さそうです。