チラシの裏の電子工作

電子工作、PC関係の備忘録というか、チラシの裏

mp3再生ボードMK-144Bはイマイチだった

知人からMK-144Bというmp3再生ボードを使って工作を頼まれた。
で、色々調べてみたんだけど、、、イマイチでした。
DFPlayerあたりと比べるとすごく残念な感じ。

もうほとんど愚痴。

基板サイズがデカい
フラッシュ搭載だからしょうがないんだけど、随分でかい


ジャンパのはんだ付けがかなり苦しい
基板サイズはデカいくせに、ピッチが狭すぎてジャンパのはんだ付けが随分苦しい。
ポスト立てるとかスイッチにするとか、なんか他にやりようがあっただろうに、すごい手抜き仕様。


日本語マニュアルがすごく読みにくい
モードの説明やら一通り載ってるけど、すごく見にくい…
そしてLEDの点灯/点滅の表記が一部間違ってる気がする。
各モードもわかりにくい。


マイコン側からMK-144Bの状態が一切わからない
再生中かどうかはBUSY見ればいいんだけども…
ファイルがいくつあるのかとか、現在のボリュームだとか、そういうものが一切取得できない。
そもそもMK-144BにTX端子ついてるくせに、マニュアルに「使いません」とか書いてある。
じゃあTX端子つけるなよ…


BUSY端子がたまにおかしい
停止中はHレベル、再生中はLになるはずなのに、暫く再生開始後Lレベルにならないことがある。
再生開始命令の後、Lになるまでの時間にバラつきがある。
短いファイルだとBUSYがLにならないことがある。
マニュアルによるとHレベル=2.1Vらしい。ってAVRは3VぐらいないとH確定にならないんじゃなかったっけ…
そして実際に測ってみたら2V割ってる事もある。
ダメじゃん。
Arduinoとかで使う場合はポートをプルアップすりゃとりあえず認識するけど、MK-144B側の回路が謎なのでちょっと不安。


外付けアンプが必要
まあ、これは製品仕様だからしょうがないけど…
DFPlayer知ってたら残念過ぎる


存在しないファイル番号を指定するとファイル番号1が再生される
ファイル数を取得する方法もないのにこれは致命的。
ランダム再生なんて気の利いた機能なんて当然ない。


電源が6V以上
AVRとかで使うときに地味に面倒。
といいつつも、USBの5Vでも動いた。


USBを接続すると電源ピンに3.3Vが漏れてくる

フラッシュの内容を書き換えるときは、MK-144Bをマイコン等から切り離さないとマイコンが動いちゃう。


USBの相性が酷い
フラッシュ書き換えようとおもってPCに接続したら認識しない。
ハブ経由にしたりハブ経由をやめたり、色々試したら使えたり使えなかったり。


DFPlayerと比べると、本当に残念な感じ。
値段も特別安いわけでもないし。
利点は…比較的小容量で面積のでかいフラッシュを乗せてるので、microSDよりは耐久性が高そうってことぐらい?
マイコン制御ではなく、スイッチ押したら決まった音が出るものを作るならそれなりに使えるだろうけど、わざわざこの製品を選ぶ理由にはならなさそう。


続きを読む

スポンサーサイト

カテゴリ:電子工作

ArduinoでSDのCIDなどを読む

何となくArduinoのSDカードライブラリを眺めてたら、特殊なことをしなくてもCIDやCSDなどのレジスタが読めることに気が付いた。
これらのレジスタはUSBカードリーダー経由のPCではたぶん取得できない。
android端末のような、OSがSDカードを直接制御するような端末であれば簡単に取得できるんだけど…

というわけで、せっかくなので作ってみた。
多分ちゃんとしたArduino+SDカードシールドなら配線不要でスケッチ書き込むだけだけど、そんな高尚なものは持ってないので自力で作る。

部品は中華NANO互換機

SDカードソケット
http://www.aitendo.com/product/3881

あとはユニバーサル基板とか抵抗とか。
全部で部品代は500円ぐらい。



