トドお父さん通信 -24ページ目

トドお父さん通信

北部九州在住 高BMI中高年のオタク趣味の活動記録

このところ、コロナの後遺症で家庭内療養中のトドお父さんです。

熱が下がってのコロナ療養中はヒマなので、電子工作のネタを探していました。

 

おもちゃ病院つながりで、東京に在住でおもちゃ病院のドクターをされている

ラジオペンチさんのブログを参考に電子工作の内容を、楽しみによく見ています。

今回、I2C Scannerというものを題材に記事を書かれていたので、自分もやってみようと

思い立ちました。

Nickelgrass さんの I2Cスキャナーのプログラム解析

これを見ると、ディスプレイには小型 0.96”のOLEDディスプレイSSD1306(128x64画素)
を使ってI2CインタフェースのSCL(クロック) SDA(データ)に、0x00~0xFFまでの128アド
レスを出力して、ACKが帰ってくれば そのアドレスにデバイスあり、なければデバイスなしと
判定し、接続I2Cデバイスのアドレスをこの小型のディスプレイに表示するようになっています。
 
アドレスの表示は、あらかじめ作ったイメージデータを128バイトのframe[]配列に置いておき、
起動時にこのイメージを展開してSSD1306内のメモリに書き込みイメージを表示します。
 
その上で、検出したアドレス位置の□ 表示に■ を書込み、検出アドレスを表示する仕組みです。
縦64データは8bit x 8(Page0-7)=64bitですが、縦に9行データがありますので、書き込む 
■bit データはPage間をまたがるため、2回に分けて書き込む必要があります。
 
ブログの記事は、このNickelgrassさんの元ネタにいくつか問題があるのを直しましょうという
ものです。「それ、やってみよう!」さんがブログで書かれたものが最初の問題提起です。
さきほどのラジオペンチさんのブログ記事のコメントで、siliconvalley4066 さんが具体的に
ソルーションを提案されています。
皆さんの着想と技術力、さすがです。さっそくトレースして楽しませていただきましょう!
 
【現状のMicro I2C Scannerの問題点】
 ① ディスプレイの 行(64)・列(128)の行が1ページ分がずれて、最上列(8データ分)を
   表示しない。代わりに最下列(8データ分)がゴミデータを表示する
  これは、7年ほど前のロットのSSD1306では発生しない。最近のロットのみ発生する模様
 ② 初期画面のイメージのフォントの字形に違和感があるので修正する(3、8、B、E、(S))
 ③ 検出したアドレスの■を書き込む際に、近隣のアドレスの■の影響を受けて表示が壊れる
 ④ I2Cのアドレスは8bit 最下位1bitが”0”でwrite, ”1”でreadになる。アドレスとしては上位
      7bitで00h~7Fhで表示するのが正しいが、このscannerは偶数8bitで表示している。
 (例えば、SSD1306はwrite時 78h、read時79hになる。7bitでは3Chと表示するのが正しい)
 
これらの原因と対策は、上のラジオペンチさんのブログのコメント欄で皆さんのコメントを見て
頂けるとわかるとおもいます。
皆さんの検討された内容をトレースするために、順番にやった内容を記述していきますね。
 
  1. プロジェクトのATTINY85への移植
  Nickelgrass さんの元プロジェクトは、ATTINY44(14PIN)でATMEL Studioで記述されています。
  ダウンロードに会員登録が必要なので、「それ、やってみよう!」さんのリンクを拝借します。
    i2cscanner
  ATMEL Studioは問題ないですが、TINY44の手持ちがないので8ピンのATTINY85に移植します。
  オリジナルの回路図はこれです。
  
これを、このように書き換えました。単三電池2個 3.0Vで動作させる予定です。
 
ATTINY85はPORTAがないので、SSD1306インタフェースのI2CはPORTBに置き換えます。
            TINY44         TINY85
SDA      PA0               PB4
SCL       PA1               PB3
 
