体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

カテゴリ:arduino, AVR( 82 )

(2018/1/20追記)
IDEのメニューから[ツール][シリアルモニタ]を開き、通信速度を変えると、マイコン書き込みでエラーになる。

表示内容:
最大1024バイトのフラッシュメモリのうち、スケッチが776バイト(75%)を使っています。
最大64バイトのRAMのうち、グローバル変数が37バイト(57%)を使っていて、ローカル変数で27バイト使うことができます。
avrdude: Expected signature for ATtiny13 is 1E 90 07
Double check chip, or use -F to override this check.
選択と異なるマイクロコントローラが見つかりました。ツール>ボードメニューから正しいボードを選んでください。

どうやら[ツール][ブートローダを書き込む]をやれば正常になるようだ。
通信速度を9600→19200もその逆も同じだ。

書き込みに使っていた通信速度がデフォルトで9600らしく、シリアルモニタで変更した通信速度で、マイコンに書き込むようavrdudeへ指定するには一度"ブートローダを書き込む"を行わないといけないらしい。
Arduino 1.8.5のいつからそうなったのかわからないが、前はこんなことはなかった。シリアルモニタで変更したときもavrdudeの設定に反映させておけばいいのにな~(bitDuinoだけ?)

もしかして今回の記事にあるように、EEPROMが未保護→保護に変更になり、そしてマイコンの通信速度はEEPROMに存在(?)し、ブートローダ書き込み時のみEEPROMに通信速度が書き込まれる?そしてシリアルモニタで変更した通信速度はマイコン書き込み時に使われるが、EEPROMには書き込まれなくなった(回数削減のため)?

(ここまで)

以前の記事で、Fuseビットを書き換えるのは工場出荷状態だと8分周なので9.6MHz/8=1.2MHzと記述した。

しかし音がどうも低い。
なので書き込みで使っているavrdudeでFuseビットを読み出してみる。

場所はダウンロードディレクトリにzip展開したので、インストーラとは違う場所に。
C:\Users\<ユーザ名>\Downloads\arduino-1.8.5-windows\arduino-1.8.5\hardware\tools\avr\bin

インストーラだと以下のようになるのかな(自信なし)。
C:\Windows\Program Files\arduino\arduino-1.8.5-windows\arduino-1.8.5\hardware\tools\avr\bin

コマンドプロンプトを開き、ディレクトリ移動する。
cd C:\Users\<ユーザ名>\Downloads\arduino-1.8.5-windows\arduino-1.8.5\hardware\tools\avr\bin

confファイルが一つ上のetcにあり、Fuseビットの下位バイト読み出しするので次のように入力。
ATtiny13 は hfuse(fuseビットの上位1バイト H)は0xFF固定。Eは拡張ビットでATtiny13にはない。
COMポート番号は自分の環境に合わせて。

avrdude -C ..\etc\avrdude.conf -c avrisp -P COM4 -b 19200 -p attiny13 -U lfuse:r:con:h

詳しい仕様は以下のサイト様へ。

自分のサイトでも一度解説している。

[出力結果]
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.05s
avrdude: Device signature = 0x1e9007 (probably t13)
avrdude: reading lfuse memory:
Reading | ################################################## | 100% 0.02s
avrdude: writing output file "con"
0x2a
avrdude: safemode: Fuses OK (E:FF, H:FF, L:2A)

avrdude done. Thank you.

[ここまで]

0x2aだと自分のサイトで解説している表によると、
a0034780_21293841.png
0x2a(0010 1010)なので、下位バイトの表のビット5、3、1が1で、それ以外が0。
以前の記事では工場出荷時の値は0x6aで、EEPROM未保護だったのが0x2aで保護になっている。それ以外は規定値なので表の右端の通り、シリアルプログラミング許可、ウォッチドッグ使用しない、システムクロック8分周、低速立ち上がり、9.6M内部発振となっている。1.8.5でブートローダ書込みやった気がする。

おや?9.6MHz/8=1.2MHz(Internal)で合ってるな。

なんで音が低いのか。
スケッチをよく見ると、以下のコメントが。
// note durations: 4 = quarter note, 8 = eighth note, etc.:
4分音符、8分音符という意味かな?
配列の末尾の8。でもこれを変えても音の高さは変わらない。

//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
8分音符の時、1000/8=125か。150は少し多めか。
これは8分音符に近い音の長さになるようで、高さには関係ない。

そもそも楽譜のC4は正しい音程なのか?
C4はドレミファの開始のドに当たる音。開始のドをC4と呼ぶのが世界標準で、C3と呼ぶのは日本のYAMAHA独自らしい(C4 piano で検索)。
C4という表記はコンピュータのものでYAMAHAとYAMAHA以外(ローランドとか)で、1オクターブ違いがあり、"Wiki - 中央ハ"によると、ピアノ88鍵盤の中央に位置するドの音が、"中央ハ"と言われる音で、これは女性や変声前の男性が出せる最低のドらしい。おっさんが思う開始のドはたぶん"中央ハ"より1オクターブ低いド。カラオケでよく低く調整するやつ。子供時代ドレミや和音を覚えた時のドは""

