[[FrontPage]] #contents 2013/05/12からのアクセス回数 &counter; ** One Wire LCD [#p207871b] Arduino in Actionの6章で紹介されている1本線で動作するLCDをPIC16F84Aで作りました。 オリジナルは、Sparkfuncの [[Serial Enabled LCD Kit>https://www.sparkfun.com/products/10097]] です。 &ref(OneWireLCD.png); ** 参考にしたサイト [#q74fd4fe] 手本にしたのは、以下のURLです。 [[1ピンで液晶ディスプレイを制御>http://homepage3.nifty.com/mitt/pic/pic6_07.html]] この例はRS232Cに似た独自のプロトコルで動作しているため、そのままではSparkfunの ライブラリが動作しません。 *** プロトコルの違い [#gb2a20de] RS232Cのプロトコルでは、スタートビットは、立ち下がりで、データもLSBから順に出力し、 ストップビットが立ち上がりになっています。 &ref(RS232C_protocol.JPG); オリジナルでは、転送速度も変えられるようになっていたのですが、ここでは9600bps固定にしています。 ** 作成したPICのプロジェクト [#o3c6c66e] PICのプロジェクトは、以下にまとめました。コンパイラーはXC8を使っているのですが、容量におさまらず PRO版の評価版で作成しているため、今後のデバッグが不可能です。(大切に使いましょう!) - &ref(OneWireLCD.zip); PICのコンパイラーは癖が強く、特にOPTIONレジスターの設定には悩まされました。 XC8コンパイラーがインストールされたディレクトリのdocs/chipsに置かれたHTMLを参考にすると よいでしょう。 PICプログラミングについては、以下のURLが参考になりました。 [[はじめてのPIC>http://sky.geocities.jp/home_iwamoto/]] ** 動作確認 [#u6aa65c9] 動作確認用のスケッチは、以下のとおりです。動かすにはSparkfunのサイトにあるライブラリが必要です。 #pre{{ #include <SoftwareSerial.h> #include <serLCD.h> #include <serLCD.h> #define RS_data 0x12 #define RS_cmd 0x11 #define txPin 12 serLCD myLcd(txPin); int count; void setup() { Serial.begin(9600); myLcd.clear(); } void loop() { myLcd.home(); delay(100); myLcd.print("count="); myLcd.print(count++); myLcd.setCursor(2,1); delay(100); myLcd.print("Hello"); myLcd.print(" Arduino"); delay(2000); } }} ** コメント [#v7ee1d35] #vote(おもしろかった,そうでもない,わかりずらい) #vote(おもしろかった[1],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha