2014-03-25に投稿

PIC12F675でPWM

PWMに挑戦しようと思って以前見かけたサイトを見てみたら、
どうも12F675じゃない。
おかしいと思いデータシートを見てみたら、
どうもそこに書かれていたレジスタ(CCPR3Lとか)が無い。
12Fは自前で実装しないといけないのか…。

しかたがないので自前で試しにやってみた。
うまく調整しないと普通に点滅して見えちゃう。
for文でディレイしているサイトも見かけたが
恐らくあまり実用的ではないと思うので一応タイマーでやってみている。

詳しいことは分からないが、別で見かけたサイトを参考にして
割り込み関数内では変数の切り替えだけにするようにして
なるべくmainの方でLEDの操作の方は行うようにしている。
もちろん詳しいことはわからないので無意味かもしれない。

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

|c|

include <xc.h>

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

static unsigned char count;
static unsigned char flag;
static bit uping;
static unsigned char maxcount;
static unsigned char wait;

static void interrupt inter() {
T0IF = 0;

count++;
if (count == 4) {
    flag = 1;
} else if (count == maxcount) {
    flag = 0;
    count = 0;
    if (++wait == 10) {
        if (uping) {
            maxcount++;
            if (maxcount == 32) {
                uping = 0;
            }
        } else {
            maxcount--;
            if (maxcount == 7) {
                uping = 1;
            }
        }
        wait = 0;
    }
}

}

main() {
GPIO = 0;
CMCON = 0x07; // コンパレータ未使用
ANSEL = 0x00; // AN未使用
TRISIO = 0x3B; // GP2:out
OPTION_REG = 0x80; //プリスケーラ2
TMR0 = 0x00; //カウント0
T0IE = 1; //タイマー0使う
GIE = 1; //タイマー使う

count = 0;
flag = 0;
uping = 1;
maxcount = 8;
wait = 0;

while(1) {
    if (flag == 1 && GPIO2) {
        GPIO2 = 0;
    } else if (flag == 0 && !GPIO2) {
        GPIO2 = 1;
    }
}

}
||

しかし予習ではPIC+白LEDは3Vじゃ動かないはずだったんだけど
pickit外して1.5Vの電池2本で動いた。
まだまだ良くわからないことだらけだ。

はんだの練習もしたいので一応12F675でちょっとしたものは作るつもりだが、
それでなんだかんだできたらPIC18F14K50も試してみようと思っている。
秋月にUSB付きのがあるので一回それで色々やってみる。
やっぱシリアル通信できないと幅が広がらない。
arduinoで毎回2000円以上かけてUSB使うとか金が飛んでしょうがないだろうし。
うまくいったら回路図を元に自分で量産できるようにしてみたい。

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

だら@Crieit開発者

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

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

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

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

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

コメント