PICでLED点灯

PICの環境を整えたのでメモ。

PICプログラミングの統合開発環境:MPLAB IDE 
PIC書き込み:秋月PICプログラマVer.4
OS: Windows 7

MPLAB IDEのインストールについては問題無し。
AKI PICプログラマver.4についてはいくつか補足。
(1)ver4のPICライティング用PICへの換装購入したのはPICプログラマver3.5完成品と
ver.4バージョンアップキット。
説明書が分かりにくいのだが(この界隈ではこれが普通?)
ライティング用のPICをver3.5→ver4に交換しないといけない。
ver3.5のPICが堅くはまっていて「本当にこれ抜くの?」と思ったが
なんとかてこの原理で外してver4に換装した。
(2)最新版ソフトウェアを使うにはファームウェアのアップデートが必要付属のCDに入っているPICプログラマV4ver.6.6.56は問題なく使えるが、
最新版ネットからダウンロードしてインストールすると、
ファームウェアをアップデートしろと言ってくる。
アップデートはとりあえず保留にしてver6.6.56を使い続けることにした。
(3)COMポートの指定付属のUSB Serial Driverをインストールする。
なんかつまづいたけど結局できたらしい。
インストールが終了すると、デバイスドライバのCOMポートから
現在接続しているポートが表示されるので
それを通信ポートに指定する。
(4)通信エラー?さっきまでうまくいっていたのにいきなり
「ライタが接続されていません」という表示がでるようになった。
ソフトウェアのインストールを試したり、ポートを変更してみたりしたが
結局ver4の書き込み用PICがしっかりはまっていないのが原因だった。
強く押さえつけると解決した。

まずPIC16F628を使用してコードをアセンブルする。

	list p=16f628
	#include<p16f628>
	__CONFIG _CP_OFF & _BODEN_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF

w_temp	EQU	0x70
status_temp	EQU	0x71
CNT1	EQU 0x20
CNT2	EQU	0x21

;******************************
	ORG	0x000
	goto main

	ORG 0x004
	movwf	w_temp
	movf	STATUS,w
	movwf	status_temp

;ISR Codes
	
	movf	status_temp,w
	movwf	STATUS
	swapf	w_temp,f
	swapf	w_temp,w
	retfie

main
	bcf	STATUS,RP0
	bcf	STATUS,RP1

	clrf	INTCON
	clrf	PORTA
	movlw	0x07
	movwf	CMCON

	bsf	STATUS,RP0

	bsf PCON,OSCF
	clrf	TRISA
	clrf	TRISB

	bcf	STATUS,RP0
	
	clrf	PORTA
	clrf	PORTB

main_loop

	bsf	PORTB,3
	call	DLY_250

	bcf	PORTB,3
	call	DLY_250

	goto	main_loop

;Delay Routine

DLY_250	;250ms
	movlw	0xfa
	movwf	CNT1
DLP1	;1ms
	movlw	0xf0
	movwf	CNT2
DLP2
	nop
	nop
	decfsz	CNT2,f
	goto	DLP2
	decfsz	CNT1,f
	goto	DLP1
	return

	END

アセンブラとかわくわくしますね。
無事にビルドが通ったのでPICに書き込む。
OK。
実際に回路に組み込んでスイッチON。
点灯しない。
ここで原因究明。以下のトラブルシュートを行った。
(1)コード的な問題一語ずつ確認したが問題なさそう。
敢えて言えば、はじめ16F628としていたが、実は購入したのは16F628Aだった。
はじめのインクルードの行を訂正した。
(2)ライタの問題はじめ、書き込む際に「拡張機能」>「CMDプログラム」というボタンを押していた。
同じパネルにある「EEPROM DATAプログラム」のクリックも必要なのか?とか思っていたら
メインパネルに「プログラム」という大きなボタンを発見した。
以後これを使用するようにした。
(3)回路的な問題最終的にこれが原因だった。
(a)DCジャックの+-が逆完全に思い込みで正負をとらえていた。
テスター使うときは電圧だけでなく、ダイオードを入れて方向を確かめないといけないと学習した。
(b)ダイオードのアノードとカソードが逆長い方がアノードと覚えていたのに前述のDCジャックが逆という問題もあって逆に考えていた。
(c)実体配線が複雑

指示された回路図

実際にこのように組んでみた。
  
両方とも回路的には等価だと思うけど、実際はシンプルな後者の方しか動かなかった。
どこかで短絡しているのでしょうか。
シンプルな形を取ることで問題が発生する箇所をあらかじめ減らすという教訓を得た。
理論と実践のギャップですね。
(補足:後閑さんの本を読んでたら、大電流が流れると同電位に設計しても電圧降下が起こるらしい。
GNDは太く短く、が基本とのこと)

動作中の様子。Hello World!にあたるもの。
PIC16F648Aを使用

ちなみに動くのに2日かかり、16F628Aは途中で焼損した。
知ってはいたけどハードウェアってソフトウェアと違って自分を破壊して暴走するから怖い。
たぶん10秒も立たないうちに煙が上がってた。
この理由は
ー正負を逆にしていたこと
ー配線が違ったこと
の両方があると思う。

とても勉強になった。