体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

Japanino ArduinoISP 2018 Arduino 1.8.5の ATtiny13 で 100均ブザー (2) (1/20)

(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)