2019年9月29日日曜日

59円FMラジオの動画

59円のFMチューナモジュールを使ったFMラジオですが、スイッチをつけて選局ができるようになりました。アップ/ダウンの2つのスイッチを外部割り込みで処理しました。選局時以外、PICはSleepさせています。



ノイズも少なく、乾電池2本で動作して結構実用的なので、適当なケースを見つけて収めたと思います。ソースは近々公開します。

相変わらず動画編集ソフトがWin10のおまけなので、動画に詳しい説明が入れられません。

2019年9月23日月曜日

台風一過、長崎・軍艦島(端島)へ

出張で長崎に来ています。仕事は明日からですが今日は休日だったので前乗りしました。長崎は久しぶりです。主な観光名所は訪問したことがあったので、まだ行ったことのない軍艦島を目指しました。

台風17号の通過で飛行機が予定通りに飛ぶか、軍艦島クルーズは欠航にならないか心配でしたが、なんとかクルーズに参加できました。午前のクルーズは欠航だったようです。

ただ、台風で上陸用の桟橋の手すりなどが壊れていて上陸はできませんでした。長崎港から出て軍艦島に近ずくとうねりもあって、着岸も難しそうです。


炭鉱の深さが海面下1Km以上、横にも1Km以上もある坑道が何本もあるというのが信じられません。技術や安全設備も当時としては最先端だったと思いますが、今の技術や基準からみると心許ない気がします。

ここに5,000人以上が暮して、日本の高度成長を支えていたと思うと頭が下がります。暮らしも当時の最先端だったようですが、初期の頃は水がなくて大変だったらしい


夜はロープウェイで稲佐山に登って夜景を楽しんで来ました。標高333mで東京タワーと同じらしいですが、東京タワーはてっぺんまで登れないのでこちらの勝ち。ココも初めて訪問。来ていたのはカップルか中国からの団体客で、おっさん一人は似合いません。しかも風が強くて肌寒く、早々に下山しました。

2019年9月22日日曜日

FMラジオモジュールRDA5807Mを試してみました

台風17号で3連休は雨と強風との予報でしたが、今のところ大丈夫のようです。先の15号が大きな被害を出したので、今回は注意喚起を促す報道だったのでしょうか?

さて、先日PIC12F1501で遊んでみた記事をアップしましたが、待っていた部品が届き、試してみました。アマゾンでなんと59円(送料無料)で売られていたFMラジオチューナモジュール RDA5807M です。中国からエアキャップ封筒に入って届きました。利益でてるのか心配(^_^)

このモジュールは小さく、ピンが2mmピッチのためそのままでは使いにくいので、ユニバーサル基板に載せて細ピンヘッダを付けました。商品は写真の緑の基板のみです。片面のユニバーサル基板を裏返して、カプトンテープを貼り、両面テープで張り付けてあります。


PIC12F1501とはI2Cで接続しています。先日の記事にも書きましたがこのPICはI2Cモジュールを搭載していないのでソフトI2Cです。LCDとのI2C接続では問題なかったところが、チューナモジュールでは問題となっていたようで、しばらく動かず悩みました。まったく動かない訳ではなく、電源のオンオフを行っていると時々動くというパターン。チューナモジュールに載っているチップ仕様書のI2CタイムチャートとソフトI2Cのソースをにらめっこして差異に気づき無事に繋がりました。

音声出力はダイソーの300円USBスピーカを買ってきて繋いでいます。USBコネクタとステレオミニプラグをちょん切って、ブレッドボードに刺さるようにピンヘッダを付けています。アンプは電源がUSB給電なのですが、3Vでも動作しました。FMラジオモジュールの動作電圧が3V前後なので、電源を乾電池2本にすることができてよかったです。ただ、電源オンとオフ時に「プッ」という比較的大きな音がするのが難点。

このスピーカは300円の割によい音がするとの評判で、Youtubeなどに改造動画が沢山アップされています。エンクロージャ(箱)をしっかりしたものにすることで音がよくなるらしい。

とりあえずお試しなので、選局はハードコーディングです。周波数を換算した値をI2Cで送り込むことで選局できます。アンテナはジャンパ線を繋いだだけですが比較的感度も音質もよい感じです。ワイドFMも受信できました。


消費電力ですが、ボリウムを絞った状態で30mA程度、机の上で聞く程度の音量で30~40mA、大音量にすると100数十mA流れます。電池も結構もつと思います。また、PICは各種の設定を行うときだけ必要なので、設定が終わったら sleep させれば消費電力が減ります。まあ、PICの使う分は大したことなくほとんどがアンプです。

今後、スイッチを付けて選局できるようにしてケースに入れてみようと思っています。


2019年9月14日土曜日

Python, Arduino, PIC-asm

天気はイマイチですが涼しい朝になりました。猛暑もこれで収まってくれるとよいのですが。

最近、職場ではPythonを使い、自宅ではArduinoで仕事をしています。また、電子工作はPICのアセンブラで書いています。今朝も早起きしてArduinoでプログラムを書いていて、ひと段落したところです。使うデバイスはESP32ですが、慣れたArduino-IDEで開発しています。

PythonとArduinoはどちらもC系の記述方法で似ているため混乱してシンタックスエラー出しまくりです。似てない、全く違う、と仰る方も多いかと思いますが、アセンブラと比べると両者はそっくりです。

一番多いミスが文の終端のセミコロン忘れです。Pythonはセミコロン不要なので、Pythonを職場で1日書いていて、帰宅後にArduino書くとほぼ忘れます。次がif文の論理演算、Pythonは and やor、not と書きますが、ついつい&&, || と書いてしまいます。else if 文もよく間違える。後、変数の宣言忘れも多いです。まぁ、インタプリタやコンパイラがエラーを指摘してくれるのですが、何でエラー?と一瞬分からなくなります。

ちなみにアセンブラは全く違うので、頭が直ぐに切り替わるのか混乱することはありません。

2019年9月9日月曜日

台風通過

IoT気象計に記録された今朝の台風通過時の気圧の様子です。キレイなカーブが描けています。
午前3時頃に通過したようです。


小型気象計の記録も同様です。

電車が止まっていますが、これから仕事に出かけます。

2019年9月8日日曜日

PIC12F1501にはEEPROMが無かった

昨日、部品が届くまで保留としたPIC12F1501を使った工作ですが、昨夜何気なくデータシートを眺めていたら、なんとEEPROMが載っていませんでした。

次の工作は電源を切っても記憶しておきたいデータがあります。安いPICだったからかと思って調べたら、EEPROMの代わりに通常はプログラムを書き込むFLASHメモリをプログラムから読み書きできるようです。それも通常のFLASHよりも繰り返し書き込み耐性の強い10万回の書き換えを保障しているHEF(High Endurance Flash)というのが、FLASHの最後に128バイト付いてました。


EEPROMより読み書きが早いようですが、書き込む手順が面倒です。書き込む前にまずEraseして全てのビットを1にします。それがバイト単位にはできなくて、32ワード単位(ブロック)のようです(MPLABでシミュレーションしたらそうなりました)。一旦Eraseしたら、書き込みはワード単位でできるようです。なお、読み出しもワード単位(バイト単位でも可)でできます。

ただ、データを更新するには一旦ブロックでEraseしないといけないので、保存しておいたデータはブロック単位で読み出して、RAMに記憶していかないとダメです。PIC12F1501はRAMが64バイトしかなく、1ブロック32ワードを全て記憶しようとするとそれだけでRAMを使い切ってしまいます。また、Eraseした直後に電源が切れたらデータも消えてしまいます。

今回は2ワードしか使用しない予定なので問題ないですが、使い方を考えてPICを選択しないとダメですね。安さに釣られてはいけません。

本日午前中かけて、FLASHの仕組みを理解し、データシートに載っていたサンプルコードを動かせるところまできてひと安心。これで部品が届くまで作業を保留にできます。

2019年9月7日土曜日

今更ですがPICKIT3を使いはじめました

今日は夏が戻ってきたような蒸し暑さになりました。雲が真夏のそれでした。明日は台風接近でどうなることやら。

