ラベル AVR の投稿を表示しています。 すべての投稿を表示
ラベル AVR の投稿を表示しています。 すべての投稿を表示

2026年3月17日火曜日

エコノミークラス症候群対策用タイマーの製作

  最近のテレビ番組は、「健康」をテーマにしたものが多いようです。たまたま「エコノミークラス症候群」について解説をしていました。
 長時間同じ姿勢でいることで下肢の静脈に血栓ができ、それが肺の血管に詰まる危険な疾患であるということで、以前にも何回も耳にしたことがあります。

 私自身、机に向かってパソコンとのやり取りや、はんだごてを握っての電子工作は、時間の経過も忘れて何時間も没頭するのはほぼ日常です。

 いまさらのことながら、何とかしようという気持ちになってきたのを幸い、対策を思案しましたが、早い話、1時間ごとに立ち上がって体操をすればいいということのようでした。

 そこで思いつくままに手元の部品を集め、加工して30分タイマーを製作しました。(冒頭写真) 
タイマーということなら、身の回りにいくらでもありそうですが、自作品ならば、より愛着がわき使いやすいと思ったからです。

 使う場所が机上ですので、電源はパソコンのUSB 端子から得れば回路はより簡単になります。
 より小型にするために、FRISK のケースを使い、手持ちの古いAVRマイコンチップの ATTiny13A を内蔵 9.6MHz の8分周で動かしました、回路を上に挙げておきました。
 緑色のリセットボタンを押し、スタートさせると5秒に1回赤色の LED が極短時間フラッシュし続け、動作していることを示しながら、30分経過したら圧電ブザーを6回鳴らして時間が来たのを知らせる仕組みです、、、、、そこで私は、やおら立ち上がり、踵落としやスクワットをこなして再度座りなおすと同時にタイマーのリセットボタンを押す、、、、ということになります。

 プログラムは arduino IDE で作りました、右にスケッチを示します。時間は5sec X 360 で30分としたのですが、最終的には実測してループを 340 回としてほぼ30分となりました。


















 蛇足ながら内部写真を示します、中央の黒く丸い部品が圧電ブザー、その下の黒い四角のものが AVR マイコンチップの ATTiny13A 、上の黒い四角はリセットスイッチです。

 こうしてブログをアップしている最中にも3回ほどタイマーが注意喚起してくれました。思ったより時間は短く感じ、頻度は多くなりますが、そのつどの体操は健康のため!!と考え使い続けていこうと思っています。

2026年1月13日火曜日

キャラクターLCDチェッカー を作りました

 新年最初の電子工作です。
 電子工作を趣味としていると左写真のような、キャラクターLCDが沢山手元にたまってきます。

 これらキャラクターLCDは電子回路で得た結果をわかりやすく文字で表示するもので(左写真左下)、こんな便利なものはありません。
 
 ありがたいことに、この部品は早い時期に規格が定まり、基本的に古いものから現行品に至るまで同じ様な結線で作動させることができるようです。

 右図はその一例をネットから転載したものですが、この例では制御線は16本あります。

 ただ私の場合 Arduino で使うことがほとんどですので、1~6,11~14の計10本で制御できます。1~3は電源、5のRWはGNDに落としますので、実質、制御線としてはRS E D4 D5 D6 D7 の6本となります。

 でも冒頭の写真の中から1個の LCD を選んだ時、果たして動くかどうかは実際に結線してみないとわかりません、ということで簡単に動作をチェックできるものを考えました、要点は以下のとうりです。
  ・簡単に文字の表示ご確認できること
  ・3.3V、5V の両方がチェックできること
  ・これに伴ってコントラスト用の電圧を測定・読み出しができること
  ・最近多くなってきた、I2C で使うLCD もアドレスの取得、表示の確認ができること
以下に回路図を挙げておきます。


 基本は、ATMega 8 なるAVRマイコンを使い、プログラムは Arduino IDE によりました。
