前回までGemini様に画像ファイルをアップロードしてました。今回はプログラムソースをアップロードしてみます。Gemini様はソフトウエアはお得意みたいなのでソフトウエアに寄せてみました。お得意の中でもお得意そうなPython、でもMicroPythonです。割り込みやらキャプチャ、コンペアとかハード制御必須のやつ。
※Google様の生成AI、Gemini(無料プランだけれども)を使ってプログラムを「吟味」してもらっています。
ソフトには強いGemini様だっ
このところ回路図とか波形グラフとか、Gemini様のお得意でない分野を無茶ぶりしてました。それでも健気に回答してくれるGemini様ですが、いろいろ早合点やら誤解やらも頻発、正直辛そうっす。そこで今回はソフト側に「寄せて」Gemini様の実力を引き出したい、と思います。まあ、今までちょこっと見た感じでは、Pythonはお得意な感じ。しかし、投げかけてみるのはマイクロコントローラ用のMicroPythonのソースです。短いプログラムだけれども以下のようにハード直結のコードであります。
-
- ターゲット機はST Microelectronics社製STM32(動作確認はSTM32F401RE)
- タイマ1で、インプット・キャップチャ、アウトプット・コンペア機能を使ってハードウエア制御で波形を生成するプログラム。勿論割り込み使用。
- 上記の割り込み制御の「表」では「いわゆるLチカの無限ループ」も動いている。
かなりハードよりのスクリプトだけれどもGemini様はこのコードが何だか分かるのか?
なおアップロードしたソースは以下の別シリーズ過去回にて作成の上、実機で動作確認済であります。
MicroPython的午睡(87) STM32版、入力キャプチャ割り込み受けで出力コンペア
アップロードしたスクリプトを再掲載いたします。こんな感じ。
#STM32: Timer 1 IC-OC Test w/Callback function #Timer1 CH1 ... PA8(D7) #Timer1 CH2 ... PA9(D8) import pyb import machine import time import micropython import uarray micropython.alloc_emergency_exception_buf(100) capV = uarray.array("l", [-1] * 2) def ch1Intr(tim): capV[0] = icCH.capture() capV[1] = capV[0] + diffV if capV[1] > 0xffff: capV[1] -= 0xffff ocCH.compare(capV[1]) tim = pyb.Timer(1, prescaler=1023, period=0xffff, callback=None) icCH = tim.channel(1, pyb.Timer.IC, polarity=pyb.Timer.RISING, pin=machine.Pin.board.D7,callback=ch1Intr) ocCH = tim.channel(2, pyb.Timer.OC_TOGGLE, pin=machine.Pin.board.D8) diffV = 1000 def enCh1Intr(timCH): timCH.callback(ch1Intr) def disCh1Intr(timCH): timCH.callback(None) def main(): print("STM32F401RE Timer 1 IC-OC Test w/Callback.") print("Source Freq: {0} Hz".format(tim.source_freq())) print("Timer 1 Freq: {0} Hz".format(tim.freq())) enCh1Intr(icCH) while True: pyb.LED(1).on() time.sleep(1) pyb.LED(1).off() time.sleep(1) if __name__ == "__main__": main()
今回のプロンプトへの投げかけとGemini様のご回答
今回は以下のお願いをした直後に、上記のソースをコピペしてみました。
以下のプログラムは何をするプログラムですか?
ご回答は、ほぼ完ぺきに正しかったです。ただし、案1から案3まで全て英語でした。今まで日本語で問いかけたら日本語だったのだけれども。。。
さらに Overall Functionalityとな。よくよく見抜いていらっしゃる。
そして、Purposeとな。Gemini様は老人の書くコードなど全てお見通しだっ。
説明を日本語にして
1点除けば、ほぼ完ぺき。そこで追加で以下をお願いしてみましたぞ。
説明を日本語にして
一撃で、説明を日本語に翻訳してくれました。忘却力の年寄が書く文章よりかは分かり易い文章っす。その上、オリジナル(英文版)にない項目が追加されてました。ただ、日本語にしてくれただけではないのね。
おっしゃる通り。忘却力の年寄は本サイト内のソースに限り(意図的に)コメント極小化しとります。すみません。本気でコメント書くと記事が長くなりすぎる、というのが表面的な理由。その実はメンドクセーからですが。掲載するのは短い断片コードだし、みりゃ分かるだろ~と。そういうところをGemini様は鋭くご指摘。恐れ入りました。