そういえばこの楽譜はC4からG3の低い方へ音が変化していく。
C4がドレミファの開始のドだとすると、G3は普通のドレミファソラシドの鍵盤より、左の外の音になる。
あれ?普通の鍵盤の範囲で引くなら、C4は高いドじゃないと全部入らないよ。
C4が
これC4じゃなくてC5から始まるんじゃないかな。
そうするとすべて数字が1つ増えた楽譜になる。

つまり元の楽譜は海外のキーボードで弾けば、正しく高いドが鳴るはずなのか。
C4と指定すればYAMAHAより低く鳴ってしまう。そして世界標準ではそれは正しい。
そして「タンタタタンタン、タンタン」という楽譜は日本人が作ったもの。
元のサンプルで、4,4,4,...と書いてあるのはド、ドド、とひく

こんなところにずれがあるとは。tone関数自体は間違ってないのに、サンプルの楽譜をYAMAHAのキーボードで弾いたため、実際に発生する音階(世界標準)と合わなくなったのだろう。そしてpitches.hで定義してある音程はYAMAHA向けに変わってる?

正しい楽譜は次のようになる。
NOTE_C5, NOTE_G4,NOTE_G4, NOTE_A4, NOTE_G4,0, NOTE_B4, NOTE_C5,0};

日本と海外のWebピアノのサイト様を以下に示す。やはり海外はC3、日本はC4が開始のドと印字されている。
(音色は違うが音程は同じ)
日本:Web Piano
a0034780_23192939.png

a0034780_23195835.png
以前は修正後の音で鳴っていた。あれから何が変わったのだろう。

[PR]
by k1segawa | 2018-01-20 21:59 | arduino, AVR | Comments(0)
2018最新 Arduino 1.8.5 と ATtiny13A と Japanino Arduino ISP で 100均ブザーを鳴らす。

元作成者maris_HY様のbitDuino10/13定義ファイルをkosakalab様がArduino 1.8.5のボードマネージャ対応に再構築されていたので、クリーンインストール ~ toneMelody_13A (maris_HY様 - bitDuinoでメロディを奏でてみた | 構想100年)で演奏までの手順を示す。

[環境]
Arduino 1.8.5
ATtiny13A
Japanino(またはArduino)
Windows10 Pro 64bit (Fall Creators Update 1709)

[手順]
(1) Japanino ドライバ(Arduinoなら不要)
(新版)
SILICON LABのサイトからCP210xドライバ - VCP(デフォルト)をダウンロード。
Windows 7/8/8.1/10 (v6.7.5) 用ダウンロード
a0034780_22242138.png
CP210xVCPInstaller_x64.exeを実行。インストール後、下記の(続き)へ進む。

(旧版)
学研のJapanioのサイトからCP210xのドライバを含む zip をダウンロード。
【Windows】ボタンをクリックしてダウンロード後、解凍し、
arduino-0018-japanino-2/arduino-0018/drivers/CP210x VCP Driver/CP210x_VCP_Win_XP_S2K3_Vista_7.exeを実行する。必要なのはドライバのみ。

インストール中、"□ Launch ~ Installer" と出るが、チェックを外して進む。再起動不要。

(続き)
USBケーブルを差すと画面右端から通知メッセージが現れ、自動的にインストールされる。再起動不要。

(2) Arduino 1.8.5 のインストール
以下の Arduino.cc 公式から【Windows Installer】/【Windows_zip】のいずれかを選び、次画面末尾の【JUST DOWNLOAD】をクリックしすぐにダウンロード(もちろん寄付もOK)。
インストール後、起動し、メニューの[File][Preferences](環境設定)を開くと、"Editor Language:"(言語設定)があるので【System Default】か【日本語 (Japanese)】を選び、OK押下後にIDEを再起動する。
a0034780_18390331.png
再起動後日本語化されている。

(3) ボードマネージャー
kosakalab様の次のサイトでjsonのURLをコピーする。
Arduinoの[ファイル][環境設定][追加のボードマネージャのURL:]の、右端のコピーアイコン(重なった□)をクリックし、出てきた貼り付け画面でURLを貼り付ける。
a0034780_18444245.png
OK押下後、[ツール][ボード:"Arduino/Genuino Uno"]を選び、先頭行の"ボードマネージャ"を選択する(画面はインストール後)。
a0034780_18511813.png
a0034780_18512621.png

ボードマネージャ画面が表示されるので、末尾の【bitDuino13 by maris_HY / modified by Kosaka.Lab.】のエリアをクリックする(画面はインストール後)。
a0034780_18524484.png