外部スキャン用のssdaは PB0、ssclはPB1はそのままです。
 
さて、ATMEL STUDIOで、Nickelgrassさんのプロジェクトを開いてみます。
I2C.hに SDA、SCLのポート設定があります。ここをPortAからPortBに編集します。
 
オリジナルをコメントアウトして、追記した編集後は下記になります。
 
 
次にPort.hに PortA, PortBのポート論理演算設定がありますので、ここも編集します。
PORTAでの論理式の#Define文をコメントアウトして、PORTBのPB4,PB5の#Define文を
追加します。 これを忘れるとコンパイル時にエラー祭りになりますw
 
これだけで、ATTINY44からATTINY85への置き換えができると思います。
 
ATMEL STUDIOでのデバイスの変更は Project → I2C scanner propertyでプロジェクトの
プロパティを表示後、右のメニューからDEVICEを選びます。
現状は ATTINY44になっているので、これをATTINY85に変更して終了です。
 
 
デバイスを変更したら、コンパイルしてみましょう。
main.cpp を表示した状態で、上のメニューからBuild → Rebuild 出力がReleaseになっていたら
事前にDebug に直しておきましょう。(出力設定がReleaseでも問題なしですが…)
 
 
エラーが出なかったら、正常に移植ができてコンパイルできましたということです。パチパチパチ。
さぁ、これからATTINY85デバイスへの書き込みです。
 
New ATTINYについては、UPDI IFで自作のHVP対応のライタを作りましたが、古いATTINYに関しては
AVR ISP MK2という書き込み機をAmazonで3千円ほどで買って持ってます。(最近使いませんが)
 
ISP接続は下記のように接続します。 UPDIに比べると線が多いですね。ISPの信号を阻害しないように各ピンの入出力回路に注意も必要です。
正しく接続出来たら、上のメニューからtools → Device Programming を選択します。
 
ここで、Applyを押すと左にメニューがでるので、memoryを選択します。
うまくデバイスとつながっていることを確認するには、Applyの横のReadを押します。
正常につながっていると、デバイスIDと印加電圧が表示されます。
 
 
接続が確認出来たら、memoryで書き込みの対象ファイルを選択します。
さきほど、出力設定にDebugを選択した場合はDebugの中にxx.elfファイルが生成され
ているはずなので、それを選択します。
 
あとは、program を押すとターゲットデバイスへのプログラム書き込みを開始します。
 
以上で、オリジナルのI2C Scanner プログラムが動作するはずです。
まずは、ブレッドボードで確認しました。OLED SSD1306を表示用と検出用に2個つないでます。
確認用の電源はAVRISPからの3.3Vで動作しています。実用時は電池3Vで動作させる予定です。
 
 
一番上の桁を表示しない、偶数8bitで78hと表示していますね。
さて、ここが原点で、上の課題をひとつづつ解決していきますよ。
 
今回は、1.で終わってしましました(大汗) 怒涛のPart2をこうご期待!!


関連記事

このところ、趣味の電気工作、週末の小郡市近辺のおもちゃ病院勤務、また太宰府地名研究会のイベントに参加しての古代史研究と、地元の中国語教室に通って中国語学習がルーチンになり、忙しく立ち回っていました。そのせいで、ブログの更新も滞っています。

 

さらに、6月からは、近くの電気製造会社にパートとして週3日勤務も開始しました。

ここの仕事は、いままでのIoT系の小型の電子回路設計・製造と違って、100~200Vの電気設備の

配電盤・制御盤を製造する仕事です。工場の中で電線を切って、端子を圧着して回路図を見ながら配電盤のダクトに配線を通していきます。週3日というのはちょうどいい塩梅ですが、時々マキタのプロ用電動工具を使っての配電盤ケース加工作業があり、その時は結構体力と気を使う仕事なので疲れます。

 

色々と手を出し過ぎたツケが来たのか、7月末にコロナに罹患してしまい、家庭内で2週間ほど養生しているところです。

 

熱は4日ほどで下がったのですが、喉の痛みが残り、37℃前後の微熱が続いています。

味覚障害もなかなか治らず、いまのところビールが美味しく感じられません (悲)

コロナは弱毒化したとはいえ、後遺症が続くので侮れないですね。

 

でももう少ししたら、電子工作とおもちゃ病院の宿題が残っていますので、復活したいと思います。

夏休み期間に入ったので、ゆっくり休めるので良かったです。

 

宿題が終わったら報告しますね。それでは!

さて、みなさんこんにちは。

ATTINY用Sounds Player基板を作って動作確認しました!(Part1) の続きです。

前回音声がでるところまでの確認でしたので、今回は残りの部分、ピエゾマイクを

叩いて起動するところと、演奏中はモータを回す仕様の部品実装と動作確認をします。

 

ピエゾマイクとは?

トドお父さんもみたことはないのですが、圧電マイクとして部品があるのでしょうか?

この記事を参考にしました。 圧電サウンダってブザーとかに使う部品があるのですが、

それを使って、マイクにするのですね。

 

 

仕事では、圧電加速度センサというもののアンプを作ったことがあります。

ピエゾ素子は等価回路的にはコンデンサと同じで、叩くと起電力が+/-に発生する

原理でした。入力回路としてはコンデンサでカップリングしてFETアンプで増幅する

ようになっていました。

また正確な測定のためにはチャージアンプというものを作りました。
(参考資料:クレハKFピエゾセンサー)

 

FETの電源には、24V 1mA程度の定電流源を用意します。
ソースフォロワ回路になっているので、増幅率は1です。

こちらはチャージアンプといわれる回路ですね。センサから出力される何pQ(クーロン)と

いう電荷を電圧に変換するように構成します。これは、現在の案件とは関係ないですね。
また、回路図が間違っていますね。センサで発生した電荷qがCfに流れて、V=q/Cfで電圧が
発生するのが原理ですから、センサの出力はOPアンプの-側に接続して、+端子はGNDにつなぐのが

正しいですね。増幅率はセンサの静電容量Cpとフィードバック容量Cfの比Cp/Cfになります。

閑話休題:ここでおもちゃ修理用のピエゾセンサーとピエゾアンプの話に戻します(滝汗)。

ここは、つつじが丘おもちゃ病院の大泉さんのピエゾアンプ回路をそのまま使わせてもらいます。
これですね。自己バイアス回路になっています。コレクタ電圧が下がるとベース電流Ibも下がる

フィードバックがかかるようになっています。ただし、増幅率はトランジスタのhfeによって変わります。

  

 

固定バイアス回路と自己バイアス回路の違いは下記のリンクに詳しいです。

このサイトの計算だと、ゲインAvは120くらいになるようです。

 

470kΩの先にトランジスタのコレクタがつながって、コレクタ電圧は電源電圧Vccの半分1.5Vとすると

コレクタ電流Ic=(3V-1.5V)/470k = 3.2uA、 Vbeを0.7Vとすると、ベース電流 Ib=(1.5-0.7)/2M=

0.4uA 計算上の消費電流は合計3.6uAになりますね。電池駆動でスイッチを付けない場合、この消費電流は問題になるかもしれません。電池3本、電源電圧4.5Vでの運用(LDOの消費電流)も考えると電源スイッチは付けたほうがいいかもですね。

 

さて、こちらがトドお父さん版のピエゾアンプ回路図です。

ピエゾ素子は、落としたりすると高電圧が発生して後段の回路を壊す恐れがあるので、保護用の

スイッチングダイオードを+側と-側に入れました。

 

また、スリープ時の消費電流がCPUも含め 6.5uAもあったので、R9を470k→1MΩに変更しました。

