posted by
rerofumi
2006/3/10 金曜日 4:35:07
このブログを始めるにあたり、回路図を描く必要があるよなあと思い回路図エディタを探したのです。
で、見つかったのが水魚堂の回路図エディタ「BSch3V」。フリーウェアですが、たたき上げられているので実用性ばっちりなのです。
おまけにマルチプラットホーム版(MacOSX, Linux)もあるし。
私が知らなかっただけで超有名なアプリですけど。
私は回路図を書くのは初めてなのですが、それでもそれっぽくなっているのはこのソフトのおかげ。
—–
posted by
rerofumi
4:26:20
最後に RS-232C コンバートチップとその周辺を検証して実験ボードの完成。

写真だとわからないけど、PC とシリアル接続して、ターミナル内でキーを押すとその文字が一文字ずつ LCD に表示されていく。
シリアルポートに小亀が付いているのはうっかりオスコネクタを買って、それを付けてしまったため。リバースケーブルで PC と接続する機器になってしまった。(それはそれで正しい気もする)
RS-232C の検証で躓いてかなり苦労してしまった。
なんで?なんで?とずーっと悩んでいたが、結局 TRISC でのポート設定で RC7(RX) が out 設定になっていたため。clrf で処理していたのでそうなっていた模様。RX のポートだけ in になるように TRISC を設定してやったら無事解決。
うむむ、他のコードを参考にしてたら特に設定していなかったので、RC enable の際上書きされるもんだと思っていたよ。
わかってみれば簡単だけれども、調べているときは本当に悩むんだよなあこういうのって。
あと、突然データが不安定になってうんうんうなっていたら、リードが一本外れていたというのもあった。不安定なときは結線を調べろという先人の言葉は重たいのです。
ハード的には一通り完成だけれども、シリアル周りのコードをちゃんと書いていなくてテスト止まりなのでそのへんを整備する必要があるかな。

今回の実験ボードの回路図。
リセットのあたりが怪しいのです。
—–
posted by
rerofumi
2006/3/8 水曜日 5:47:41

てなわけで、PIC16F876A の実験ボードに一通りリードを張り終える。
真ん中のコネクタに PORT-A と PORT-C が出ていて、ケーブルで他基板にひっぱりそこにセンサーなり LED なりを繋いで楽しもうという魂胆。
PORT-B は LCD表示ユニットに使っている。1ポート余っていたのでテストスイッチ入力としてみる。

流石に全ポート張るとぐちゃぐちゃになるなあ。

