標準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
前へ
次へ
ホームページトップへ戻る