この ATMega 8 はArduino UNO に使われている上位の ATMega 328 とピン互換で、値段も秋月で極めて廉価ということでたいへん気に入っています。

 LCD とのコネクタには、TTL用の丸ピンソケットを使いました、場所を取らず、抜き差しの確実さ・耐久性は抜群で重宝しています。

 ATMega 8 のピン番号14~19は I2C アドレスを赤色LEDでビット表示するためのもので、0x00 ~ 0x3F が表示できます。

 電源部は、9V_DC を Input して、LM317 を使用し、抵抗を切り替えることで5Vと3.3Vを得ています。また3.3V の時 LCD のコントラスト調整用にマイナス電源が必要となりますが、たまにしか使わないのでリレーと単4の乾電池1個でごまかして?います。

 写真は今回作成したチェッカーの基板両面の様子です。かなり細かい作業で老眼にムチ打ちました。

 ケースは以前何かに使ったものの流用です。
 右写真はケースに収めたところ、下写真は完成品の様子です。










 
 上側の赤い LED は前述の I2C アドレス表示用で、2ビット+4ビットで 0x00 ~ 0x3F を表現できます。
 その下の四角い穴の中に見えているのが LCD とのコネクタで、TTL用の丸ピンソケットを切り取って使っています。トグル・スイッチは左が電源の ON ⇔ OFF 、右が 5V ⇔ 3.3V 切り替え用、右側のツマミはコントラスト調整用です。

 、、、、ということで早速使ってみますが、LCD の接続で最も注意せねばならないのが、ピン1とピン2です。冒頭の図ではピン1:VSS(GND)  、ピン2:VDD(+5V) のように表示してありますが、モノによっては(おそらく古いもの)ピン1とピン2が逆になっているものがあり、間違って接続すれば必ず壊れますので要注意です!!

 左写真は LCD をチェック中のもので、左が 5V 駆動、右が3.3V 駆動です。

 このときコントラスト調整用電圧(上記回路図中の Vc は本体右側にある10kΩの可変抵抗で調節する)は 5V 駆動のとき +0.77V 、3.3V 駆動のとき ー0.84Vでした。
 ありがたいことにキャラクターLCDはコントラスト調整用電圧を適正に与えれば、 5V 駆動、3.3V 駆動のどちらでも使えるようです。

 右写真は、I2C 接続の LCD をチェックしているところです。
 赤い LED は I2C アドレス 0x27 を表示しています。表示画面にもテストパターンが無事表示されています、大成功!!

 ちなみにこの I2C キャラクターLCD は過日このブログで取り上げた「16x1 液晶キャラクターディスプレイモジュールを使う」で作り上げたものです。

 新年早々、ものつくりの意欲が湧いてきました、そういえば今年は午年で私の当たり年です、元気にこの一年を過ごせますように、、、、

2025年10月7日火曜日

16x1 液晶キャラクターディスプレイモジュールを使う

 左写真は、液晶キャラクターディスプレイモジュールと言い、左上画面(表面)のLCD(液晶)スクリーンに数字や文字を表示するものです。
 下は裏面で、中央に大きな(古い)ICが1個(この1個が後々問題に、、、)デーンと鎮座しています。  この HD44780 というICはこれら液晶キャラクターディスプレイモジュール駆動する、世界標準とされ、おかげで我々にも様々な使い方ができるようになっています。

 ことのきっかけは、私が別途進めているプロジェクトで動作状況をモニターするディスプレイが必要だったのです。
 読み取る内容は16文字x1行で十分足りると思ったので、かつて超廉価で購っておいたこのディスプレイを使ってみようと思い立ったのです。

 基本的にこれらディスプレイの制御には Arduino を使いますが、標準ではその制御に、電源のほか6本もの線が必要となります。たかがこれしきの事に6本は問題外で、過日このブログで述べた「 通常の LCD を I2C 化する 」I2C(アイ・スクエアド・シー Inter-Integrated Circuit 2線式シリアル・バス規格)を使うことにしました。

 右上写真は、Arduino と液晶キャラクターディスプレイモジュールのインターフェイスに使う PCF8574 というICで、その右側の赤とブルーの小さな基板は使いやすくするために基板化されたものです。  

 今回は液晶キャラクターディスプレイモジュールの裏面に PCF8574 を背負わせる、ピギーバック・スタイルで行くことにしました。
 左がその回路図、下写真が実装状況です。

 液晶キャラクターディスプレイモジュールの I2C 接続は経験があるといっても8年も前の話で、Arduino の Library も更新されており予備実験が必要でした。
  Library は LiquidCrystal_I2C.h を使いますが、表現は以下のたった2行で事足ります。

