おおみそかに2010年を振り返る

2010年もとうとう終わりだという。

あまり実感は沸かないが、確かに今日は12月31日、おおみそかだ。

というわけで今年1年間を振り返ってみようと思う。


前半は進路関係のことで大いに悩んだものだ。

ちょうどクラスがそういう風に動き出したのは新年になってからか。

就職の人は就職先を悩み、進学する人は進学先を考えつつ勉強をしてた。

僕はそのとき大いに悩んだ結果、高専専攻科に進学することにしましたけど、

高専卒業しての進路というのはいろいろあるだけにこれでよかったのだろうかと思うことはありますけどね。

ただ、そんなのはどんな選択肢を選んでも思ってることだとおもいますから、2年後にああよかったなと思えるように勉強を頑張りたいなと思う。

僕は推薦入試で専攻科を受けて通ったから6月には終わったけど、長引いた人もいますね。


後半は自動車学校と卒業研究だな。

自動車学校には7月下旬に通い始めて12月中旬まで、じっくりやってきたものである。

急いてもしゃあない、というのは母の助言だが、これは大正解だったと思う。

いろいろあったものの、無事に運転免許を取得できたのでよかったなと。

卒業研究は進路が早く決まったこともあり、比較的早いうちからぼちぼち進めていた。

そういうこともあってかなり多くのことができたと思う。まぁ実験に時間を食わないということも大きな理由ですが。

夏休み前までにVGA出力してみたり、カメラから取り込みを試してみたりいろいろやっていた。

ただ、難儀したのがメモリコントローラ。133MHzの魔物というべきか。

これで3ヶ月ぐらい消費した気がする。まぁその問題は解決できたからよかったけど。

今、論文を書きつつまとめているが、かなりの分量になりそうだ。まだまだ書かなあかんな。これは新年の課題だ。


今年一番打ち込んだことは、と聞かれたら献血の針かなと答えるだろうか。

というぐらい今年は献血に行った気がする。と昨日届いた検査結果のお知らせを見ておもった。

実に一覧にして示すと、

  • 1月14日 血小板成分献血
  • 4月28日 血小板成分献血
  • 7月26日 全血400mL献血
  • 9月24日 血小板成分献血
  • 10月19日 全血400mL献血
  • 12月17日 血小板成分献血

年の後半が特に多い。

この10月19日はスポーツ大会の日に献血バスが来たときにしたんですけど、えらい驚かれたもんだ。

これだけ行くと記念品もだぶつくもので、予約して成分献血するともらえるボックスティッシュが部屋に積んである。

スタンプカードもらいまして、それで全血400mL2回と成分献血4回で記念品がもらえるというのがあって、

それを見事に達成してしまったもんだから、家にけんけつちゃんのぬいぐるみがある。それ記念品。

まぁ通学路近くに血液センターがあるのでそれが大きいですけどね。これからも時々行こうと思う。


あと今年はいろいろなところに行きましたね。

  • 昨年12月31日~1月1日 伊勢市 (伊勢神宮初詣)
  • 1月6日 名古屋市 (友人と青春18きっぷ消化のため大須へ)
  • 1月29日~2月1日 八戸市 (高専カンファレンス in 八戸参加)
  • 3月8日 豊橋市 (豊橋技術科学大学見学)
  • 3月23日~3月27日 シンガポール (学校の国際交流プログラム)
  • 8月6日~8月7日 津幡町・金沢市 (高専カンファレンス in 石川参加)
  • 8月12日 名古屋市 (名古屋散策)
  • 10月13日~10月15日 千歳市・札幌市・旭川市・上川町・小樽市 (卒業旅行)
  • 10月16日~10月17日 高知市 (プロコン見学)
  • 12月18日 沼津市 (高専カンファレンス in 沼津参加)

いろいろさかのぼって書いてみたが多すぎる。

卒業旅行-プロコンのコンボは正気かといろいろな人に言われた気がする。けど比較的近いところでやるなら見に行かない手はないってね。

他にも近距離の日帰り旅行はいくらか。

特に1月の大須と八戸と石川と高知と沼津は自分の貯金で行っているわけで、とんでもない現金不足に陥ったもの。

もっとも主な原因は無計画に定期預金を作りすぎたことですが。

おもしろい発見も多かったのでよかったけどね。


来年はとうとう5年間在学していた高専を卒業することになる。

20歳になって迎える新年ということで、新年早々に成人式がある。

そのときには中学校卒業以来会わなかった人にも会うのだろう。それは楽しみだ。

そして新しく専攻科生としての生活が始まる。通うところは通わないのであれだけど、今までとは確かに違うはず。

ぜひ来年は今年以上の挑戦をしていきたいと思う。

来年もよい1年になりますように。

路面電車の駅をSimCityで使う

SimCity 4で中マップで100万都市を作るという夢があるが、これがなかなか難しい。

需要限界というのがあるので、ある一定以上は人口が増えないというのがある。

それを増やすために近隣都市を成長させたりする必要がある。

ただ、プレゼントにはこの需要限界を増やす建物というのがあるようだ。

実はマイナーリーグスタジアム・メジャーリーグスタジアムはそういうものだったようで。

これを建てたら一気に人口が増えた。そしたらいつのまにか50万人になってた。

その後いろいろやってたら85万人にはなったけど、そろそろきつくなってきた。近隣都市を開発せなならんか。


ところでだいぶ前だが、NAMのGLR関係のパズルピースに追加があった。

GLRというのは路面電車のことで、地上を走る高架鉄道という説明がふさわしい。(参考記事 : SimCity 4のいろいろな交通機関)

GLR単独のもの以外に大通りとGLRが一体となったものがもとからあった。

僕はこれを好んで都市に配置していた。なかなか見栄えもいいですからね。

それに道路とGLR、街路とGLRが一体となったものが追加されていた。

とはいうものの、普通の幅の道路に路面電車がいるというのは窮屈だし、そもそも駅がないのであまり使ってこなかった。


ところが今日、偶然道路上のGLRの駅を発見した。

RTMT Interim T-RAM Stations (SC4Devotion)

なかなか見栄えもいいですね。これならいいかもしれない。

ちなみにこのシリーズには道路・大通り・街路上のバス停・地下鉄駅、大通りの上に置けるGLR駅が以前からあった。

Roadtop Mass Transit (SC4Devotion)

バス停は専らこれのバス停を使ってる。街路上に置けるというのはとても便利。

大通りのGLRの駅は当初これをつかってたんだが、ちょっと維持費が高いのであまり使っていない。

BSC SFBT GLR Tram Mod (SC4Devotion)

こちらの方がデザインなども好みなので、こちらを専ら使ってる。

ただ、地下鉄駅+GLR駅というのを置きたいならばRTMTのを使いますけどね。あんまり使うことはないけど。


というわけで近隣都市で使ってみた。

道路とGLRが一体となったパズルピースを配置していたのだが、交差点を1×1で済ませるのは窮屈すぎる気がした。

そのためロータリーを作ってみた。これぐらいのほうがちょうどいいですね。

こうやって作っていくとなかなかおもしろいものが出来た気がする。


ところでGLRは先に書いたとおり、高架鉄道と同じ機能を持っている。

なので路面電車とは思えないスピードなのだが、これぐらい高度な路面電車があればうれしいからよしとしよう。

その高架鉄道関係では、道路と高架鉄道が一体となったパズルピースがある。

NAMの世界では高架鉄道というのは新交通システムに相当するぐらいの乗り物だとされているようだ。

しかしよくよく考えてみると、道路と高架鉄道と道路とGLR、見た目が違うだけで機能的には似てるとおもった。

実際、GLRと道路のパズルピースの中にはこれを相互に変換するものがある。


標準の駅は高架鉄道の敷地内に置くけど、通過旅客もカウントするので都合が悪い。

だからか、敷地外に置く駅というのも提供されている。

シンプルな鉄道駅/高架鉄道駅集 (SimCity4 BAT for プリピザ)

シンプルな高架鉄道駅をよく使っている。

そしてこれは高架鉄道と道路が一体となったものを使うには欠かせない。便利なもんです。

一方GLRの場合、道路上に置くことができるものが提供されていて、これを使うのが自然だという話になる。

そういう違いはあると思う。見た目だけでなく機能も少々違う。


ところで、NAMでは高架鉄道については普通の高さ(15m)のとそれより高い(30m)のが提供されている。

モノレールと高架鉄道にはそういうのがあるのよ。高いモノレールは立体交差に重宝している。

さらに高架鉄道の地上版にGLR、モノレールの地上版に地上のHSRがある。

HSRは高速鉄道ですね。新幹線みたいなものよ。モノレール相当のもので普通の高さの高架と地上のものがある。

そして地下鉄と高架鉄道は同じグループ。

ということで、高架鉄道と地下鉄で、30m・15m・0m・地下と4段階の高さを使うことが出来る。なかなかこんな乗り物はない。

