• ベストアンサー

PICプログラムについて

こんにちは 早速ですが質問です。 PIC16A84を使用しています。発振は4Mhzを使用しようと考えています。 入力Aの信号ONで出力Aの信号を(通常ON)をを25mSec間OFFし次にONを25mSecと入力Aの信号がONの間繰り返すのですが、この他に、入力Bと出力Bがあり、入力A、出力Aと同じ動きをするのですが、入力AとBが同時にONしたときのプログラム方法がわかりません。(プログラムの同時進行の場合のプログラミング方法) わかりずらいですがよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kabasan
  • ベストアンサー率44% (264/588)
回答No.3

PICは有名ですから、製作例や解説をしているサイトは数え切れないほどありますし、検索すればいやって程当たります。 ココでは個人サイトのURLを貼ってはいけないそうなので、「PIC入門」でgoogle検索して一番先頭のサイトに行ってください。そのページ一番下の「PICを使用した電子回路集」のリンクへ飛ぶとあなたの欲しい情報がずばりです。 「LEDフラッシャー」 「LEDフラッシャー2」 と有り、前者がループを使ったタイマールーチンで、後者がタイマー割り込みを使っています。プログラムを詳細に解説されていて、回路図もあります。 このサイトで更にわからない事が出れば、関連するキーワードで検索すれば出ない答えはないと思います。

kumi777
質問者

お礼

ありがとうございました 早速さいとにいってみてみようと思います。 又何かあったら質問しますのでそのときはどうぞよろしくお願いいたします。

その他の回答 (2)

  • kabasan
  • ベストアンサー率44% (264/588)
回答No.2

あなたのおっしゃっているタイマールーチンとは、規定のクロック数だけループして戻ってくるだけのルーチンでしょうか? 通常、時間をカウントして何か制御しようと言うなら、タイマー割り込みは必須です。 質問のように2つだけを独立して制御したいなら、割り込みを使わなくても出来ないことはありませんが、3つ4つと独立した制御が増えてくればすぐに破綻します。 マイコンを使ったプログラムでは、タイマー割り込みを使うのは基本であると考えますので、この機会に修得された方がよいと思いますよ。

kumi777
質問者

補足

アドバイスありがとうございます。 できれば、ソースファイルにするとどうなるのかおしえていただけないでしょうか? 又、タイマールーチンについて説明しているサイト等あるのでしょうか? 以上よろしくお願いいたします。

  • kabasan
  • ベストアンサー率44% (264/588)
回答No.1

<通常ルーチン> A=ON & フラグA=OFFなら  → カウンタA=250、出力A=OFF、フラグA=ON A=OFF & フラグA=ONなら  → フラグA=OFF、出力A=ON Bも同様 以上の無限ループ <100uSタイマー割り込みルーチン> フラグA=ONなら  → カウンタA-1、カウンタA=0なら出力A反転&カウンタA=250 Bも同様 割り込みから抜ける こんなところでしょうか、他にもいろいろやり方は有りますが。 通常ルーチンでフラグを操作するタイミングを間違えると、微妙なタイミングで割り込みが発生した時に動作がおかしくなります。ご注意ください。 割り込み禁止命令を使わない場合、フラグONは最後、フラグOFFは最初にしているのがミソです。 初期化ルーチンは省きましたが、わかるでしょうか?

kumi777
質問者

補足

早速の回答ありがとうございます 初心者なので、少々わかりずらいでしょうが追記です。 入力Aと出力Aだけであれば(他各信号の動作タイミングが同時ONというタイミングでなければ)タイマーのサブルーチンを使って入力Aの信号がONの間、出力Aの信号を25mSecのON⇔OFF繰り返しするというのはわかるのですが、タイマー割り込みルーチン等わかりません。 割り込みを使用しないとむりなのでしょうか? わかりずらいですが、よろしくお願いいたします。

