ここから本文です

PIC(C言語)制御について知恵をお貸し下さい。

so_********さん

2010/11/2205:37:00

PIC(C言語)制御について知恵をお貸し下さい。

できましたらC言語(CCS-C)であれば助かります。


PICの先輩方、どうぞよろしくお願いします。
超初心者なので、とんちんかんなことを言うかもしれませんが許してください。


下記の回路図のように、「ポンプ1」、「ポンプ2」を制御したいと思っています。
http://photos.yahoo.co.jp/ph/so_lute/vwp?.dir=/8bde&.src=ph&.dnm=8f...

運転時間は、PICのディレイ関数で運転時間を決めます。(下記参照)
ポンプ1は連続運転で、ポンプ2は電気抵抗式の水位センサが動作した時のみ運転します。


ここから質問です。

1.センサが反応した状態、反応しない状態が一定時間あった場合に警報を出すことができますか?
例1.水位センサが反応したまま1分経った場合、全停止、警報LED(図示しない)を点灯させる。
例2.水位センサが反応しないまま1分経った場合、全停止、警報LED(図示しない)を点灯させる。

できる場合、どのような命令を使用し、プログラムすればいいでしょうか?
できましたら、プログラム例などを書いていただければ助かります。


2.CCS-Cで下記のようにプログラムを組みましたが、同時にPIC(GP-1)のLED1をONにする命令がわかりません。
エラーになりましたが、「output_high(PIN_A2,PIN_A1);」のように、私にも理解できる簡単な命令でできる方法はありませんでしょうか?


#include <12f629.h>
#fuses PROTECT,CPD,BROWNOUT,MCLR,NOWDT,PUT,INTRC_IO
#use delay(clock=10000000)

//// メイン関数

main(){
output_high(PIN_A2);
delay_ms(100000);
output_low(PIN_A2);
}



上記NO1+NO2の制御を一つのPICに組めれば最高です。
よろしくお願いいたします。

補足ご回答戴きありがとうございます。

書籍は持っています。(このほかにも10冊ほど)
それでCCS-Cの購入もしました。

アセンブラ、C言語、ラダー連枝の本を読み漁り、その結果、頭が混乱してしまいました。
CCS-Cの購入をきっかけに、C言語でいこうとなりました。

自分でも理解力の無さにどうしようもなく、ここでご質問させていただいた次第です。

もう少しヒントをいただけないでしょうか?

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
803
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

nan********さん

2010/11/2315:17:56

私はL00からオペコードでしかやらないので無用の長物だろうが、16F84A10MHz。
RA0をポンプ1、RA1をポンプ2としてハイで動作、ローで停止。
RA4をセンサー入力としてローでポンプ2動作、ハイでポンプ2停止。
センサー連続約1分以上ハイでRA01ローとなりポンプ12共に停止でRA2ハイ(警報ランプ1)でプログラム停止。リスタートさせるにはMCLR^をローにするか電源をオフオンしなければならない。
センサー連続約1分以上ローでRA01ローとなりポンプ12共に停止でRA3ハイ(警報ランプ2)でプログラム停止。リスタートさせるにはMCLR^をローにするか電源をオフオンしなければならない。
プログラムをより簡単にするために本プログラムでは0.3秒200回で1分としており0.3秒毎にセンサーの状態を見ているのでセンサーの変化がポンプ2に伝わるまで最大で0.3秒かかる。
以下はL00~3Fまでの入出力定義、フレキシブルタイマー、はじめのGPR13、14を200プリセット、RA0ハイでポンプ1起動というのを省いたL40からのメインルーチンだが実際に焼いて上記の様に動作することは確認済み。
ステップ数も少なくて特に難しいところはないのだがL00からのオペコードでの説明でよければプログラムの詳細を書いてもいいけど、、
0040:1A05 2857 30C8 0093 1485 2050 0B94 2840
0048:0185 1585 0063
0050:3003 2018 0008 3FFF 3FFF 3FFF 3FFF 1085
0058:30C8 0094 2050 0B93 2840 0185 1505 0063

質問した人からのコメント

2010/11/23 21:09:38

笑う 詳しくお書き戴いた、nanasino2006さんをベストアンサーに選ばせていただきました。
ぜひ、オペコードで詳細をお教え戴きたいのですけど、補足説明を使ってしまい、このようにしてしかコメントを書けませんでした。
よろしければ、so_luteアットマークyahoo.co.jpにメールで教えていただけないでしょうか?
又その際、オペコード→PIC書き込みの方法もお教えいただければ幸いです。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

yam********さん

2010/11/2218:50:43

これは、ラダー(連枝)で書いた方が簡単(内容的にも、ものすごく簡単)。

とはいえ、リレーシーケンス回路が理解できないひとには無理か・・・

本という物は読みあさるんじゃなくて、その本に載っていることを一つ一つ実践しないと理解など出来ません。

連枝の本もあるのなら、1ページ目からじっくりと取り組んだ方がいいです。

データ処理をしない、オンとオフだけの制御ならラダーが一番。

この際、酷なようですがCはしまっておきましょう。

one********さん

編集あり2010/11/2209:29:56

1から10まで人に聞いていたら一生何も出来ない。

http://www.picfun.com/picbookK.html
とりあえず、これを買って全ページ読破する。
その上でまだわからない部分があったらピンポイントで質問するべきである。

一応考え方としては…
10msぐらいで回る無限ループを作る
そのなかに
タスクごとに、(そのタスクが)有効/無効フラグと、実行間隔を決めるカウンタを作る

簡易並列処理の出来上がり

ようするに
delay_ms(100000);
って書いちゃうとその文を実行中は他に何も出来なくなるので、
delay_ms(10);
の無限ループを作って
そのループを10000回まわったときにアクションをするようにするということ。

そうすれば1000回まわったときにする作業や、
100000回まわったときにする作業も、見かけ上同時に実行できる。

当たり前だが、10msを激しく崩すような長い処理を入れてはいけない。
(入力待ちとか、delay_ms(100);とか…)

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる