2014年5月10日土曜日

rasbbery pi で音を鳴らす

組込み用途で使用する時って画面が無いから、起動シーケンスが終わった後にピーってビープ音か何か欲しくなるので調べてみた。

1.まず必要なユーティリティーをインストール。
$ sudo apt-get install -y alsa-utils mpg321 lame mplayer


2.snd-bcm2835が入っているかチェックする。
$ lsmod

入ってなければ
>sudo modprobe snd-bcm2835


3.鳴らすポートの選択。今回はアナログを選んだ。
$ numid= { 0=auto, 1=analog, 2=hdmi }

$ amixer cset numid=3 1


4.音が鳴るか確認。

サイン波
$ speaker-test -t sine -f 440 -c 2 -s 1

Wav音源
$ wget http://www.jahozafat.com/0093058674/WAVS/Movies/Full_Metal_Jacket/numnuts.wav

MP3音源
$ wget http://www.hmix.net/music/c/c3.mp3
$ mpg321 c3.mp3


M4A音源
$ mplayer test.m4a



 5.ボリューム調整
$ amixer cset numid=1 -- 80%


6. WAV→MP3変換をしてみる
$ lame numnuts.wav numnuts.mp3


おもちゃみたいな基板から音楽が流れるとちょっとだけ感動する。。

 
参考サイト
http://jeffskinnerbox.wordpress.com/2012/11/15/getting-audio-out-working-on-the-raspberry-pi/



2014年5月2日金曜日

SPI通信の導入式

SPI通信で遅れて1ビットずれてしまい、1日悩んだ。SPI通信の仕様をちゃんと読まなかったからだ。

今回はちゃんと読んで理解した内容を忘れないようにメモを残しておく。

覚えておくこと。
・マスター・スレーブ間の通信である。(当たり前)
・配線は5本、CLK、MISO、MOSI、CE、GND
・MISO(Master In Slave Out)、
・MOSI(Master Out Slave In)

スレーブ側はIC仕様によって異なるので、例としてL6470の場合、

  →立上りで入力(MISO)
  →立下りで出力(MOSI)

という仕様である。
これを端子名 MISO、MOSIと書いた部分に注目!
MasterとSlaveは入出力が反対になるのがSPIの特徴である。

ディジーチェーン2つ繋いだ構成でSPI通信を行うとき
4バイト送ったら最初の2バイトがマスターに届けられてないといけない。

これを考えると、クロックのタイミングは
 MISO、MOSI MISO、MOSI MISO、MOSI MISO、MOSI、、、、

こういう順番と

 MOSI、MISO、 MOSI、MISO、 MOSI、MISO、 MOSI、MISO、、、、

どっちが正しいか。

考えれば最後に出力になっていないと、前者だと1ビット欠落してしまう状態になる。(←ここではまった)

要するにCLKの論理は、スレーブの仕様によって決まって、
 マスターのデータ取り込みタイミングは、MISOになるように設定する。

L6470の例だと、
 ・データを取り込み(MISO)は立ち上がり
  ・MISOが最後にした場合、CLKエッジはHIGHで終わるので負論理(^CLK)

波形が乗っているサイトの見てみると、
https://www.diolan.com/dln_doc/spi-transfer-modes.html

CPOL=CLKエッジ最後の状態 ・・・ HIGHなので CPOL=1
CPHA=CLK取り込み開始状態 ・・・ HIGH(HIGH→LOW)なのでCPHA=1
 
Mode=|CPOL|CPHA|のビットアサインなので、


Mode=11 =(3) Mode=3

Androider