まぁそんなんだからNAMの世界では都市交通の基本になる乗り物だと思うわ。実際基本の乗り物として使ってる人は多そう。

列車の後ろで働く車掌さん

この前、回数券で近鉄に乗った。

近鉄の回数券は区間を指定していないからいつもとはちがうところへのお出かけにつかった。

そのとき運賃がいつもの区間と違うので精算が必要だった。

普段なら着駅で精算すればいいやと思うのだが、着駅が無人駅だった気がしたので車掌にあったら精算してもらおうと思っていた。

そのとき電車乗ってたら、車掌が通りかかったので回数券を引き換えたきっぷを出して精算を申し出た。


車掌を呼び止めてきっぷを買ったりするのは久しぶりのことだ。

というのもきっぷを買わずに乗ると言うことはあまりないですから。

それで差額を支払って車掌からきっぷをもらったのだが、このきっぷは自動券売機で出てくるようなきっぷだった。

これで自動改札機を通ることもできる。

特定のエリアでは自動改札機の普及率の高い近鉄にはあったすばらしい仕組みだ。

ただ全国的には珍しくて、JRではレシートのようなきっぷが出てくるらしい。

名鉄は自動改札機対応のきっぷが出てくるようですが。


ところで車掌の仕事ってなんなんでしょうね。

無人駅が多い地域を走る列車の車掌がきっぷを売ったりする仕事があるけれど、

自動改札機が普及している地域だとそういうことはしていない。近鉄でも橿原線の車掌は端末持ってないし。

乗客への案内を放送でしているけど、大阪の地下鉄なんかはほぼ自動化されているからそれすらない。

じゃあなにしてるのといわれるとドアの開け閉めぐらいだな。


ただドアの開け閉めというのはかなり重要な仕事なのは間違いないだろう。

というのも乗客を挟んでしまったり、ドアを開けたまま走り出したりしたら危険だからそういうことを防がないといけない。

それでどうしてるのかなと見ると、車掌と運転士が体を乗り出して協力してチェックしてるわけだ。

カーブの上にある駅では、車掌が一旦外に降りてチェックしたりしている。もっとひどい駅だと運転士も外に降りている。

車掌から見えるところと運転士から見えるところは違いますから、役割分担しているのだろう。

他にも安全確認するべきところはあるだろうから、そういうところで車掌が活躍する場面はそれなりにあるのだろう。


もっとも最近はワンマンカーも増えてますけどね。

実はそのときの帰りにワンマンカーに遭遇したのよ。

ワンマンカーでは放送は自動で行って、無人駅での乗車券確認は運転士が行う。

途中無人駅があったのだが、乗客が降りていったのだが、降りてすぐに窓から定期券らしきものを運転士に見せてましたね。

ドアの開閉も運転士だけで行う。だからあんまり長い編成でワンマン運転するのは無理なんだろうね。それは2両だったけど。

長い編成でワンマン運転するにはホームドアを設置したりそういう措置が必要なんだと思うわ。

世の中のローカル線でも朝晩は長い列車が走るからワンマン運転しないというのもありますからね。確か桜井線がそうだったかな。

そう考えると車掌の役割というのも案外大きいんじゃないかなと思った。

運転免許センターに行ってきた

今日は朝から運転免許センターに出かけていた。

学科試験を受けるだけなのにわざわざ県内に1箇所しかない運転免許センターに行く必要がある。

正直めんどくさいわけだが、もっとめんどくさい人はたくさんいるはずだ。


というわけで電車でお出かけ。毎日乗ってる電車と同じぐらいの時間に出発。

そして運転免許センターへ到着。駅から十分近いので便利ですね。

入ると左半分が試験ゾーンになっている。右半分は更新ゾーンだけど、こちらは特に用はない。

証紙販売所が列をなしてたが、既に証紙はもってたのでそのままスルー。

人はそれほど多くないなという印象を受けた。年末年始なんて人がかなり集中しそうなものなのに。


8:30に窓口が開くと、まずは適性検査を受ける。

指定自動車教習所の卒業生は既に申請書を持っているので、いきなり適性検査で、その後、窓口で本人確認と納付書の回収が行われる。

そうでない一般の受験者は受付の後に適性検査になってる。一般の受験者はほとんど原付免許の人なんですが。

そして試験室前で受付が終わるまで待機。30分以上待たされた。

試験場が開いたらすぐに試験なのかと思ったら、そこから注意事項とか確認事項とか長々と言われて、

