いろんなこと
いろんなことやってます
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ラミィキューブタイマーの製作 その4 スイッチとブザー
今度はスイッチ入力とブザーをやります。
これで最低限のラミーキューブタイマーが作れるはず。

まずはスイッチ入力。

前に作った回路図
ラミィキューブタイマー回路図

スイッチはRA4になります。スイッチが押されるとRA4は”1”になります。
前回のカウントダウンのソースにスイッチの入力判定を追加します。

スイッチ入力判定追加のソース

チャタリングの対策は入力の積分って処理をしたほうが良いらしいけど、よくわからなかったので単純にウエイト入れています。わかるようになったらそのうち。
ボタンを一度離さないと次の入力判定はしないっていう処理にしました。じゃないと押しつづけたらずーっと反応するのでなんかかっこわるい。
後、TRISAの設定を忘れないように。(はまったw)


次はブザー。
これは単純にポートを高速にオン・オフすれば鳴るんじゃないかと思ってた。これは簡単そう。
30秒前、15秒前でお知らせ音。
10秒前になったら1秒ずつ警告音。
ボタンを押したらクリック音。
0秒になったら終了音。
の処理を追加します。

ブザー処理追加のソース

高音、低音の2種類それぞれに長音、短音で、合計4種類の音を設定しました。
組み合わせれば効果音程度ならこれで間に合うかな?
もしかしたら鳴っている途中でタイマー処理に入ってしまうかもしれないので、鳴らすときはタイマーを切るようにしています。
タイマー切ったら正確な時間が測れないけど、そこはお遊びということで。


本当はこれでラミィキューブタイマーとしては機能は十分だと思います。だけど、もう少し豪華な機能を付けたいと思います。
ここでボリュームの機能が活躍するのです。

次はAD変換をやります。
これも難しそうだ。

つづく
スポンサーサイト
ラミィキューブタイマーの製作 その3 7セグLED
7セグLEDを表示します。

まずは簡単に。
7セグLED表示のソース

そして動いている所。
7セグLED表示17セグLED表示2
わかりにくいけど、”60”って表示されています。60秒ってことね。

SDCCってなにもライブラリないのね。ウエイト関数も自分で作るのか。
まずほんとに表示だけ。単純に繰り返し。一応ダイナミック表示だと思う。

次にこれを一秒ごとにカウントダウンします。
単純に一秒のウエイトを入れただけではだめです。1桁目しか表示されない。まあそうだ。
やっぱり割り込み処理でないと無理っぽい。苦手だ。
あきらめて割り込み処理について調べます。


で、7セグLEDがちらつかない程度の割り込み時間で表示するようにしてみました。

7セグLED表示タイマ0割り込み版のソース
ラミィキューブタイマー基盤3
とりあえず約一秒ずつカウントダウンしながら表示できました。
0になったら60に戻ります。(このソースだと0は表示されないけど。まあとりあえず)

ここまで、実はかなり時間かかってます。
調べるのしんどい。
もうどこを参考にしたか思い出せないのでリンクは無し。

次はスイッチとブザーをやります。

つづく
ラミィキューブタイマーの製作 その2 回路図
さっそく回路図を書きました。

ラミィキューブタイマー回路図
配線が多い。
あ、回路図間違い。PICは16F88を使います。ピン配置は同じだと思う。

抵抗値とか得に計算とかしてません。なんとなくいろんなサイトを参考にしてます。
7セグは今思えば3桁にしとけば良かった。
多分いろいろ間違っていると思います。とりあえず動けばオッケーってことで。


で、出来ました。
ラミィキューブタイマー基盤1ラミィキューブタイマー基盤2
7セグのハンダがめんどい。3桁にしなくて良かった。w

パコパコ叩けるように、ボタンはゲームセンターの筐体に使っているボタンです。
ケースはタッパを使いました。
むやみに丈夫なものではなく、壊れてもすぐに修理が出来る様に。逆転の発想だ。(資金が無かっただけ)
そして、ほとんどの部品はジャンクから。エコだ。

