ラベル Ubuntu の投稿を表示しています。 すべての投稿を表示
ラベル Ubuntu の投稿を表示しています。 すべての投稿を表示

2013年11月6日水曜日

AVRプログラマ自作(2) Ubunutu + avrdude + 自作回路 + RS232C USB変換ケーブル

前回作成した回路をユニバーサル基板に実装してみた。





早速、試した見たところ、以下のように途中でエラーとなった。
$ avrdude -p m8 -c ponyser -P /dev/ttyUSB0 -U flash:w:blink2.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.58s
avrdude: Device signature = 0x000102
avrdude: Expected signature for ATMEGA8 is 1E 93 07
         Double check chip, or use -F to override this check.
avrdude done.  Thank you.
どうもデバイス識別コードがうまくPC側に伝わってない様子。

たぶんPCへの入力はMOSIだと思うんだけど、
MOSIの部分の配線を間違えたのかなぁと何度も確認するがやはり正しい。

2,3日悩んでふと回路を触ってみたところ、GNDのラインで一部ハンダがはがれて接触不良を起こしていることがわかった。

その部分をハンダ付け直したらうまく動作した。

基盤裏、一番下がGND
やれやれ。

あー。一応使った部品リストを載せておこう。

2013年11月1日金曜日

AVRプログラマ自作(1) Ubunutu + avrdude + 自作回路 + RS232C USB変換ケーブル

前回、aitendoのAVRプログラマでAtmega8-16PUにプログラム転送できることは確認した。

したんだけど、いちいちWindows起動してプログラム転送するのが面倒。

なんとかLinuxでプログラム転送できないかなぁということで調べてみた。

で、RS232Cと簡単な回路でできそうなことがわかった。


  1. Serial programmer
  2. Simple Serial Programmer for AVR

1.と2.では微妙に回路が違うんだけど、2.の方は~RESETになってるので1.の回路をブレッドボードに作成。

RS232Cの方はUSB変換ケーブルを持っていたのでそれを使用。

回路全体

回路拡大

RS232C変換ケーブル

そして2.のサイトを参考に以下のコマンドを実行したところ、無事転送成功。
$ avrdude -p m8 -c ponyser -P /dev/ttyUSB0 -U flash:w:blink2.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.58s
avrdude: Device signature = 0x1e9307
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink2.hex"
avrdude: input file blink2.hex auto detected as Intel Hex
avrdude: writing flash (104 bytes):
Writing | ################################################## | 100% 20.37s
avrdude: 104 bytes of flash written
avrdude: verifying flash memory against blink2.hex:
avrdude: load data flash data from input file blink2.hex:
avrdude: input file blink2.hex auto detected as Intel Hex
avrdude: input file blink2.hex contains 104 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 19.97s
avrdude: verifying ...
avrdude: 104 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done.  Thank you.
動作確認は出来たのでユニバーサル基板に本番回路を実装しよう。


2013年8月21日水曜日

USBラジオ RDPC-101(3) RaspberryPIでのカーネルモジュール作成

警告

以下の手順で再起動後にRaspbianのカーネルモジュールが一切読み込まれなくなりました。

きっと何か間違っています。


USBラジオ RDPC-101(2)と同様にdkmsであっさりビルドできると思っていたのだが、Raspbianだと動作しているカーネルのヘッダーパッケージがないらしくモジュールがビルドできない様子。

どうも自分でカーネルソースを取得して展開する必要があるらしい。

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=71&t=17666

フォーラムの記事を参考にやってみたらカーネルモジュールのビルドができたので手順をのっけとく。

(1) カーネルソースの取得

https://github.com/raspberrypi/linux/の3.6.yブランチの右サイドバーの「Download Zip」からlinux-rpi-3.6.y.zipをダウンロードする。



(2) カーネルソースの展開

# cd /usr/src
# unzip linux-rpi-3.6.y.zip


(3) make oldconfigとmake module_prepare

# cd linux-rpi-3.6.y
# zcat /proc/config.gz > .config
# make oldconfig
# make modules_prepare

8
(4) Module.symversの取得(必要?)

wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers


(5) symlink作成