#include <LiquidCrystal_I2C.h>             //  Library の宣言
LiquidCrystal_I2C lcd(0x20 , 16 , 1 ); //  0x20 は上回路図 A2,A1,A0 で表現されるI2Cアドレス、16,1 は16文字1行を表します。

 万事順調のように思われたのですが、ここで奇妙なことが起こりました。テストのため、
lcd.print("ABCDEFGHIJKLMNOP"); で16文字を表示させるつもりが、 左写真のように、8文字しか表示されません???
 そこで色々調べた結果、16文字x1行のディスプレイとはいっても2種類あることがわかりました。
 一つはそのまま16文字が表現できるもの、もう一つは(8文字)+(8文字)となっているもので、このディスプレイはそれにあたるようです。
 このことは、前述した HD44780 というICが1個であることによるらしく、
 LiquidCrystal_I2C lcd(0x20 , 8 , 2); // 8文字x2行   のように取り扱う必要があるよう  です。ちなみに
 lcd.setCursor(0, 1);
 lcd.print("IJKLMNOP"); とすればたしかに右写真のように表示されました。
、、、となれば、多少面倒でも、、、 
 lcd.setCursor(0, 0);
 lcd.print("ABCDEFGH");
 lcd.setCursor(0, 1);
 lcd.print("IJKLMNOP"); とやってみましたら、、、

 見事に16文字が並びました。

 8x2の表示が2つ並んでいるということでとりあえずは使えそうですが、連続した16文字を表現するためにはさらにソフトに関して知恵を絞らなければならなさそうです。

2023年5月4日木曜日

ATtiny202 に自作Serial UPDI ライターで書き込み成功!

  AVRマイコンも時とともに変化してきていますが、私の電子工作では、従来の ATmega328 や ATtiny85 で事足りていました。 Atmel 社が Microchip 社に買われて少しずつ変化を見せる中で、新しい ATtiny 0 シリーズの ATtiny202 が秋月で売られているのに今更ながら気づきました。
 調べてみると、すでに2~3年前からあり、5個で¥200(@¥40)と超廉価でしたが、最近は円安・半導体不足とかで@¥70となっていましたが、それでも廉価です。
 話が逸れますが、秋月のAVRメニューの中でのお買い得は、ATmega 8 で@¥180でした。メモリこそ8kしかありませんが、28pinの DIPパッケージで、I/Opinも多く使いやすくて私のお気に入りです。

 ATtiny202 は、メモリが2kで、従来の ATtiny13A の後継のようですが、右写真のような8pin SOIC でそれこそ5mm角の小さなものです。私たちがブレッドボードなどで使うには、右の DIP 化ピッチ変換基板に乗せてやる作業が必要です。(この写真のものは、今回使った CH340N という USB-Serial 変換 ICで、同じ大きさです)

 また、この ATtiny202 へのプログラム書き込みは従来の ISP ライターでは書き込めません。
 ただプログラム開発は、Arduino IDE が使えるようで助かります、さすが Arduino !!!

 いろいろ調べてみると、 ATtiny202 へのプログラム書き込みは Serial UPDI という比較的簡単なものでよさそうです、なんとたった3本の線( Vcc 、GND 、UPID )でOK!!これなら私でも、、、とその気になって一気呵成に製作してしまいました。

 その方法は、USB-Serial 変換でパソコンから得られた、TXD RXD にダイオード(ショットキー推奨)と470Ωの抵抗1本で完成!?だそうで、 仕組みは私にはよく理解できませんが、回路図を入手しました。(wagiminator/AVR-Programmer で、github に公開されています)

 そこから引用した回路図を私用に多少変更したものが左図です。電源系を+5Vに限ればもっと簡素になりますが、+5V +3.3V の切り替えを可能にしております。
 +5V → +3.3V のレギュレータIC は150mA容量のものです。

 ATtiny202 のプログラム作成には、 Arduino IDE に、これも github から得た 「 mega Tiny Core 」というボードツールを、Arduino IDE のボードマネージャーを介してあらかじめインストールしておく必要があります。結果、書き込みツールにも「 Serial UPDI 」が追加されています。

 右写真の下にあるのが今回自作した「 Serial UPDI 」ですが即席の手作りなので見苦しい限りです。
 この「 Serial UPDI 」をパソコンのUSB端子に接続(写真はUSBハブを使用)し、出力の線3本をそれぞれ ATtiny202 の Vcc 、GND 、UPID に接続します。(写真中のピン名称を参照)
 この Vcc 1番ピン、GND 8番ピンはこれまでとは異なり8pin PIC のそれと同じで、大いに戸惑いますが、まさに Occupied Atmel ということでしょうか。

 Arduino の定番テストプログラム「 Blink 」の LED_BUILTIN は7番ピンが該当します。「 Serial UPDI 」上の赤色LEDは、左が電源、右がプログラム中をそれぞれモニタ出来るようになっています。写真はこれを実行中、、、

 ということであたらしい時代の AVR も手の届くところにあります、いろいろな機能を発見し、新しい製作物に思いをはせるのも、またたのしからずや、、、、といったこの頃です。