すると、そこが灰色になって選択状態になり、右に【インストール】ボタンが表示されるので、押下する。【バージョンの選択】ボタンは最新でよい。

インストール後、[ツール][ボード:Arduino/Genuino Uno]を選び、末尾の"ATtiny13 (bitDuino13)"を選択する。
a0034780_18541323.png

するとメニューは[ツール][ボード: "ATtiny13 (bitDuino13)"]に切り替わる。
a0034780_18553676.png

(4) Japanino を AVR ライターにする
Japanino(Arduino)は標準のスケッチを書き込むだけでAVR ライターになる。

そのため前の画面は以下のような設定にする。
これは学研の同リンク先にあるFAQ(よくある質問) Q24.の情報から。
※Arduino UnoならボードでArduino/Genuino Unoを選ぶだけでよい。

ボード: "Arduino Pro or Pro Mini"
プロセッサ: "ATmega168 (3.3V, 8MHz)"
シリアルポート: "(JapaninoをUSB接続した後、各自の環境に従う)"
書込装置: "AVRISP mkII"
※書込装置はこの時は無関係なのでなんでもいいはず。一応デフォルトにする。
a0034780_19360968.png
a0034780_19400454.png

するとこのような画面になる。
a0034780_19405540.png

そしてメニューから[ファイル][スケッチ例][11.ArduinoISP][ArduinoISP]を選択。
a0034780_19482410.png
そしてこのスケッチをコンパイル・書き込みする(【検証】・【マイコンボードに書き込む】ボタンを押す)。

スケッチが書き込まれ、Japanino(Arduino)が汎用AVRライターに変身する。
※ただし高電圧書き込みや特殊なモードは書き込めない。そしてこれ以降このライターにする操作は、間違って書き換えない限り1回きりである(よく間違えるが)。

(5) Japanino ISP(汎用AVRライター)をATtiny13用に設定する
ライターになったので今度は対象のATtiny13に書き込む設定をする。

通常工場出荷直後のATtiny13Aは8分周(システムクロックが通常(9.6MHz)の1/8=1.2MHz)なので次のように設定する。
a0034780_20061784.png
(もしクロックが工場出荷状態と異なるなら、上記の状態で"ブートローダを書き込む"を行う。ATtiny13のFuseビットが選択したクロックに従って書き換えられる)

(6) toneMelody関数を使ったスケッチ
対象のスケッチはmaris_HY様のサイトにある。

このページの次のリンクとなる。
「toneSampleSketch.zip」をダウンロード

なのでサイト様のページに移動してダウンロードする。

解凍して、IDEのメニュー[ファイル][開く]で、toneSampleSketch/toneMelody_tiny13A/toneMelody_tiny13A.inoを読み込む。
a0034780_20195456.png
すると必要なヘッダをスケッチから読み取って一緒に読み込まれる。

コンパイルすると次のようなメッセージが表示される。

Archiving built core (caching) in: C:\Users\<ユーザ名>\AppData\Local\Temp\arduino_cache_437240\core\core_bitDuino13_avr_bitDuino13-9_clock_internal-12_b7d34594cdd99a1f25e129b42b9fe3ab.a
最大1024バイトのフラッシュメモリのうち、スケッチが776バイト(75%)を使っています。
最大64バイトのRAMのうち、グローバル変数が37バイト(57%)を使っていて、ローカル変数で27バイト使うことができます。

エラーではないので回路を組めばそのままATtiny13に書き込むことが出来る。

(7) 回路組み立て
ブザーは100均のキッチンタイマーから拝借する。
繋ぎ方は次の通り。
a0034780_22253094.png
部品がないので、Japaninoの代わりにArduino Uno、ATtiny13の代わりにATtiny85。ピンソケットでライター部分を取り外し可能に。ブザーはソースを参照してPB3に繋ぐ。抵抗は100Ω。

書き込み終わるとブザーから"タン、タタタンタン、タンタン"とリズムよく音が鳴る。USBケーブルの抜き差しで電源ON/OFFするたびに音が再生される。


[PR]
by k1segawa | 2018-01-16 15:33 | arduino, AVR | Comments(0)
arudino 界隈で 中国製の安いやつ(300円前後)がよくamazonで出ているが、ドライバがCH340なので、中国のチップドライバが必要。
なので、正式なドライバにもかかわらず、不安に思っている一般ピーポーがいるが、心配ならWindows10で標準で入っているwinchiphead.com(WCH)社のドライバが同じなのでそちらからダウンロードするといい。Microsoftデジタル署名も入っておりびんぼうでいいのの、CH340Gチップで利用中。

