FM音源YMF825メモ

FM音源YMF825とは

とても便利なヤマハFM音源チップ。

  • SPI I/F
  • DAC/アンプ内蔵
  • 4オペ16音ポリ
  • すぐに使えるモジュール基板が市販

akizukidenshi.com
github.com

Arduino用簡易ライブラリ

Arduinoで使える簡単なライブラリを作成した。
github.com

作例

これを使って楽器を作ってみた。

www.slideshare.net

参考URL

上記のヤマハの公式資料だけ読んでもよく分からない。voiceとかtoneとかが文脈によっていろんな意味で使われているので、読み解くのに苦労する。レジスタ#11の下位4ビットでチャンネル設定レジスタ#12~20が各チャンネル用にバンク切り替えされる、という点が分かりにくかった。以下に参考にしたページを挙げる。
madscient.hatenablog.jp
fukuno.jig.jp
qiita.com
YMF825/レジスタ一覧 - FM sound wiki

Androidアプリでバイブレーション

AndroidManifest.xmlパーミッションの追加

<uses-permission android:name="android.permission.VIBRATE"/>

アクティビティでVibratorを取得

import android.os.Vibrator;
public class MainActivity extends Activity {
    private Vibrator vib;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        vib = (Vibrator)getSystemService(VIBRATOR_SERVICE);
    }

Vibratorを使用

    // 指定時間[msec]ONする
    vib.vibrate(5000);   

    // パターン(OFF時間, ON時間, OFF時間, ON時間, ...)
    long pattern[] = {0, 500, 500, 500, 1000, 500, 500, 500};
    vib.vibrate(pattern, -1);  // パターンを1回だけ実行
    vib.vibrate(pattern, 0);  // パターンを無限に繰り返す
    vib.vibrate(pattern, 2);  // パターンを2回繰り返す

    // 振動をOFFする
    vib.cancel();

仮想関数とクラスのメモリサイズ

まず、次のC++のコードを見てください。

#include<stdio.h>

class ClassA{
	int a;
	int f();
	int g();
};

class ClassB{
	int a;
	virtual int f();
	virtual int g();
};

int main(void)
{
	printf("sizeof(ClassA) = %d\n", sizeof(ClassA));
	printf("sizeof(ClassB) = %d\n", sizeof(ClassB));
	return 0;
}

これを実行すると次のような結果になります。(Visual C++, 32bit環境の場合)

sizeof(ClassA) = 4
sizeof(ClassB) = 8

ClassAは仮想関数を持たないクラスです。仮想関数を持たないとは、関数のオーバーライドがないということであり、動的ポリモーフィズムがないということです。このとき、クラスのデータサイズはメンバ変数の合計サイズとなります。
いっぽう、ClassBは仮想関数を持つクラスです。仮想関数を持つとは、関数のオーバーライドがあるということであり、動的ポリモーフィズムがあるということです。この仕組みの実装には一般的には仮想関数テーブルが用いられています。仮想関数を持つクラスは仮想関数テーブルへのポインタを隠しメンバとして持ちます。上の例で、ClassBのサイズがClassAより4バイト大きいのはそのためです。

独断と偏見で選ぶ五大Arduino系ボード

いろいろ種類が増えすぎたArduinoマイコンボード。僕がよく使うものを中心にチョイス。(かなり偏ったチョイスです。)

  1. Arduino UNO : 最初の1台に。リファレンス用に。
  2. GR-SAKURA : 実戦むき。UNOサイズの高性能ボード。
  3. Arduino Pro Mini : ちっちゃいものに。サブマイコンに。
  4. GR-CITRUS : ちっちゃくて高性能な欲張りボード。
  5. ESP32 : 流行りのIoT(笑)に。WiFi+Bluetoothマイコン

f:id:licheng:20181003183642j:plain:w500

(1) Arduino UNO : 最初の1台に。リファレンス用に。

言わずと知れたArduino UNO。もっともスタンダードで、もっともメジャーで、もっとも情報が多く、もっとも敷居が低いArduinoです。最初の1台はとりあえずUNOがよかろうと思います。僕も最初はUNOから入りましたが、今ではあまり使いません。スペックとサイズの面で使いにくいと感じるからです。ただし、他のボードでうまく動かないときなどのリファレンス用に使うことがあります。
f:id:licheng:20181003184903j:plain
ちなみに安いUNO互換ボードもいろいろ出回っていますが、僕は3つの理由で本家のUNOを推奨します。

  • よけいな落とし穴を避けるため
  • 本家への敬意を払うため
  • インスタ映えのため

互換ボードの中には微妙にクセのあるものもあります。よけいな落とし穴のあるボードは最初の一台としてもリファレンス用としてもふさわしくありません。また、いかにオープンソースとはいえデッドコピーを安売りする商売は好ましいものではないと思っています。それと、写真に撮ったときに安物の互換ボードはダサいです。いっぽうで、Staduinoに代表されるような特長ある個性的な互換ボードはおおいに良いと思います。

(2) GR-SAKURA : 実戦むき。UNOサイズの高性能ボード。

GR-SAKURAはArduino UNOと同サイズのボードですが、はるかに高性能なマイコンを搭載しています。またUNOより多くのI/Oピンを使うことができます。そのため、より本格的なプロダクトに使用できる実戦むきのボードです。また浮動小数点演算命令を持っているので、float型をためらわずに使えます。
ただし、GR-SAKURA は通常のArduino IDEではなく、IDE for GRという特殊な開発環境で開発します。特殊といってもArduino IDEをベースにしており、大きな違いと言えば色がピンクなことくらいですが。そのほかオンラインで使えるWebコンパイラもありますが、僕は使いません。
f:id:licheng:20181003184932j:plain
ピンク色の特殊なボードを敬遠するのであれば、Arduino DUEをおすすめします。こちらはUNOより大型のボードです。世間では同サイズのArduino MEGAのほうが有名です。UNOよりピン数もメモリ容量も多く実用的な用途に向くので、よく3Dプリンタやロボットなどのキットに使われています。DUEはメモリ容量も処理速度もMEGAよりはるかに上なので、ラクができます。おしむらくは浮動小数点演算命令を持たないことです。
f:id:licheng:20181004101832j:plain:w640