関連するQ&A

  • PICのプログラムカウンタについて

    プログラムカウンタでポートAに4bitの2進数を入力して、変換された2進数のデータをポートBに出力させることはできたのですが、 ポートCにも違うデータを同時に出力させたいのですが、どういった命令文を作ったらいいでしょうか? 例えば、ポートAが「HLHL」の入力の時にポートBでは「HLLH」、ポートCでは「LLHL」を出力させる方法です。 言語はアセンブラ、マイコンはPIC16F886です。 よろしくお願いします。

  • PIC(16F84A)を使用しての250Hz以上…

    PIC(16F84A)を使用しての250Hz以上の周波数判定について 16F84Aを使用して外部からの信号(方形波)周波数をRA2に入力して判定し、ある周波数以上であればRA2への入力信号がHiの時にRB0からHiを出力、Lowの時には出力しないというプログラムを組み、その先にトランジスタを取り付けてLEDを点滅させるというテストを行っています。 100Hz基準くらいの周波数の判定は順調に行えるようになりましたが、約200Hzを判定基準にすると、LEDが外部信号と同期しなくなりました。 誤動作といったほうがいいのかもしれませんが、安定しない動作を行います。200Hzの信号を入力しているのに、1Hzくらいの点滅を繰り返す・点灯しっぱなし・点灯しないetc. ←同じプログラムを焼いたPICでです。  外部発振子は20MHzのものを使用しています。 私は、PICの処理速度?が追いつかなくなったのかなと考察したのですがどういった原因が考えられますか?対策方法等はありますか? PIC初心者なので、簡単な言葉で説明していただければ幸いです。 よろしくお願いします。

  • PICによるプログラム?

    PICによるプログラム? よくコンビニエンスストア等にある防犯センサー(ドームみたいなヤツ)があります。 これで人感センサーを作りたいのですが、人が居るときは信号を出さずに居なくなってから●●時間で信号を出力する。 と言う様な機械を作りたいのですが、PICで出来るのでしょうか? また、その他のやり方でも出来るのであれば、お聞かせ願えませんでしょうか? ポイントは ■ 信号を発信したらリセットがかかる。 ■ 一個あたりの単価ががなるべく安価で済むもの。 ■ 電源供給は100V もしくは 電池でも2-3年持つ作り方(常時電源ON) です、詳しい方お願いいたします。

  • PICマイコンができること

    PICは入力信号によって「Yes」か「No」かを出力させるという仕事はできるが、入力信号をそのまま出力させるという仕事はできないものなのでしょうか? 今、PICマイコンに入力する信号は、サーボモータを動かすためのパルス信号であり、サーボモータが右に動くときと、左に動くときとで別々のポートから信号を出力させることを考えてます。 そのために、入力信号のパルス幅をタイマーで計測し、判断させているのですが、問題は判断項目(while や if)が加わると入力信号をそのまま出力することができないことです。 一応、PIC16F84Aを用いて10MHzの内部クロックで 1.判断項目がないとき入力信号をそのまま出力(別々に出力はしない) 2.判断項目は同じとして出力を入力信号にせず、5Vにして別々に出力 の2つについて実際にできました。 結構、厳しい条件ですがPICに期待しすぎなのかわからなくなったので質問しました。 よろしくお願いします。

  • PICとPICの接続について

    PIC16F84Aを3個使用するのですが、仮にA、B、Cとし、入出力のピンの設定は正しくされているとします。 その場合Aの出力ピンから出ている出力線1本を、BとCの入力ピンの両方ともに接続しても問題ないのでしょうか? Aの信号(HまたはL)を、BとCに渡したいのです。

  • PIC12F629の発振

    PIC12F629を外部に某社のセラロックを使って XTモードで4MHzで発振しています。 (今回は内部発振は精度上使えません。) しかしCLKOUTの出力スィングは01.7V しかありません。 ただしプログラムは正常に動作しています。 同様のことをPIC16F84Aでやると CLKOUTの出力スィングは04Vあります。 CLKOUTの出力スィングが小さいことは 問題ないのでしょうか。 ただPIC12F629をHSモードにするとスィングは 05VありますがCLKOUTの波形の 歪は大きくなります。 プログラムは正常に動作しているといっても試作の 3セットだけなので量産したときのことを かんがえるとやや不安です。 どう考えたらよいかアドバイスください。

  • PICのプログラム

    PIC16F84Aのサンプルプログラムを見ると  MOVWF 01F PORAT B GOTO MAIN でRB0のLEDのみ点灯になってるんですが、自分的にはB'00000001' のほうがわかりやすいと思いこれに変更したのですが上手く出来ません。どういう感じでプログラミングすればいいんでしょうか? RB0からRB7まで1個づつドライブさせたいです。

  • C++のプログラムについて

    readfile関数を使用してPICからPCへデータを送信しようとしているのですけれど、 通信開始してからPICからのデータを変化させても受信データが変化しません。 なぜでしょうか。解決方法もおしえてください。 ちなみにPICの信号がちゃんと変わっているかはcheck済みです。 PC側プログラム if(key=='G'){ ReadFile( comHandle, &data_a, 1, &lRead, NULL ); printf("%c\n",data_a); } キーボードで'G'を入力すると受信するようにしてあり PIC側では最初'A'を出力していて、 'G'を押すとprintfで'A'を表示しますが、PIC側の信号を'B'に変化させて 'G'を押しても'B'と表示されずに'A'と表示されてしまいます。

  • pic12F683で2mS.ON 4mS.OFFのパルス出力

    はじめまして PIC初心者です。PIC12F683 OSC外部入力16Mhzで、2mS、ON4mS、OFFのパルスを、出力したいんです。プログラムを、mikuroCで、具体的にお願いします。

  • PICのプログラムを知りたいです

    PICプログラミングの入門書を何度か 読み返し、PICkit2を入手したばかりの 未経験者です。 PIC12f629を使用して、5つのポートで 8つのLEDを順次点滅できるという理屈 と回路図は分かりました。 ところが、本書に載っているのは、 PIC10f200を使用した、3つのポートで 4つのLEDを順次点滅させる回路図と プログラムで、このプログラムをどう 応用していいのかわかりません。 熟知している方には理解できないかも しれませんが、昔から理数系が大の苦手 なんです… http://www.youtube.com/watch?v=TyRcSPTer94 こちらにある初めのリレーが理想です。 宜しくお願いします。

専門家に質問してみよう