試験が始まったのは受け付け開始から1時間半後。そんなもんなんですかね。


試験自体は概ね練習問題でしたとおりで特に問題はなさそうだった。

試験終了から20分後、受付の上のLCDで発表された。無事合格していた。

不合格者の番号は歯抜けになってたのだが、ちょこちょこ出ていた。

不合格者は再度受験ということになるが、指定自動車教習所の卒業生の2度目以降の受験は翌日以後の午後かららしい。

こう言う風に時間を振り分けて運転免許センターの利用を分散しているのだろうか。

合格者はここから13:30まで2時間ぐらい放置される。

しかしお昼休みまでに運転免許証作成ぐらいできんのかねぇ。

しゃあないのでお昼ご飯食べたりして待ってた。


午後になると人がたくさんやってきた。

更新の人がほとんどだったが、試験ゾーンに入っていく人もいた。

一番多かったのは指定自動車教習所卒業の目の2回目以降の学科試験の人。えらい長い列を成してた。

その次に多かったのは運転免許証を失効させた人。

実は失効から6ヶ月以内なら学科試験・技能試験免除で運転免許が取得できるんですね。

少なかったけど難儀してたのが外国免許の切り替え。

運転免許センターを歩いているとポルトガル語か、それらしき言葉がぽつぽつ聞こえてくる。

日本語を満足に使えない人も運転免許を取得しようとやってくるわけである。それで窓口の人が難儀してたわけだ。


外国免許の切替の人以外はいなくなったところで運転免許証の交付が始まった。

名前を呼ばれて申請書が渡されて、これを持って写真撮影に進む。

その後、申請書を証紙窓口で渡して、納付書をもらって、事前に購入しておいた証紙を貼って、交付窓口に並んで待つ。

そして全員の撮影が終わったらすぐ交付された。ほとんど一瞬でできるんですね。

それなら昼休みまでにやってほしいもんだが。


かくして自動車学校に通い始めて5ヶ月ほどたって運転免許証を手にしたわけですが、

実際に車を運転できるようになるのは、あと1ヶ月ぐらい先の話だ。

というのも保険の条件を更新に合わせて変えるまではもしものとき恐ろしいからね。

まぁとりあえず冬休みに取得できたら一安心ですね。

学校が始まったら運転免許取得届を出さないとな。

あったかい部屋でWindowsを再インストールする

今日は朝起きたら雪が積もってた。

昨日は一日寒くて、ぽつぽつ雪も降っていたのだが、夜の間に積もったようで。

そんなもんだから昨日は自室で作業するのも寒すぎていやになってきて、

リビングでdv2の再インストールしてた。


dv2は購入当初から重かった気がする。理由はよくわからない。

それでWIndows 7にアップグレードしても状況は変わらずだった。(参考記事 : Windows 7のアップグレードは寝て待て)

そんなんだからどうすりゃいいもんかと悩んでいた。


よくWindowsではインストールして長く使っていると動作が重くなるという話がある。

もしかするとWindows VistaからWIndows 7へのアップグレード時に重くなる要素を引き継いでしまったのかもしれない。

そう考えてWIndows 7を新規インストールしてみた。

新規インストールとはいえアップグレードライセンスなので、元のOSをチェックする。

対象となるWindowsが入っているハードディスクがあれば問題ないようで、全く問題なくインストールに進めた。

元のドライブをフォーマットしてWindows 7をインストールした。

きわめて短時間で終わってびっくりした。新規インストールってこんなに早いのね。


初回起動後は再起動した方が無難かも知れない。初回起動時にドライバーがかなり入るようで。

その後追加のドライバーを入れて、Windows Updateと各種のアプリケーションを入れると良いだろう。

今回の再インストールにあたっては時間の節約のためにあまり使わないアプリケーションはいれないことにした。

まぁそれならそんなに時間がかからず終わった。


再インストール後の動作は驚くほどよいですね。

一体いままでなにがあったのか、よくわからないけど、今までが異常だったことはよくわかった。

果たしてこの快適な動作がずっと続くのか。

ずっと続くと考えるのが普通だと思うけど、果たしてどうだかようわからん。

けど、これだけサクサク動くのだから、性能は十分高いんだなと再確認した。

郵便屋さんが本人確認をする

今日はゆうゆう窓口に行ってきた。

年賀状を出すためというのも理由だけど、もう1つ理由があった。

それが本人限定受取郵便の受け取りのためだ。


誕生日にセゾンカードの申し込みをした。

