2016年12月18日

WAVE/PCM再生: @70円のPIC16Fで8bit PWM player音楽再生 2017

WAVE/PCM再生: @70円のPIC16Fで8bit PWM player 音楽再生 2017
* はじまり
* Download (2017/02/18) up!
* ブレッドボード図
* 対応マイコン
    コードサイズ:
    最小サイズ:

[仕様]
* SDカード仕様
* Wave/PCMデータの形式
    曲間ノイズとWAVヘッダ/音楽情報(アルバム画像)チャンク等:
* Wave/PCMデータ一括変換ソフト
* 再生操作仕様
    (1) 動作:
    (2) Btn SW(ボタン・スイッチ)仕様
    (3) LED インジケータ(Indicator)
* 再生順序

[制作]
* 回路図
* Pin配列図
* プッシュ・スイッチ
* 制作上の注意点

* 処理速度についてのメモ
* SPI Clockについてのメモ
    PIC18F14K50:
    PIC18F26J50:
* 使用リソース

[コンパイル]
* コンパイルと書込み
    バッチファイル m.batでコンパイル:
    makeを使ったコマンドライン・コンパイルの方法:
    準備
    コマンドライン・コンパイル:
    PICへの書込み:

[その他]
* 雑多なメモ
* 使ったツールのメモ
    WinHex:
    Binary Edit Bz:
* その他の関連作例メモ
    データレコーダーのエミュレータを作ってみた (その6):

