2021RP2040でPIOを動かすまでのプロジェクト新規作成・ビルド方法について解説します。ここではPythonではなくC言語をターゲットとしています。参考にして作成します。参考に、ビルド・デバッグができる所まで進めたら、VSCodeのエクスプローラーで、PIOTest.cと同一階層にPIOTest.pioというファイルを新規作成し、次のように編集します。FIFOが空になるとpullでFIFOにデータが入るまで待機します。出力ピン(GPIO)に書き込みます。1』等で値が入る対象)となるGPIOを設定します。変数pinにはGPIO番号が入ります。ここでは"1"としていますので、pinのGPIOのみが使用されることになります。GPIO番号"pin"をGPIOとして使えるようにします。対象のGPIOを出力に設定します。Pico)のPIOのJMPやMOVといったアセンブラのような命令について解説します。条件によって設定したラベル位置に処理を移動させます。レジスタXが0の場合、ラベルloopに処理をジャンプします。命令は次のフォーマットで記述します。かっこ()は省略可を意味します。条件が成立(true)する場合に、ラベルにジャンプします。条件は次の8パターンの書き方があります。条件は常に成立(true)となり、常にラベルにジャンプします。レジスタXが0の場合、ラベルにジャンプします。レジスタXが0では無い場合、ラベルにジャンプします。ついでにレジスタxの値を1引きます。レジスタYが0の場合、ラベルにジャンプします。レジスタYが0では無い場合、ラベルにジャンプします。ついでにレジスタyの値を1引きます。レジスタXとYが違う値の場合、ラベルにジャンプします。_pin関数で設定しておいたGPIOピンがHレベルの場合、ラベルにジャンプします。OUTシフトレジスタが空でなければ、ラベルにジャンプします。条件が成立するまで待機します。遅延命令を付けた場合は、条件成立直後に遅延処理が実施されます。I/O)のブロック図を解説します。私なりにブロック図を書き直して、それを元にPIOについて説明します。I/O)とは、簡単に言うとメインのCPUとは別で動く非常に小さなCPUのことです。この小さなCPU(ステートマシンと呼びます)は合計8つ存在し、IO操作等が可能です。CPUとは独立して動作しますので、タイミングのシビアなI/O制御に向いており、プログラミング次第でUARTやSPIといった周辺回路と大体同様の機能を作成できます。全体のブロック図は次のようになります。ステートマシンはPIO0とPIO1の2ブロックに4つずつ、合計8つ存在します。詳細なブロック図は次のようになります。CPUからステートマシンにデータを送る際に使用される32bitのバッファ。FIFOからOutシフトレジスタへ値を移動できる。FIFOは他のFIFOと結合してサイズを拡張可能。ステートマシンからCPUにデータを送る際に使用される32bitのバッファ。FIFOから目的のデータを取得する。FIFOへ値を移動できる。FIFOと同じく結合してサイズ拡張可能。32bitのデータを保持できるビットシフト機能の付いたレジスタ。『OUT』命令で保持データ(指定ビット数分)をGPIO等に反映し、ビットシフトする。32bitのデータを保持できるビットシフト機能の付いたレジスタ。『IN』命令でGPIO等の値(指定ビット数分)を取得し、ビットシフトする。Pico(RP2040)の開発環境(C言語)の構築の方法を解説します。最終的にはステップ実行・プロジェクトの新規作成までできるようになります。ターミナル(LXTerminal)を開いてセットアップスクリプトをダウンロード・実行します。このブログではホームフォルダ(/home/pi)でセットアップスクリプトを実施したことを前提に説明します。』コマンドにてホームフォルダ(/home/pi)に移動してから以下のコマンドを実施してください。このブログではホームフォルダ(/home/pi)にて実施します。このスクリプトの実行で、開発環境のセットアップはほぼ完了です。Codeがインストールされます。2021RP2040はCPU(Cortex-M0+)を2つ内蔵しているデュアルコアのマイコンで、2つの異なるコードを並列に実行することができます。使い方も簡単で以下のように専用関数の呼び出しで使用できます。使用するために、『CMakeLists.txt』の『target_link_libraries』に『pico_multicore』を追記します。マルチコアプログラミングでは、複数のコアから同時に同じメモリや同じIO等にアクセスしないように排他処理が必要です。使ったセマフォによる排他処理を使用します。セマフォから許可を要求。完了後、セマフォ解放。Core0を止めるのでなるべく早く解除する。2021XHコネクタとPHコネクタを作成する為に、Amazonでコスパが良いと思われるIZOKEEの圧着ペンチを購入したのですが、こちらは同時圧着ペンチという被服と心線を一回で圧着可能なもので、初見では何をどうすれば良いか解りにくかったので使い方を紹介します。電線は直径1.2mmの物を使用します。被覆を適当に剥きます。ワイヤストリッパーがあれば使用します。ワイヤストリッパーが無ければカッターで慎重に剥きます。切り口が直角になるようにします。剥き終わったら芯線を軽く指でねじってまとまりを出します。被服の切り口は直角になるように。剥き出しになる芯線の長さがピッタリ3mmになるように慎重にカットします。カットが終わったら芯線を軽く指でねじってまとまりを出します。XHコンタクトに電線を当てて、被覆と電線を圧着するのに問題無い長さ、形状である事を確認します。この時、電線を完全に奥まで当てます。XHコンタクトを圧着ペンチの先端から2番目にセットします。圧着ペンチは被覆圧着部と芯線圧着部で完全に閉じたときの隙間のサイズが異なり、被覆圧着部のほうがより大きく隙間ができるようになっています。その為、圧着ペンチの被覆圧着部と芯線圧着部で段差があるのですが、その段差の壁にXHコンタクトの被覆圧着金具が当たるようにセットします。ピンセットを使うと楽かもしれません。XHコンタクトをセット。段差の壁に被服圧着金具をひっかける。圧着ペンチでXHコンタクトの先端の返しの部分を潰さない位置にある事を確認しながら、XHコンタクトを軽く挟む位置まで握り込みます。XHコンタクトを軽く挟む位置まで握る。返しの部分はギリギリ挟まれないはず。電線を奥まで差し込み、圧着ペンチを完全に握り込みます。後ろの方から電線を奥まで差し込んでいる。Elkanprotonaso制御・組み込みエンジニア歴だけでいうと8年ほど。計測制御アプリ開発が得意分野で本業。Webアプリフレームワーク(Python/Ruby)を用いた開発実績もあり。毎日業務で読み書きしまくるC#が一番得意。今は3歳の息子を愛でるので忙しいおじさん。