virt_flyのブログ -28ページ目

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

↑ATtiny85は1円玉より小さいけれど低消費電力で動作電圧が2.7〜5.5Vと、扱いやすく低価格ですぐれたマイコンチップ

ATtiny85へUSBaspでブートローダー書き込み

 

Arduino Nano互換機にはブートローダーが書き込まれていないことが多いと知り、手持ちの互換機はどちらだろうかと悩んだものでした。

 

ブートローダーというと、OSとハードとの間を取り持つBIOSを読み込みOSを起動させるパソコンでのイメージが強く、プログラムから直接ハードを操作するマイコンのような場合とは自ずと違いのあることになかなか思い至らず、ArduinoではパソコンのUSBポートから送られてくるスケッチの情報を、シリアルインターフェースで取り込み、ブートローダーがフラッシュメモリにスケッチを転送してから実行するという意味がすぐには理解ができなかったのです。頭の悪いことです。

 

スケッチ(プログラム)が書き込めて実行できたということは、すなわち互換機にあらかじめブートローダーがインストール済だったとみなされます。

 

となれば、ブートローダーが書き込まれていなければどうなるかが知りたいところです。ブートローダーがなくてもスケッチが実行できるとも聞きますから。

 

そこで、ブートローダーの書き込みに挑戦することにしたのが、今回のテーマです。

 

 

 ATtiny85のArduino化

 

●低消費電力量で動作電圧が2.7〜5.5Vと広いのがうれしいATtiny85

 

使うのは、ATtiny85という8ビットのマイコンチップです。

Arduinoでも使われているAtmel社のAVRシリーズのマイコンチップ。ピンが8本しかない小さなものですが、スケッチを書き込んでArduinoとして動かせると知り、購入したものです。

 

スペックは、購入したATtiny85−20PUではFLASH 8KB、SRAM512B、EEPROM512B 、動作速度20MHzで、消費電力は300μAと少なく、動作電圧が2.7〜5.5Vと、扱いやすく低価格で優れています。

 

 

●Arduino IDEにATtinyボードパッケージのインストール

 

ATtiny85にスケッチを実行させるには、やはりArduino IDEを使ってスケッチを書き込むことになりますが、その前にArduino IDEにATtinyボードパッケージのインストールをしておく必要があります。

 

 

Arduino IDEを起動したら、画面上部のメニューにある[File]をクリック、開いたドロップダウンメニューの中から[Prefereces]を選択すると「Preferences」画面が表示されます。

 

 

その画面をスクロールアップすると下部に「Additional boards manager URLs:」と書かれたボックスが現れるので、これをクリック

 

 

あらためて「Additional boards manager URLs」の画面が開くので、今度はその中に「http://drazzy.com/package_drazzy.com_index.json」と入力します。[OK]をクリックし画面を閉じ、その下の画面の[OK]もクリックして閉じます。

※先の画面では言語の指定ができ、日本語を選択して[OK]するとArduino IDEは日本語表示となります。以降は日本語表記にもとづいた記述に改めます。

 

 

次に、今度は上部のメニューにある[ツール]をクリック、開いたドロップダウンメニューから[ボード]を選び、[ボードマネージャー]が表示させ、これをクリックします。

 

 

Arduino IDEのウインドウが左右分割されて、左側に「ボードマネージャー」の枠が現れます。[検索フィルタ]に「ATtiny」と入力して検索します。

 

 

表示された検索結果の中から、「ATTinyCore by Spence …」を探し[インストール]を実行します。これでボードパッケージのインストールは終了です。

 

なお、[ツール]から[ボード]をたどれば、インストールができたか確認ができます。先程にはなかった「ATtinyCore」という項目が付け加わっているはずです。

 

 

●USBaspを使ったブートローダーの書き込み

 

ATtinyシリーズのマイコンチップに、コンパイルしてスケッチを書き込めるようになりましたので、次はマイコンチップへのArduinoブートローダーの書き込みです。販売されているATtiny85は、まず殆どが生のチップでブートローダーは書き込まれていないとみてよいようです

 

Arduino IDEによりATtiny85にブートローダーを書き込むには、ライターやプログラマーと呼ばれる書き込み装置が必要となります。Arduinoを書き込み機として使うか専用の書き込み機を使うかの2つの方法があります。

 