その後、電話で意志の確認があって、翌日に審査が通ったというメールが届いた。

しかし、ここまですべてインターネット上の話。

本人確認書類も出してないし、口座振替申込書も出してないのにここまで進んだようだ。

そして昨日に郵便局から郵便が届いた。なにかというと本人限定受取郵便が届いたよというお知らせ。


そもそも本人限定受取郵便とはなにか。

本人限定受取 (日本郵便)

実に8年前の話であるが、日本と韓国でサッカーのワールドカップがあった。

そのとき、チケットの送付につかわれたときは、本人限定受取郵便の基本型で送られたようだ。

今回、カードを送るのに使われたのは特定事項伝達型というもの。

これは金融機関が本人確認書類を確認する代わりに、郵便の受取時に本人確認をしてもらい、これを伝達してもらうというもの。

だから特定事項伝達型なのね。


ただ、この郵便の受取はややめんどくさい。

まず、到着の通知が届くので、受け取ったら電話で保管している郵便支店に連絡しなければならない。

というわけで朝に電話をしてみた。

すると住所・氏名・生年月日が確認された。そして提示する本人確認書類の種類と記号番号・発行者を伝える必要があった。

しかし、住民基本台帳カードは記号番号はない。住民基本台帳法で住民票コードの目的外利用が禁止されてる都合でね。

ないと伝えると、発行者はわかるかと聞かれて、発行元の市の名前を伝えたがそんないいかげんでいいのだろうか。

そして受取方法を伝えるわけだが、その保管している支店で受け取ると伝えた。

配達もできるのだが、窓口で受け取る場合は郵便支店の窓口でしか受け取ることはできない。それ以外の郵便局では受け取れない。

なので配達がメインになると思うが、偶然に行く用事があったのでこうすることにした。


そしてゆうゆう窓口で受け取りにいった。

そこで、住民基本台帳カードを見せると、また記号番号はないかとか聞きながら、生年月日など記録していた。

特にコピーはとっていなかった。迷うぐらいならコピーとればいいのに。

そんなんだから時間を食ったが、問題なく受け取ることができた。


それで開封するとカードが入っていた。

ICチップがなくてびっくりしたが、特になくても困らないからいいのかな。

それで紙をみると、限度額はショッピング10万円・キャッシング0万円だった。まぁ予想通りですね。

そして、その紙の下の方には口座振替申込書がついててさっさと返送しろとかいてあった。

なので書いて封をして今度出かけるときに出そうと思う。


手続きが終わるまでに請求があったばあいは、振り込みなどで支払ってもらおうと書いてあった。

月末までに受け取った分は、翌々月の4日の引き落としから使えるようになるらしい。

ちなみに請求は月末締めで翌々月の4日なので、来月末までに到着すれば、来月分から振替できるはず。

後から口座振替申込書というのは不思議な感じだが、カード自体はとんでもなく早くついたのでこれはよかったのかな。

MicroBlazeからLCDにHello,World!!

今日は年賀状を印刷したり、卒業論文を書いたりしてた。結局年賀状は明日出す。

ここでは冬休み前にやったマイコンでのLCD制御の話を書いておこうと思う。


LCDだが、日立のHD44780互換のチップで制御している。

OKIセミコンダクタのMSM6222B-01という互換チップのデータシートが見やすい。

MSM6222B-01データシート(pdf) (OKIセミコンダクタ)

これと、mbedのCookBookを参考に書いてみた。

TextLCD.cpp (mbed)

特にピンの数を節約する理由もないので8bitインターフェースでやってみた。

LCD制御用にGPIOを追加して、GPIOの1ch目はデータ端子を8bit、2ch目はE,RS,RWの3bitを割りあてた。


せっかくC++が使えるので、あまり意味は無いけどC++で書いてみた。

ヘッダファイル

#include "xgpio.h"
#include "xtmrctr.h"
class LCD{
public:
	LCD();
	void WriteChar(char c);
	void WriteString(char* str);
	void Clear(void);
	void uwait(int usec);
private:
	XGpio lcd;
	XTmrCtr timer;
	int x,y;
	void _write(int value,int mode);
};

コンストラクタで初期化して、WriteCharで1文字書き、WriteStringはWriteCharをたくさん実行。

それと中で何秒待つなど多く使うので、タイマのIPを追加してその機能を使って待つメソッドも作った。

ソースコード