SDカードDIP  
割と無理やり。両面テープで固定すると良い感じ。

CIDを読むだけの人
SDを差し込んだら全体の電源が落ちてしまう症状が出てたので、偽NANOの3.3V供給能力不足かと思ったら、単に配線間違えてるだけだったので、真ん中のでかいコンデンサは不要。
偽NANOは5Vなので、3kオームと1.5kオームで分圧。

ソースはSDライブラリのCardinfo.inoを改造。
CIDはhttp://goughlui.com/static/cidecode.htmを参考にした。
CSDはよくわからんので、片っ端から表示。

init...ok.
***** CID *****
RAW:0353445355333247806183AFAF00B773
Manufacturer ID:03 Sandisk
OEM ID:SD (0x5344)
Product Name:SU32G
Product Revision:8.0
Product SN:0x6183AFAF
Manufacturing Date:2011/7
crc:0x39 (raw:0x73)

***** CSDv2 *****
RAW:400E00325B590000EDC87F800A4040C3
csd_ver:1
taac:14
tran_speed:50
ccc_high:91
read_bl_len:9
ccc_low:5
dsr_imp:0
read_blk_misalign:0
write_blk_misalign:0
read_bl_partial:0
c_size_high:0
c_size_mid:237
c_size_low:200
sector_size_high:63
erase_blk_en:1
wp_grp_size:0
sector_size_low:1
write_bl_len_high:2
r2w_factor:2
wp_grp_enable:0
write_partial:0
write_bl_len_low:1
file_format:0
tmp_write_protect:0
perm_write_protect:0
copy:1
file_format_grp:0
crc:61
CardSize:37376

Card type: SDHC
Volume type is FAT32

Volume size (bytes): 1829240832
Volume size (Kbytes): 1786368
Volume size (Mbytes): 1744





以下ソース

続きを読む

カテゴリ:電子工作 - テーマ:ハードウェア - ジャンル:コンピュータ

SDカードを調べる

随分前からだけど、安いSDカードは偽物が混ざってるって噂を聞いたことがある。
ぶっちゃけあんまり気にしてなかったけど、調べられるもんかなと思って調べてみた。

LinuxならCID等のレジスタが調べられる。

# cat /sys/block/mmcblk0/device/cid

とか。
/sys/class/mmc_host/mmc0/mmc0\
にも同じようなものがあった。


取得したcidの意味は、以下のサイトで調べられる。
http://goughlui.com/static/cidecode.htm


Manufacturer ID、OEM/Application IDについてはまとまった情報がない…

https://twitter.com/mihadenchi/status/738778499998093312
http://www.asuka.cx/zaurus/sdcard/
http://www.asuka.cx/zaurus/SanDisk4GB/
http://miharin.wktk.so/sd/
http://codegist.net/snippet/python/decode_sd_cidpy_mttronc_python



というわけで、目についた物をリストにしておく。
IDOEM/AppNAME(カッコ内はOEM先)
0x01PA 0x5041Panasonic
0x02TM 0x544DToshiba
0x03SD 0x5344Sandisk
PTSandisk?手持ちのSDSQUNC-064G-GN6MA
0x04Sandisk?怪しい。
0x06RKRitek
0x09ATATP
0x13KGKingmax
0x19DYDynacard
0x1APQPower Quotient International
0x1BSMSamsung
0x1CSVTranscend
0x1DADADATA
0x1EAB???(Princeton、FUJIFULM、Calarion、Transcend)
0x27PHPhison
0x28BEBarun
0x31SQ???(Princeton)
0x51S`STEC/SunokeTech
0x5DSBSwissBit AG
0x61NLNetkust
0x63CZCactus Technologies
0x74JEJiaelec
0x82JTJiang Tay Technical
0x83NCNetcom Technology(HK)
0x84TFStrontium Technologies Pte

恐らくメジャーどころはこれで全部だろうから、Sandiskの製品買ったら中身が違った!怪しいから重要機器には使わないようにしよう!
ぐらいの自衛にはなる、といいな。
多分これを根拠に販売店に文句言っても『(´・ω・`)知らんがな』って言われそうだし。

