プロが教えるわが家の防犯対策術!

例えばPICの16F84には18のピンがあり、そのうちのポートAB合わせて13のピンが入出力用として使用できるのですが、工作をしていて「あと1ピン足りない!!」などという事があると思いますが、その様な場合にどのようにして解決すればよいでしょうか?
以前「デジタルICの74シリーズという物を使えばピンの不足を補う事ができる」という話を聞いたことがあるのですが、ご存知の方がおられたら是非お教えください。具体的にどのように接続し、PIC側のプログラムをどのようにしてやれば良いのかを教えていただければありがたいです。
参考になるHPがあればそれもお願いします。
しかし、本当にシロウトに毛の生えた程度の者なので専門用語等はできる限り分かりやすい言葉にしていただけると非常に助かります。
「PICを2個使ってリンクさせちゃえばいいじゃん」と言うご意見もあるかもしれませんが、できればそれ以外の方法が良いので・・・。
よろしくお願いします。

A 回答 (7件)

「74HC595」と「74HC165」を使用した入出力拡張方について、詳しく書かれているドキュメントがありました。

(同じ事考える人はいっぱいいるんだなぁ)

http://gd4-082139.gd.icnet.ne.jp/~hero/hero.htm

私のブックマークに入っていたのですが、PIC関係は見ていなかったので気づきませんでした。スイマセン。

このページのちょうど真ん中くらいで「PIC.PDF」と言うアクロバット文書がダウンロードできます。
「手軽に使用可能な1チップマイコンのPICから、Mid-range PIC(主に16F8x)を使用する上での留意点などを記述したヒント集です。」だそうです。

このドキュメントの34ページ目に、そのものズバリが詳しく書かれています。
    • good
    • 0
この回答へのお礼

お礼が大変遅くなってしまいました。申し訳ありません。
シロウトの僕にはやっぱり意味不明なのでシロウトらしくもっと基本的な部分から勉強していき、それからもう一度kabasanさんの回答を読み返したいと思います。
ありがとうございました。

お礼日時:2003/05/17 01:02

>3本が8本というのは要するに・・・・



ちょっと(だいぶ?)違います。
PICの命令にビットシフト命令有りましたっけ?(そりゃあるわな・・記憶が~)それがわかれば理解できると思うんですけど・・・・

「595」はシフトレジスタって言うんですけど、3本の信号は以下の意味になります。
1、ビットデータ
2、データを送る合図
3、送ったデータを出力する合図

8ビットのメモリがここにあると思ってください。↓
入力 → □□□□□□□□


ピン1に「1」か「0」を出して、ピン2で合図を送ると「595」がデータを左端に記憶します。

もう一度送ると新しいものが左端に入って、前にあったデータは1個右へ移ります。9回送ったら、いちばん最初に送ったビットデータが捨てられます。

ピン3に合図を送ると記憶しているデータを「595」の出力ピンに出します。

またデータを送り初めても、ピン3の合図を送らない限り出力は変化しません。

出力を1個だけ変更したくても、8ビット全部送りなおさないといけません。

出力変更に数十クロックを要するので、シビアなタイミングを出力するのには向きませんが、それでも10MHzなら数マイクロ秒でできるので、たいていの出力に問題なく使えます。

8ビット全部送信する命令をサブルーチン化しておけば、プログラムも大きくなりません。

8ビットのファイルレジスタ1個を出力のつもりでビット操作して、直後に送信サブルーチンをコールするだけです。出力のつもりのファイルレジスタのビットを1個ずつシフトして送信します。


長くなったけど、わかりますかね?

****************************************************************
>根本的な部分の質問なのですが、演算を確実に理解できればデータシートを見て使い方がわかってくる物なのでしょうか?

う~む、私は最初ロジック回路から入ったので、演算がわかれば論理回路がすべて理解できるかどうかは・・・・そもそもCPUはロジック回路を簡単にするために作られたものですから、逆方向から理解するのは大変だと思います。

****************************************************************
>あと、これだけ知っていればある程度はOKという演算を教えて下さい。

PICはそれ自体、最低限の命令に絞られてますから、ひと通り知ってないとプログラムはできないと思います。むしろ、どう組み合わせれば目的の処理ができるか、応用力、発想力がいります。そういう意味ではプログラムの難しいCPUだと思います。(実際それも、私が別のCPUに乗り換えた理由の一つです)
たとえば、割り込み処理ですが、割り込みのために今のワークレジスタとステータス(ゼロフラグとか)をどこかに保存しないといけませんが、ステータスを退避保存する命令がありません。下手にワークを退避するとステータスが変わってしまい、通常処理に戻った時バグります。
あえてあげるならPICの場合、「スキップ系」の命令を完全に理解するべきだと思います。多用しますからね。


またなんでも聞いて下され。(あ~何か作りたくなってきた)
    • good
    • 0

