標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第508回]

●PIC18F14K50をクロック32MHzで動かしてみました

PIC18F14K50の内部発振クロックの最高は16MHzです。
PIC18F2550の内部発振周波数の最高が8MHzでしたから、その倍の周波数ということになります。
立派なものです。
さらに。
PIC18F14K50は、内部発振クロックをPLLで4倍にして、それをシステムクロックとして使うことができます。
ただし、さすがに16MHzの4倍というわけにはいかなくて、内部発振クロックが8MHzのときに限って、PLLで4倍にすることができます。

まずはプログラムです。

;;;pic p18f14k50 test program
;f14k50test2
;10/5/21
;
;
	#include<p18f14k50.inc>
;cpuclock=32MHz internal oscillator
;
	CONFIG FOSC = IRCCLKOUT,WDTEN=OFF,LVP=OFF;not WDT          
;
	org 00
	movlw 64;clock=8MHz,select Primary Clock
	movwf OSCCON
	movlw 40;PLL on for intosc=8MHz only
	movwf OSCTUNE
	clrf ANSEL;PORTA,PORTC are digital
	clrf ANSELH;PORTB,PORTC are digital
	clrf TRISA;porta=out
	clrf TRISB;portb=out
	clrf TRISC;portc=out
;
	movlw 1
loop
	xorwf PORTC
	goto loop
;
	end



内蔵発振回路のクロック周波数は、OSCCONレジスタで行います。
OSCCONレジスタの表は前回([第507回])お見せしました。

今回は8MHzクロックを選択しますから、IRCF<2:0>=110です。HFIOFS=1にします。
問題はSCSビットです。
内部発振クロックですから前回の16MHzと同じくSCS<1:0>=1xにすればよい、と思いきや、そのようにするとPLLを使うことができません。
ここはSCS<1:0>=00(プライマリクロック)にする必要があります。
なぜだかいまひとつ納得がいきません。

ブロック図([第505回])をよーく見てみますと、internal oscillatorからまっすぐにsystem clockに入るラインと、primary oscillatorのラインにのっかるラインの2通りがあります。
そこのところをこのSCSビットでコントロールしているようなのですが、表現といいますか、コメントといいますか、どうもそのあたりに無理があるような感じですっきりとは納得できません。
納得はできませんけれど、このようにしないことには32MHzが出てくれませんから、致し方がありません。

内部発振クロックの8MHzをPLLで4倍にするためには、OSCTUNEレジスタのSPLLENビットを1にしなければなりません。

[出典]MICROCHIP社PIC18F1xK50DataSheet

●RC0からの出力波形です

プログラムを実行中のRC0からの出力波形です。


CPUクロックは内蔵発振の8MHz×4倍の32MHzです。
上側(CH1)はCLKOUT(pin3)から出力されている、CPUクロックの1/4のクロック(8MHz)です。
下側(CH2)はプログラムによってトグル出力されたPORTCのビット0の波形です。
PORTCのビット0は3マシンクロックごとに1と0が交互に出力されます。
CPUクロックが32MHzということは、1クロックが1/32μsecということです。
PICの1マシンクロックは4CPUクロックですから、1/8μsecです。
そしてその3マシンクロックは、3/8μsecになります。
375nsecです。
前回と同様に、今回も計算通りの出力が得られています。

この出力波形については、もう少し書くことがあるのですが、本日は時間が足りませんので、それについてはまた次回ということにいたします。
2010.5.25upload

前へ
次へ
ホームページトップへ戻る