すっご〜〜く久々の更新です。けんきうしつが忙しくて全然手がつけられませんでした。
更に言うと、beatmania IIDX という沼 にハマったため、この趣味分野の優先順位がほぼ最下位になっていました。DAO コン高いよ、DAO コン。
それでもなお、タイトルの通り PIC をいじいじしていましたので、これに関した記事を書こうかなと言った具合です。
なぜこの型番か
早速ですが、タイトルの通りの型番に目をつけました。Twitter で見たから、というのがきっかけ。その人曰く、
- USB FS/LS のデバイスペリフェラル搭載
- 双方向ペアのエンドポイントが16個
- OTG を積んでいないので、レジスタが複雑でなくて済む
- クリスタルレスで USB を遊べる
- CPU は 64MHz 動作
- まあ PIC は1命令4サイクルが基本なので実質 16MHz ですが...
- こちらの記事がわかりやすいかと。
- ROM が 32KBytes でまあまあ実用に耐える
- 公式で USB ブートローダーが提供されていて、ビルドして導入すれば書き込み器が不要になる
- USB ケーブル1本で開発できるので超便利。
- ちょうど USB ペリフェラルで遊びたいと思っているし。
- こちらは次回の記事で説明。
から。そうだね。欲しいなあ〜とか、でもお金ないなあ〜とか、そうこうしているうちに、なんと秋月で販売を開始したよう。ほしいと思っていた時に丁度かよ。最高です。即買い。
しかし、個人的にアレなのは、やはり大きさ。40pin あるデバイスですが、横幅が LPC1114 を彷彿とさせるデカさです。28pin のものが簡単に手に入ればいいですがね。
入門
環境は以下。
- macOS Mojave
- Catalina は電子工作に絶対向かないから、絶対インストールしないぞ!!!!
- MPLAB X IDE
- MPLAB Snap
- 本ブログでも散々取り上げた、安価な書き込み・デバッグアダプタです。重宝しています。
- でもたま〜に使おうとして接続すると、毎回ファームウェアがぶっ壊れているのはどうして?厄年だから???
まずは基本のLチカ。取り敢えず CPU クロックは最大の 64MHz に上げて電力の無駄遣いをしましょう。デフォルトから変更した Fuse Bits は以下(多分)。
- CONFIG1L
- PLLSEL: PLL4X
- CONFIG1H
- FOSC: INTOSCIO
- FCMEN: OFF
- CONFIG2L
- BOREN: OFF
- CONFIG2H
- WDTEN: OFF
この段階で、マイコン起動時には Primary Clock (= 内部オシレータ 1MHz を PLL で4倍したもの、つまり 4MHz)が CPU 動作クロックになる。ここからは起動後にするお仕事。
#include "global.h" // 上のFuseたちを記述したファイル
#define _XTAL_FREQ 64e6
int main(void) {
OSCCONbits.IRCF = 7;
TRISAbits.RA0 = 0;
while(1) {
__delay_ms(1000);
LATAbits.LA0 ^= 1;
}
}
IRCF
を設定することで、内部オシレータ周波数を 16MHz に。よって、これにより PLL を経由して CPU クロックは 64MHz になりました。めでたしめでたし。
そういえば PIC はピン方向(TRISx
)で出力を指定するときは 0 を書き込むんでしたね。勘違いして1を書き込んで、「動かねえぞ!」って勝手にハマっていました。
USBペリフェラル使用に向けて
Fuse Bits で LS48MHZ というのがあります。IDE 上では "System clock as 24MHz/48MHz" 等々としか記述されていませんが、データシートによるこのビットの説明を読むと、"System clock is expected at 24 MHz / 48 MHz" とあるので、USB ペリフェラルを動かすには、システムクロックを 24MHz or 48MHz に設定せねばならないようです。つまり 64MHz 動作は無理。トホホ...まあ USB なんか割り込みが立て続けに入るようなものなので、そこまで CPU クロックスピードに拘る必要はなさそうですが。
ということで、Fuse Bits の先程の設定を2箇所いじります。
- PLLSEL を
PLL3X
にする- プログラム記述中の
IRCF
と併せて 16MHz x 3 = 48MHz となる
- プログラム記述中の
- LS48MHZ を
SYS48X8
にする- これで USB クロックが適切になる
というわけで
取り敢えず入門でした。基本のLチカができたということで、今回は締めたいと思います。お次はブートローダーの導入です(これが割と面倒くさい)。現状できているので近いうちに記事にしたいところです。もうしばらくお待ち下さい。