2023年4月26日水曜日

AVR書き込みボードを作ってみました

  ここでAVRというのは、自動電圧調整器(Automatic Voltage Regulator)ではなく、我々アマチュアの電子工作によく使われる、Atmel社のマイクロコントローラ(いわゆるマイコン)のことで、左写真の上にある3個のICが代表的なものです。

 マイコンというからにはプログラムを作成し、このプログラムをマイコンに書き込まなけばなりません。いちばん下に写っているのがプログラム書き込み器、いわゆるプログラマでこれはUSBaspと称されるものです。

これらのAVRにプログラムを書き込むには、AVRチップに電源を与え、プログラマから RESET、MISO(Master In Slave Out)、MOSI(Master Out Slave In)、SCK(System Clock) の信号を所定のピンに与えることでなされます。
 
 右図は、ISP(in-circuit serial programming)と称される、標準化されたコネクタのピン配置で、前述の信号が示されています。

 従来はブレッドボードにAVRを固定して、プログラマからのリード線をあらかじめ決められたAVRのピンに接続してプログラムを書き込んでいました。
 最近「AVR書き込みボード」なるものを部品通販で目にして、気になっていましたが、JH4VAJ さんのブログで製作記事を読み、手元の40ピン・ゼロプレッシャーIC ソケットを見ているうちにその気になり、一気に作り上げてしまいました。

 左図は覚えのための配線図モドキです。中央の40ピン・ゼロプレッシャーIC ソケットを上から見た図に適当に部品と、結線を示しておきました。結線は右下のIPSソケットに帰着・接続してあります。

 図中にあるように、3種類のAVR(8pin、20pin、28pin)がこのソケット1個でプログラムできますが、当然のこととして同時に2個は使えません。

 右写真は、上が上面、下が裏面の様子です。これら部品はそこいらに転がっているものを有効利用したもので、特に新しいものはありませんが、強いてあげれば秋月の片面ガラスコンポジット基板くらいなものでしょうか。
 上写真の上方にみえる赤色のLEDはArduino IDEの例題にある、BASIC の BLINK を走らせて動作チェックするための、いわゆる「Lチカ」用です。(28pin、8pin)はLEDが点灯しますが、20pin はLEDの接続pinを変更しないと光らないようです。


 左写真は、8pin AVRのATtiny13A で
「Lチカ」実行中です。

 パソコンのUSBハブにUSBaspプログラマを差し込み、もう一方を今回製作の「AVR書き込みボード」のISPに接続してあります。

 他の20pin AVR ATtiny2313、28pin AVR ATMega328 も同様にして作動が確認できました。

 書き込みのプログラムは avrdude を使っていますが、わたしはコマンドラインが苦手で右に示したようなGUI経由で使っております。

 このYCIT版avrdudeGUIはかなり古いですが、その使いやすさから未だに手放せません。

 あとは適当なケースにでも入れてやらねばなりませんが、ここからは例によって遅々と進むことでしょう。

 AVRも Atmel 社が PIC を開発した Microtip 社に吸収されてどうなるかと思いましたが、その独自性を評価されてAVR はいまだに生き残り、かつ発展を続けています。
新しい世代の AVR も徐々に増えてきたようなのでまたいろいろ楽しみたいと思っています。

2021年10月10日日曜日

