Altera DE2-115でLCDに文字を表示する

Altera DE2-115を借りていろいろすることができたのでメモ.

いろいろやったけど一番情報が少なかったと思われるLCDを使って文字を表示する方法を書いておきます.

fopenでLCDを開いてfwriteを使ってLCDにデータを表示させる方法とか,どっかの大学の先生が作ったプログラムを使って表示させる方法とかさまざまあるようですが,今回は別の方法でやってみようと思います.

 

開発環境&使用ソフトウェア

  • Windows 7 Enterprise x86_64
  •  Quartus II 12.0sp2 Web Edition
  • Nios II Build Tool for Eclipse
  • Terasic DE2-115 System Builder

 

ハードウェアを作る(?)

FPGAのことがよくわかっていなくて,なんといえばいいのかわからないけどハードウェアの論理合成をする.

一からVerilogを書いてもよかったんだけど,ほかの作業に追われていたのでTerasic DE2-115 System Builderを使ってサクッとVerilogファイルを生成してしまう.ある意味チート.

キャプチャ

Generate ボタンを押すとプロジェクトファイルが生成される.生成されたプロジェクトファイルをQuartus IIで開く.

Qsysでサクッと画像のようにつなげる.

キャプチャ

後は「プロジェクト名.v」となっているVerilogファイルの” Structural coding “というところにNios IIの設定を追記する.

これで論理合成したあとDE2-115のボードにプログラミング.

 

プログラムを書く

サクッとテストプログラムを書いてみる.ただ以下のコードは何となく書いたので動くかわからん.

開発しててハマったのがEcripseでDE2-115を認識しないときがあったこと.これはEcripseをいったん閉じてQuartusIIから回路をプログラミングしてからもう一度Ecripseを立ち上げると認識するようになった.
ちなみにAltera Monitor Programを使って開発してる人はLCDを使うときLCDのアドレス+1してポインタつかっていろいろすると行けるっぽい.

 

動作

上に書いたプログラムで表示したわけではないけど,下の画像のように動く.

P_20160126_104338[1]

 

参考にしたサイト

 

触ってからだいぶ時間が空いてからこれを書いたのであやふやになってる部分も多数...

触ってるときにアウトプットするのって大切ですね~

FPGAを使った開発はものすごく楽しかったけど,個人でやるんだったらPICが楽だなーと思ったり.

PHP + CometでWebピットボード的なやつを作る

先日とあるチームのドライバーとしてエビスサーキット西コースで行われた3時間Kカー耐久レースに参戦してきました.

その時にピットからの指示を簡単にドライバーが確認できるWebアプリ的な奴を作ったのでサクッとご紹介します.

 

ピットボードとは

まず『ピットボード』とはですが,レースなどをよく見る方はご存知かもしれません.自分のチームのクルーがドライバーに対してなんかかしらの指示を書いたやつですね.それをホームストレートなどの時に自分のピットがある前のところからドライバーが見えるように掲げるものです.

14243

こんな感じ( 画像はgoogle画像検索で出てきたものをお借りしました)

 

ピットボードでは『ピットIN』などの簡単な指示ができますが,『オーバーテイク仕掛けろ』みたいな指示がやりづらいですよね.

そこそこ資金力があるチームは無線を使って指示するみたいですが,そんなお金もない.というわけでサクッと表題のやつを作ったわけです.

 

Webピットボードを作る まえおき

ピットボードをつくるときに必要な項目を挙げてみました.

  • かんたんに指示をみるためのもの
  • 指示がリアルタイムに送れる・確認できる

こんな感じでしょうか.

  • かんたんに指示を見るためのもの

これはすでにあるものを使うと達成できるのですが,

  • 指示がリアルタイムに送れる・確認できる

というのがちょっと厄介ですね.

リアルタイム更新についてGoogleで検索してみると,AjaxというのとCometというのがあるそう.

Ajaxについては使ったことがあるのでまた使ったことがないCometで実装してみようとなったわけです.

 

Cometとは

下の方にある参考サイトに詳しく乗っていますが,引用させていただくと

1つ目は、Ajaxなどの技術を使い、1秒毎など定期的に更新するというもの。F5連打と同じだが、ブラウザでページ自体を更新する必要はないため、一見更新しているようには見えない。

2つ目はcometという技術を使う。これは聞いたことがなかったが、中身を知ったらその知恵に驚いた。cometはおおまかにいうと、最初にリクエストがあった際に、サーバー側でつかんだままにして、発言があったらレスポンスを返すというもの。

最初のやり方だと、発言が更新されていなくても更新を行うためムダなリクエストが発生する。これだとユーザーが増えた際に、サーバーに負荷がかかるので望ましくない。cometを使えば、データが更新された時にプッシュされるため、ムダなリクエストが発生しない。

というものらしい.

 

実際に作ってみる

下記のサイトを参考にして作成してみました.

チャットのように過去のログは切り捨てることにして実装しました.

<実際のコード>

・comet.php

 

・index.html

 

こんな感じになりました

キャプチャ2

フォームに入力し「追加」ボタンを押すと指示できるようになっています.

 

実際の運用

車両にタブレットを取り付け,テザリングを使用して運用しました.

キャプチャ

最初順調に動いていたように見えたのですが,思ったよりも電波状況がよくなく,ピットから指示は送っていても車両側の方で更新されず指示が伝わらないなどトラブルがありました.

まあどうしようもないので古典的に<meta name=”Refresh”>を追加して対処したわけです.

 

また予選も終わりこれから本線というときにWebサーバーがダウン.Refreshの頻度が多いせいでリクエストを処理できなくなってしまいました.

当日になって数々のトラブルに見舞われましたがなんとか運用できた感じです.

 

解決すべき課題などがたくさん出てきたので次のレースまでにはそれらを解決してもっと質の高いものにしていきたいと思います.