残念ながら、今回はArduino Nanoの互換機を書き込み機としてブートローダーをインストールするのには成功しませんでしたので、ここでは専用の書き込み機であるUSBaspを使う例のメモとなります。

 

なお、USBaspのドライバーの関係で、Windowsのケースとなります。

 

【USBaspの接続】

 

↑AVRプログラマーUSBaspとブレッドボード上はATtiny85

 

ブートローダー書き込み機のUSBaspとパソコン、ATtiny85マイコンチップとの接続は以下のとおりです。

 

USBaspのUSBコネクタをパソコンに挿入、もう片方のコネクタにはフラットケーブルをつなぎます。フラットケーブルのもう一方の端には10ピン↔6ピン変換コネクタを装着し、これとATtiny85をジャンパー線でつなぎます。ピン同士の接続は下の表に示します。

 

USBasp ATtiny85 同  左
ピン番号
RESET RESET
GND GND
MOSI MOSI
MISO MISO
SCK SCK
VCC VCC

 

 

 

 

 

 

 

 

 

 

ATtiny85のピン番号は、チップの切欠きのある方の横、〇印のついたピンが1番ピンで、反時計回りに2,3,4、…、と8番ピンまで。

 

なお、USBasp上にはジャンパー接続端子が3箇所あります。購入したUSBaspには、JP1とJP2、JP3と表記されていて、JP1とJP2にはすでにピンがハンダ付けされていました。JP2の3本のピンは電圧の設定ピンとなっていて5Vと3.3Vのどちらかに設定するようになっています。

 

今回の例では、5V側を短絡させています。ジャンパーピンがなかったのでジャンパー線(写真では茶色)で代用しています。

 

【USBaspのドライバー】

 

Windows10以降では、このUSBaspを接続しただけでは使えないそうです。デバイスマネージャーを開いてみるとUSBaspとありますがcautionマークがついていて、ドライバーのインストールの必要を示しています。

 

Zadigを使い汎用USBドライバーをインストールすれば、パソコンに正しく認識されるようになるそうなので、これに倣うことにします。

 

 

Zadigは、https://zadig.akeo.ie/からダウンロードし、インストールすることなく直ちに起動できます。

 

 

Zadigを開いたら、対象デバイスが「USBasp」であることを確認し、ドライバーは[winUSB]または[libusbK]を選択して[Install Driver]をクリックしてインストールします。

 

「winUSB」、「libusbK」のどちらでも、Windowsに正しく認識されました(デバイスマネージャーでも確認)。

 

 

【ブートローダーの書き込みの実際】

 

USBapsの準備が整いましたので、いよいよブートローダーの書き込みです。もちろん最初の1回だけ。

 

 

Arduino IDEのウインドウ画面上部のメニューにある[ツールを]クリック、開いたドロップダウンメニューのなかの[ボード]を選択すると、ボードパッケージのリストに[ATTinyCore]が追加されていることが確認できます。

 

 

[ATTinyCore]をクリックすると、ATtinyシリーズのマイコンチップ名のリストが表示されますので、その中から[ATtiny45/85(Optiboot)]を選択します。

 

 

次に、[ツール]を開きます。

 

 

略しますが、[ポート:]を指定し、[書き込み装置:]に「USBasp(ATTinyCore)」を選びます。クロック他はデフォルトのままにしました。クロックは、外部発振器を付けていないので「8MHz(internal)」。

 

ボードの設定がOKなら、あとは[ブートローダーを書き込む]をクリックするだけ。

 

 

書き込みに成功すれば、「ブートローダーの書き込みが完了しました」と表示が出ます。

 

ATtiny85のArduino化が完成したのなら、実際にスケッチの書き込み、実行ができるのかを確かめなければなりません。

今回はもう結構長々と書いてきましたので、この件は次回とします。

 

 

《参考サイトについて》

 

Arduinoについては情報が豊富ででありがたい一方、的確な情報を見つけ出すのは少々大変です。場合によっては必要となる情報が含まれていなかったり、あまりに詳しすぎてついていけなくても困ります。言っている本人が、メモなどと言ってかなり不十分なものを書いている反省が必要ですが。

 

