というわけでPICプログラマキットについてきたおまけのPIC16F84Aで7セグメントLEDドライバを作ってみました。ボタンをおすと0〜9までのカウントを繰り返します。
PWMによる明るさ制御や、数字の入れ替えの際のクロスフェードなども実装しています。
あと別にボタンでカウントアップするものを作りたかったのではなくて、こっちが本題なんですが、シリアル通信で外部のマイクロコントローラから制御できるようになってます。ただしテストできてにゃい。
ソースはこんな感じ(sdcc用)。sdcc結構バグっぽいかも。いろいろ試行錯誤した途中でのハテナだったのでいったい何が原因だったかを知るには至ってませんが。
たくさん買ったPIC16F716-I/PはPIC16F84Aとよく似てるのでこのソースをちょっと修正すれば動きそうですね。
PICプログラマキットにPIC16F84Aがオマケでついていたので、とりあえず初めてのPICプログラミングとして、LEDを点滅させるのをやってみました。Ver4用のコントローラはファームウェアをぶっ壊して使えなくしてしまいましたが、Ver3.5のコントローラならばこちらのプログラムでLinux上から書き込めるのです。わーい。できた。
秋月電子のPICプログラマキットver.4のファームウェアのバージョンアップが「error code=0x55」などといって失敗し、正常に起動しなくなってしまったorz なんでそこで失敗するのかのう
しょうがないのでPICプログラマーVer.4 バージョンアップキットこれを買いに行く予定。正常なコントローラからは他のコントローラを書き換えられるようなので………
あと買ったPIC16F716-I/Pってまだプログラマーが非対応なのね。近日リリース予定のベータ版で対応可能と書いてあるからそれをまつか。
メインマシンはいままでxfsにしていましたが、細かいファイルの扱いはjfsのほうがよさげなので、Subversionつかってるとなおさらなソースファイルの山に対処するためにxfsからjfsにしました。
やり方は簡単。あらかじめ/etc/fstabのxfsと書いてある部分をjfsに書き換えておいたら(このとき該当ファイルシステムのUUIDも控えておくように)、update-initramfs -k all -uして、knoppixとか適当なLive Discで起動したら、別ハードディスクにcp -xvpRでコピーして、ファイルシステムを作り直して(このときにjfs_tune -U <UUID>でUUIDを元の物と同じにするように)、cp -xvpRでコピーして戻すだけ。
しかし/etc/fstabを書き換えるのはいいんですが、一度、update-initramfsをするのを忘れたために、jfs領域がxfsでマウントされるというカオスな状態になりました。jfsでフォーマットされてるにもかかわらず、ある程度ファイル読めるのね。
dmesgをみているとどうもsony-laptopかsonypiかどちらかが悪さしているようなので
/etc/modprobe.d/blacklistに
blacklist sony-laptop blacklist sonypi
を追加し、/etc/init.d/hotkey-setup の
Sony*) #modprobe sonypi; # Needed to get hotkey events #modprobe sony-laptop
の二行の modprobe をコメントアウト。
$ sudo update-initramfs -k all -u
してリブート。
一応サスペンドはできるようになったが、ハイバネートはうまくいかない。電源が切れずにリブートしてしまう。
サスペンドができただけでもよいとしますかね。
Xが遅い件について。
どうもXのログを見ていてもよくわからんのですが、ふとXのドライバをvesaではなくてカーネルフレームバッファ(fbdev)にしたら、ある程度の改善を見ました。
/etc/X11/xorg.confは以下のようにします (driver "fbdev"を追加)。
Section "Device" Identifier "Configured Video Device" driver "fbdev" EndSection Section "Monitor" Identifier "Configured Monitor" EndSection Section "Screen" Identifier "Default Screen" Monitor "Configured Monitor" Device "Configured Video Device" EndSection
カーネルフレームバッファを有効にするため、/boot/grub/menu.lstの以下の部分を変更します。
# kopt=root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro vga=0x367
vga=0x367 を追加します。0x367はモード番号です。vesaドライバで起動するとXのログ(/var/log/Xorg.0.log)に大量にどばーっと出てくる、Mode: 161 (1366x768)とかの数値(16進)に0x200を足した数値です。
ちなみに0x367は1600x768x16bppです。0x368だと1600x768x32bppになりますが、さすがにもっと重くなるので、ハードウェアアクセラレーションの効かないこの状態では16bppでもしかたないかな、と。
同じく/boot/grub/menu.lstを編集し、Ubuntuロゴを止めます。フレームバッファを使用すると表示が変になるし、Xを使っていても画面の上の方になんかゴミが表示されるようになってしまうからです。
# defoptions=
quiet splashを削除します。そうしたらこれらを実際のメニューに反映するために
$ sudo update-grub
を実行してリブートします。
psbドライバが何事もなく使えればいいのに。
キターー
のは数日前の話ですが、とりあえずVistaは起動してリカバリディスクをつくったらおさらばして、Ubuntu Intrepidを入れてみました。ってか「インターネットに接続する」ってのをクリックしてもなんも反応がなくて、おかしーなーとおもってぷち、ぷち、ぷちと何回もクリックしてたら数分後に12個ぐらいそのウィンドウが開いてるんだもん。重すぎ。
ちなみにXMBはC:\InstantON に入ってます。どういった形でこれがロードされるのかはちょっと調べてません。Ubuntuをクリーンインストールしたので消えてしまいましたが、気が向いたら使えるようにしてみようかとも思っていますが。
Bluetooth、WirelessLAN、サウンドは問題ありません。いい感じです。
しかし、液晶のバックライトの輝度調節はできません。Xの解像度が変です。ハイバネート、サスペンドともにできません。黒乳首のタップができません。
Xの解像度については、/etc/X11/xorg.confに
Section "Device" Identifier "Configured Video Device" EndSection Section "Monitor" Identifier "Configured Monitor" Vendorname "Generic LCD Display" Modelname "LCD Panel 1600x768" Horizsync 31.5-48.0 Vertrefresh 56.0 - 65.0 modeline "640x480@60" 25.2 640 656 752 800 480 490 492 525 -vsync -hsync modeline "800x600@56" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync modeline "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync modeline "1024x600@60" 65.0 1024 1048 1184 1344 768 771 777 806 -vsync -hsync modeline "1600x768@60" 65.0 1024 1048 1184 1344 768 771 777 806 +vsync +hsync Gamma 1.0 EndSection Section "Screen" Identifier "Default Screen" Monitor "Configured Monitor" Device "Configured Video Device" Defaultdepth 24 SubSection "Display" Depth 24 Virtual 1600 768 Modes "1600x768@60" "1024x600@60" "800x600@60" "800x600@56" "640x480@60" EndSubSection EndSection Section "ServerLayout" Identifier "Default Layout" Screen "Default Screen" EndSection
と書くことで正しい解像度になりますが、非常に描画がトロい。KnoppixやDebian Live CDで起動させるとサクサク動くので、なにか設定が違うのかな、と思っていますが、調査中です。
xserver-xorg-video-psb (Poulsbo用ドライバ) はUbuntu 8.10(Intrepid Ibex)では正常に動作しません。メモするのを忘れて出典がわかりませんがIntrepidではサポートする気は無いようです。
あと、刻印、ちゃんとPanasonicと入れてくれました。