キーワード「CH340G」で検索して見つかるのはいくつかあるが、スイッチサイエンスさんのサイトが良いかも。(zipだし、ダウンロードの際に余計なプログラムをインストールされる事も今のところない。arduinoで有名なSparkFun社のサイトらしい)

Macも64bitもLinuxもあるので特に最新でなくても良いならこれでOK。
まあ最初に見つかるCH340の中国サイトは極めて有名な企業なので、心配する必要もないのだが。

詳しい事はこちらのサイト様で。ずーと下の方にCH340はある。

CH340のドライバのサイト=WCH社である事がわかる。ちゃんとMicrosoft社に認められているのだ(当時と今2017では違うのだ)。
ねむいさんの所の説明を読めばわかるが、ドライバうんぬんより、300円の安いハードには理由がある(内部配線が通電で切れる)ので、せいぜいムダ金にならないよう気を付けたい。


[PR]
by k1segawa | 2017-09-06 14:42 | arduino, AVR | Comments(0)
Arduino のソフト開発で、ハード(回路)に問題があるのか、制御ソフトに問題あるのか切り分けるのに、VSのような高度なデバッグ機能があると変数の値やピンへの入出力が正しく行われているか解かって嬉しいのだが、標準のArduino IDEでは残念ながらそこまでの機能は無い。

で、UnoArduSimというシミュレータソフトがある。

名前からUnoをシミュレートしており限定されるのだが、それはそれでソフトのアルゴリズムが確認できればあとはピン配置やレジスタ置換などで済み、そのマイコン専用の機能以外は一般的なマイコンの機能はデバッグ出来そうな感触がある。

起動すると以下のような感じ。
a0034780_17555100.jpg
左がデバッガのトレース画面で、右がシミュレータ画面。左下は変数のトレースを示す。

詳しい使い方はメニューの[Help][Quick Help]や、よそのサイト様に譲るが、概略としてまず左のトレース画面は "編集画面ではない" 事。シミュレータ画面ではダブルクリックや左右シングルクリックで機能を呼び出すようになっている。

ツールバーはいわゆるIDEのボタンが配置されており、まずはチュートリアルとして以下の方法を示す。

【サンプルスケッチ Blink の実行】
Arduino IDEのサンプルで最初にやるLチカのサンプルスケッチ Blinkを使って基本的な使い方を学ぼう。

まずArduino IDE のどのバージョンでもいいので起動し、[メニュー][スケッチ例][Basic][Blink]でスケッチを表示させる。
a0034780_18044780.jpg
これをUnoArduSimに読み込ませるのだが、すべて選択しコピーする。そしてUnoArduSimの[メニュー][Edit/View]から編集画面を開き、そこにペーストする。
a0034780_18070463.jpg
この画面では対応するカッコや予約語がハイライト表示されているが、これは画面左下の「BOLD HIGHLIGHTING」を押したため。
a0034780_18090971.jpg
その他のボタンで特徴的なのは「コンパイル」「適用」「保存」ボタン。この画面がソースの編集画面なのでここでスケッチの変更を行える。
「保存」してもいいし、「適用」してもいい。適用後はメインメニューで「Save As」保存を忘れない事。ここではコンパイル&適用ボタンを押しメイン画面に戻った様子を示す。
a0034780_18132725.jpg
BlinkはUnoの13ピンに繋がったLEDを点滅させるスケッチで、次のように右上の「LED」の空白の欄に「13」と直接入れてやれば、LEDを接続した事になる(青い吹き出し)。
a0034780_18165617.jpg
もうちょっと詳しく説明すると、LEDのRYGはRed,Yellow,Greenの略でLEDを3色から選べ、丸いラジオボタンは、ピンに電流が通ったら(1になる)光る正論理か、逆に消える負論理かを選択する。たぶんプルダウン(1で光る)かプルアップ(1で消える)で繋いだという事だろう。そしてメニューには基本的な実行とストップ、リセットボタンなどがある。