あちこちのサイトを訪問して、多々有益な情報をいただきましたが、多すぎてどこのサイトで得た情報だったかを特定するのは少々困難になっています。

 

そうした中でも、ATtiny85へのArduinoブートローダーの書き込み、USBaspについて、もっぱら参考にさせていただいたのが、「ぶらり@web走り書き!」の東京バードさんの次の2つの記事でした。

 

 

 

 

↑文字の横スクロールがいいね! レンズの効果で文字が大きく見えるHPDL-1414ディスプレイ

 

したいことは色々あるのに…

 

■指定金額以上ですべて一括、配送が早まる Aliexpress

 

無駄遣いはやめると言いながら、円安が進みそうになると焦ってポチる悲しい性。

 

Aliexpressに注文していたものが届きました。5月24日夜に注文し6月2日に到着したので、配送期間はほぼ1週間。

 

今回は、「10日配送」という一定金額以上の注文をすると配送が早まる扱いに該当するものが2つ、非該当で7月末到着予定の1つの計3つの注文をしたところ、「一括配送」というアナウンスはなかったものの、同日に2回の配達で3つすべてが届きました。

 

梱包が2つ別々に届いたので「一括配送」ではないということなのかもしれませんが、事実上の「一括配送」です。これで2回立て続けに「一括配送」を経験したたわけで、指定された一定金額以上の購入によりすべての商品の配送時期が早まると確信に近く感じています。合理的なサービスアップで顧客の支持を取り付けようとする姿勢に、中国企業の成熟を垣間見る気がします。どこぞの国の企業のように腐敗、堕落しないよう願います。

 

届いたのはATtiny85、他。

 

まだArduino Nanoをさわり始めたばかりで何もわかっていないし、先に購入したRaspberry Pi Picoの互換機も試せていないものが残っているというのに、もう次が届いたわけです。

 

したいこと、しなければならないことなど色々あるなかで、処理が追いついていません。もとい、集中力も衰え、処理能力はガタ落ち。老化の影響が否めません。

 

老化には抗うにしても、したいことを取捨選択することなしに解消はのぞめません。

 

遠大な目標はさておき、浅薄な関心事から見直しを始めるべきなのでしょう。

 

■時計のDIYに需要などあろうはずがない

 

可愛いHPDL-1414はどうする

 

前回のブログで、Arduino IDEでライブラリーをインストールする例として紹介した可愛らしいHPDL-1414ディスプレイの使い方を考えてみます。

 

高価なニキシー管に替えて購入したHPDL-1414ですが、このディスプレイを時計の時刻表示に使うなんて、周りに時計がゴロゴロあり時間を知る手立てはいくらでもある今日、いかにも馬鹿げています。

 

とりわけ、RTC(リアルタイムクロック)を購入してまで時計にする必要があるとは思えません。今どき、時計のDIYに需要なんてあろうはずがなく、RTCの勉強は必要が生じたときやればよい。

 

しかも、HPDL−1414はアルファベットや記号を表示できるのですから、なおさらそれを活かす方向で考えるのがよさそうです。良い案が浮かぶまでは、ミニ電光掲示板にしてお茶を濁すことにしておきます。

 

 

画像は、Arduino Nanoを使いHPDL-1414に”HELLO WORLD!”をスクロール表示させたものです。前回のテーマであったライブラリーは、今回は使っていません。”Time signal at ○○:○○”と時には時報を流すのはありかも。

 

スケッチは、Harryrose / hpdl-1414-testより借用しました。はじめ、Arduinoのピン番号が何かわからず困りましたが、よく説明文書を見ると括弧してデジタルと書いてあることに気づき氷解、動かすことができました。

 

 

RTCなしで時刻表示

 

ちなみに、RTCなしでどこまで時計ができるか試してみました。

 

↑ChatGPTにプログラムを書かせたアナログ時計(一部手直し)

 

Raspberry Pi Picoを使い、OLEDディスプレイにRTCなしでアナログ時計を表示させるプログラム(Micropython)を、ChatGPTに書かせました。針の描画位置が長針、短針、秒針とも45度遅れる点を修正、円が描けないので文字盤を四角にするなどの手直しは加えました。

 