次はソフトを作ります。

つづく
ラミィキューブタイマーの製作 その1
PICに書き込みが出きるようになったので何か作ろうと思います。

ラミィキューブというゲームが回りで流行ってたことがあります。
遊び方はここを見るとわかるかな?
これの正式ルールが1人の1ターンの持ち時間は最大1分ということで、本当ならタイマーが必用なのですがありませんでした。なので、なかなかゲームの進み具合が遅く、これを改善しようとタイマーを作ることにしました。
で、調べたら・・・もう売ってるのね。

終了。



いやいや、作ることに意義があるのでね。PICの勉強を兼ねてやります。

今回は
・7セグメントLEDのダイナミック点灯制御
・押しボタン
・ブザー
・ボリューム
・タイマー割り込み
を使ってみたいと思います。(いっぱいやることあるな。できるかな?)

作るからには市販品よりもよけいな豪華な仕様にします。
・時間を任意に設定
・30秒前、15秒前でブザーでお知らせ
・10秒前から一秒ごとにカウントダウンのブザー(あせりを誘発)
・次はだれ?表示
とりあえずこのくらいかな?

雰囲気としては、
ハチワンダイバーの将棋対決の時のタイマーをパコパコ叩く、あんな感じでゲームが出きると面白いだろうなー。
そんな感じです。

ではさっそく回路を設計します。

つづく
PIC書き込み出来た
PICに書き込みできたけど・・・WIN版のPickit2プログラマでやりました。
死亡と思われたPICも書き込みできました。
でも根本的な解決になってない。なるべくubuntuでやりたかったんだけど今回は負けた。
そのうち解決しよう。
とりあえず先に進まないと。
PIC死亡
16F88を使ってなんか作ってて突然書き込みが出来なくなりました。
途中まで順調に何度も書き込み出来てたのに、ある時からなんか書き込みが不安定になり

Configuration Memory Errors

Address Good Bad
002007 003F18 000000

こんなエラーが出て、その次以降の書き込みは
Program Memory Errors

Address Good Bad
000000 000000 003FFF

こんなエラーが出て、このエラーが出ると2度と正常に書き込み出来なくなりました。
これって壊れたってことなんだろうか?

pic死亡
死亡したPIC達。

とりあえずもう壊したくないので開発中止。
原因不明だ。

パッシブミキサー
こんなの見つけた。
こんなんでミキサーになるんだねぇ。
今はギターアンプにマイクとMP3プレーヤーを繋ぐ時にBOSSのBX-4って小さいミキサーを使ってるけど、パッシブミキサーに置き換われば電池使う機器が減らせるかも。

で、作ってみた。
まずは回路図。例によってEAGLEに慣れる為にわざわざ回路図作りました。
ジャックの図がわからなかったので適当です。
最初はマイクの所も47kΩだったり、それぞれのチャンネルにスライドボリューム付けたりしたけど、最終的にはこんな感じ。
パッシブミキサー回路図

完成(外観)
パッシブミキサー閉

完成(中身)
パッシブミキサー開

ケースはダイソーのネジセットのケース。
抵抗はジャンクから取り出したやつ。
買ったのはジャックだけ。

使用用途は、ワイヤレスマイクの受信機とMP3プレイヤーをミキシングしてギターアンプに入れるので、
入力は標準モノラルジャックとステレオミニジャック。
出力は標準モノラルジャック。

使ってみたところ、マイクの受信機のレベルがかなり低くてぜんぜん聞こえませんでした。
最初は全部に47kΩだったのを、マイクの所だけ1kΩにしたらそこそこ聞こえるようになりました。
なんか問題あるかもしれません。この辺よくわかんない。
そもそもなんでこんなんで音が混ざるのかよくわかってないです。
各チャンネルにボリューム付けたけど、結局マイクは常に100%にしないと使い物にならなかったのでボリュームやめました。中の基盤はその名残り。