CH340KでArduino Unoクローンをつくる

  先日、いくつかの部品を例によって、秋月から購入した時に CH340K というICも併せ入手しました。
 シリアル‐USB変換用ICといえばこれまでは FTDI 社の FT232シリーズが有名で、その多機能・高性能を売りにしてきたのですが、シリアル-USB変換用のみに使用するには比較的高価でした。

 そうこうするうちにFT232のクローン?や安価な変換IC が出現したりしましたが、ここのところ安価な中華製品には16ピンの CH340G が使われてきました。
 この CH340G は中国は南京にある会社の製造によるもので、WCH(WinChipHead)ブランドです。

 今回、上写真にある CH340K に注目したのは、非常に小型(10-pin ESSOP ピン間隔1mm)で12MHzの発振器も内蔵しており、シリアル‐USB変換回路が、部品点数も少なく、かなり小さくできそうな予感がしたからです。

 右写真に各ピンの割り当てを示します。
 単に、シリアル‐USB変換に使うだけなら、右端の2ピンは無視してかまいません。

 







 ただ以下の点に注意してください、
 1. V3ピンは必ず0.1uFでグランドに落とすこと、
 2. Arduino Unoクローンへ応用するときには#DTRピンと ATmega328 のリセット・ピンを0.1uFで結ぶこと。

 それではArduino Unoクローンを作っていきましょう。
 最初にAVRプログラマを用いて ATmega328 にヒューズ・ビットを書き込みます。 Arduino Unoでは搭載している ATmega328 に Low:FF High:D6 Ex:FD が書き込まれています。私は左写真のように自作のプログラマ HIDaspx をつかい、ISPで書き込んでいます、このプログラマは随分前のものですが、信頼性も高く重宝しています。(書き込まれる ATmega328 の現状ヒューズ・ビットが不明な場合は外付けクリスタルが必要です。)

 つぎにこのままの接続で、Arduino IDEを立ち上げ、メニューバー→ツール→ボードで Arduino Uno を指定します。

 次いで、メニューバー→ファイル→スケッチ例→01.Basics→Blinkで新しい画面を出し、そのメニューバーの左端のチェック・ボタンを押してコンパイルします。


 コンパイルされた .hex ファイルは、PC→ローカルディスク→Arduino→temp と辿った先のtempファイルの中にあります。

 左に示したのがそれで、「Blink.ino.with.bootloader.hex」がお目当ての .hex ファイルです。

 このファイルをプログラマで先ほどヒューズ・ビットを書き込んだ ATmega328 に書き込みます。


 右図はCH340KをSOP→DIPへの8ピン変換基板に載せたものと ATmega328 との結線を簡単に表現したものです。
 前述したように赤丸で示した0.1uFを忘れないように、、、、

 USBプラグの電源線赤(+5V)黒(GND)や ATmega328 周りの配線などは省略してあります。


 左写真は先ほどの「Blink」プログラムを実行しているところです。

 この状態からこのまま他のプログラム、おっとスケッチというんでしたっけ、もアップ・ロードして実行可能です。

 こうしてみると思ったように小型化できていると思います。
 こう見えてもArduino Unoクローンなのですから、、、、

2021年6月21日月曜日

HP53181Aカウンター用7seg LEDモニタの製作

 

 過日のブログに「周波数カウンター HP-53181A ジャンク蘇生す!」をアップしましたが、その折に古いジャンクゆえに、表示文字が暗くて読みにくい、、、、と記しました。

 左写真でわかるように数値を読み取るのに大変苦労します、というわけで、これも過日のブログ(「TM1640は使える」)にヒントを得て、より明るく、より大きな文字を表示する7seg LEDモニタなるものを思いつき、製作してみました。
 左写真の上にのせてあるのがそれです。
 HP-53181A 周波数カウンターは幸いなことに周波数の値を、裏面パネルにあるRS232Cコネクタから常時アウトプットさせることが出来ますので、この信号をCPU(ATmega8)で拾い、TM1460を使って、16桁の数字を7seg LEDに表示させればいいのです。

 右図がCPU(ATmega8)周りの回路図です。ATmega8は小型化のためにDIPではなく、TQFPタイプのものを使用しました、プログラム開発にはもちろんarduino IDEを使いました。

 ・カウンタ本体との接続は9ピンコネクタで行いました。(図中右上)
 ・データは3番ピンのTxDから採り、トランジスタで反転・レベル合わせをしています。
 ・4番ピンと6番ピンは結線
 ・この回路には電源(+5V)が必要なのでカウンター内で9番ピンへ+5Vを出力できるように改造しました。これは禁じ手です!!!真似しないでください。

 次いで、表示部の回路を示します。

 










 この部分はすべて手配線を行いましたので大変でしたが配線材には0.26mmのUEW線を使いましたので多少助かっています。

 右写真にそれらを示します。
 上半分は表示部分、右下は密になっている配線部分の様子、左下は9ピンRS232CコネクタとCPU(ATmega8)です。

 表示部とCPU(ATmega8)部は40~50cmの距離を4本のワイヤーで接続しています。

 左写真はカウンタに接続したところです、CPU(ATmega8)部がいささかだらしないですが、そのうち気の利いたデザインを考えましょう。
 比較に置いた10円玉と比べて、随分コンパクトに収まりました。

 そしてコントロールソフトです。






 おおよそはコメントでわかると思いますが、
  ・TM1640.h はライブラリ
  ・TM1640 module(12,13) はI2Cのピン指定
  ・module.setupDisplay(true,3) はディスプレイの輝度指定
 です。

 このように簡単なスケッチで16桁の7seg LEDモニタがうまく動いたのには驚きでした。