秋月で1個80円という安さにつられて購入した8ピンのPIC12F1501で遊んでみようとしたら、思いの外苦戦してしまいました。サクッと遊ぼうと思ったのがデータシート見ながら1日がかり。トホホ。備忘録として記録しておきます。

新タイプなので、昔の8ピンPICとレジスタ名やCONFIGが違います。まあこれは調べればよいので大したことなかったですが。

Lチカのプログラムを書いてビルドしてもPICKIT2で書き込めません。PICKIT4が販売されている時代ですが、今だにPICKIT2を使ってます。これでデバイスが自動検出できないと言われます。当初、対応していないことに気づかず、色々と調べて時間をロス。結局ググって対応してないことがわかりました。

そこでようやく4〜5年前に買って1度使っただけのPICKIT3を探し出してきました。これがまた一筋縄では動かなかった。MPLABから書き込むのではなく、PICKIT3単独で書き込めるアプリをインストールしたのですが、PICKIT2と同様にデバイスが検出できません。最新バージョンにしても同じです。散々悩んだ末にMPLABから書き込むようにしたら、デバイスに繋ぐようにエラーメッセージが出ます。

繋いであるのに何故? 接触不良か?などと悩んだ末にメッセージをググったら、電源をオンするセッティングが必要なことがわかった。書き込み時に5Vだけど大丈夫?と言うようなダイアログが出たのでてっきり自動的に電源オンになっていると思っていた。なんだかな。と言う訳で、Lチカまで半日かかってしまった。



後半は小型液晶ディスプレイに文字を表示するのにひと苦労です。このPICは安いだけあってI2Cモジュールが付いていません。ソフトI2Cで何とかしようとして、以前作ったものからの移植に少々手間取りました。苦労の結果、ちゃんとI2Cでつながっているはずなのに何も表示されません。散々悩んだ結果、LCD内の電源ブースターがオンになっていなかったのが原因でした。3.3Vのときはオンにしないとダメ。解決したとたん、昔もこれで嵌ったことを思い出した。トホホです。

PICKIT3は書き込みが早くてよいですね。それにMPLABから使うと、ビルドが成功すると自動で書き込んでくれて便利。今更かよ、と言われそうですね。ちなみに、MPLABもいまだに8.92です。MPLAB Xが出たての頃に使ったことはあったのですが、パソコンが非力だったこともあって起動や動作が重くて、8を使い続けて今日まで来ています。

LCDへの表示ができたところで一旦保留。続きに必要な部品をアマゾンで注文してあるのですが、例によって中国発送なのであと2週間くらいはかかるかと思います。

2019年9月1日日曜日

ESP32色々と模索中

IoT気象計ですが、その後も何度かハングアップしたので、調べてみました。

先ず見つかったのは、ESP32をアクセスポイントとして動かすためのWiFi.mode(WIFI_AP)というコードが入っていたことです。どこかからスケッチをコピーした際に、理解しないまま使ったようです。

もうひとつ、ネット情報で無線LANの接続オンオフを繰り返すとヒープメモリが減っていくという記事を見つけました。そこで、残りのヒープをLCDに表示するようにしてみました。


これで1週間程動き続けています。当初、減っていきましたが、その後は多少増減を繰り返し、落ち着いて来ました。無線LANのオンオフでヒープが減る現象は改善されているようです。

さらにこれまで、MachinistとThingSpeakの2箇所にデータをアップしていましたが、ThingSpeakはデータアップの制約があって、気温、湿度、気圧を別々に15秒以上の間隔をあける必要がありました。このため1度のデータアップロードに3回の無線LANオンオフを行なっていました。先のヒープ問題も気になっていたので、Macinistだけにするように見直しています。

他にもESP32のクロックを80MHzに落として、発熱の状況を確認しましたが、あまり変化はないようです。

これで1週間は動き続けているので、大丈夫でしょうか? 最初のアクセスポイントの件が一番効いていると思います。もうしばらく様子をみてみます。低消費電力のESP8266も購入してみたので追い追い試してみます。


秋月のESP32をDIP端子に変換するモジュールを買ってみました。結構ピン数が多くて、ブレッドボードが狭いです。もう一回り?長いブレッドボードを使った方がよいですね。写真は書き込みのテストをしているところ。