* はじまり
ひょんなことから、このページを発見したのだった。
WAVE PLAYER FOR PIC16F877A.!
mikroC用のサンプルコードでPIC16F877Aで動作するWAVE PWM Playerだ。
試しに、無料版のmikroCでコンパイルしてみると、
なんと、たったの
Flash: 1755word
SRAM : 150byte
で、fs=22.1KHz,stereoのWAVファイルがFAT16のSDカードで再生できるサンプルコードだった。
これは面白そう ということで、
mikroCのお試し版は2000wordまで使えるので、さっそく より高速で動作するPIC16F1827に移植して
みたのだった。これならfs=44.1KHz,stereoが再生できるはず。。。
ところが。。。。
これがさっぱり動かない。動かない、動かない。。。
よくよく調べていくと、
「これじゃ動かない !」 (オイ

決め打ち要素がいくつか障害になって、そのままでは動かないのだった。
orz
で、結局 ChaNさんのこのページを熟読することに。。。
FATファイル システムのしくみと操作法
それにしてもChaNさんの解説がすばらしく分かりやすい。(^^)/
感謝! m(__)m

その後、mikroCのお試し版のままだと、容量不足でprintf系デバッグができないし、
そもそも mikroCにはprintf関数がないのだ(簡易型の代替関数を使う)。orz
しかたがないので、
XC8に移植、MPLABXでデバッグしてなんとか音が出るようになったものの、
XC8の無料版はコードサイズが肥大化傾向で、実行速度もあまり速くないこともあり、
結局、
超効率コンパイラのjalv2に移植することにした。
jalv2の実力を確認する良い機会でもあるのだ。

で、最初はFAT16バージョンだったが、 今時FAT16対応のSDカードなんて入手が難しいので、(注7)
FAT32にも対応してみた。
さらに、
最近、ある程度充実(秋月電子)してきた最新のPIC16F Enhanced midrageで
お値打ち感のあるものを選んで対応してみた。

* Download
hexフォルダにHEXファイルがあるのでPickit3で書き込みます。
(2017/02)
16f-pwm-wave-player_v8.6-2017-02.zip

* ブレッドボード図
後述の回路図を参考に作ってみた。
部品番号は適当に割り振ってあります。
実際に作ったものに近い感じ。(全く同じではありません :-)
pic16f18313-sd-wave-player_breadborad-2017-2.png
上のSD Socketの端子名は、SDカード側の端子名。

* 対応マイコン
Enhanced midrageのPIC12F1系/16F1系と、PIC18Fのみで動く。
コードサイズ:
    ざっくり、
        Flash: 1600 word ~ 1800 word
        SRAM : 150 byte
    程度で、マイコンの種類や機能オプションによって変動します。
最小コードサイズ:
    16F18313/FAT16限定/SW(ボタン・スイッチ)なし、 という条件で、
        Flash: 1474 word
        SRAM : 143 byte
    を記録。
PIC SD card:SDSC/SDHC, FAT16/32, Long filename対応
pickit
(注5)
PIC名 価格(注1) MIPS値 PPS Flash/SRAM 動作の
可否
出力 Sampling
周波数
LED Dev.Rev
8pin
pk2 PIC12F1840 115円 8MIPS - 4KW/256B O mono 44.1KHz - 5
pk3 PIC16F18313 70円(税別) 8MIPS O 2KW/256B O mono 44.1KHz - 2004
14pin
pk2 PIC16F1455 160円 12MIPS - 8KW/1024B O stereo 44.1KHz O ?
pk2 PIC16F1705 100円 8MIPS O 8KW/1024B O stereo 44.1KHz O 2002
pk3 PIC16F1764 120円 8MIPS O 4KW/512B O stereo 44.1KHz O 2002
pk2 PIC16F1825 140円 8MIPS - 8KW/1024B O stereo 44.1KHz O 4
pk3 PIC16F18325 100円 8MIPS O 8KW/1024B O stereo 44.1KHz O 2045
(pk3) (PIC16F18326) 130円 8MIPS O 16KW/2048B - stereo 44.1KHz O -
18pin
pk2 PIC16F1827 135円 8MIPS - 4KW/384B O stereo 44.1KHz O 4
20pin
pk2 PIC16F1459 180円 12MIPS - 8KW/1024B O stereo 44.1KHz O 1003
pk3 PIC16F1619 150円 8MIPS O 8KW/1024B O stereo 44.1KHz O 2004
pk2 PIC16F1709 150円 8MIPS O 8KW/1024B O stereo 44.1KHz O 2002
(pk3) (PIC16F1769) 200円 8MIPS O 8KW/1024B - stereo 44.1KHz O -
pk2 PIC16F1829 160円 8MIPS - 8KW/1024B O stereo 44.1KHz O 4
(pk3) (PIC16F18346) 160円 8MIPS O 16KW/2048B - stereo 44.1KHz O -
pk2 PIC18F14K50
PIC18F13K50
210円
200円
8MIPS
(12MIPS)
(注4)
- 8KW/768B
4KW/512B
O mono 44.1KHz O 6
28pin
pk2 PIC16F1938 190円 8MIPS - 16KW/1024B O stereo 44.1KHz O 2
pk2 PIC18F26J50 260円 12MIPS 32KW/3776B O stereo 44.1KHz O 4
* SDカード仕様 (1) SDカードはSDFomatterで「クイックフォーマット」をした直後に https://www.sdcard.org/jp/downloads/formatter_4/ wavファイルをSDカードのルートにコピーしてください。 言い換えると、SDカード上のクラスタ配列にフラグメントが発生していない状態が必要です。 コピー後に "削除、またコピー"等は音飛びの原因になります。 (2) SDカードは、SDSC/SDHC FAT16/FAT32に対応してありますが、 こちらで試したのは、 (a) 2GB/SDSC/FAT16 1種類 (b) 16GB/SDHC/FAT32 3種類 の4種類のSDカードです。 MMCは非対応です。 すべての SDSC/SDHC FAT16/FA32 カードで動作するかどうかなんて全く分かりません。xD といいつつ、ほとんど大丈夫じゃないかと踏んでたりします。(オイ (3) ファイル名はショートファイル名のみ、ロングファイル名のみ、二つの混在が可能です。 漢字ファイル名も問題なさそうでした。 (4) WAVファイルは「アーカイブ属性(A)」になっている必要がありますが、 通常はそうなっているずなので気にする必要はないと思われます。 * Wave/PCMデータの形式 再生可能な「*.WAV」ファイルは、 上記表から例えば「mono」、Sampling周波数(以下fs)=44.1KHzと読み取れた場合、 その通りのデータ形式である必要があります。 mono出力のものにstereoデータを与えても正しく再生できません。逆も同じです。 PCMデータは8bitです。 その辺にあるwavファイルを持ってきても恐らく16bitなので再生できません。 後述の変換ソフトを使って適切なデータを作る必要があります。 曲間ノイズとWAVヘッダ/音楽情報(アルバム画像)チャンク等: WAVヘッダ情報は見ていません。先頭の44バイトを読み飛ばしているだけです。 従って、44バイト直後に音楽情報チャンクがあるとそのまま再生してしまうので 「曲間ノイズ」が発生します。 また、数十キロバイト・オーダーでアルバム画像がWAVファイルの最後に付加されている場合も、 曲間で「比較的長く大きな ザザーッ!」というノイズが発生します。 "先頭のWAVヘッダ(44バイト)とPCMデータ"以外の情報を、 ツール等でカット可能ならカットしたほうが 良いです。 * Wave/PCMデータ一括変換ソフト いつもは「foobar2000やSoX」を使用していますが、 今回は「mono」データ化が必要になったこともあり、別のソフトを探してみました。 Switch Audio File Converter http://www.nch.com.au/switch/index.html 変換は「Output Format:」に「.wav」を選択、その右の「Options」で、 Settings: Customにすると「Format:」の部分で色々選択可能になります。 Encoding:は「PCM Uncompressed」でOK. 今回偶然見つけて使ってみただけなので詳細は不明、 金払えメッセージが毎回のように出てきて、:D orz なところもある。 * 再生操作仕様 (1) 動作: 電源投入後、ルートフォルダにある拡張子「.WAV」ファイルを順に再生していきます。 最後のファイルを再生した後、また最初のファイルから再生を開始します。 (2) Btn SW(ボタン・スイッチ)仕様 Next: 再生中に「一回クリック」すると次の曲に飛びます。(指を離したタイミングで動作します) Pause: 再生中に 「1.x秒以上」押し続けるとポーズします。ワンクリックで解除します。 (x=0...5 のどれか。今はx=2) Power Off: 4秒以上押し続けるとパワーオフしようかなと思いましたが、 現状ではあまり意味がないので何も起こりません。:D (3) LED インジケータ(Indicator) LEDが付けられる14Pin以上のマイコンでは、 再生中: LEDがゆっくりめに点滅します。 Pause中: LEDが比較的高速に点滅します。 LED疑似PWM(Pseudo PWM): LEDがチカチカすると「目もチカチカ」してしまうので、xD 目に優しいLED疑似PWM点滅に変更しました。 副作用として、 (1) コードサイズが増加した。 orz (2) LEDの電流と配線具合によってはPWMノイズが聞こえてしまいます。orz コンパイル・オプションの変更により、軽量で低ノイズなLEDチカチカ版に切替可能です。 * 再生順序 SDカード上に書かれた順で再生順が決定します。 再生順序が大切な場合はクイックフォーマット後、1個づつ手動でコピーするか スクリプト等で順序決めしてコピーさせるのが確実かも。 * 回路図 回路図は一部のみ存在します。(PIC12F1840/PIC16F18313,PIC16F1827) 回路図がないマイコンの場合、同梱されている「pin_map.txt」を参照して配線して下さい。 pic16f18313-sd-wave-player_schematic-2017.png PWM_OUTが音声出力端子。 FOSC=48MHz(12MIPS)で動作させているマイコン(PIC16F1455, PIC16F1459, PIC18F26J50)以外は 出力電圧が小さいので、アンプ類(PCのオーディオ入力、簡易オーディオアンプ等、ヘッドフォンアンプ、TRスイッチング回路等)をつないだほうが良い。 ということを念頭に置きながら、以下は一般的な話、 (1) パソコンのオーディオ入力につなぐなら、おそらく直結でOK。心配なら10uFを経由させる。 (2) 8オームの100円スピーカにつなぐなら100uFを経由させる。自分は試してない。 その後、2000円のスピーカで試したけど、音は小さかった。 (3) 一般的なオーディオアンプにつなぐなら、ローパスフィルタを入れたほうが無難かも。 * Pin配列図 SD cardのピン配列. ArduinoとかNucleoとか、今回は無意味。:D
-- /* SD card pin
-- Pin side
-- --------------\
--         9     = \    DAT2/NC
--             1 ===|   CS/DAT3    [CS]
--             2 ===|   CMD/DI     [DI]
--             3 ===|   VSS1
-- Bottom      4 ===|   VDD
-- View        5 ===|   CLK        [CLK]
--             6 ===|   VSS2
--             7 ===|   DO/DAT0    [DO]
--         8       =|   DAT1/IRQ
-- -----------------
--
--                                         Arduino      NUCLEO-F411       NUCLEO-F030R8
-- Logo side
-- -----------------
--         8       =|   DAT1/IRQ
--             7 ===|   DO/DAT0    [DO]     D12           D12/PA_6           D5/PB_4
--             6 ===|   VSS2
-- Top         5 ===|   CLK        [CLK]    D13           D13/PA_5           D3/PB_3
-- View        4 ===|   VDD
--             3 ===|   VSS1
--             2 ===|   CMD/DI     [DI]     D11           D11/PA_7           D4/PB_5
--             1 ===|   CS/DAT3    [CS]     D8            D10/PB_6           D10/PB_6
--         9     = /    DAT2/NC
-- --------------/
-- */
PIC16F18313とPIC16F1840のピン配列は全く同じ。
-- /*                   PIC12F1840   4KW/256B
--                      PIC16F18313  2KW/256B
--                       ---__----
--           3.3V--- VDD|1       8|VSS --- GND
--      PWM CCP1 --- RA5|2       7|RA0 --- [PGD] - SDO
--            CS --- RA4|3       6|RA1 --- [PGC] - SCK
--    SW --- [/MCLR]/RA3|4       5|RA2 --- SDI
--                       ---------
-- */
PIC16F1827等、UARTが同時に使用可能な多ピンPIC(18pin以上)では、UART出力を有効にしてコンパイルすると、 再生中のファイル名を115200bpsでUARTに出力します。(デバッグ用途) (ショートファイル名表示なので "元がロングファイル名" の場合、結構謎な表示になったりします。)
--  /*                  PIC16F1827  4KW/384B
--                       ----_----
--     TEST PORT --- RA2|1      18|RA1
--   PWM(L) CCP3 --- RA3|2      17|RA0
--   PWM(R) CCP4 --- RA4|3      16|RA7
--    SW --- [/MCLR]/RA5|4      15|RA6 --- SDO1
--           GND --- GND|5      14|VDD --- 3.3V
--           LED --- RB0|6      13|RB7 --- [CSPDAT]
--          SDI1 --- RB1|7      12|RB6 --- [CSPCLK]
--      UART_RX ---- RB2|8      11|RB5 --- UART_TX
--         SD CS --- RB3|9      10|RB4 --- SCK1
--                       ---------
--             Playing:  26.2mA   current consumption
--             Sleeping: 22.0mA
--  */
pic16f1827-wav-sd-player-schematic-2017.png * プッシュ・スイッチ (Btn sw) ボタン・スイッチと言ったり、 プッシュ・スイッチと言ったり、 自分の中では明確に区別してなかったりするので、適当に呼称してますが、 全部同じもの。実際には タクト・スイッチか。(オイ 使用した操作用のスイッチは、 http://akizukidenshi.com/catalog/g/gP-01282/ を使用している。これ以外のスイッチを使った場合、別途デバウンサ(チャタリング防止)が必要になる可能性を 否定できない。上記スイッチの場合デバウンサは不要です。 シュミット・トリガ入力の/MCLRにSWが繋がっているので... 参考: http://www.marutsu.co.jp/pc/static/large_order/1405_311_ph * 制作上の注意点 全体: /MCLR(リセット)端子をボタン・スイッチ入力に使っている関係上、 Flash書き込み後にリセットが正しくかかりません。 従って、一旦電源をOFFした後、ONする必要があります。 8pin PIC: 上記に加えFlash書き込み後に正常動作させるため、Pickit3の配線を すべて取り払う必要があります。 LEDとボタン・スイッチ: この2つは付けなくても動作します。 その場合、無限ループ再生動作のみとなります。 * 処理速度についてのメモ 割り込み内でセクタ切り替えをしている関係上、速度の遅いSDカードだと 処理時間が超過してセクタ切り替えのたび(5.8msec=22.3usec x 256(ステレオの場合))に前回と同じデータが出力 されてしまう。 そうなっても、実際音を聞いたときにわかるかといわれると、 比較するのが難しいのでなんとも言えない。 変わらない気がする。。。 気がす。。。 * SPI Clockについてのメモ SPI Clockは速ければ速いほど良い。 FOSC=32MHzの場合、FOSC/4=8MHzが最高クロックになるが、データシート上は 5MHz前後が限界値の様だ(PIC18F14K50しか確認していない) (要再確認) 最初にFOSC/4のSPI Clockで動かしてみて動作しないマイコンは、 6MHz or 4MHzに落としてある。 ブレッドボード配線なので、半田配線に変えればSPI clock=8MHzで動く可能性も否定できない。 あるいはSPI系の内部プルアップをやめて、外部に50Kオームから100Kオームの プルアップに変えてみる手もあるが、そういう問題かどうかは未確認。 PIC18F14K50: FOSC=48MHzの時,SPI clock=12MHzの波形は「なまった三角波」の様だったが、 音楽再生に支障はなかった。「よくこれで再生できてるよなぁ〜」って感じでした。 最終的に内部発振モードFOSC=32MHz,SPI clock=8MHzで使用した。 PIC18F26J50: FOSC=48MHzの時,SPI clock=12MHzの波形が「かなりきれい」で、 PIC18F14K50との差は歴然だった。 さすがは、USBやDMAが付いてるだけのことはある、という感じか。 内部発振モードFOSC=48MHz,SPI clock=12MHzで使用した。 * 使用リソース Timer1(16bit): 10msec tickのシステムタイマ Timer2(8bit) : PWM周期発生用 CCPx/PWMx : PWM出力ポート SPI系 : SD card 制御用 UART : デバッグ出力用 (optional = false(デフォルト値)) TEST PORT : デバッグ出力用 (optional = false) LED Port : 動作表示用 (optional = 8pin PICを除いて true) Btn sw Port : Play,Pause切換え(optional = true) (optional): コンパイル時に有効・無効を選択可能 * コンパイルと書込み HEXファイルがあるので、無理にコンパイルする必要はありません。 JalEditを使ってmain.jalを読み込めばコンパイル可能ですが、 JalEditはほとんど使わないのでここを参照してください。 Tools - Environment - Optionsの'Path of JAL Lib folder(multiple....)' の最後に「;lib」を追加する必要がある。 バッチファイル m.batでコンパイル: (1) m.bat内のcompiler_rootJalv2コンパイラ・ルートフォルダ(jallib-full-1.x.x)までのパスを設定します。 (2) set device=16F1827 のマイコン名の部分を適宜変更します。 MS-DOSコマンドプロンプト上でm.batを実行すればコンパイル可能です。 上記の場合、 sd-wav-player-16F1827.hex というファイルが生成されるので、Pickit3で書き込みます。 makeを使ったコマンドライン・コンパイルの方法: 準備 (1) msys2のコンソール上でコンパイルするのがデフォルトです。(msys/MinGWでも恐らく可(未確認)) 最低限"make"コマンドが必要です。 msys2のインストールや使い方は省略します。 (2) Makefile内のjal_root, jal_sysJalv2コンパイラまでの絶対パスなので 個々人の環境に合わせて変更します。 コマンドライン・コンパイル: 以下のどちらかでマイコンの品種を決めてmakeします (1) $ make device=16F1829 この場合、PIC16F1829マイコン用のコンパイルをします。 以下の(2)の設定に影響を受けません。 (2) $ make Makefile内の device=nnnnn 行を一つ有効にして makeします。(nnnnn=マイコン名) (注)マイコン名nnnnnに指定可能なのは、上記表に記載のマイコンみです。 (動作の可否が"-"となっているものを除く) PICへの書込み: 書込みはPickit3を使います。(Pickit2で書き込めないマイコンあり)(注5) Makefile内のPickit3への実行パスは適切に変更しておく必要があります。 (1) $ make f とすると、Pickit3のコマンドライン版(MPLABX,ipecmd)を使って書き込みます。 (2) $ make f2 とすると、同様にPickit2(pk2cmd)で書き込みます。(非推奨) (3) $ make f3 はPickit3の別名コマンドの実験用です。 (例) $ make f device=16F1829 PIC16F1829用にコンパイル後、Pickit3を使って書き込みます。 * 雑多なメモ (1) mono/stereoの自動切り替えは、割り込み内の処理やコードサイズが増えるので 省略したが,付いてた方が便利かも。 (2) Power SW機能(sleep, wake up)は省略したが、MOS-FETのHigh sideスイッチで SDカード電源を制御可能にすれば付けても良いかも。今回は省略。 (3) 一部を除いて出力音量が小さいのは、PWMタイマの分周比が今ひとつ荒いのが原因。orz (4) コードサイズは、もう少し減らせる可能性はあるんだけど、 上の表から分かるように、100円で FLASH:8Kword,SRAM:1KbyteのPICがあるので、 もういいかなぁ〜 って感じ。:D (5) 8ピンマイコンでWAVプレイヤーをつくってみた【電子工作】 視聴にはログインが必要。orz こちらの方は、PIC12F1822(Flash=2Kword,SRAM=128byte)で制作している。 実際の使用量は1751word/95byteらしい。スゴ。 * 使ったツールのメモ WinHex: http://www.x-ways.net/winhex/index-m.html SDカード内の構造をパソコンから見るツール。 管理者権限で実行する必要があります。 ディレクトリ・エントリや相対アドレスで閲覧可能。 MBRは見れない気がする。 Binary Edit Bz: http://forest.watch.impress.co.jp/library/software/binaryeditbz/ バイナリエディタ、ビューア。便利 * その他の関連作例メモ ネット上で似たような作例がないか探索してみたのでメモしておく。(注6) データレコーダーのエミュレータを作ってみた (その6): ATtiny861AとSDカード http://kitahei88.dtiblog.com/?i&no=84 * Pickit2 新規マイコン追加データ (1) https://github.com/GBert/misc/tree/master/pickit2/pk2dft (2) Great cow basicに付属のPickit2用データもほとんど同じ。 (注1) 2016/12月時点の秋月電子価格がベース。端数の表現はテキトーです。 特に表記がない場合、税込み表記。 (注2) 実際の値はコンパイラやソースのバージョンに依存して変動する。 (注4) マイコンは内蔵クロック使用で8MIPS(FOSC=32MHz)動作させている。 PIC18F13K50は所有していないが単に容量違いなので動くでしょう。 (注5) PK2: Pickit2でも書き込み可能。 PK3: Pickit3以降のみで書き込み可能。 PIC16F161xはPickit2書込み可能だがCONFIG3レジスタの読み書きができないため、 WDTが常に有効になる状態となるのでソフト側で対応可能かどうか、というところ。 (注6) ChaNさんの作例は有名すぎるので省略します。(^^; (注7) 入手できなくはないけど、FAT32のほうが圧倒的に値段が安い。
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | PCM/WAVE | このブログの読者になる | 更新情報をチェックする

2016年04月09日

パナ文の波紋

*【ケント・ギルバート×青山繁晴】パナマ文書が生む血の粛清!?
https://www.youtube.com/watch?v=RKbfvVFQ-Ew

* 22 上村雄彦×共同通信・澤康臣×三木義一×荻上チキ 「パナマ文書の衝撃!タックス・ヘイブンの実態〜そしてグローバル・タックスの可能性とは」2016.04.05
https://www.youtube.com/watch?v=JX1utCugTa4&nohtml5=False
ちょっと長いけど専門家が出てくるので
興味がある人は時間がある時に見てもよいかも。

*「パナマ文書」にJALや電通が載っているという情報はデマ
はてな村定点観測所さんのページ
http://hatena.city/entry/2016/04/10/041802
メーカ名なんかの情報源が不明だったのでこれで,スッキリした感がある。
posted by Copyright (C) avrin All Rights Reserved. at 21:03| Comment(0) | パナ文 | このブログの読者になる | 更新情報をチェックする

2016年04月07日

パナ文について 2016/04

パナマ文書とは?日本人&日本企業リストの影響と報道しない理由
http://arcanaslayerland.com/2016/04/07/panama-papers/
マスコミも政府もやる気なさそうな現在,上のページは比較的分かり易い感じ。
どうなるかはアレなんだけど,
自分的なポイントは,
情報が漏れた
"法律事務所『モサック・フォンセカ』"
は,確か世界第3位くらいの規模の会社であること。
てことは,
まだ,世界1位と2位の会社に税金逃れしてる企業や個人が

もっと,もっと,もっと,もっと,もっと,も一つもっと,大量に存在するということ。
そっちも気になるのだった。
orz

今年は "パナ文Year" になるのか?

疑問:
上の解説によれば,一見全然関係ないペーパーカンパニーを設立してとか経由して
とかあるけど,リスト上にはダイレクトに企業名や個人名が出てきている。
そんなバレバレなやり方を本当にするのだろうか。
:D



「パナマ文書」問題がアメリカでは大騒ぎにならない理由
http://www.newsweekjapan.jp/reizei/2016/04/post-824.php

パナマ文書はどうやって世に出たのか
http://www.newsweekjapan.jp/stories/world/2016/04/post-4850.php
posted by Copyright (C) avrin All Rights Reserved. at 22:55| Comment(0) | パナ文 | このブログの読者になる | 更新情報をチェックする

2016年04月01日

ubundows xD 現る!? 2016/04

ubundows xD 現る!? 2016/04
Windows 10で動作するUbuntuのBashシェル--その実現方法
http://japan.cnet.com/news/service/35080406/


な,なんと Windows10上でubuntu 14.04 LTSのバイナリがそのままMS-DOS窓内のbash上で
動くようになる様でビックリした。(OoO)
Windows10にインストール可能になるのは2016/Summerらしい。
また,開発者向けということだ。
Insider Previewの人は試せるかもしれない。
このソフトが動いた,動かない,バグ見つけた等々の情報を希望している様だ。
(以下の動画の最後に出てくる)

デモ動画
http://video.ch9.ms/ch9/5db6/8ee786b7-9fc5-45bf-94d0-16ea91765db6/P488_mid.mp4
駅前でよく切れる包丁のデモやってるみたいだけど, :D
なんかスゴそう。

ネイティブのgccやruby,python,perl,ssh,git,apache....等が
Windows10のコマンドラインでそのまま動く。
というか,apt-getも動く。
でもさすがにubuntu用に作られた*.debファイルをdpkgでインストールは
できるんだろうか。 Windows専用でもdpkgコマンド使えると便利。
sambaは動くのか?
testdiskは動くのか? (勇気いるけど)
とか,この段階で考えはじめるときりがないとも言える。

topとMySQLが動かないとかいってるけど,X以外の他は全部動くのか? xD

Cygwin/MinGWとさよならか?!
MinGW+minttyの調子が良いのでCygwinはもうほとんど出番がないけど,
この両方とも不要になる可能性が大だ。
お世話になりました。
て,
使ってみないとアレだけど。:D

インストールサイズ
もしインストールするのに20GB必要とかいわれたら orzかも

アップデートはubuntuベースなのか?
こうなってくるとWindows10とubuntuのサポート期間が同期する可能性も否定できないぞ。
"ぞ"
か。 :D

tmux/screen/vt100
vt100周りはイマイチ問題があるけど,ANSIサポートまではされるそうだ。
tmux/screen等は全く動いてないというわけではなく,
そろそろ動きそうな感じらしい。

参考:
Ubuntu on Windows -- The Ubuntu Userspace for Windows Developers
http://blog.dustinkirkland.com/2016/03/ubuntu-on-windows.html

Ubuntu 14.04 LTS から16.04 LTS
Ubuntuのバージョンもまもなく16.04 LTSに置き換わる予定だ。



全体の(注)
リーナスは「ふざけんなっ!」っていうのかな?
謎。

posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(6) | Windows10 | このブログの読者になる | 更新情報をチェックする

2016年03月22日

WAVE/PCM再生: Arduino: AVRで8bit PWM音楽再生 2016

WAVE/PCM再生: Arduino: AVRで8bit PWM音楽再生 2016
* はじまり
* ChaNさんのFatFs
* プチ音の消去
* Arduino NanoでSDカード,5V:3.3Vレベル変換接続
    抵抗でレベル変換 バツ:
    ダイオードでレベル変換 ○△:
    残念ながら:
* 動作可能ボード
* Arduino Wave PWM Player Lite版 仕様
    概要:
WAVファイル仕様:
    機能:
* SDカードの速度問題
    44.1KHz(以下)/8bitに変換する:
* SDカード速度測定機能
    使い方:
* SDカード シールド対応
* 実体配線図
    出力の高域カットフィルタ:
    Arduino(ATmega328p with 16MHz crystal) UNO/Nano/etc. :

* Download v1.3 (2016/04)
    書き込み方:
* 動作確認

* avr-gccのバージョン
* Petit(ぷち) FatFs

* その他のWave player
    TMRpcm
    SimpleSDAudio

* はじまり
AE-ATmega/AVR: 8bit PWMの音 / PCM/WAVE再生
から3年。
47秒周期くらいのクラスタ境界で「プチ音」がするために見捨てられていたのを復活させてみた。

* ChaNさんのFatFs
http://elm-chan.org/fsw/ff/00index_j.html
前回は
R0.09b    (C)ChaN, 2013 を使っていて,今回は
R0.11a    (C)ChaN, 2015 という最新版を使ってみた。
disk_read()関係がかなり高速化されている様でビックリしました。
ATmega328p 16MHz でSDカードのリードテストしたら 720KB/sec 出てた。(OoO)/
古い版だと"512バイト読み出し直前の準備期間"が固定長で結構時間がかかっていて,
低速でSRAMが少ないマイコンの場合,速度のボトルネックになっていたが,その部分が消失していた。
これは良い。

* プチ音の消去
でもプチ音に変化なし。orz
で,
ChaNさんのFatFs:AVR用のサンプル(ATmega64)をなんとかATmega328pに移植して音を聞いてみると,
(ChaNさんのサンプルもWAVE再生可能)
なんとプチ音なしだった。orz (オイ
ChaNさんのプログラムをいろいろ調べたところ :D
バッファーアンダーフローが起きた時に"前回のデータを出す"という部分があって
それのおかげでプチ音が消失しているのが分かった。
ちなみに,
移植ミスも否定できないけど,ChaNさんのは
約3msec周期で300usecの期間バッファーアンダーフローが起きていて,
この周期で約15回づづ前回と同じデータを出していたのだった。(OoO)
バッファーアンダーフローの対処がないとノイズだらけになるハズなんだけど。。。 
恐るべし,人間の耳 xD
今回はサンプルコードの解析が目的ではないので :D
そのうち調査してみるか。。。

で,
自分の方は47秒に一回程度なんだけど,上記バッファーアンダーフローに対応することで,
ようやくプチ音が消去できました。
(^^)/ (^^)/

「ごまかした」とも言う。(^^;
この部分はマイコンクロックを20MHzに上げればクリア可能と思われます。

* Arduino NanoでSDカード,5V:3.3Vレベル変換接続
前回は秋月のArduino Duemilanove互換ボード(AE-ATmega)を3.3V改造したものを使ったけど,
http://mpu.seesaa.net/article/399685555.html
今回は一般的な「Arduino Nano互換ボード」:D につないでみた。
従って,
SDカードをつなぐためには5V(Arduino側)と3.3V(SDカード側)のレベル変換が必要です。
参考:
しなぷすさんのハード制作記のページ
3-6.5VのArduinoと接続する方法
http://www3.big.or.jp/~schaft/hardware/hard/MGLCD_AQM1248A/page004.html

抵抗でレベル変換 バツ:
    ググると1.8KΩ:3.3KΩくらいでレベル変換しているのがあったのでやってみたけど,
    再生中に頻繁にリードエラーが起きて全然ダメでした。
    ブレッドボードだからアレなのはアレなんだけど xD
    orz
    SPIクロック8MHzなのでもっと速度を落とせばひょっとしたらそれなりの用途には使用可能
    かもしれないけど,波形を観測すると,とても使う気にはなれない。orz
    さらにググると抵抗値を下げている人がいて結構きれいな波形だったが,
    電流がものすごいことになっているので今回は未実験。
ダイオードでレベル変換 ○△:
    さらにググると, (オイ
    ダイオードでやっている人がいてこっちの方がよさそうだったので試してみたら,
    抵抗変換よりだいぶマシだった。
    というか今回の用途には問題なく使えた。(^^)/
    波形を見ると立ち上がりが悲惨な感じだけど,立ち下がりは問題なさそうな感じだった。
    電流も少なくて済むのでこれを採用しました。
    簡単だし,ダイオードは部品箱にあるのだった。
残念ながら:
    上のダイオード方式も手持ちのSDカードを全部試してみると
    一部のものはリードエラーが出て使えなかったので万能ではない模様。
    ちゃんとしたレベル変換を付けるのがベストなのは間違いなさそう。:D
    と,いうことでこの手の簡易型のレベル変換は高速クロックでは信頼度が
    低いことが分かりました。

* 動作可能ボード
マイコンがATmega328p,動作クロックが16MHzの互換ボード,
Arduino: UNO, Duemilanove, Nano, Mini, Pro 及び "素のATmega328pマイコン+16MHz水晶発振子"
等々でHEXファイルを書くだけで動作します。
(注) 素のATmega328pの場合,Fuseに適切に書き込む必要あり

* Arduino Wave PWM Player Lite版 仕様
概要:
Lite版なので曲の選択機能はありません。(^^;
電源ONか,SDカードが差し替えられると以下の順でフォルダを探して,
/music
/wav
/    (ルートフォルダ)
最初に見つかったフォルダ内のWAVファイルを順に再生して無限ループします。
次の曲には飛ばせるけど,前の曲には戻れません。(^^; (注1)
SDカード挿抜とかは見ていないので,電源ONのままmicroSDカードの抜き差しは非推奨ですが,
自分は自己責任でやってたりします。:D
WAVファイル仕様:
    foobar2000又はSoXでWAVファイルに変換されたものをターゲットにしています。
    これ以外で変換されたファイルは未確認です。
        PCM: 8bit / 16bit 
        Stereo/Mono
        fs(サンプリング周波数): 48KHz以下。
        こちらで確認したのはfs=8KHz,32KHz,44.1KHz,48KHzのWAV(8bit/16bit)ファイルですが、
        最低でもfs=22.05KHz以上で使用することを強く推奨します。
        通常は最も音質が良いfs=44.1KHzを推奨します。

機能:
    [パソコン上のUARTターミナル(TeraTerm等)から操作]
         次の曲に飛ばす :  [N], [ ](スペースキー)   
         再生ポーズ/解除:  [S], [P], [ESC](エスケープキー) 
                     一度押すとポーズし,画面に「P」マークが表示されます。
                     もう一度押すとマークが消えて再生再開します。
         曲の先頭に戻す:   [F]キー
                     再生中にこのキーを押すと,その曲の先頭に戻って再生を開始します。
         早送り(FF)/巻き戻し(Rewind): FF: ]キー Rewind: [キー 
                     再生音を出しながらFF/Rewindします。
                     最後までFFすると次の曲に行ってしまいます。(^^;
         音量ボリューム:  Up:[+ or .(ピリオド)], Down:[- or ,(カンマ)]キー で音量Up/Downします。
                     32ステップです。
         可変速再生: Speed Up:[U], Speed Down:[D], Speed Normal:[0]
                        高速側はあまりSpeed Upしません。
    [外部の押しボタンSWで操作]
        (1) 次の曲に飛ばす:  SWを一回クリック。(離した(0.5秒以内)タイミングで次の曲に飛びます)
        (2) 再生ポーズ/解除: SWを1秒以上押し続けると再生ポーズします。
                         手を離してSWをもう一回クリックするとポーズ解除されます。

* SDカードの速度問題
16ビット/44.1KHz/Stereoのファイルを再生するには, そこそこ高速なSDカードが必要になります。
手元に高速なSDカードがない場合以下の対応方法があります。
44.1KHz(以下)/8bitに変換する:
マイコンのPWM出力は8ビットの分解能しか使わないので,foobar2000で
44.1KHz(以下)/8bitにWAVファイルをコンバートしたものにすれば
低速なSDカードでもOKになる可能性大です。
今回の場合,8bitに落としても音質は変わりません。(^^;

* SDカード速度測定機能
SDカードのリード速度を計測する機能を付けました。
これでSDカード速度の絶対評価が可能になります。
使い方:
    音楽の再生中(or ポーズ中)に「t」キーを押すとリードテストがはじまります。
以下のようにリード速度が表示されます。
 [PCM]  S321601.WAV 32000Hz 16bit Stereo 26115412 Byte
  -----+-----+-----+---
  *****************
 [Read]: Testing 512 byte buffer: read performance...
 Done!
        Result: 314 KB/s

  [PCM]  S441601.WAV 44100Hz 16bit Stereo 66767804 Byte
  -----+-----+-----+-----+-----#-----+--
  *****
手持ちのSDカードのなかで,44.1KHz/16bitの読み出しで問題なく使えたSDカード。
リード速度 SDカード
332KB/sec Transcend 2G FAT SD @?
303KB/sec SanDisk 16G FAT32 UHS-I @6
302KB/sec Victor 4G FAT32 SDHC @4
294KB/sec Good-J 16G FAT32 SDHC @10
266KB/sec BUFFALO 16G FAT32 SDHC @4
(22.3usecの割り込みがガシガシ入った状態で速度計測しています) 44.1KHz(以下)/8bitデータならもっと遅くても大丈夫だと思います。 * SDカード シールド対応 以下のSparkFunとSeedStudioのSDカードシールドに対応。 チップセレクトが違うだけなので二つのチップセレクト端子を同時にパタパタさせてます。 持ってるわけでないので本当に動くかどうかは未実験。 SparkFun microSD Shield https://www.sparkfun.com/products/12761 SD Card shield V4.0 http://akizukidenshi.com/catalog/g/gM-09696/ http://www.seeedstudio.com/wiki/SD_Card_shield_V4.0 * 実体配線図 電源: Arduino Nanoの場合,3.3Vは外部から供給する必要があります。 3.3VはSDカード用なので100mA以上を供給可能なものが必要と思われます。 ダイオード: ダイオードは部品箱にありがちな適当なのでOKです。(オイ 一本1円で十分かと。 http://akizukidenshi.com/catalog/g/gI-07783/ ショットキ・バリア・ダイオード(SBD)でも大丈夫です。高いけど。 出力の高域カットフィルタ: この実体配線図はPC(パソコン)のAudio入力端子との接続を想定しているので省略してありますが, 一般のアナログアンプに接続するなら,以下のページの出力ローパスフィルタを入れた方が 良いです。(或いはもっとマシなフィルタ:-) http://mpu.seesaa.net/article/432426722.html
arduino-nano-wave-pwm-player.png
注意ポイント: 当然のことながら,SDカードは壊れてもおしくないものを使って下さい。 うちは2枚ほどダメになりました。(お〜〜〜い (爆 orz Arduino(ATmega328p with 16MHz crystal) UNO/Nano/etc. : 使用端子のメモ。pin番号は28pin DIPのもの。
  [ PWM ] 
         OC1A: PB1, 15pin, D9   : Audio Left
         OC1B: PB2, 16pin, D10  : Audio Right
  [ SPI ]      <Arduino>               <SD Card>
         MOSI: PB3, 17pin, D11         DI,  2pin
         MISO: PB4, 18pin, D12         DO,  7pin 
         SCK : PB5, 19pin, D13         CLK, 5pin
         CS  : PD4,  6pin, D4          CS,  1pin
         or
         CS  : PB0, 14pin, D8          CD,  1pin
  [ Button SW port ] 
         SW  :PD2(INT0),  4pin, D2, Active low
* Download arduino_wave_player_lite_atmega328p_v1.3-201604.zip v1.3: (1) FF/Rewindがリファクタでバグってしまっていたのを修正。orz (2) バージョン表示を追加。 (3) 再生中の曲の最初に戻る[F]キーを追加。 v1.2: 最初の版 arduino_wave_player_lite_atmega328p-v1.2-201603.zip 書き込み方: 解凍して出てきた arduino_wave_player_lite_atmega328p_38400bps.hex というファイルをこのツール http://mpu.seesaa.net/article/399685603.html にドラッグ・ドロップして 書き込みます。 * 動作確認 /musicフォルダにWAVファイル(fs=32KHz以上推奨(注2))を入れたSDカードを差し込んで 電源を入れると,基板上のLED(TX)がチカチカします。 十秒以内くらいでこのチカチカが停止すれば,既に音楽再生が開始されています。 TeraTermを38400bpsの設定で開けば操作可能です。 圧電素子や100円スピーカをつなげば音声確認できるかと思います。(こちらでは未確認) * avr-gccのバージョン arduino-1.6.8に付属の gcc version 4.8.1 (GCC) を使用。 これより前の版は使わない方がよい。 後の版なら大丈夫と思われるが,あまりチェックしていない。 というか,大勢のユーザが使用しているarduino版がひとまず安心。 * Petit(ぷち) FatFs コンパイル・オプションでPetit・FatFs(以下 PFatFs)を使ってコンパイルできます。 動作はコンパチブル。 問題: 音が「ブヨブヨ」でちょっと使えません。 :D バッファーアンダーフローの対策がなければ,「ブチブチ。。。」という感じに なります。 原因: 最初期から変わっていない気がする。 FatFsよりもSDカードの読み込み速度が遅いと思って上記の「SDカード速度計測機能」で 比較するとほとんど同じ値を出していた。 フラグメント問題かもしれないが詳細未調査。 * その他のWave player TMRpcm Arduinoのスケッチタイプの以下のWAV・PWMプレイヤーがある様です。 標準でfs:32KHz mono。 拡張でもう少しアップするみたいだけど詳細不明。 TMRpcm https://github.com/TMRh20/TMRpcm/wiki Youtube動画 https://www.youtube.com/watch?v=LbqPgJe3Qd4 TMRpcm/Arduinoのフォーラム https://forum.arduino.cc/index.php?topic=179027.0 SimpleSDAudio これもスケッチタイプ http://www.hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio * 参考 Arduinoシリーズ15種類の違い | まとめ比較表 http://ideahack.me/article/134 (注1) いろいろやればできそうなんだけど,この手の機能はキリがないので Lite版仕様ということにしました。今のところ。 (注2) サンプリング周波数(fs)が低すぎる場合,ちゃんとしたフィルタを入れないと PWMノイズと折り返しノイズ、(キーーン!)で耳が痛いです。xD
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | PCM/WAVE | このブログの読者になる | 更新情報をチェックする