Raspberry PI Picoをインターネットに接続中のパソコンにつなげたままであれば時刻を取得できますが、問題は無線もなくFRTCも持たないRaspberry Pi Pico単独でいかに時を刻ませるかです。

 

おおすすめできる方法ではありませんが、インターネットから時刻を取得したRaspberry Pi Picoの電源を落とさずにパソコンから取り外せば、その後も時を刻むはず。具体的には乾電池の「+」「ー」極とPicoのVsysピン、GNDピンを接続して給電したた状態で、USB接続したパソコンからPicoを取り外します。電流の逆流による焼損の恐れがあり、すすめられたものでないわけです。なお、乾電池は消耗しますので、パソコンからとりはずしたPicoには、直ぐにUSB充電器を接続し給電したほうがのぞましいでしょう。もちろん、直ちに乾電池は取り外します。

 

パソコンから切り離されたRaspberry PI Picoの刻むときは、ずれが顕著です。また、短針の動きはアナログ的じゃなくて11時、12時、1時という具合にとびとびで、慣れないと毎正時近くになるほど例えば正午なのか11時なのか迷います。時刻の見誤り、勘違いのもとであり、プログラムは改善の余地ありです。

 

〈追記〉画像は、プログラム修正後の時計の画像です。時刻を見誤ることのないよう、目盛りを4つから12にふやし、短針も突然一気に進むのではなく、次の目盛りまで少しづつ動かすようにしました。

 

↑長針が30分まで進めば、短針も次の目盛りの真中まで進むのが当たり前。ChatGPTの書いた時計プログラムを修正しました。

 

GPS受信機も微妙

 

GPS受信機を電子工作に使うのもかなり微妙です。なにせ、その位置情報は誤差が常に数mあり、極端に悪い場合は100m以上あるそうで、それならスマホの方がまだ精確だからです。

 

↑スクリーンショットの図によればGPS受信機の示す現在地は東西80m、南北85mの中を移動していることになる

 

このブログではふれてなかったのですが、半年前GPS受信機(GPS受信機キット 1PPS出力付き「みちびき」2機受信対応)を使いGPS衛星から受け取った現在地の緯度経度を調べた際には、確かに実際には場所は動いていないにも関わらず緯度経度が刻々と変化していました(スクリーンショット参照)。他方、スマホが地図上に落とす歩行経路を見ても、ときどき他人の庭先を歩いているようになっていることがあります。

 

しかし、スマホが割と精確なのは、GPS衛星からの信号の受信だけでなく、基地局やWi-Fiアクセスポイントからの電波を利用して補足がされているからだそうです。

 

ただし、GPS衛星からの信号を受けてわかるのは位置だけではありません。地表位置を求めるのに電波の到達時間を利用しており、GPS衛星には原子時計が搭載されていて、精確な時刻がわかるのだそうです。

 

センサーを使った電子工作で、測定データと現在時刻を同時に記録したいときなどには役立ちそうです。電源をソーラーセルに依存するようなケースではありそうではないですか。

 

何のことはない、今度はソーラーセルに色目使ってるてか?!

↑画面右はレトロフューチャーで可愛らしい17セグメント(16セグ+ドット)GaAsPディスプレイ

 

ライブラリーの追加とヘッダーファイルの宣言編

 

 

  ライブラリーはどう扱う

 

Arduino Nanoの互換機の動くことが確認できたので、いろいろと遊んでみたいと思います。

 

ただし、C言語を勉強しておらず、スケッチ(プログラム)については書き方を知らないために、できることは限られます。せいぜいスケッチ(プログラム)の借用が関の山としても、せめてライブラリーの扱い方くらいは知っておかないと困ることでしょう。

 

実例として、HPDL-1414という親指大の可愛い17セグメント(16セグ+ドット)GaAsPディスプレイの点灯を取り上げたいと思います。

 

↑HPDL-1414は、4桁・4文字、64個のキャラクタが赤色表示可能なLEDディスプレイ

 