ポートチェックの様子。
写真じゃわからないけれども、光が左右に行ったり来たりしているいわゆるナイトライダーフラッシャー。PIC 工作を行う者は必ず作るアイテムだよね(w
確かに簡単に作れるので楽しいやら拍子抜けするやら。
RS-232C 周りはリード張り終わっているのだけれども、まだチェックしていないのでドライバーを刺していない。次はそのあたりのチェックから。
RS-232C が出来ると完成。
そうなると PC から LED をコントロールしまくれたり、データを PC でロギングしたりとうっは夢がひろがりんぐ。
それをできるだけたやすく行えるようにという実験ボードなのだわさ。
—–
posted by
rerofumi
2006/3/7 火曜日 20:27:45
PIC デバイスのプログラム開発を始めると必然として、ライターとターゲットの間をいったりきたりになる。ちょいと焼いてはターゲットに刺して確認、失敗なので外してライターに戻しコード修正してまた書き込み。
その手間はともかくとして、ターゲットの IC ソケットからの抜き差しするときにデバイスのピンを傷つけてしまう。何度も繰り返すうちに曲がったりしちゃうのよね。
まあ、昔は業務で 36ピンを毎日抜き差ししていたもんだけれども。
PIC用語で「ICSP(In Circuit Serial Programming)」とゆーのがある。ターゲットにデバイスを刺したまま、直接プログラミングしようというものだ。
ICD2 などは ICSP で書き込む事になっている。

PIC デバイスの工作にも慣れてきたので、実験専用のボードを作成することにする。いつまでもブレッドボードというわけにもいかないので。

制作途中のスナップショット。
PICデバイスの駆動と LCD表示ユニットを繋いで表示ができるようになったところまで。他のリードはまだ繋いでいない。
今回の実験ボードで使うデバイスは PIC16F876A、28ピンで 3ポート持っている多機能デバイス。汎用実験にちょうど良い感じで。
流石に 28ピンともなってくると ICソケットの抜き差しが心配になってくる。
そこで ICSP できないもんかとぐるぐる考えるわけだ。
SPW-10 PRO には外付け(フラットピンユニットとか)で焼き込みができるように 6ピンの端子が付いているのだけれども調べてみるとちょいと使いづらい。VPP と VDD が出力されないので色々調べると、8〜14ピンデバイスの設定ときに出力されることがわかったので設定を弄ってみたりするけどもなんかいまいち。

そこで簡易ジャンパーを作成してみる。

こんな感じで。
でも結局失敗。
読み書きは成功するんけれども、データが全然違う。
うーん、ライター側が対応でないと駄目なのかしらん。
回路の方はまだ何も作ってないので直結に近いんだけどなあ。
ひとまず諦めて、デバイスを抜き差しする形に戻る。
また、気が向いたら調べてみよう。
—–
posted by
rerofumi
19:22:18
ちゃんと動作しているかどうかをハードウェア的にチェックするにも調べる手段があると便利。
LED の点滅やデジタルマルチメーター(テスター)だとパルスやトリガーが計測できないのよね。
でかといって、オシロスコープやロジックアナライザーはお高いし、買ったとしても置き場所に困ること請け合い。まあ、最近は PC に接続して PC のディスプレイ上に表示するタイプが流行になりつつあるけれども。
で、WEB でうろうろして見つけたのが超簡易ペン型オシロスコープ 「osziFOX」。
日本だと秋月でしか扱っていないっぽい。7800円で購入。
ちっこい LCD に何となくの波形が現れる。波形は鈍っているし、サンプル期間も短い(サンプルとサンプルの間が異様に空く)けれども、こんなのでもあると便利。
シリアル転送で PC 上に波形表示も一応できる。
ちょっとしたチェックに。
—–
posted by
rerofumi
18:47:09

ソフトウェアもハードウェアもある程度の規模になると、ちゃんと動作しているか、動作していなかったらどこがおかしいのかを調べることになる。いわゆるデバッグ。
PICデバイス工作は半分がソフトウェアによるものなので、ソフトウェアのデバッグも重要な要素になってくる。とはいえ、ICE はお高いし、廉価なデバッグ環境の MPLAB ICD2 は在庫無しの 1ヶ月待ちだったり。
てなわけで当面はライターで焼いてはチェックの繰り返しになる模様。
そんな状態でどうやってデバッグをしていくのかというと、そこは基本の「printfデバッグ」である。
ポートの 1つを使ってそこに LED を繋ぐ。これだけでもよい。適当なところでポートを ON にするコードを埋め込んでおき実行、LED が点けば少なくともそこは通っていることになるわけだ。
しかし、それだけではこの先心許ないのでマイコン工作では超メジャーな「LCD表示ユニット」を接続し、そのドライバを書くことにする。
少なくともこれが稼働していれば、様々な情報を表示し確認することができる様になるのです。
LCD表示ユニットは秋月で 700円。デファクトスタンダードアーキテクチャになっているので、ピンや駆動手順は M1632 互換。つまり、みんなが使っているのと同じということやね。
回路やソースコードは「PIC LCD」で検索かますと山ほどヒットするので特に説明も無し。ソースコードも他の見よう見まねに近くなっているし。
lcdmain.asm
各種解説記事をみていると必ずタイミングチャートが載っていて一見小面倒くさそうだけれども、肝心なのは ‘E’ のトリガーだけだったり。
E 以外全部のデータポートを設定して「設定完了、オラ読み込め」という指示のために E を上げ下げする。
read の際は「オラデータをよこせ」と E を立ち上げてからポート読み込み、読み込み終わったら E を下げるといった風情。
駆動するには 8bit モードと 4bit モードがあってそれぞれ 11本/7本の I/O を必要とする。今回は 4bit を選択することにする。
デバイスは 14ピンの PIC16F684 を選択。I/Oポートは 12本(PORTA 6bit、PORTC 6bit)なのでできるでしょ。(このへんで無駄に苦労を背負い込んでいる気がする)
後はデータシートと首っ引きでプログラム作成。
ここでドはまりしたのが I/O ポートの設定。PIC16F684 は起動時初期値で A/D コンバーターを持つ 8ポートが「全てアナログ」に設定されている。なので起動時にそれを無効に設定してやらないとならない。
んが、もう一つあって、2ch のアナログコンパレーターもあるのだが、こいつも「標準でON」になっている。このコンパレーターの方を見落としていて、ずーっとうんうんうなっていた次第。どうりで、ポートを設定してもすぐに立ち下がると思ったよ。
ちなみに上位のデバイスだと起動時にコンパレーターは OFF になっている模様。
苦労はしたけれども、無事表示が出来るようになってめでたしめでたし。
—–
posted by
rerofumi
2006/3/6 月曜日 5:47:47
メモ。
SolitonWave社の SPWriter Ver1.00-06 だとサポートデバイスに PIC12F509 が無いのです。書き込みは PIC12C509 の設定を使うことで出来るのですが、これだとフラッシュの消去が出来ない。
色々試してもうまくいかず困ったのでデバイス定義を適当にでっち上げて使うことにした。
下記の設定を SPWriter の Device.ini に追加することで何とか消して書ける様になりました。
まあ、あんまマイナーなデバイスを進んで使うなということですね。
[PIC12F509]
Default=PIC12C509
FlashType=1
CmdSet=0x03E
;Timing Data
BulkEraseCycle=6 ;バルクイレース時間(ms)
ChipEraseCycle=3 ;チップイレース時間(ms):サポートしていない場合は0
ProgOnlyCycle=3 ;プログラム時間
EraseProgCycle=6 ;イレース込みのプログラム時間
—–
posted by
rerofumi
5:31:23

ちと PIC アーキテクチャのコーディングに慣れるため LED を光らせるプログラムを書いてみる。
ただ点滅させるだけだとつまらないので、フェードイン/フェードアウトでぼやーと明るくなったり暗くなったりする LED 点灯プログラムを作成。
明度を付けるには PWM 方式の時間分割スイッチングを行う。
よするに高速で LED を ON/OFF するのだけれども ON の時間が長いと明るく、OFF の時間が長いと暗くみえるってわけ。

これで明るめ。

これで暗め。

その中間。
256分割を 1周期として、明るさ n を 0〜255 で指定。n の時間だけ LED を ON にし、時間がきたら (255-n) の時間を OFF にするといった感じでコーディング。
ソースコードは PICkit1 と PIC12F509 による物。
softled_2.zip
509 なんて機能ミニマムなチップを使っているからソフト制御だけれども、ミドルレンジ以上の PIC デバイスだと PWM 機能を最初から持ってて、こういったことが容易にできるようになっている。
—–
posted by
rerofumi
5:18:22
結局 PCI カード型の RS-232C 拡張ボードを買ってきてマシンに刺す事にした。
そして、シリアルライターを起動。どきどき。
!!!
早い、早いよ!
これまで10分以上かかっていたものが 10秒で終わるよ(っておい
これが普通の速度だったんですね……。
PICkit1 の USB が特別早いわけでないこともわかった。
しかし RS-232C ポートなんて、いらない子だと思っていたけれども、いざ必要な場面になってみるといろいろ面倒なものだねえ。
色々と投資してきた額を考えると、Microchip社のダイレクト通販から ICD2 を買った方が安かった。送料関税で $16 くらいかかるけれども。
といっても、これまでの経験をしたからそう考えられるようになったわけだし、PICプログラマー(ライター)も確かに自作できるほど簡単な仕組みなのだなと理解できるようになってきたとゆーことなのだが。
うーん、いまからでも ICD2 を発注するか?いやいや、そこまでは……。
—–
posted by
rerofumi
2006/3/4 土曜日 21:30:54
SPWriter によるシリアル経由のプログラミングが異様に遅いので、シリアル経由プログラマについてちょいと調べてみる。
そうか、USB シリアル変換ケーブル経由だとチップの仕様から異様に遅くなるのか orz
家のメインマシンに RS-232C ポート付いていないんですけど……、いやまじで。それ故に USB アダプタでやっていたのに。
んー解決法としては、PCI に RS-232C 拡張カードを刺すしかないかなー。調べてみるとその手のカードは 10000円前後だったり。
ははは、かえって高い買い物になっている気がする orz
—–