SONYさすがです。GJです。
これで大体の実験はブレッドボードでできるとおもうんです。
無駄(←キーワード)に7セグLEDをスタティック駆動してみたい。
gschemを使ってテキトーに書いてみた。PICそもそも使ったこと無いのでこういう使い方なのかなーと想像。
メインプロセッサからはData ClkとDataの二線によるなんちゃってシリアル通信でコマンドを送る。あとクロックも。
それぞれプロセッサの識別は、それぞれのRA2とRA1を数珠つなぎにすることで、互いに初期化時に信号を送ってIDを自律的に決定するようにする予定。無駄に。
これやるまえにメインプロセッサやんないとだめやね。少なくともClockと適当なData Clk/Dataを送れるようになるぐらいのを。
こんな感じです。

FoneraからはシリアルでメインプロセッサのPIC16F887-I/Pに入ってく。40ピンのでかいやつ。250円。メモリ368バイトも持ってるんだよ。すごいでしょ。
そこから贅沢にも24ピン(16+8)をつかってドットマトリクスLEDの行/桁駆動。
ここまではまあいい。ここまでは。
問題はそっから右側。
昨日、無計画にも買い物リストも持たずに秋葉をさまよってたら7セグデコードICがなかなか気に入ったのが見つからない。ってか売ってない。そしたら、うめさんが魔の囁き「18ピンぐらいのPICで制御したら」。
で、秋月で売ってる一番安くて7セグデコードICの代わりになるぐらいのピン数をもった奴ということでPIC16F716-I/Pを買ってきた。110円が6個。たかが7セグごときに一桁ごとにコンピュータとか贅沢だなー。しかも128バイトの超広いメモリ空間。
ふは。ってかこの18ピンのやつ、UARTとかついてない。しょうがないからメインプロセッサからチマチマと適当にタイミング合わせてシリアル通信させるかということに。オシレータも内蔵してない。これまたメインプロセッサからクロック出してやるかということに。たしかでかいやつの方はクロック出力あったよな。あと数十円だせばちゃんとここらへんついてるの買えたんじゃないの?まあマゾなんでいいですわ。
でも無駄に(7セグ制御としては)高機能な石つかうから無駄に部屋の光量に合わせてLEDの光量もPWM制御するとか、無駄にクロスフェード表示とかできるよねーとか。
うん、たのしみだ。
重要な事をいい忘れましたが、NTPで時刻情報をとってくる時計です。
今日買ってきた物
ブレッドボード僕も初めて買いました。実験が楽になりそう。
なぜ、fonかというと、
ということで、ネットワーク対応の小物を自作するにはうってつけなのです。
fonで時刻情報は取得・出力するとして、表示部はPICマイクロコントローラを中心に作ろうかなと。
でかいデジタル時計を作りたい。デカデジクロック みたいなやつを。
うめさんにいろいろ聞きながら画策中。とりあえずLa Foneraを使うことにした(ぇ)。
ポケットには実際には入らないだろうと思われ、ときどきツッコミなおさないと出てきてしまい、あまりの人気に真似する人が続出しているというVAIO type Pですが、衝動的に予約してしまいました。
はっはっは。
刻印サービスといって、ボディに任意のメッセージをレーザーで刻印してくれるサービスがあるのですが、
Panasonic VGN-P90HS
と申し込んでおきました(VGN-P90HSは今回買ったVAIO type Pの型番)。
ふっふっふ。