#include "LCD.h"
#include "xparameters.h"
LCD::LCD():x(0),y(0){
	XTmrCtr_Initialize(&timer,XPAR_XPS_TIMER_0_DEVICE_ID);
	XTmrCtr_SetResetValue(&timer,0,0);
	XGpio_Initialize(&lcd,XPAR_LCD_OUT_DEVICE_ID);
	XGpio_DiscreteWrite(&lcd,2,0x4);//0b100
	uwait(15000);
	_write(0x30,0x0);
	uwait(1600);
	for(int i=0;i<3;i++){
		_write(0x30,0x0); //0b001100xx
		uwait(1600);
	}
	_write(0x38,0x0);	//0b00111xxx
	_write(0x0C,0x0);	//0b00001100
	_write(0x06,0x0); //0b00000110
	Clear();
}
void LCD::_write(int value,int mode){
	XGpio_DiscreteWrite(&lcd,1,value);
	XGpio_DiscreteWrite(&lcd,2,0x4|mode);//0b1YY (YY:mode)
	uwait(40);
	XGpio_DiscreteWrite(&lcd,2,0x0);//0b000
	uwait(40);
}
void LCD::Clear(void){
	_write(0x01,0x0);
	uwait(1600);
	x=0;y=0;
}
void LCD::WriteChar(char c){
	if(c=='\n'){
		x=0; y=(y==1?0:y+1);
	}else{
		_write(0x80|(y<<6)|x,0x0); //0b1R00CCCC(R:row,CCCC:col)
		_write(c,0x2);
		if(x==15){ x=0; y=(y==1?0:y+1); }
		else     { x++; }
	}
}
void LCD::WriteString(char* str){
	while(*str){ WriteChar(*str++); }
}
void LCD::uwait(int usec){
	XTmrCtr_Reset(&timer,0);
	XTmrCtr_Start(&timer,0);
	int clocks=(XPAR_CPU_CORE_CLOCK_FREQ_HZ/1000/1000)*usec;
	while(XTmrCtr_GetValue(&timer,0)<clocks);
	XTmrCtr_Stop(&timer,0);
}

LCDコントローラへの送信は専ら_writeメソッドで行っている。

modeはRS・RWへの出力の値を与える。0x0で共に0、0x2でRSのみ1という風に。

概ねmbedのソースコードそのまま。


問題はどうやって何秒待つというのを実現するかだ。あまりMicroBlazeの例がなくて困った。

xps_timerを追加したら、XTmrCtr_Startでカウント開始して、XTmrCtr_Stopでカウント停止して、XTmrCtr_GetValueでカウントしたクロック数がわかることはわかった。

うまいやりかたが思いつかんかったので、カウントしていって値が規定の時間になったらカウントを止めて終わることにした。

実際どんなもんか知らんけどこれでちゃんと動いてるからいいのだと思う。


これで早速LCDに”Hello,World!!\nOK”と改行を含んだ文字列を表示させたが、きちんと出てきた。

プッシュスイッチの左右で数字を増減させて、それをLCDに表示するプログラムを書いてみた。

#include "xparameters.h"
#include "xgpio.h"
#include "xtmrctr.h"
#include "LCD.h"
int main(void){
  XGpio btn;
  XGpio_Initialize(&btn,XPAR_BTNS_4BIT_DEVICE_ID);
  LCD lcd;
  int mode=0;
  bool btn_push=false,mode_changed=true;
  while(1){
    int btnout=XGpio_DiscreteRead(&btn,1);
    if(btn_push){
      if(btnout==0)  btn_push=false;
    }else{
      if(btnout&0x1){ //EAST
        mode=(mode==9 ? 0 : mode+1); btn_push=true; mode_changed=true;
      }else if(btnout&0x8){  //WEST
        mode=(mode==0 ? 9 : mode-1); btn_push=true; mode_changed=true;
      }
    }
    if(mode_changed){
      lcd.Clear();
      lcd.WriteString("MODE:");
      lcd.WriteChar('0'+mode);
      mode_changed=false;
    }
    lcd.uwait(100000);
  }
  return 0;
}

プッシュスイッチの値を100ms間隔で見に行って、押され始めたらmodeの値を増減させて、変更があったときだけLCDを書き換える。

簡単な記述でできるのはマイコンらしい話だ。ほんまにこれ論理回路で作るの大変。


これでモードを変えることができるようになった。

このモードに応じて画像処理の内容を変えると言うことをやりたいと思っている。

そのとき状態をわかりやすく表示したかったのでLCDを使いたかった。

