環境は次の通り。
・MPLAB X IDE v2.0
・コンパイラはXC8
・pickit3使用
回路はLED点滅と同じで、
これにおとうさんといっしょに遊ぶ初めてのマイコンの
cdsの箇所と同じようにして空いているAN3にcdsをつけた。
cdsの説明書を見ると100kΩの抵抗が必要らしいが
手元になかったのでとりあえず10kΩをつけている。
プログラムは後述だが、
暗くなるとLEDが点灯し、明るくなるか1分くらい経つと消える。
(1440をコメントアウトのままにしてしまったのでこのままだと5秒位で消えちゃう)
夜寝る前とかリビングを離れる際とかに便利かもしれない。
回路を風船にでも入れて嫁を驚かそうかと思っている。
記念すべき初のユニバーサル基板実装にする予定。
少しはPICの作業もやってみます #10 – A/D変換の習作と
可変抵抗のツマミを回してLEDの点滅速度を可変しますを参考にした。
きむ茶さんのところは分かりやすすぎて
検索しているうちに気がつくとそこにたどり着いている感じでかなり助かる。
|c|
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だとうまくデバッグが出来なかった。
プログラム送信時にエラーが出る。
検索しても出てこないしデータシートも記述が少ないし無理なやつかもしれない。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント