2008-10-01
I/Oはとにかく盛りだくさん。リレー3個。AC100V3回路。SSR3回路。入力は温度、照度、予備に2ポート。そしてもちろんリアルタイムクロックも装備している。停電してもいいようにリアルタイムクロックにはスーパーキャパシタで電源のバックアップもある。複雑なON/OFF条件は1MビットのEEPROMに書き込む。ON,OFFのタイミングは1秒単位で設定可能にする。「1日1回、10秒だけONしたい」という物もあるはずだ。1分では長すぎる。

OLIMEXに発注する基板のレイアウトが大体決まった
複雑なON条件をどうやって、設定できるようにするか? ちょっと悩んだのでシーケンサーにヒントがないか本を買ってみた。複雑なことをさせるにはANDやOR条件が必要になり、ラダー図エディターのような物が必要になってしまいそう。でも、それは避けたい。

シーケンサーの本を参考にしてみた
2008-10-27
回路のチェックをしていると大分間違いが見つかる。実験回路なので多少の間違いはかまわないが、何だか次から次へと出てくるのでなかなか基板の発注に至っていない。この回路の主要な外付けICはリアルタイムクロックとMCP23017というI/Oエキスパンダ。Z80の頃からマイコンに慣れ親しんでいる人には当たり前なのかもしれないが割り込みピンはオープンドレインになっている。オープンドレインなのでそのまま繋いでもダメでプルアップ抵抗が必要。複数の周辺ICをワイヤードOR接続するためにオープンドレインになっているのだろう。考えてみると当たり前なのだが、それになかなか気づかないのだ。 .....違うな。単にデータシート見ていないだけだ。

リアルタイムクロックのINT端子はオープンドレイン

I/Oエキスパンダ MCP23017 のINT端子(2つある)もオープンドレイン
最初は電気2重層コンデンサーを使用するつもりでいたが、リアルタイムクロックはものすごく消費電力少ないので、1000μFのコンデンサーでもいけるのでは?と思って実験してみた。5V電源を切ってリアルタイムクロックが記憶喪失に陥る1.0Vまで50分近くかかった。都心ではあまり停電しないが、ここ埼玉県ド田舎市では時々停電する。激しい落雷があるとかなり高い確率で停電するのだ。だがそれも1分程度で回復する。50分は十分すぎる数値だ。これを過ぎた場合は再度時刻を教えてあげる必要がある。もちろんパソコンのUSBポートに接続してソフト(自作するんだよ)を起動するだけでよい。

リアルタイムクロックをコンデンサーで駆動する
2008-11-10
OLIMEXにオーダーするためのレイアウト確定

レイアウト確定
2008-11-18
2008-12-22
使ったことのない素子から動作確認していきます。先ず初めにPIC18F455から。USBとI2Cを同時に使用したいときは秋月電子で売っている物はダメです。USBとI2Cのピンが重なっているのです。このゲテモノPICはMicrochipDirectで購入。

書き込みテスト
2008-12-27
このPIC18F4455のコンフィグレーションワードは7ワード、つまり14バイトもあります。データシートを見ないとわからないものばかりです。

mikroBasicのコンフィグレーションワード設定画面。

LEDを点灯させることすら出来なかったのでブレッドボードで実験。原因はPORTBレジスタではなくTRISレジスタに値を書き込んでいた。こんなミス初心者でもやらない。
2008-12-30
次に使ったことのない素子MCP23017の動作確認。これについては別ページに結果をまとめておいた。

MCP23017に繋がっているLEDとスイッチ
ちょっとミスがあって入らない部品が... 容量を1000μFから470μに変更した。

入らない

裏に飛び出したリードを切るか否かの判断は折れ曲がったときにショートするか否か
半田付け終了

表面

裏面 LCDと干渉する部品は裏面に配置

LCDを取り付けた姿

横から見た姿 LCDと基板はもう少し接近するが、LCDと基板を結合しているソケットを抜きやすいように少し浮かしてある
2009-01-07
このLCDは文字フォントを内蔵していないのでフォントはPICから送り込む必要があります。フォントはあまり達筆でないSC1602のデータシートからいただきました。

7×5のFONTを作る
2009-01-08
データを送ってもLCDに何も表示されない。コントラスト調整すら出来ない。データシートにはコントラスト調整に関する怪しげな回路図がある。18番ピンはデータシート上ではVOUTとなっているのだがVOUT=VEEだそうだ。VOUTピンにはマイナス9Vという変な電圧が出ていて、コントラスト調整用のVO(3番ピン)にはGND~VEEまでの電圧を与えてコントラストを調整する。VEEは+5Vだと思って基板を作ってしまったのでパターンをカットして回路を修正。

ブレッドボードで液晶のコントラストの調整実験

VEEというのは18番ピンのこと

パターン修正 いつものことだ
フォントの定義などがあるのでプログラムはかなり巨大になりそう。最終的にはROMを7~8kワード程度食ってしまうだろう。この液晶ディスプレイ用の関数は別ページにまとめておこう。

表示された
2009-01-14
このLCDの作品例はインターネット上にいくつもあるのだが、LCDの内部バッファを読み出す例が皆無と言っていい。1つだけ読み出しの例を見つけたのだがコードが間違っている。結局データシートだけが頼りだ。書き込みはE信号の立ち下がりで実行される。LCDは無限に速く動作するわけではないのでE信号の立ち下がりから一定時間データ信号(D0~D7)を保持しなければならない、当然、データ信号の最短保持時間がデータシートに記載されている。読み出しも同様にLCDに処理時間が必要になる。「このアドレスのデータを教えてね」という信号を送ってから、「どんなに長くともxxns(ナノセカンド)以内にデータピンにデータを出力するよ」というルールがあるはずだ。この理屈からデータシートのMAX欄に値が入っている項目が読み出し時のLCD処理時間に違いない。実際にMAX欄に値が入っているのはtDDRという項目でE信号の立ち上がり時間が起点となっている。こんなふうに考えていって書き込みはE信号の立ち下がり、読み出しはE信号の立ち上がりで実行されるという結論を得る。

ロジックアナライザーで読み込みタイミングの検証を行う。確かにE信号の立ち上がりでLCDの内部バッファの読み出しが出来る。
2009-12-11
書き込んだデータの読み出しをすると何故か指定したアドレスの1つ前の物が取れる。0~63までの値を書き込みそれを読み出して下段に書き込んでみた。ずれている....何故こんな変な仕様になっているのだろう。秋月のデータシートの「(7)Read Display Data」はこのLCDの物ではないと思う。別のLCDのデータシートを切り貼りしたように見える。Read Modify Write モードをON/OFFするコマンドは無い。中国や台湾製のデータシートは当てにならないのでもとネタが間違っていたのかも知れない。

何故か1ピクセルずれる

この液晶はOEM版があるようだ。BOLYMIN社?のBG12864と同じ。こちらのデータシートはちょっと綺麗。誤植もあるが...