卒研の本質とは関係ないんだけどね。ただ個人的に興味があったのと、デバッグの助けにもなるかなと思ってね。

1日でできたんだから大した時間ロスでもなかったし、MicroBlazeのプログラミングの練習にもなってよかったかな。

論文を書く冬休みの始まり

また今日で今年の授業は終わり。

そして研究の進捗状況もよく、今年中に目標としていたことは十分完成した。

なので、今年はもう学校には行かないつもり。

研究室のみなさんに「良いお年を」と挨拶して帰った。


ただ、卒業研究に関することを全くしないわけではない。

卒業論文を書くんですわ。冬休みに大部分を書き終えることが目標である。

それが僕の冬休みの宿題だ。


卒業論文を書くためにちょっとデータを持ち帰ることにした。

作成したHDLのコードを持ち帰ることとした。

これを見ながらこれまでやったことを振り返ってまとめていこうとおもった。

ただ、データ取りは研究室でしかできないので、冬休み明けにこのへんはやろうと思う。

あと論文の書き方の資料も忘れず持ち帰ってきた。


論文は使い慣れたOOoで書くことにした。予稿をMS Wordで書いて苦労したから。

というわけでOOoの設定をした。

余白・行数・1行の文字数が定められているので、これをまず設定した。

1ページ30行・1行40字なのでかなり詰めなければならない。10ptに設定せざる得なかった。

見出しは特に指定がなかったから、いつものようにゴシックで大きな字で書くことにした。

段落-配置のテキスト補助に合わせるを切らないと不細工なので、見出しについてはこれを切っておく。

通常の2行分の高さを使って見出しはつけることにした。

だいたい普段の設定でよかったが、見出し1は第N章とする必要があったのでそうしておいた。


今日はとりあえずまえがきを書いてみた。

研究の背景であるマイコンでの画像処理の問題から始まって、ハードウエア的な並列処理、そしてFPGAの導入を書いてみた。

だいたいこんなもんだと思うけどね。

次はFPGAボードの話を書こうと思う。ぼちぼち書いていきましょうか。

年内に年賀状を用意しておこう

今日は来年の年賀状を描いてた。

24日が引受締め切りですからね。まぁこの日より後に出しても年賀状の性質を考えれば問題ではないが。

まぁけど間に合うならこの日までに出したいので作業してた。


方法は2年前と同じ方法。(参考記事 : 新世代年賀状を作る方法を考える)

そのへんからコピー用紙を取り出してきて、鉛筆片手に今年の年賀状はどうしようかなと書いてみる。

方針が決まったところで、清書する。主にボールペンだが、一部筆ペンもつかった。なかなかうまくいかんけどな。

そしてスキャナで読み取って、線だけを取り出す。

結局、タブレットで直接描くのは大変なので、線だけでも紙に書こうと、そういうことですね。

あとは色塗って完成。


ところで年賀状って新年のご挨拶のために出すものですよね。

なので新年になってから出しても問題は無い。というかもともとはそういうものだったらしい。

ただ、そうすると郵便局がパンクするもんだから、年内に差し出して、1月1日付けの消印で新年に配達するというサービスを始めた。

これにより年賀状は年内に出すものだとなったわけだ。


ただ、年内に出すと言ってもやはり新年に届かないと困る。

このあたりクリスマスカードとは事情が違う。

あれは逆にクリスマスまでに届かないといけない。

国際郵便関係でクリスマスカードの締め切りというのを示しているけど、あれはその日までに出せばクリスマスまでに届くという意味。

それより前になんしかの郵便でクリスマスカードを送ればいいわけだ。

しかし年賀状はそうはいかない。

日本では年賀と書いて所定の期間に送ればよいが、他の国ではなかなかこういうサービスやってないんだろうな。

迷ったら新年になってから送る方が無難かも知れませんね。


まぁ、なんにせよ年内に送った方が便利なことは確かなので、はやいこと準備してるわけだ。

去年は今年より早くて、12月20日に描いて、21日に印刷して、22日に差し出していたようだ。

学校のスケジュールが数日違うのでこういう違いが出たんだと。けどそんなもんですよね。

MicroBlazeをFPGAに載せる

XilinxのFPGAにXilinxの提供するマイコン、MicroBlazeを載せていたが、動作することが確認できた。

FPGAにマイコンを載せるというのはこういうことかというのは実際やってみるとよくわかるなと思った。


さて、これまでFPGAの開発はISEを使ってきたが、MicroBlazeの開発にはXPSとSDKを使う。2つ合わせてEDKとして販売されている。