これで、スリープ時の消費電流は3.5uAに低減しました。オシロで動作波形も確認して、OKでした。

 

   

 

まず、手元にある圧電サウンダ―(圧電スピーカ)の試験をします。

オシロのプローブをつないで、机に軽く叩きつけて出力電圧を確認しました。

 

  

 

一番左側のサイズが大きい素子が、一番出力電圧が大きかったです。 真ん中は全く出力でず。

 (圧電ブザーなのかもしれません)右端は、サイズが小さいので出力は少し低いです。

左の圧電サウンダでピエゾマイク(センサ)の試験をすることにします。

 

こんな感じで消費電流を測定しながら、ピエゾマイクの動作確認をしました。

信号が入ってない時のバイアス電圧はだいたい1V~1.5Vになります。

  

信号が入ると、電源電圧の3Vまで振れますので、スイッチとしては正論理で動作させることになります。

センサを叩くと、音声再生が始まります。どうやらうまく動作しているようです。

アンプのボリュームにもよりますが、演奏中は30~60mAくらい流れているようです。

演奏中は赤LEDが点灯し、演奏が終わると消灯してSleepモードに入ります。

このLEDと同期して、外部モータを駆動するためのトランジスタQ1 SS8050がONします。

モータが回転すると、消費電流はもっと大きくなりますね。

 

またSleepモードの電流は、このピエゾアンプを実装する前は0.5uAでしたが、実装後は6.5uAでした。
アンプの消費電流がわりと大きいですね。

 

  

 

試しに、R9 470kΩを1MΩにしてみました。 電流値は3.5uAに減りました。動作も問題なさそうです。

これで、ファイナルアンサーにします。回路図も書き直しました。

 

注意点として、電池3本のときは電源電圧が4.5Vになりますので、3.3VのLDO AMS1117-3.3をいれて3.3Vに落とす設計です。このとき、なにもしなくてもAMS1117はIq=5mAくらい消費するので、電源スイッチを入れる必要があります。

 

これで、今回のおもちゃ病院の案件、獅子舞タイプのクリスマスおもちゃのCOB基板入れ替えのための

置き換え基板の作成プロジェクトは一応完了です。

これをデモすると、他のベテランドクターさんから『アンパンマンタイプの要望があり、アンパンマンの

曲を演奏するようにできないか?』 と言われたので、これもやってみますね。

 

また、今回のATTINY402(4kB)ではオルゴールだと1曲しか実装できないので、ATTINY1614(16kB)を実装した基板も作りたいですね。

実装面積を重視したもっと小型の基板も需要があるかもしれません。

 

色々と課題も出てきますね。

これらは、次の宿題にしますね。 それでは、またね~~

 

関連記事 

【Part2】Sound Player基板V2の音声データの作成方法と特性検討
【Part1】Sound Player基板V2の音声データの作成方法と特性検討

ATTINY202/402のFUSEビットをAVRDUDESSを使って書く方法
おもちゃ修理用のSOUND PLAYER基板の小型版 V2を設計しました!
[Part2ピエゾアンプ]ATTINY用Sounds Player基板を作って動作確認しました!
[Part1] ATTINY用Sounds Player基板を作って動作確認しました!
[Part2 テスト終了です] ATTINY402で音声再生のテストをしました
[Part1] ATTINY402で音声再生のテストをしました
ATTINY402に電子オルゴールのHVPプログラム書き込みテストをしました
[Part2 完成しました!]HVP対応のUPDI プログラマーを作成中です
[Part1] HVP対応のUPDI プログラマーを作成中です
[Part4 IRリモコン完成!] ATTINY202への書き込みとプログラムをやっています!
[Part3] ATTINY202への書き込みとプログラムをやっています!
[Part2] ATTINY202への書き込みとプログラムをやっています!
[Part1] ATTINY202への書き込みとプログラムをやっています!
ATTINY85 CPUを使って小型の赤外リモコンを作りました!