前回、Raspberry pi picoとAKC6955モジュールで何となく動作するものが出来た。
今回は、前回作った物をブラッシュアップして、もう少し良いものにしたい。
<改善したい点>
①LCDバックライトの調光をPWMで行っているが、中波ではPWMのスイッチングノイズを拾ってしまう場合が有る。
②ある程度の時間、何も操作しない場合、バックライトの光量を下げて消費電流を下げたい。
③短波帯等で、アンテナ信号レベルが低い時に、I2C通信のノイズが載る。
④電源を切ると、電源off前の状態を保持していない。
フラッシュメモリに、現在の状態を記録し、電源投入時には前の状態で復帰するようにしたい。
<対策>
①LCDバックライトのPWMスイッチングノイズについて
・スイッチングスピードを1KHz⇒200Hzにしてみる
・同時にLCDバックライトの電源に100uFのコンデンサを追加
確かにスイッチングノイズは低減されるが、ゼロにはならない。
また、周波数を落とすと、ややちらつきが発生するようだ。
⇒おとなしく、PWMは止めてトランジスタで負荷抵抗の切り替えのみにする。
②ある程度の時間、何も操作しない場合、バックライトの光量を下げる。
タイマー割込みの回数をカウントして、ある一定以上になったら光量を下げるように変更。
③短波帯等で、受信信号レベルが低い時にのみI2C通信のノイズを拾うようだ。
I2Cの通信速度を100KHz ⇒ 10KHzとし、外付けプルアップ抵抗を削除
これで、だいぶましになった。
<変更後の回路図>
④ラジオの動作データを記録して、起動時に読み込んで復帰するようにしたい。
フラッシュメモリへのファイルの読み書き方法が分からないので、対話型AIに聞いてみる
----------<Chat GPTの答え>---------------
はい、Raspberry Pi Pico でこれらのint型変数をファイルに保存して読み書きするサンプルプログラムを書きましょう。Python を使って以下のコードを書いてみました。
import os
# 変数の定義
band_set = 1
freq_set = 100
mode_set = 2
preset_no = 0
volume_level = 25
# ファイルの書き込み
with open('settings.txt', 'w') as f:
f.write(f'{band_set}\n')
f.write(f'{freq_set}\n')
f.write(f'{mode_set}\n')
f.write(f'{preset_no}\n')
f.write(f'{volume_level}\n')
# ファイルの読み込み
try:
with open('settings.txt', 'r') as f:
lines = f.readlines()
# 変数への代入
band_set = int(lines[0].strip())
freq_set = int(lines[1].strip())
mode_set = int(lines[2].strip())
preset_no = int(lines[3].strip())
volume_level = int(lines[4].strip())
print(f'band_set: {band_set}')
print(f'freq_set: {freq_set}')
print(f'mode_set: {mode_set}')
print(f'preset_no: {preset_no}')
print(f'volume_level: {volume_level}')
except FileNotFoundError:
print("settings.txt file not found. Using default values.")
このプログラムでは、最初に5つの変数を整数型で定義しています。次に、with open('settings.txt', 'w') as f:
を使ってファイルに書き込みます。各変数の値を1行ずつ書き込んでいます。
その後、with open('settings.txt', 'r') as f:
を使ってファイルから読み込みます。readlines()で1行ずつ読み込み、strip()で空白を除去し、int()で整数型に変換して各変数に代入しています。
最後に、読み込まれた変数の値を表示しています。
このようなファイル入出力の仕組みを使えば、Raspberry Pi Pico で int 型のデータを保存・読み出しすることができます。必要に応じて、ファイル名やファイル形式を変更したり、より複雑な処理を加えることができます。
-----------------------------------------------
おお、なんともありがたい。
基本、そのままコピペした。
ただ、MicroPythonだとtry-exceptのexceptの後にエラー名が有るとエラーになる。エラー名を削除してexceptのみにするとエラーは出ない。
何も操作しない状態が10秒続くと、現在の動作状態をファイルに書き出し、次の起動時にファイルを読んで復帰するようにした。
まぁ、何となく、それっぽく動作するようになった。
まだブレッドボードで空中配線状態のまま。
今回のプログラムをver0.2として以下のリンクに置いておくので、興味のある方はどうぞ。
(素人のプログラムなのであくまでも参考程度で・・・)
Thonnyでmain_v02.pyをmain.pyとしてraspberry pi picoにコピー。同じくlib以下もコピーすれば動作すると思う。
今回いろいろやってみて、なんとなくおじさんの理解が進んだ。
タララタッタッタ~
おじさんのレベルが1上がった。MicroPython(超初級編)を覚えた。
HPとMPが10くらい上がった。
まぁ大して成長してない。まだChatGPTが無ければ、まともなコードも書けない。
AIの使い方は上達したかも
訳も解らず作ってみた感想としては、MicroPythonの方が組みやすい部分もあるが、arduino環境の方がライブラリが豊富でかつ、プログラム例等が多い。電子工作ではarduino環境の方が便利な気がする。
まぁ、おじさんのレベルでは偉そうなことは何も言えないのだが・・・
「まだまだ修行が足りないのニャ」