左のトレース画面にはUnoArduSimが勝手に追加したメイン関数がある。これはArduino IDEでは隠蔽されているが、多少違う(init関数が無い)がほぼ同じ物が実はコンパイルされている。
a0034780_18230113.jpg
左下には変数ledがその値とともに表示されており、ダブルクリックすると以下のように値を変更できる。キャンセルは×ボタン。
a0034780_18291705.jpg
また右画面のピン、例えば13番ピンの値を左クリックすると、デジタル値としてみたピンの値を示すオシロスコープ、右クリックするとアナログ値としてみたピンの値を示すオシロスコープの様子が表示される(前の画面の青い吹き出し)。
a0034780_18325511.jpg
a0034780_18330208.jpg
同じように「SERVO」という欄に「13」と入れてやるとサーボモータに13ピンを繋いだことになり、実行するとサーボモータが回転する。画像は2回LEDを光らせるのと同じ回数実行した様子。
a0034780_18361599.jpg
ピン番号を入れる時次のようなエラーメッセージを表示する事がある。
例えば次に説明する「PUSH」ボタンに13と入れた場合、入力なのにpinMode関数でOUTPUT指定されているため。
a0034780_18420490.jpg
すでに「SPISLV」で使用済みの12を「LED」で12と入れた場合は、ピン番号が重複しているため。
a0034780_18440596.jpg
また「PUSH」はプッシュボタン(タクトスイッチ等)で、latch(ラッチ)というのはボタンを押したままにするのか、手を離すとスイッチOFFにするのかを決める。latchを押すとすぐ下の黒いボタンは手を離しても押したままになる。そしてラジオボタンの上を選択すると、押すとONになり、下は押すとOFFになる。ついでに13番を指定したLEDもRからYに変えて、ラジオボタンは下方向(↓)の正論理にしておこう。
a0034780_18511441.jpg
さて、ここでは青い枠に示すようにEdit/View画面でソースを変更し、PUSHボタンの動きを確かめてみよう。まず以下のように、一度スケッチBlinkを[File][Save As]で保存し、UnoArduSimを終了、再起動しよう。simple.inoという最初のサンプルが表示されるのでそれから青い枠に示すソースを追加する。コンパイルして正しい事を確認するのを忘れないように。
a0034780_18565545.jpg
すると、前の画面の通り実行後、PUSHボタンを押すと13を指定したLEDが黄色く光り、Unoのピンも0から1に変化するのがわかる。基板上の13番ピンのLEDも光っている。


あとは以下のようにスライドスイッチとブザーを示す。クリックでON/OFF、抵抗値1KΩでつながっているらしい。ブザーはtone関数のサンプルスケッチで動くようだ。
a0034780_19100086.jpg
ヘルプにあるような他の部品は[メニュー][Configure][I/O Devices]で、画面で0になっているところを1にすると出現する。
a0034780_19121151.jpg
その他の部品も以下の通り。
a0034780_19132288.jpg
「SERIAL」や「SFTSER」を右クリックするとシリアルモニタが、「SPISLV」「I2CSLV」を右クリックすると送受信バッファの内容が表示される。
a0034780_19163174.jpg
a0034780_19171659.jpg
ちなみに、日本語でぱっと見わからないところはこんな所かな~。あとはヘルプなり、フォーラムなりをのぞくといいかも。
これでソフトが正しくピンのON/OFFをしているか、変数は正しいかをハードをくっつけなくてもデバッグ出来るな~

[PR]
by k1segawa | 2017-09-05 18:36 | arduino, AVR | Comments(0)
100均のキッチンタイマーでちょっと作成しようとしているので、それに付いていたブザーを調べるのにATtiny13でブザーを鳴らしてみる。

ブザーには電子ブザー、圧電ブザーの2つがあって、電子ブザーなら電圧をかけるだけで音が鳴るのに対し、圧電ブザーは矩形波を発生させて音を鳴らしてやらなければならない。
どちらのブザーなのかよくわからなかったので、単三電池を繋いで見たが、接触時のみ雑音のような音が一瞬出るだけで、抵抗が必要なのか電子ブザーでなかったのかわからない。Arduinoのtone関数(IDEに存在するスケッチ例でいうtoneMelody内の関数)で鳴らして鳴るようなら、作成例からも圧電ブザーのような気がする。

ということで、ATtiny13にArduinoを載せるbitDuinoの出番。
ついでに最新のArduino IDE にする。
Arduino 1.8.3に最新のbitDuinoがいつものサイト様にある。

こちらからbitDuino_2017がArduino 1.6.x と 1.8.xに対応しているので、これを説明の通りにDocuments/Arduino/hardwareにコピー。
IDEを再起動すると有効になる。それぞれ設定は以下の通り。ボードマネージャやライブラリインクルードなどは使わない。
a0034780_22422380.png
tone関数もATtiny13に対応したものが、同じページの示すサイト様にある。

ATtiny10とATtiny13の両方に対応しているが、ATtiny10はまだ未完成だがATtiny13にはそのままで対応しているようだ。
ただし、tone関数の第3引数は削除されているようだ。その新たなライブラリは同サイト様の以下のページにある。

そこにある「toneSampleSketch.zip」をダウンロードというリンクからATtiny13のスケッチを取得。
同ページに表示されているソースはATtiny10の物なので今回は無関係。つまりtoneCycleMelody関数、メモリが少ないうんぬんはATtiny10の事なので、ATtiny13はIDEに内蔵のtoneMelodyのスケッチとほぼ同じ。

ダウンロードしたスケッチを開き、回路を組んでNew ATtiny13をセット(8分周のままなので1.2MHzを選んだ)。
抵抗は100均のチップ抵抗を見ると102なので10x10^2=1000Ω=1kΩを。ピンはソースからspk=4よりPB4をブザーのプラスにGNDをブザーのマイナスに。そのどこかに抵抗をはさむ。
コンパイルもそのまま通り書込みもOK。

「最大1024バイトのフラッシュメモリのうち、スケッチが788バイト(76%)を使っています。
最大64バイトのRAMのうち、グローバル変数が25バイト(39%)を使っていて、ローカル変数で39バイト使うことができます。」
メッセージも日本語で凄く親切。

実際鳴らすと音が小さい。100Ωにするとずいぶん大きくなる。きっとキッチンタイマーの省電力対策なのだろう。

これで圧電ブザーという事がわかった。同じようなものは 秋月電子通商のUDB-05LFPN 80円か。ボタン電池LR1130(1.5V)やレギュレータも載って液晶まで付いて凄いコスパだ。

Arduino(Japanino)ライタを使ってるのでbootloaderを使ってないので容量は788バイトで済んでるが、さらに少なくするならArduino IDEの関数を使わず直接ポートをアクセスするようIDE上で書けば削減される(pinModeなど)。この時bitDuinoの関数を使わなければbitDuinoのインストールは関係なくなる。

P.S.
書込み装置:Arduino as ISPならbootloaderは不要だが、Fuseビットを書き換える処理もしているので、9.6MHz(Internal)を選んでブートローダ書込みを実行後にマイコン書込みすれば指定のClockで動作可能。

P.S.2
今回bitDuinoをインストールしているのはATtiny13用のArduino IDE関数(pinMode,tone)がbitDuinoによって置き換えられているからで、今までの1.5.2の環境などではこれらの関数を使わず、その代わり直接ポートやレジスタをアクセスするavr-gccの関数を使用しているのでbitDuinoはインストール不要。正確にはmain関数がinit関数を呼び出しているので、多少のArduino IDE関数を使っている。
avr-gcc関数:avrの標準C/C++関数
Arduino IDE関数:avrの関数に使い勝手が良いようにどんなavr MCUでもソースが共通になるようなラッパー関数
bitDuino:そのラッパー関数をATtiny13/10でも使えるように書き換えたもの

[PR]
by k1segawa | 2017-08-14 22:03 | arduino, AVR | Comments(0)
ATtiny13をメインに電子工作していたが、特に何か作りたい物がネットを徘徊してもなかったのだが、海外に目を向けると色々あって面白い。
前の記事 Pinterest と 電子工作 (6/17)もそうだが、下記のサイト様はATtiny13のマイコンとしての基本機能をいくつか網羅していてマイコン初心者に便利。

a0034780_17395410.png
Links

というリンクに100個色んなプロジェクトをやってみるというのがあり、ここにATtiny13による「ソフト UART」や「ウォッチドック」、「dance lights with FFT」 など基本から応用がまとまっている。

100個はないがそれでも回路図が簡単で、プログラムもCソースが短くて、簡単にArduino IDEに流用できる。

例えば「ウォッチドック」の「[005] ATtiny13 – blinky with Watchdog Timer」なんかは、
[回路図]
a0034780_17202373.png
[元ソース]
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

#define LED_PIN PB0

ISR(WDT_vect)
{
PORTB ^= _BV(LED_PIN); // toggle LED pin
}

int
main(void)
{
/* setup */
DDRB = 0b00000001; // set LED pin as OUTPUT
PORTB = 0b00000000; // set all pins to LOW
// set prescaler to 0.5s and enable Watchdog Timer
wdt_enable(WDTO_500MS);

// enable Watchdog Timer interrupt
WDTCR |= _BV(WDTIE);
sei(); // enable global interrupts

/* loop */
while (1);
}

となるのだが、
/* setup */をsetup()内に移植し、/* loop */がwhile(1);なので単にloop()を呼び出す。それ以外はそのまま記述するだけ。

[Arduino IDE用 新ソース]
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

#define LED_PIN PB0

ISR(WDT_vect)
{
PORTB ^= _BV(LED_PIN); // toggle LED pin
}

void setup() {
/* setup */
DDRB = 0b00000001; // set LED pin as OUTPUT
PORTB = 0b00000000; // set all pins to LOW
// set prescaler to 0.5s and enable Watchdog Timer
wdt_enable(WDTO_500MS);

// enable Watchdog Timer interrupt
WDTCR |= _BV(WDTIE);
sei(); // enable global interrupts
}

void loop() {
}


色々まとまってて面白いわー

[相互変換]
Cソース → Arduino IDE ソースは上のような感じで。
Arduino IDE ソース → Cソースは以下の記事のように。


[PR]
by k1segawa | 2017-07-28 17:01 | arduino, AVR | Comments(0)
ブレッドボードで作った回路を恒久的に使いたい時、振動や錆びによる接触不良を無くすため、ユニバーサル基板やプリント基板で半田付けするが、ユニバーサル基板だとドット間を導線で繋いだり、プリント基板なら半田付けの前に廃棄に困るエッチング液でパターンを腐食させなければならない。