ボード MCU Clock ROM RAM IOピン数
Arduino UNO ATmega328P(8bit) 16MHz 32kB 2kB 20
Arduino MEGA ATmega2560(8bit) 16MHz 256kB 8kB 70
Arduino DUE SAM3X8E(ARM Cortex-M3)(32bit) 84MHz 512kB 96kB 70
GR-SAKURA RX63N(32bit) 96MHz 1MB 128kB(I)/256kB(II) 61


(3) Arduino Pro Mini : ちっちゃいものに。サブマイコンに。

Arduino Pro MiniはArduino UNOをちっちゃくしたようなボードです。2列ピンのモジュールタイプであり、小型の機器に組み込んだり、メインマイコンに代わってちょっとした処理をするサブマイコンとして使ったりするのに適しています。また、最小限の部品で構成されており、価格が低く抑えられています。その反面、書き込みにもUSBシリアル変換アダプタが必要になるという不便さもあります。それが嫌なら後述するArduino MicroやArduino Nanoなどを選ぶとよいでしょう。
f:id:licheng:20181003184949j:plain
どういうわけか、モジュール型のArduinoは似たようなものが乱立しています。しかも、まったく名が体を表していません。ふつうに考えれば、Mini > Micro > Nanoとなりそうですが、まったくそうではないのです。これは出自がおのおの異なるためです。5V品と3.3V品とがあることにも注意してください。
f:id:licheng:20181006164057j:plain:w500

(4) GR-CITRUS : ちっちゃくて高性能な欲張りボード。

GR-CITRUSは、Arduino Pro Miniとピン互換で高性能なマイコンを搭載したボードです。Pro MiniとGR-CITRUSの関係は、UNOとGR-SAKURAの関係と相似だといえます。GR-CITRUSはGR-SAKURAと同様にIDE for GRで開発します。Webコンパイラもありますが僕は使いません。
GR-CITRUSはもともとRubyで開発できるボードというコンセプトであり、Rubyの開発環境も提供されています。というよりRubyのほうが本筋という扱いです。ただ個人的にはRubyで開発できることに魅力を感じないのでもっぱらIDE for GRのほうを使っています。
f:id:licheng:20181003185018j:plain

ボード MCU Clock ROM RAM IOピン数
Arduino Pro Mini ATmega328P(8bit) 16MHz(5V)/8MHz(3.3V) 32kB 2kB 18+4
GR-CITRUS RX631(32bit) 96MHz 2MB 256kB 20


(5) ESP32 : 流行りのIoT(笑)に。WiFi+Bluetoothマイコン

今まで挙げたボードとは異なり、ESP32(正確にはESP32-WROOM-32)は、汎用マイコンボードではなくWiFi+Bluetoothの無線モジュールです。ただし、高性能なマイコンを内蔵しており、Arduino環境でプログラムできます。また、モジュールのままではプロトタイピングや電子工作では使いにくいので、周辺回路を実装した開発ボードが出ています。代表的なものはESP32-DevKitCです。
f:id:licheng:20181003185037j:plain
無線がWiFiのみで、IOピンの数も少ないESP8266という製品もあります。また、ESP32-WROOM-32はデュアルコアですが、シングルコア版のESP32-SOLO-1もでています。

その他のUNOサイズボード

UNOサイズのボードは数えきれないくらいたくさんあります。

f:id:licheng:20181006170057j:plain:w500

まとめ

うのさくら ぷろみにしとらす いーえすぴー (字余り)

古いEagleのダウンロード

Eagle7以前のライセンスを持っていて、古いEagleを再インストールしたいとしても、すでに古いバージョンのEagleのインストーラへのリンクは無くなっています。
現在、古いEagleのインストーラを提供する一時的なファイル置き場が設けられています。

フォーラムでの質問にその旨回答されています。

【2020/0825追記】
Autodesk Eagleの古いバージョンはこちら。

Googleに古いコンテンツの削除依頼

自分のサイトの削除ずみコンテンツがGoogleの検索結果に表示されてしまい、削除してほしい場合があります。

  • 誤った内容だったので削除した場合
  • 個人情報などを誤って公開してしまったので削除した場合
  • robots.txtやnoindexを忘れて誤ってGoogleに登録されてしまった場合

これらの場合、自分のサイトのコンテンツを削除・訂正してもGoogleに登録されてキャッシュが残ってしまうことがあります。そのような場合には、下記のページから削除を依頼することができます。


Search Console - 削除リクエスト


注意点としては、

  • 依頼したらすぐに削除されるとは限らない。数日から数週間かかる場合もある。
  • 自分のサイトのコンテンツがすでに削除ずみであることが前提。
  • 他人のサイトの違法なコンテンツの削除依頼をするツールではない。

Windowsでドットファイルを作る

Windowsドットファイル(ファイル名が . からはじまるファイル)を作ろうとすると、エラーメッセージが出て作れません。
f:id:licheng:20181001150232p:plain

 そういう時は、ファイル名の最後に . を入力します。つまり、".hoge"というファイルを作りたいなら".hoge."と入力します。すると警告メッセージが出ますが、「はい」を選択するとドットファイルができます。
f:id:licheng:20181001150856p:plain