PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.12

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

PIC18F2550では大きすぎて、計画中のTK80互換マイコンボードND80ZVには組み込めそうにないことがわかりました。
USB機能内蔵のPICにはPIC18F4550、PIC18F2550のほかに20pinのPIC18F14K50があることはちょっと前から知っていました。しかしUSBに関する部分がPIC18F2550とはかなり異なっているようです。
案の定しっかり泥沼にはまってしまいました。

[第79回]

●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レジスタの表は前回([第78回])お見せしました。

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

ブロック図([第77回])をよーく見てみますと、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です。
前回と同様に、今回も計算通りの出力が得られています。

この出力波形については、もう少し書くことがあるのですが、本日は時間が足りませんので、それについてはまた次回ということにいたします。
CPUをつくろう!第508回(2010.5.25upload)を再編集

PICでUSBを![第79回]
2011.7.12upload

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