昔100万円であった切削型のCNCが、今なら10万円まで下がってきた。これならエッチングいらずでプリント基板が作れるが、騒音と切り屑の処理が大変。

そこで、ちょっと手軽にサンハヤトのワイヤード・ユニバーサル基板やブレッドボードパターンのユニバーサル基板、銀箔テープ、EジスPenで作成する方法がある。
それぞれサイト様の代表的な画像とリンクを示す(画像の著作権はサイト様にあります)。

ワイヤード・ユニバーサル基板 UB-WRD01 - サンハヤト株式会社
(リューターは滑るので刃の鈍ったカッターで削る)
a0034780_02184902.jpg

秋月電子のユニバーサル基板(ブレッドボードタイプ)
片面ユニバーサル基板(ブレッドボード配線パターンタイプ) Dタイプ(47x36mm) ガラスコンポジット
a0034780_02194053.jpg
銀箔テープ
2010年01月18日 物の無い時代に育った - 第九研究室だより:電子工作
(幅広のままドット型のユニバーサル基板に貼ってカットする)
a0034780_02205691.jpg
プリント回路基板の簡単製作手順
a0034780_02513572.jpg
EジスPenを使ってみる_1/3
(何回か上塗りしすぐに20分ぐらいドライヤーで乾かす)
a0034780_02221475.jpg
それぞれ少しコストはかかるが、部品の半田付け以外に高熱を必要としないので割と手軽に作れる。
簡単な回路なら初心者がブレッドボードを卒業していきなり玄人っぽく半田付けするよりは敷居は低いだろう。

[PR]
by k1segawa | 2017-07-16 02:39 | arduino, AVR | Comments(0)
arduinoやIchigoJam、RaspberryPiなどのむき出し基板は、裏の金属部分が床から少し離れるように「スペーサー」というものを取り付ける。
プラスチックや金属製のものがあるが、長さや値段から買うのを忘れてしまいがち。

そこで、100均で買えるグルーガンの溶かす棒(ホットメルト接着剤)を、切ってくっつける。そしてくっつけるにはグルーガンで表の穴に少しホットメルトをたらしてやればいい。

常温でべたべたする事もなく、しっかりとくっつく。

以下はオシロスコープで使ったびんぼうでいいの、の基板に取り付けた様子。
a0034780_10572653.png
12MHzクリスタルの背が高いのが横向いてるのはご愛敬ということで。
a0034780_10573276.png
a0034780_10573944.png
そこそこ綺麗なんじゃない?
長さも自由だし、値段も100円で何十回もとれるし、全然安い。
また熱してやれば取り外しも簡単。

太いのと、長いと強度が下がる欠点はあるけど、単に床に設置させないためにはこれで十分。

100均使えるわー

[PR]
by k1segawa | 2017-07-15 11:08 | arduino, AVR | Comments(0)
arduino や Raspberry Pi などのボードコンピュータが液晶の表示を性能のリトマス試験紙としているのはなぜかわからなかった。
より高性能なCPUにしたりクロック数を上げたりして高精細液晶画面を制御しているのを競っているのが、なぜPCから画像データを液晶へ直接送信せずにわざわざボードコンピュータに送って(または書換可能メモリに保存して)表示させるのか、今の高速なPCならどんな大きいデータでも簡単に液晶に送れてすいすい画像を書き換えられるのだと思っていた。

ところでPCから外部にデータを送信するためには現在はシリアル通信であるUSBやRS-232C、バスであるPCI Express、表示と音声データに特化したHDMIがある。
これらで、ユーザが直接制御出来るのはUSBやRS-232Cであり、それ以外はドライバやOSのライブラリを介して間接制御するしかない。

ボードコンピュータは液晶を制御できるのだから、PCだってUSB2.0や3.1などの高速な通信を使えば軽々液晶を書き換えられる(例えばマスクやグラフィック描画)のではないか。

USBはなかなか難しいので市販のUSB制御ボードを使うとすると、以下のようなものがある。

これのソフト仕様を調べる(ヘルプファイル参照)と、1ビット書き換えに10000回/2500msecぐらいの時間がかかる。8ビット(1バイト)でも10000回/5000msecぐらい。
これはデジタルポートをON/OFFする速度と仮定すると、10000/2.5秒=4000Hz、10000/5秒=2000Hzで書き換え出来る。
USB2.0が480Mbps(1.0が12Mbps)なので、480M/10ビット(8n1)=48Mバイト/sec。プロトコルなので上のON/OFFに変換するとざっくりだが48000000バイト:2000バイトをどうにかできるとして2万4千分の1のデータ効率。