Transcendとかの割と有名どころでも、過去にはOEM調達をしてたような形跡があるようだし…
販売元とMIDが一致しないからといって一概に偽物かって言われると…うーん。


続きを読む

カテゴリ:電子工作 - テーマ:ハードウェア - ジャンル:コンピュータ

ArduinoNano互換機のDTRリセットを無効にする

Arduinoは基本的にシリアルポートがオープンされたタイミングでリセットがかかります。
おかげでスケッチをアップロードするときにわざわざリセットスイッチを押さなくて良いのですが、待ち受けが基本のデバイスを作るときに案外邪魔。

PC側のアプリを作るときにDTRをoffにして作ればいいのですが、既存アプリなんかを使うときはそうもいかない。
というわけで、ハード側に細工する。

今回ターゲットとしたのはamazonで売られてるNano互換機。
時期によって値段が違うけど、自分が買ったときは1個320円。
注文から到着まで2週間ぐらいかかるけど、安いからね。

HiLetgo Mini USB Nano V3.0 ATmega328P CH340G 5V 16M マイクロコントローラーボード Arduinoと互換




USBシリアルチップがCH340Gというチャイナ製品になってる。
データシートを見てみると、15ピンがDTR。


で、手っ取り早く足上げ。
DSC_0087 1

分かりにくいので横から。
DSC_0085 1


というわけで、自動リセットの無効か完了。
足が戻ってこないように細く切った絶縁テープを張っておくと良いかも。


カテゴリ:電子工作

ArduinoでPCINT割込

Arduinoで割込といえばINT0/1だけど、沢山のピンで割込を使いたい時のメモ。
(Arduino0023/ATmega168P)

たまに使おうとすると、PCINT,PCMSK,PCIEの対応を忘れていて調べるのが非常にめんどくさいので、もう定型にしてしまおうというものぐさ。


#define SW_INT_PCICR ((1<<PCIE0)|(0<<PCIE2)|(0<<PCIE2))
#define SW_INT_PCMSK0 ((1<<PCINT0 )|(1<<PCINT1 )|(1<<PCINT2 )|(1<<PCINT3 )|(0<<PCINT4 )|(0<<PCINT5 )|(0<<PCINT6 )|(0<<PCINT7))
#define SW_INT_PCMSK1 ((0<<PCINT8 )|(0<<PCINT9 )|(0<<PCINT10)|(0<<PCINT11)|(0<<PCINT12)|(0<<PCINT13)|(0<<PCINT14))
#define SW_INT_PCMSK2 ((0<<PCINT16)|(0<<PCINT17)|(0<<PCINT18)|(0<<PCINT19)|(0<<PCINT20)|(0<<PCINT21)|(0<<PCINT22)|(0<<PCINT23))

ISR(PCINT0_vect){
    Serial.println("PCINT0_vect");
}
ISR(PCINT1_vect){
    Serial.println("PCINT1_vect");
}
ISR(PCINT2_vect){
    Serial.println("PCINT2_vect");
}

void setup(){
    //割込有効化
    PCICR  |=SW_INT_PCICR;
    PCMSK0 |=SW_INT_PCMSK0;
    PCMSK1 |=SW_INT_PCMSK1;
    PCMSK2 |=SW_INT_PCMSK2;

    delay(10000);

    //割込無効化
    PCICR  &=~SW_INT_PCICR;
    PCMSK0 &=~SW_INT_PCMSK0;
    PCMSK1 &=~SW_INT_PCMSK1;
    PCMSK2 &=~SW_INT_PCMSK2;
}

void loop(){}



美しくはないけど、割込をマトリクス状にしてしまったら解りやすいかと。
上の例では、PCINT0~3の割込を有効にしたり、取り消ししたり。
もっといい方法があればいいんだけども、ライブラリにするのもおっくう…

カテゴリ:電子工作

次のページ

FC2Ad