EDKのライセンスを指導教員に掘り出してきてもらってインストールした。

ISEでNew SourceでEmbedded Processorを選んで追加する。IPコアを追加するのと同じよ。

そして、このProcessorについてXPSを立ち上げて設定する。

XPSはMicroBlazeを作るソフトウエアですね。


XPSではMicroBlazeを作るわけだが、ウイザードで使ってるFPGAボードをえらぶと適当なIPコアを装備したMicroBlazeを出してくれた。

LED・スイッチを使うためのGPIOと、RS232Cを使うためのUARTのIPコアが生成されたはず。

GPIOというのは汎用のI/Oポートという意味、ただのデジタル入出力ですね。

UARTというのは非同期のシリアルI/Oのことだな。RS232Cなどはこの仕組みでシリアル通信してる。

GPIOにしてもUARTにしても聞き慣れない名前だが、まぁ身近なもんです。

ウイザードで勝手にバスの接続やポートの割りあてやアドレスの割り当てはやってくれた。

自分でIPを追加する時はこのへんをXPSを操作してやる。


それができたらISEに戻って論理合成する。

今回はMicroBlazeをトップレベルモジュールにした。

この場合はISEを使わなくても、XPSから論理合成できるはずだが、ISEからやってみる。

合成する前にUCF制約を書く。そして合成を行えばマイコンを作るのは完了。

必要な機能を選んでIPコアをつっこめば完成というわけで、このあたりがFPGAでマイコンを作るメリットなんだろう。


次にプログラミングである。

プログラミングはEclipseベースの開発環境であるSDKを使いたい。

XPS自体でコンパイルもできるみたいなんだが、使い勝手はあまりよくなさそうなので。

まず、Generate Libraryでこのマイコンのライブラリを生成する。

そしてExport SDKでマイコンの設定をSDKに移す。そしたらあとの開発は全部SDKでできるようになる。


SDKでのプログラミングだが、とりあえずGPIOの読み書きについてやってみた。

#include "xparameter.h"
#include "xgpio.h"
int main(void){
  XGpio led,sw;
  XGpio_Initialize(&led,XPAR_LED_out_DEVICE_ID);
  XGpio_Initialize(&sw ,XPAR_DIP_in_DEVICE_ID);
  while(1){
    u32 value=DiscreteRead(&sw,1);
    XGpio_DiscreteWrite(&led,1,value);
  }
  return 0;
}

DEVICE_IDはxparameter.hに宣言されている定数をもってくる。これは合成時に自動的に生成されるらしい。

それでGPIOを初期化して、そして読み書きすると。そういうことですね。

それでビルドすればいい。

ビルドが完了したらDownload to BitstreamでFPGAに書き込む。

合成したときに生成されたbitファイルと、Export SDKのときに作られたbmmファイルと、ビルドして生成されたelfファイルを与える。

これでメモリの部分を作成したプログラムに書き換えてくれる。そしてFPGAに転送してくれる。


これで実行するとなんかLEDの左4つにDIPスイッチの値が表示された。

LEDは右から0,1,…,7の順番なので、普通は右から使われるものだと思うのだが。

調べると、MicroBlazeはPowerPCと同じくビッグエンディアンであって、0bit目がMSBで、N-1bit目がLSBだと書いてある。

これまで7bit目がMSBで、0bit目がLSBで使ってきたが、今は逆なのね。

しかしそれでは不便なので左から0,1,……,7の順番にして、一番左がMSBになるようにした。

まさかこんなことになってるとは思わなかった。


まずはこれでLCDの制御をやってみようかなと考えている。

LCDは直接研究でやりたいこととは関係ないのだが、現在の状況を表示するのにちょうどいいしね。

RS232CでPCと接続して、PCのターミナルに状況を表示させるというのもありかとは思うのだが、やはりボード上にあるものを使いたいですし。

これを実現するに当たって、GPIOをソフトウエア的にいじるのがいいのか、

それとも自作IPを作って、それをソフトウエアで制御するのがいいのか、どっちなんでしょうね。

ただ、この先、画像処理モジュールをマイコンで制御するに当たっては自作IPも必要な気もするので、自作IP作りをしてみようかなと思うところ。


ただ、とりあえず年内にマイコンを動かすという目標は達成できたからいいのかな。

明日、どれぐらい進むかよるが、とりあえず年末年始はあまり学校にいかなくてもよさそうです。

その代わり家で論文書くけどね。資料を持ち帰らんとな。