# mkdir /lib/modules/`uname -r`
# pushd /lib/modules/`uname -r`
# ln -s ${KSRC} source
# ln -s ${KSRC} build
# popd

# pushd /usr/src
# ln -s ${KSRC} linux-`uname -r`
# ln -s ${KSRC} linux
# popd

これでradio_rdpc101-0.0.1のMakefileが通るようになる。
dkmsでのモジュールビルドも可能(カーネルパッケージをアップグレードするとカーネルソースがなくなってdkmsコケるかも知れないけど)。

とりあえあえずここまで。
あとで追記します。

2013年8月19日月曜日

USBラジオ RDPC-101(2) カーネルモジュール作成

例によって検索エンジン宜しく大作戦によって以下の参考サイトを取得。

いずれも2009年の記事でLinuxカーネルのバージョンが2.6.29,2.6.32と古い。

Ubuntu-13.04の3.8.0でビルドできるか・・・

「だふめも」の方法でビルドしたものの当然エラー発生。以下の2つをやるとビルドが通った。

  1. 「#include <media/rds.h>」の行を削除
  2. lock_kernel()とunlock_kernel()を削除
できたradio_rdpc101.koを以下のコマンドでロードすると

% sudo insmod radio_rdpc101.ko

% dmesg
...

[ 3825.180109] usb 3-1: new full-speed USB device number 3 using ohci_hcd
[ 3825.347111] usb 3-1: New USB device found, idVendor=10c4, idProduct=818a
[ 3825.347127] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3825.347141] usb 3-1: Product: FM Radio
[ 3825.347152] usb 3-1: Manufacturer: SILICON LABORATORIES INC.
[ 3825.381464] USB radio driver for SUNTAC RDPC-101, Version 0.0.1
[ 3825.544140] rdpc101: freq set value = 8000
[ 3825.626581] usbcore: registered new interface driver radio-rdpc101


のようにデバイスを認識できた。

ただし「だふめも」にあるようにradio_usb_si470xというモジュールをアンロードしないと動作しない模様。

そこで/etc/modprobe.d/nosi470x.confを以下の内容で作成しておく。

blacklist radio_usb_si470x

さらに毎回insmodするのも面倒なのと、カーネルが変わった時に備えてdkmsを利用する。
dkmsにすると
  • カーネルをアップグレードした時でも自動でモジュールをビルドしてくれる
  • insmodしなくてもロードしてくれる
  • カーネルモジュールのパッケージも作れる

といいことづくめ。
dkmsについてはUbuntuTips/Others/DkmsHowToが詳しい。

dkms作成?手順を以下に示す。
  1. ディレクトリ/usr/src/radio_rdpc101-0.0.1を作成する
  2. gistからMakefile、dkms.conf、radio_rdpc101.cを1.のディレクトリにダウンロードする
  3. % sudo dkms add -m radio_rdpc101 -v 0.0.1
  4. % sudo dkms build -m radio_rdpc101 -v 0.0.1
  5. % sudo dkms install -m radio_rdpc101 -v 0.0.1
rdpc-101を接続してdmesgで認識されれば成功。たぶん。

この状態でxubuntuのミキサーツールpavucontrolを起動すると入力装置にSilicon Labs FM Radioうんにゃらと表示される。
下部の出力のバーが上下して受信してるっぽいのがわかる。


本当に受信できてるのかどうか確認するため、mplayerコマンドを色々試すが音が出力されない。

mplayer -rawaudio rate=48000  radio://77.4/capture  -radio device=/dev/radio0 volume=100  adevice=hw=2:arate=48000

alsamixerコマンドで調べたところデバイスは認識しているものの音量コントロールができない。

うーむ。どうやらalsaでは使えないっぽい雰囲気。
古いカーネルのカーネルモジュールをそのまま持ってきたせいかも知れないが原因追求しきれず。

正直alsaとかpulseaudioとかイマイチよくわかってない。

そのまま悶々と数日悩んでいたのだけどpavucontrolでは受信できてるっぽいからpulseaudioでなら出力できるんでないかと思いついた。

% parec > /tmp/moge.raw
Ctrl-C
% pacat -p /tmp/moge.raw

または

% parec | pacat


とすると録音再生できた。

あ、ちなみに周波数変更は以下のコマンドでできる。


% fm -d /dev/radio0  77.4 on 100
Radio tuned to 77.40 MHz at 0.00% volume

とりあえずここまで。

2013年8月14日水曜日

RaspberryPI+mplayer+lameでNHKラジオ第2を録音してDropBoxにアップロード

NHKラジオ第2の英語講座を録音したい。録音してどうするか。通勤中聞くのだ。
ちなみにリスンしたい番組は以下。

1年間ほぼ毎朝聴き続けた結果、読み書き発音の進歩はないが、聞き取りは若干上達したような気がする。
通勤時間長い人にはおすすめだ。

で、本題。


例によって参考サイト「Ubuntu に関する個人的メモ  > mplayer でらじる★らじるを聴く」を参考にRubyで実装。

と、実装の前にRaspberryPIでlameによるmp3エンコードとか大丈夫なのか。ということで試してみた。

mplayer -playlist http://mfile.akamai.com/129932/live/reflector:46056.asx -vo null -ao  pcm:waveheader:fast:file=>(lame -q 4 - /tmp/hoge.mp3)

数分、録音してみたけどきちんと録音できてエンコードできる。
やはりCPUを使うらしく、CPU温度は上昇。録音停止と共に下降。



で、確認できたところで、実装。

方針は以下

  • 録音対象はNHKラジオ第2のみ
  • スクリプト実行時から録音開始して与えられた秒数で録音終了
  • 録音終了後mp3ファイルをDropBoxにアップロード
  • cronで番組開始時にスクリプト起動
  • mplayerによる録音は終了タイマーとかできないっぽいのでforkして一定時間経過したらkillすることで録音終了させる(とっても乱暴だが)
シェルスクリプトベースのが正解っぽいのだがファイル名の生成とか面倒なのとDropBoxへのアップロードにRubyライブラリを使うのでRubyベースで。

mplayerの実行にシェルスクリプト(mplayer.sh)を使用。

詳細はソース読んでね。

あとDropBoxライブラリの使用方法とか、アクセストークンの取得とか割愛。

あとは聞きたい番組に合わせてcronを設定。

いやあUnixというかLinuxのcron最高。
もっともWindowsにもatコマンドてのがあるらしいけど。

2013年8月13日火曜日

USBラジオ RDPC-101(1)

GC-10 + RaspberryPIネタも早くも尽きたのでUSBラジオ RDPC-101なるものに手を出してみた。



一応やりたいことは以下。

  1. RaspberryPIに繋げて番組を録音
  2. AMラジオの遠距離受信の統計作成
1.はNHKラジオ第2の英語講座をCaptureStreamというソフトで取得してたのが、著作権の関係か何かでCaptureStream自体が終了してまったため自分で録音したいという動機。

2.は単なる興味本位で、地震の前兆として普段は入らない遠距離のAMラジオ電波が受信できることがあるという現象の確認。
本当に地震と関係あるかは疑問だが電離層の変化を掴むことぐらいはできるかなと。

だったのだけど1.に関してはサイマルラジオで簡単にネットワーク経由で番組受信ができることがわかったのでそちらでやることに。

というわけで当面は2.AMラジオの遠距離受信がターゲット

2013年7月29日月曜日

UbuntuでGC10とシリアル通信

minicomという端末ソフトでシリアル通信をする。


% minicom -D /dev/ttyUSB0

-Dの部分はデバイス名。

% ls -la /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0  7月 29 20:10 /dev/ttyUSB0

ユーザがdialoutグループに所属しとく必要あり。






Ctrl-A zでマニュアル表示する。








Ctrl-A pで通信パラメータを設定。
ここではC: 9600を選択。








Ctrl-A oで設定を開いてシリアルデバイスを設定する。
ここでF:ハードウェア流れ制御をいいえに設定する。
これをしないとコマンド入力ができない。







Enter Enterで設定を終了すると、CPMが流れ始める。
showなどのコマンドを打つと返答がある。



コマンド一覧はこちら

http://izumogeiger.blogspot.jp/2013/07/gc10.html



次回はRubyをつかってcpmをtweetするボットを製作しようの巻