こんなのでもちゃんと音が合わさって鳴ってる。すげー。
今度大音量でテストしてみます。
玄箱にHDDを増設
玄箱PROをファイルサーバに使っています。
そのHDD容量がやばくなってきたので増設します。

現在の状態は
玄箱PRO本体に500G。
増設USBHDDに1T。

増設USBのケースは玄蔵Duoで2台までHDDが入るので、今回はここにもう一台1.5TのHDDを入れます。

で、前回USBHDDの増設をやったときにかなり苦労した想い出があるけど、どんな作業したかさっぱり忘れてしまいました。
また、調べながらやります。

とりあえず接続した時のdmesgは
SCSI device sda: 976773168 512-byte hdwr sectors (500108 MB)
SCSI device sda: drive cache: write back
SCSI device sda: 976773168 512-byte hdwr sectors (500108 MB)
SCSI device sda: drive cache: write back
sda: sda1 sda2 sda3 sda4
   ・
   ・
SCSI device sdb: 1953525168 512-byte hdwr sectors (1000205 MB)
sdb: assuming drive cache: write through
SCSI device sdb: 1953525168 512-byte hdwr sectors (1000205 MB)
sdb: assuming drive cache: write through
sdb:<6>kjournald starting. Commit interval 5 seconds
   ・
   ・
SCSI device sdc: 2930277168 512-byte hdwr sectors (400790 MB)
sdc: assuming drive cache: write through
SCSI device sdc: 2930277168 512-byte hdwr sectors (400790 MB)
sdc: assuming drive cache: write through
sdc: unknown partition table
   ・
   ・

こんな感じ。関係ありそうなところを抜き出してみました。(今一dmesgの見方がわからない)
新しく増設するHDDを認識しているみたいだけど、400Gしか認識していない?
もしかして玄蔵Duoの限界なのかな?
とりあえず作業を続けます。

新しいHDDはsdcらしいのでfdiskしてみます。
suになってから
fdisk /dev/sdc

Unable to open /dev/sdc

オープン出来ないとな。なぜか?
/dev の中を見るとsdcがありませんでした。
普通は自動的に作られるらしいけど、出来ていません。
あー、確か前回の時もこんな感じで悩んだっけなー?
たしかデバイスファイルを作った気がした。
調べます。

あー、これだ
これで前回sdbを作ったんだった。思い出した。chnodだ。
で、今回は
mknod /dev/sdc b 8 32
mknod /dev/sdc1 b 8 33
mknod /dev/sdc2 b 8 34
mknod /dev/sdc3 b 8 35
mknod /dev/sdc4 b 8 36

としてデバイスファイルを作成しました。

再びfdisk
fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 182401.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help):

キタ。でも何書いてるかわかんない。w
ここを参考に
まずp(現在の状態を確認)を入力
Command (m for help): p

Disk /dev/sdc: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

お、1.5Tを認識してる。
n(新しいパーティションを作成)を入力
Command (m for help): n
Command action
e extended
p primary partition (1-4)

どんどん進める。
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-182401, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-182401, default 182401):
Using default value 182401

Command (m for help):

最後にw(パーティションテーブルの書き換え)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

これでパーティション出来たはず。
fdisk /dev/sdc

The number of cylinders for this disk is set to 182401.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/sdc: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 182401 1465136001 83 Linux

Command (m for help):

