mNEFOのメモ帳

ツイッターとかに書ききれなかったメモの集まり

PIOでのニキシー管の制御におけるクロック分周

RPシリーズのPIOは特に何も設定をしなければCPUのクロックそのままで動作します。 RP2350では150MHzです。前述のニキシー管制御アノード側PIOの一周期(.wrap_targetに戻るまで)が例えば800ステップだとすると、 150*106/800=187500、1秒間に18万7千500回繰り返すことになります(18万7千500FPS)。 そんな数字は当然ニキシー管自体が付いてこれない領域なので、CPUクロックを分周させて速度を落とします。 2分周なら75MHz、、、といった具合です。8管制御の場合、90FPSあたりが限度(これ以上増やすとゴーストが消えなくなってくる)です。 その時の分周は単純に150*106/(90*800)=2083となります。2083分周させればちょうどいい感じに800ステップのpioを90FPSでこなせるのです。 150*106/2083=72011 800*90=72000 とほぼ一致します。デューティーを可変させると当然PIOのステップ数が変化してしまいますが、同時に分周も設定してやるようにするとどんなデューティーでもおなじFPSで制御できるのです。 尚、RPシリーズのPIOの分周を途中で変更したいときはsm_config_set_clkdivではなく、pio_sm_set_clkdivをつかう。 前者はSMの初期設定時にしか有効にならない。途中で変えるなら後者。