赤外線 搬送波が37kHz程度なのだが、これが上の制御ボードでは全然間に合わない。
でも赤外線のコントロールは昨今のボードコンピュータでは当たり前に出来ている。

USBシリアル変換ケーブルなどを使って、RS-232Cの最大速度115200bpsだと、約1万バイト/sec。8ビット送信できるとして80kHz程度(もう単位とか転送速度とかぐちゃぐちゃだが)は処理できるとしてギリギリ赤外線の制御が出来るかなという所。

USB2.0でハードディスクへのデータ転送が可能になったのだから相当速いのかと思ったが、プロトコル負荷によって赤外線の制御程度がやっとなのか。

PCからUSBで画像データを液晶に直接転送しても4000Hzだと8x8マトリクスLEDのON/OFFでさえも64個のLEDをせいぜい1個当たり4000/64=62.5Hzでしか書き換えられない。秒間62回だ。24fpsが秒間24コマなのに、こっちはLEDをON/OFFするだけにこんなにかかってたら、1コマの画像転送なんてとんでもない。

PCから高精細液晶を制御するのはUSBでは夢物語なのか。USBケーブルのサブモニタは差分データ送信でうまくやってるのかな。

USB2.0 480Mbps=0.48Gbps(ざっくり)
USB3.0 10Gbps
PC Express 3.0 8Gbps
HDMI 2.0 18Gbps

HDMIを直接PCが制御する訳では無くWindowsならDirectXでコマンドをGPUが受け取って膨大なピクセルをCPUコアが書き換えている。

ボードコンピュータが液晶を書き換えられるのは、PCのUSBのプロトコル負荷で通信スピードが上がらないという部分が無いから現実に出来るのであり、ボードコンピュータじゃなければユーザは直接液晶を操作できないのだ。HDMIの転送速度を生かして表示を制御するにはGPUのコマンドをプログラムすればいいが、そこに力を入れるのはちょっと違う気がする。少し前にCUDAとかで流行ったけど。

という事で、PCから外部にデータを高速転送する手段がないため、大量のデータである液晶(表示)書換は、今の所PCからは無理で、そのため液晶を自分でコントロールする気になるためには、ボードコンピュータに制御させるのが手っ取り早いのだ。で、高負荷なのでボードコンピュータはどんどん高性能になって行く。でも痛し痒しでどうしても「ボードコンピュータ」というワンクッションが入ってくる。

ああ、液晶(表示)制御を高精細で極めようとするとPCでは現在のインターフェースでは無理(OSもRTOSにならないと)で、ボードコンピュータでも高性能なちょっと敷居の高い事になってしまうのだ。

やっぱり「表示器」はPC上で行ない、ボードコンピュータはリアルタイムでは表示機能を持たないのが最善手(単体のボードコンピュータはそれはそれで完結していてもいいが)だな。つまりボードコンピュータのネット上での役割はセンサーと物理制御(サーボ出力、リレーON/OFF)だ。

備忘録、備忘録。

すぐボードコンピュータに液晶をつなごうとしてしまうが、単体で完結するもの(ゲームコンソールやなんらかの指標器)を作るとき以外は上の事を思い出して、踏みとどまろう。
まあ、もう128x48のグラフィック液晶買ってきちゃったんだけどね。


[PR]
by k1segawa | 2017-07-11 22:15 | arduino, AVR | Comments(0)

Pinterest と 電子工作 (6/17)

Pinterest という画像によるブックマーク共有SNSサイトがある。
SNSの形態をとっているが、気になった写真をピンでとめてそれを皆で共有・公開するサイトで、同じ興味のある人を繋ぐ感じ。

トップページの検索で、興味のあるキーワードで他の人がピン止めした写真を検索して、自分も共感すればピン止めする。

するとそれ以降トップページでおススメのピンナップが表示される。

これに対して「電子工作」「arduino」「ATtiny」「電気回路」「Raspberry Pi」などと検索すると、

おすすめに電子工作の色々な画像が表示される。

Pinterestのおすすめが秀逸で、ちょっとgoogle検索では出てこないような突飛なケースが発見できて面白い。

google:独自の検索アルゴリズムでページに得点を与え、キーワードと関連付ける
twitter:#ハッシュタグでツイート者が付けるタグで検索する
Pinterest:画像に対してピン止めした人が付けたコメントで検索する

全ての情報を把握するgoogleという勢力に対して別のデータベースを持ち、フラットな検索ルールで情報を提供していて、面白い。
googleではいつも同じになってしまう検索結果が、Pinterestやtwitterではどんどん変化しており、リアルタイムの情報が取り出せるような気が。

新しい事が見つからない時ぜひ。
(自分は日本の電子工作の行き詰まりで使ってる)

google一極の検索世界に風穴が空いた。


[PR]
by k1segawa | 2017-06-17 01:26 | arduino, AVR | Comments(0)