レトロフューチャーなHPDL-1414なら、高価なニキシー管に替えて、それほど高価でなく4桁・文字(複数個つなげればそれ以上)の英数字表示が実現できます。1桁表示の単管時計で我慢するのは少々寂しく思い、Aliexpressで購入、先頃中国から届いていたものです。高価でないといっても、送料込み649円(1か月足らずで1,063円に値上がり)。生産終了になって久しいデッドストックのようですから、いつまで手に入ることでしょうか?

 

ライブラリーを追加する

 

プログラミングにはライブラリーの利用が便利です。Arduinoには多くのライブラリーがそろっているそうですから、これを使わない手はありません。

 

ライブラリーを使うには、あらかじめインストールしておく必要があります。

 

↑開いたライブラリー管理の画面で検索を実行

 

Arduino IDEのウインドウ上部のメニューにある[Tools]をクリックし、開いたドロップダウンメニューの中の[Manage Libraries...]を選ぶと、ウインドウが分割されて新たに「LIBRARY MANAGER」というライブラリーのリストを伴った枠が現れます。

 

その上部の「Filter your search」と中に書かれたボックスに、目的のライブラリーのキーワードを入力すると、検索が実行されていくつかライブラリーの候補が絞られて表示されます。今回はMarek LedworowskiさんのライブラリーHPDL1414をインストールすることにします。

 

目的のライブラリーの箇所にある[INSTALL]をクリックすれば、さらに黒い「Output」の枠が現れてインストールが始まります。

 

 

黒い枠内に「Installed 〇○○」(〇○○はライブラリー、例ではHPDL1414@3.2.0)と表示されたら、インストールは終了です。

 

インストールされたライブラリーファイルは拡張子が「.h」となっており、ヘッダーファイルというそうです。Windowsの場合は、ドキュメントフォルダーの中に生成したArduino名のフォルダ中のlibrariesフォルダー内に各種ライブラリーのフォルダーができ(今回の例ではHPDL1414)、そこに置かれています。

 

スケッチ(プログラム)の入力、ヘッダーファイルの宣言

 

ライブラリーがインストールできましたが、ライブラリー内の関数をスケッチ(プログラム)で使いたい場合は、ヘッダーファイルの宣言というのを行います(標準ライブラリーでは不要)。

 

↑ヘッダファイル宣言の例

 

既存のスケッチ(プログラム)例を見れば、頭に「# Include <〇○○.h>」(〇○○.hはライブラリーファイル名、今回の例ではHPDL1414.hとなります)と書き込まれていることがわかります。

 

↑Arduino IDEのヘッダファイル宣言の自動入力

 

なお、Arduino IDEでは、上部のメニューの[Sketch]をクリックしてプルダウンメニューを開き、次いで[Include Library]をクリックするとライブラリーのリストが表示され、目的のライブラリー名を選ぶと、自動的にスケッチにライブラリーが入力される機能があります。

 

スケッチ(プログラム)の用意ができれば、[Upload]で実行です。

 

  可愛らしいHPDL-1414を点灯させよう

 

ライブラリーもインストール済だし、ネットで見つけてきたスケッチ(プログラム)をコピペもしましたが、HPDL-1414とArduino Nano(互換機)の接続が済んでいなければ実行ができません。

 

ピン同士の接続

 

ピン同士の接続は、Marek Ledworowskiさんのライブラリーの説明によるものです。ただし、このライブラリーを使った他サイトの説明に、ピン番号と機能が一致しないものがあってまごつくことがありましたので、正しいと思われるピン番号と機能、接続の関係を図と表で記録しておきます。

 

↑HPDL-1414のピン番号

 

HDPK-1414のピン番号は、赤で示す切欠き位置から左回りに1から12です。

 

HPDL-1414
ピン番号
同左
機能
Arduino Nanoピン
1 D5 D7
2 D4 D6
3 WR A0
4 A1 A2
5 A0 A1
6 VDD 5V
7 GND GND
8 D0 D2
9 D1 D3
10 D2 D4
11 D3 D5
12 D6 D8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

↑ピン同士の接続

 

上記のとおりピン同士を接続します。

 

 

実例

 

●ファンクションテスト スケッチはLED-Anzeige HPDL1414 (turanis.de)より

 

● カウントダウン スケッチはLED-Anzeige HPDL1414 (turanis.de)より