どういう動作をさせたいのかを書いておく。
5つのLEDが交互に(10101と01010)点滅する。
スイッチを押すと点滅間隔が変わる。
今のところ、スイッチを押したときの動作が安定しない。これはチャタリング対策が全くされてないからか、プログラムが悪い(チャタリング対策は別にして)のか、回路が悪いのか、問題点が絞れていない。
ANSEL = %00000000 ‘ Configure AN pins as digital I/O
CMCON = %00000111 ‘ Comparator Off
IOC = %00001000 ‘ Interrupt-on-change enabled on GP3(=1)
‘OPTION_REG = %00000000
TRISIO = %00001000 ‘ GP0,1,2,4,5 is OUT
‘ GP3 is always IN
INTCON = %00001000 ‘ Enables the GPIO port change interrupt
といった設定項目が非常に煩雑だ。
最近やっと気づいてきたことだが、1つの端子に多くの機能が備わっているので分かりづらいのではないだろうか。
もっとピン数の多いPICから始めた方が楽なんだろうか。
追記
プログラムに処理を追加した。
チャタリングを云々する以前に、押したボタンが戻されたかどうかの判断すらやってなかったので、GPIO.3が0の間は処理を止めることにした。その間100mSということで、十分チャタリング体策にもなっているはずだ。
今のところ上に書いたとおり、ねらったとおりの動作をしている。
mikroBASICがプログラムのソースをhtmlで吐けるようなので、載せてみる。
PIC12F675 5 LEDs Int 005