2017年6月20日火曜日

中華USB_RS232C 変換モジュールは使える

 以前私のブログでワンコイン USB-RS232C ケーブルをご紹介しましたが、今回同じICであるCH340Gを使用した「中華USB RS232C 変換モジュール」がebayで格安(@¥80もちろん送料込み)に出品されているのを見つけ大人買いしてしまいました。

 CH340Gは当初PCにインストールするにもドライバーが無く、苦労したものでしたが、最近ではこのICを使用した製品も市場に広く出回って、なんら問題もないようです。

 左写真の左下のものは定番のFTDI社のIC、FT232RLを使ったUSB RS232C 変換モジュールで、参考のため掲げました。こちらは機能も多く、もちろん価格もそれなりですが、PCとAVR(ARDUINOなど)を接続するだけなら中華USB RS232C 変換モジュールで十分だと思います。

 さっそく全品チェックして正常な動作を確認しました。
 
 しかしながら使い勝手の点でいまひとつだということが判明しました。
 右写真は変換モジュールの表裏の写真で、接続のためのピンが6本出ています。右から
①GND ②RXD ③TXD ④3V3 ⑤VCC ⑥5V となっていますが、よく使うARDUINO Pro Mini では
①GND ②CTS ③VCC ④TXD ⑤RXD ⑥DTR となっているのです。
 さっそく回路図を調べてみました。
 左図上がオリジナルで、CH340Gからは接続はされていないもののCTS、DTRそしてRTSの出力ピンがあります。

 左図下は改造後の回路図です。5Vから3.3Vを得るための電圧降下用のダイオードを取り除き、200mAのポリ・スイッチを入れておきました。(500mAがベター)

 左写真は改造後の変換モジュールです。
 改造はピンをARDUINO Pro Miniにあわせるために基板のプリント配線をカット、配線の修正などをかなりおこなうためトレース実験をされるならば慎重、かつ自己責任でお願いします。




 右写真に見られるようにPCからARDUINO Pro Miniにスケッチを書き込み、始動させることに成功しました。

 上は定番のFTDI社変換モジュール、下は改造後の変換モジュールで同様に使用できました。

 また下写真は自前のARDUINOのつくりかたです。


 あらかじめブート・ローダーを書き込んでおいたATMEGA328Pに改造後の変換モジュールを接続します。(左写真)
 変換モジュールのTXDとATMEGA328Pの②ピンRXD、変換モジュールのRXDとATMEGA328Pの③ピンTXDを接続し(クロス)、次いで変換モジュールのDTRとATMEGA328Pの①ピンRESETを0.1uFのコンデンサを介して接続すればハイできあがりです。(VCC、GNDの接続は当然、、、)

 またVCCを3.3Vで使用したいときや、DTRの代わりにRSTを使用したいときにはその都度チョッとした工夫が必要です。

 右写真はAVRを使った作品のPCとの接続にこの変換ボードを組み込んでしまった様子です。かつてはこの部分にFT232RLを数百円支払って使ったものでしたが今では小さなボードつきで¥80、、、、

 なるほど中華USB_RS232C 変換モジュールは使えます。

 ebayで調べたところ最近の変換ボードはデザインが一新されているうえに少し値上がりしています。さらにピンも6本から5本になっており改造が少し面倒になっています。私が購入したものは旧モデルの在庫一掃セールだったのでしょうか、でも使用ICのCH340Gは同じです。

