2014-03-26に投稿

PIC12F675でcdsを使用したアナログ入力

環境は次の通り。
・MPLAB X IDE v2.0
・コンパイラはXC8
・pickit3使用

回路はLED点滅と同じで、
これにおとうさんといっしょに遊ぶ初めてのマイコン
cdsの箇所と同じようにして空いているAN3にcdsをつけた。
cdsの説明書を見ると100kΩの抵抗が必要らしいが
手元になかったのでとりあえず10kΩをつけている。

プログラムは後述だが、
暗くなるとLEDが点灯し、明るくなるか1分くらい経つと消える。
(1440をコメントアウトのままにしてしまったのでこのままだと5秒位で消えちゃう)
夜寝る前とかリビングを離れる際とかに便利かもしれない。
回路を風船にでも入れて嫁を驚かそうかと思っている。
記念すべき初のユニバーサル基板実装にする予定。

少しはPICの作業もやってみます #10 – A/D変換の習作
可変抵抗のツマミを回してLEDの点滅速度を可変しますを参考にした。
きむ茶さんのところは分かりやすすぎて
検索しているうちに気がつくとそこにたどり着いている感じでかなり助かる。

|c|

include <xc.h>

pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = ON, MCLRE = OFF

static bit lighting = 0;
static bit offing = 0;
static bit doOff = 0;
static int count = 0;
static int cds = 0;

static void interrupt inter() {
T0IF = 0;

if (offing) {
    if (++count >= /*1440*/120) {
        doOff = 1;
        offing = 0;
    }
}

}

main() {
GPIO = 0;
CMCON = 0x07; // コンパレータ未使用
TRISIO = 0b00010000; // GP4:in
OPTION_REG = 0b10000111; //プリスケーラ256
TMR0 = 0x00; //カウント0
T0IE = 1; //タイマー0使う
GIE = 1; //タイマー使う

ADCS1 = 1;
ADCS0 = 1;
//アナログ3を使用
ANS0 = 0;
ANS1 = 0;
ANS2 = 0;
ANS3 = 1;
//左からアナログデータ右づめ、アナログ3使用(2つのbit)、アナログ有効化
ADCON0 = 0b10001101;

while(1) {
    GO_DONE = 1;
    while (GO_DONE);
    cds = ADRESH * 256 + ADRESL;

    if (cds &lt; 768) {
        if (GPIO2) {
            GPIO2 = 0;
            offing = 0;
            doOff = 0;
        }
    } else {
        if (!GPIO2) {
            GPIO2 = 1;
            offing = 1;
            count = 0;
            doOff = 0;
        }
    }

    if (doOff) {
        doOff = 0;
        GPIO2 = 0;
    }
}

}
||

ちなみにこれも電池3本の3Vで動いているみたい。
なんでか分からないがそのうち何か壊しそうだな…。

あとアナログ変換のスタートである
GO_DONE = 1;

GO_DONE;
と間違えていたせいでどうやっても上手くいかなかったので
デバッグしてみようと思ったが、
どうもPIC12F675だとうまくデバッグが出来なかった。
プログラム送信時にエラーが出る。
検索しても出てこないしデータシートも記述が少ないし無理なやつかもしれない。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント