JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Raspberry Pi Pico MicroPython Timer割込み

2021-11-12 23:15:25 | Raspberry Pi Pico
 Raspberry Pi Pico(RP2040)は、内部に16ビットタイマを持っていて、周期的(定期的に)割込みをかけ、設定した処理を行うことができます。

 タイマの動作モード(mode)は、
 ワンショット(Timer.ONE_SHOT)と
 周期タイマ(Timer.PERIODIC)の2つです。

 割込みがかかった時に呼び出される関数(callback関数)を指定します。

 タイマ周期の指定方法は、
 freq(周波数(Hz単位))と
 tick_hz引数とperiod引数で周期を指定する方法があります。

 この割込みを使うためのmachine.Timerコンストラクタの仕様は
 Timer(id,mode,callback,period,tick_hz,freq) です。
 id=-1
 mode Timer.ONESHOTまたはTimer,PERIODIC
 period タイマのカウント数(tick_hz単位でのカウント数)
 tick_hz タイマのカウント周波数(Hz単位の整数)
 freq タイマの周波数(Hz単位の整数)

 Pico内蔵のLED(Pin25に接続されている)をタイマ割込みで点滅させる、いわゆるLチカのスクリプトです。
 Web上にあったいくつかの例をコピーさせていただきました。いずれも周期タイマ(PERIODIC)を利用しています。

例1 cllback関数tica2()を定義しています。initはタイマを初期化するメソッドです。


例2 コンストラクタTimerの中にすべての処理を記載しています。

例3 タイマ初期化メソッドの中にすべての処理を記載しています。

 例1~例3のいずれも動作しました。

 lambdaは、ラムダ式、無名関数といい、こんな風に使われるですね。まだよく理解していません。
 Python(MIcroPython)については、まだまだ勉強不足でよくわ分からないことが多いですが、様々な事例を実行していくことによって、少しずつ習得していこうと思っています。

Raspberry Pi Pico MicroPython シリアル通信(UART) テスト

2021-11-12 07:46:04 | Raspberry Pi Pico
 Raspberry Pi Picoのシリアル通信のテストをします。
 Picoは、UART0とUART1の2つのUARTコントローラを持っています。

 UART(id)  id=0 or 1 だけ指定した時のデフォルトは、次のとおりです。
 id      TX       RX      baudrate     parity    stopbit
 0 GPIO0 GPIO1   115200  なし  1
 1    GPIO4 GPIO5   115200  なし  1

 UART(1)だけを指定した時のUARTテスト用のスクリプトです。送受信は定番の通信ソフトTeraTermを使います。
 5行目 Picoからパソコン(TeraTerm)に「UART test」を送信します。
 8行目 any()は、読み込めるバイト数を返します。
 9行目 read(1)は、1文字読み込みです。このスクリプトは1文字入力されれば、その文字を送信します。



 USBシリアル変換は、FT234を使い、USBに接続しました。接続回路図です。


ブレッドボードです。FT234のRX,TXはPicoの6番ピンGP4(TX),7番ピンGP5(RX)に接続します。FT234の電源は5V(VBUS)に接続します。

 TeraTermは、下のように設定します。ポート番号は接続したパソコンに合わせます。

 TeraTermの画面です。Picoから「UART test」を受信して表示し、パソコンのキーボードから送られた文字をそのまま送り返します。

 UART(0)とUART(1)では、次のGPIOの組を使用することができます。
  UART(0)     UART(1)
  TX  RX     TX  RX
 GPIO0 GPIO1  GPIO4 GPIO5
 GPIO12 GPIO13 GPIO8 GPIO9
 GPIO16 GPIO17

 UART(1)でbaudrate, 9600bps  ,TX GPIO8 ,RX GPIO9を使う場合は
 UART(1,baudrate=9600,tx=Pin(8),rx=Pin(9))とします。
 この場合、スクリプトの1行目にimport UART,Pin として、Pinをimportしておきます。