2017年4月25日火曜日

通常の LCD を I2C 化する

 プログラミングの容易さと情報の多さから ARDUINO を使うことが私にとって日常的になってきました。もう少し高度なことは Raspberry Pi を徐々に使いこなしていこうと思っています。

 AVRとしては ATMECA328P を基本的に使いますが、時として入出力端子が不足する場合があります。こんなとき入力ピン増設には 74HC165 、出力ピン増設には 74HC595 をそれぞれ使ってきました。

 またこのところI2C((Inter-Integrated Circuit))によるデータ通信をおこなう周辺デバイスが増えてきています。これはフィリップス社が提唱した2本の通信線をつかった周辺デバイスとのシリアル通信の方式です。

 そこで ARDUINO(ATMECA328P) でI2Cを使うトレーニングをかねて通常のLCD(液晶キャラクター・)ディスプレイをI2Cで動作させてみることにしました。普通6+2(電源)本必要な接続線を2+2(電源)本として節約によって生じた4本の入出力端子をさらに有効に使えるようにしようと言うものです。
 このことはLCDと ARDUINO(ATMECA328P) との脱着を容易にし、デバックにつかい易くすることができます。

 最も簡単にI2Cを試すにはご本家フィリップス社が開発した専用IC・PCF8574(I2C バス 対応、リモート 8 ビット I/O エクスパンダ)をつかうのがよいようです、で過日例によってebayからこれを調達しておきました。

 上写真の右側が件のICで、ジャンクボックスから出てきたような代物でしたが、後ほどすべて完動品であることを確認しました、写真中に見られる白丸は私がつけた1番ピンのマーキングです。
 中央部下にきれいなマーキング・プリントが見られるICが一個だけ混ざっていました、今となっては懐かしいなー。
 
 一方左側は PCF8574 IO Expansion Board
 といい、いろいろ応用できるように小さな基板の上に PCF8574T と部品を載せたものです。



 と言うことで早速右図のような回路を組み、お定まりの「 Hello world 」を走らせて見ました、下に実験中の写真を掲げます。


 写真左下に ATMECA328P 右下に PCF8574 があり、LCDにお目当ての文字がディスプレイされています。

 と言えば簡単なのですが、恥ずかしながらここに至るまでいくつかの苦労がありましたので備忘のため顛末を残しておきます。

 まずは接続する PCF8574 のアドレスをきめる A0、A1、A2 端子ですが、このところサービスの行き届いたICをつかっているのでプルアップの処理を忘れていました。

 テスト中に不安定になった原因がこれでした。

 下右表に示すように PCF8574 や PCF8574T の場合デフォルトで 0X27 だとおもっていたのですが、正しくは4.7kΩ程度で各端子を5V(Vcc)に予め接続しておく必要があったのです。

 ほかに PCF8574 が接続してなければA0、A1、A2 端子をすべてGNDにおとせば抵抗3本が節約できます、もちろんこの場合のアドレスは 0X20 となります。

 このときのトラブルシュートで有効だったのが、I2CScanner というスケッチです。 ARDUINO にI2Cデバイスを接続してスケッチを走らせればシリアル・モニタにそのアドレスを表示してくれます。

 次の必要なのは ARDUINO ライブラリです。
  ARDUINO Forum でいろいろ探した結果、NewliquidCrystal_1.3.4 と言うものを見つけました。


 このファイルにある LIquidCrystal_I2C.h  が探していたライブラリで他にも従来の LIquidCrystal.h なども同梱されており有効です。

 何よりありがたいのはスケッチの冒頭に宣言さえしておけば、I2C・LCDも従来のLCDも具体的操作は同じ記述が許されていることでしょう。 

 左にスケッチのサンプルを示します。
 最初の
 #include <Wire.h>
  #include <LiquidCrystal_I2C.h>

 はライブラリ宣言で次いで PCF8574 とLCDの接続を記述しますが、これは
 LiquidCrystal_I2C lcd(oX27,2,1,0,4,5,6,7);と記述します。カッコ内はADDS,EN,R/W,RS,DB4、DB5,DB6,DB7 の順で上記回路図をそのまま表現しています。

 これらは結果から見るときわめて簡単ですが、実際にいろいろやってみるとたいへんでした。でもこれでまた ARDUINO の世界が広がります。