一人もくもく会 α verでサービス開始しました。

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の点滅速度を可変しますを参考にした。
きむ茶さんのところは分かりやすすぎて
検索しているうちに気がつくとそこにたどり着いている感じでかなり助かる。

#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 < 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だとうまくデバッグが出来なかった。
プログラム送信時にエラーが出る。
検索しても出てこないしデータシートも記述が少ないし無理なやつかもしれない。