- 締切済み
pic同士のシリアル通信について
- pic同士のシリアル通信は可能なのか
- シリアル通信でデータを送信するプログラムはどのようなものか
- txピンとrxピンを使用した接続でpic同士の通信は可能なのか
- みんなの回答 (3)
- 専門家の回答
みんなの回答
シリアル通信ができるかという観点で回答します。 他の方がおっしゃるように、USART機能内蔵のPICなら比較的簡単です。 >送信側はtxピン、受信側はrxピンという接続で可能でしょうか OKです。 同じ基板内なら電圧変換もいらないので、直結できます。 >出来るとしたらどのようなプログラムになるでしょうか? 何の言語を使ってますか? アセンブリ?C(種類も)?BASIC(種類も)?パスカル? 私は主にmikroBasicを使ってますが、ライブラリがあるので送受信とも比較的楽にプログラムできます。 USART機能のないPICでも、ソフトUSARTライブラリがあるので同じように使用可能です。 一からアセンブリ言語でプログラムだとしたら、ここの掲示板の範疇を超えます。 なお、シリアルといってもUSART以外に、I2C、SPI、CANもサポートされています。 何がしたいかを具体的に書くと、もっと有効な回答がもらえると思われます。
回答1さんへ 多分それではわからない (それでわかるようなら、質問せず さっさと作ってる)と思う 可能 パラレルのほうが簡単だと思う ポートは 通信データバスと(8bit分あければいいけど) RD 読み取りました WD 書き込みました を各1BIT ぶん 用意すればいい 送信側は 通信データバス に 送りたい データを 書き込み WDビットを HI にします(RDビットHIのときは 読み込み中なので 送れません) ↓ 受信側は WDビットを 見て HIになっていれば 通信バスを読み込み RDビットをHIにします(WDビットHIのときは 読み込み中なので 送れません) これで1バイト分送れます これを繰り返す ハンドシェイクの基本 BUSY(忙しいので読み込めませんor書き込めません) エラー訂正(エラーが発生したので どうにかしてくれ などを必要に応じて 追加してください プロトコルは http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html 勝手に決めていいです 通信時に上記の方法では 受信側はどこまでデータが送られてくるのかわからないので ヘッダー(一番初めに全データ数を送っておく) 例 100バイト 送りたいとき 最初に送信側から 100 を 送り 受信側は これから 100バイト 送られて来るんだ と知るしることができます パソコン→PICですが http://www.picfun.com/parallel00.html シリアルの場合 上記方法のバス幅が1BITになってるだけで 基本 同じだが ビットズレを防ぐ ためにいろいろやらないといけない スタートビット と ストップビット を 使う モールス信号を例に SOS ・・・ = S --- = O ・・・ = S ・・・---・・・ の連呼だが VMS ・・・- = V -- = M ・・・ = S でも ・・・---・・・ になり区別がつかない 本当は信号と信号の間に 間を空けるんだけど 一本の線で スタートビット ストップビット も送れるけど 同期 がずれると 半ビットズレとか起こるので やっぱり ハンドシェイクで送ったほうがいい (232Cとかの普及のせいで 一般的ではないけどね) ↑ ぐぐってもいいところが出てこない 232Cの例 同期/非同期(調歩) http://www.contec.co.jp/product/device/serial/basic.html
同じ基板内でしたらポートをパタパタさせるやり方でも 調歩同期でもいろいろ可能です。 プロトコルは自分で勝手に決めてもいいです。 少し離れたところだったら232Cだとか RS485だと距離も離しても大丈夫です。 プログラムはプロトコルを決めて、それにしたがって組むしかありませんので できないのであれば依頼するほうがいいかもしれません。 通信エラー時の処理とか、電源ONのタイミング差とかいろいろあります。 送信側はtxピン、受信側はrxピンですね。 相手側からみると逆になります。