出来たっぽい。
すかさずフォーマット。
mkfs -t ext3 /dev/sdc1
mke2fs 1.40-WIP (14-Nov-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
183156736 inodes, 366284000 blocks
18314200 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
11179 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

フォーマット終了。
マウントしてみよう。
マウントポイント /mnt/usbhdd2 を作って
mkdir /mnt/usbhdd2
mount /dev/sdc1 /mnt/usbhdd2

df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/sda2 2.8G 332M 2.3G 13% /
tmpfs 62M 0 62M 0% /lib/init/rw
tmpfs 62M 0 62M 0% /dev/shm
/dev/sda1 54M 5.7M 46M 12% /boot
/dev/sda4 456G 433G 169M 100% /mnt/hdd
/dev/sdb1 917G 871G 0 100% /mnt/usbhdd1
/dev/sdc1 1.4T 198M 1.3T 1% /mnt/usbhdd2

良いみたい。残り1.3Tだけど。w
これをfstabに追記。

#
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=622 0 0
#none /dev/shm tempfs defaults 0 0
/dev/sda2 / ext3 defaults 1 1
/dev/sda3 swap swap defaults 0 0
/dev/sda1 /boot ext3 defaults 1 1
/dev/sda4 /mnt/hdd ext3 defaults,noatime 0 0
/dev/sdb1 /mnt/usbhdd1 ext3 defaults,noatime 0 0
/dev/sdc1 /mnt/usbhdd2 ext3 defaults,noatime 0 0

こんな感じ。
fstabについてはここを参考。

これで終了。あとはsambaのセットをして、まあ合わせて作業時間5時間くらいかかったか。
久しぶりにコンソールがりがり叩いた。疲れた。
ubuntuでPIC(PICへ書き込み)
最初はやっぱりLEDを点滅するのを作ります。

まず回路図。
EAGLE を使いました。synapticでインストール。
この程度にわざわざ回路図を書かなくても良いけどソフトに慣れる為に。結構時間かかった。
LED_Bllink-回路図



そしてソフト。

#include
#include

int at 0x2007 __config = _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _CP_OFF & _CPD_OFF;

void wait( long cnt )
{
 while(cnt > 0)
 {
  cnt--;
 }
}

void main()
{
 TRISIO=0x00;
 GPIO=0x00;
 while(1)
 {
  GPIO=0x3F;
  wait(5000);
  GPIO=0x00;
  wait(5000);
 }
}

とりあえず適当。
WindowsではMikroCを使ってたので、すぐ出来るかな?と思ってたけど、時間かかった。半日つぶした。


そして動いてるところ。
写真ではわからないけど、一応点滅してます。めんどくさかったので抵抗は付けてない。
LED_Bllink-動作


とりあえずubuntuでPICの開発環境が整いました。
ubuntuでPIC(アダプタの製作)
Pickit2 で書き込む時にPICと接続しやすいように、アダプタを作ります。
ここここを参考に作りました。

とりあえず、当面使うPICは
12F675
12F683
16F88
くらい。
なので、8ピンと18ピンのPICに対応するアダプタにします。

こんな感じ
Pickit2アダプタ
とりあえずデバイス名の取得は出来た。
次は適当なプログラム組んで書き込みしよう。
ubuntuでPIC(デモボードの書き込みテスト)
せっかくデモボードが付いてるのを買ったので、Pickit2 が正常に動くかテストを兼ねてデモボードに書き込んでみた。
付属のCDにデモボード用のサンプルがあったので、それを使ってテストをした。
ちなみにここを参考
あと、デモボードについてはここにいろいろ書いてあった。

まずはデバイス認識テスト
pk2cmd -P
Auto-Detect: Found part PIC16F887. <ーデモボードに載ってるPICの種類

お、正常だ。
続いて書き込み。
pk2cmd -P -FBlink.HEX -M -R
Auto-Detect: Found part PIC16F887.

PICkit 2 Program Report
11-2-2010, 22:44:27
Device Type: PIC16F887

Program Succeeded.

Operation Succeeded

-F がファイル指定(Fの後はスペースを開けない)
-M が書き込み
-R がリセットを解放(あまり意味わかってない)

書き込みの様子
デモボード書き込みテスト

そしてデモボードを起動
デモボード実行テスト
LEDが点滅した。ちゃんと書き込めたらしい。

これで Pickit2 がちゃんと動くことを確認することができた。
ubuntuでPIC(Pickit2の設定)
Pickit2 を PC に繋げて pk2cmd を入力すると
pk2cmd -?V <ーバージョン表示オプション

Executable Version: 1.20.00
Device File Version: 1.55.00
OS Firmware Version: PICkit 2 not found

Pickit2 が見つからないらしい。
他のオプションでも
pk2cmd -P

No PICkit 2 found.

だめだ。
むむむ。

ここの様に故障かと思ったけど、Busyが点滅した。ちゃんと動いているらしい。

いろいろ調べてやっと発見
なるほどデバイスの権限か。

とりあえずやってみた。
まずUSBの情報を調べる。
lsusb
Bus 001 Device 022: ID 058f:6377 Alcor Micro Corp. Multimedia Card Reader
Bus 001 Device 005: ID 15a4:1336
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 005: ID 04d8:0033 Microchip Technology, Inc.     <ーこれだ
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 011: ID 1bcf:0007 Sunplus Innovation Technology Inc.
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

これによると /dev/bus/usb/004/005 が Pickit2 らしい。
これのパーミッションを 666 にすると良いらしい。
/dev/bus/usb/004$ ls -al
合計 0
drwxr-xr-x 2 root root 80 2010-02-10 03:22 .
drwxr-xr-x 7 root root 140 2010-02-07 22:59 ..
crw-rw-r-- 1 root root 189, 384 2010-02-07 22:59 001
crw-rw-r-- 1 root root 189, 388 2010-02-10 03:22 005

/dev/bus/usb/004$ sudo chmod 666 005
/dev/bus/usb/004$ ls -al
合計 0
drwxr-xr-x 2 root root 80 2010-02-10 03:22 .
drwxr-xr-x 7 root root 140 2010-02-07 22:59 ..
crw-rw-r-- 1 root root 189, 384 2010-02-07 22:59 001
crw-rw-rw- 1 root root 189, 388 2010-02-10 03:22 005

パーミッション変更した。
そして pk2cmd 実行。
pk2cmd -?V

Executable Version: 1.20.00
Device File Version: 1.55.00
OS Firmware Version: 2.32.00

お、表示された。
しかも最新のファームウエアだ。

とりあえず動く様になったけど、このままだと抜き差しする度にパーミッションの変更をしないとならないので
自動で動くように
sudo touch /etc/udev/rules.d/71-microchip.rules

でファイルを作り、
ATTR{idVendor}=="04d8", ATTR{idProduct}=="0033", OWNER="root",GROUP="root",MODE="0666"

と入力して保存。
この辺はリンク先のマネ。

無事動くようになった。

とりあえずこれで Pickit2 が動くようになったみたい。
次は実際に PIC に書き込みだ。
ubuntuでPIC(ソフトインストール)
前の覚え書きで
統合環境 Piklab
Cコンパイラ SDCC
アセンブラ gputils
プログラマ pk2cmd
上記をインストールすれば良いらしいことがわかった。

Piklab と SDCC は synaptic で見つかったのでお手軽にインストールした。
もしバージョンが古いことによる不具合があったら、最新版を入れてみる。

gputils は ここから gputils-0.13.7.tar.gz を落とした。
これを /usr/local/share/gputils にコピーして解凍して
sudo configure
sudo make
sudo make install
した。

pk2cmd は このページの下にあるPK2CMD V1.20 Linux & Mac OS X Source Code with Makefileを落とした。
これを /usr/local/share/pk2cmd にコピーして解凍して
sudo make linux
sudo make install
した。

これでソフトのインストールは終わりのはず。
ubuntuでPIC(購入)
Pickit2買いました。
pickit2
単体バージョンのは売りきれてたので、デバッグエクスプレス。

ついでに
avrispmk2
AVR用のライターも。

その他にもいっぱい
秋月での買い物100207
つい買い過ぎてしまう。

とりあえずPIC開発環境を構築します。
ubuntuでPIC(覚え書き)
話の経緯。
Windowsマシンを使ってたときは、秋月のライターを使ってた。
そのマシンが急に起動しなくなった。
復旧作業がめんどくさくてそのまま。
で、ubuntuで出来ないかな?と思った。
話の経緯終わり。


ubuntuでPIC開発環境を整えよう。の覚え書き。
ひとまずここを参考。

なるほど。
とりあえず PICkit2 を買います。
話はそれからだ。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。