もっとI/Oピン数の多いPICを選ぶと言うのが一番楽な方法ですが、


それではダメですか?
16F84にこだわるのであれば、やっぱりあなたや皆さんのおっしゃるように
74シリーズのICを使ったいろいろなやりかたがあると思います。
入力専用ピンが欲しいのか、出力専用ピンが欲しいのか、それとも他のピン
と同じようにプログラムで入力か出力かを選べるピンが欲しいのか、
いずれの場合もそれぞれいろいろな回路が考えられます。
あとは回路全体の見直しですか。ほかにピンを節約できるところは無いか、とか。
いかがでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
16F84にこだわるわけではないのですが、シロウトの僕には最も扱い易そうですし、今現在使用しているライタは509か16F84しか書き込めないので。
使用目的が入力、出力のどちらかによって回路の構成が変わるんですね、なるほど!とりあえずいろいろ勉強してみます。

お礼日時:2003/03/02 18:50

では、私は259(アドレッサブルラッチ)で。


259のD入力に書き込みたい値”0/1”を与え、A,B,C入力で書き込みたいピンを選択し、イネーブルに書き込みパルスを与えると、Q0~7の任意の出力にD入力で与えた値が出てきます。 要はアドレス3ビット,データ1ビットのメモリーの出力がピンにでているようなものです。
(5本使って8本になるんじゃ、あまり増えてないって? 259ってあまり使わないか)
    • good
    • 0
この回答へのお礼

ありがとうございます。
僕の場合まずはデジタルICが何なのか?どういう物なのかを良く勉強しなければなりませんね・・・。

お礼日時:2003/03/02 18:52

PICですか、良いですねー。



もうすでに、御存知かもしれませんけど、このHPはいいと思います。
http://www.picfun.com/

参考URL:http://www.picfun.com/
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考にさせていただきます。

お礼日時:2003/03/02 18:46

似たようなことをよくしていますよ。



ロジックICで「74HC165」と「74HC595」を検索して調べてください。
ACシリーズでもいいですよ。東芝のサイトなどでデータシートは自由にダウンロードできます。

例えば、「595」を使うと3本の出力ピンで制御して8本の新たな出力ピンを作成できます。1本にHorLを出力し、2本目をL→H→Lとしてクロックパルスとします。これで1ビット「595」へ送れました。これを8回行った後、3本目を2本目と同様に操作してパルスを送ると、「595」の出力8本に送ったデータが現れます。

目的の出力をメモリへ書くようにして、タイマー割り込みで定期的に8ビットを送信させます。タイマーを別に使用したいなら、出力が1個でも変更したときに、8ビット全部を送信するサブルーチンを呼ぶようにします。

「165」を使うと3本の出力ピンを消費して、新たに8本の入力ができます。

後は、「74HC74」を使う手もあります。これも出力を保持してくれる「レジスタ」の一種です。ICの使用量は増えますが、制御プログラムがいくぶん簡単になります。
使い方は・・・・宿題って事にしましょうか(笑)。データシートとにらめっこしてください。きっとためになりますよ。

最後にアトメルってメーカーの「AVRマイコン」ってご存知ですか?。
PICみたいなマイコンで、「AT90S2313」が近いと思います。(実はよく使ってるんです)
PICより4倍早くてレジスタもたくさん有り、使いやすいですよ。ご参考までに。

この回答への補足

ありがとうございます。
3本が8本ですか?これは「595」のある3本のピンにPICの出力ピン3本を接続する事によって「595」の他の8本のピンを出力ピンとして駆動できるという事でしょうか?
もしそうだとすれば、
3本が8本というのは要するに・・・・「3本のピンそれぞれの状態を2進法で表すと000、001、010、011,100,101,110,111の8通りの状態を作る事ができ、その8通りの数値を595の8本のピンの出力にする」という事でしょうか?
でも、これでは8ピン中の複数本を同時に出力する事は出来ないですね・・。
これは考え方としてはハズレでしょうか?
PICのポートAとBみたいに交互に出力して見かけ上同時出力っぽくすればいけそうですけど・・・。
勝手に思いついた事を書いてしまいました・・・。
根本的な部分の質問なのですが、演算を確実に理解できればデータシートを見て使い方がわかってくる物なのでしょうか?
あと、これだけ知っていればある程度はOKという演算を教えて下さい。

補足日時:2003/03/02 18:53
    • good
    • 0

なんだか、際限もなく初級に戻るような話なんですが


どれかひとつだけ出力できればなどという場合は
デコーダなどを使いますね。
とにかく出力ポートを増やしたいならラッチを並べることでしょうし
入力を増やしたかったらデータセレクタを使いますよね。
本来バスっていうのはそのあたりのより分けのためのものなので
バスで振り分けるほうが簡単、でもPICではそうもいけませんか、勉強の上精進してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
いろいろ勉強してみます。
でも、理解できるかどうか・・?

お礼日時:2003/03/02 18:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!