2016年5月31日火曜日

BeMicro MAX10にNios IIを入れてLチカ(part 2:完結編)


はい、続きです。せいぜい2時間もあれば終わるだろうと思っていたNios II Lチカで4時間かかってしまいました。初心者ってしんどいわぁ。

■STEP3' コンフィグ書き込み■

前回、これだけ終わってませんでした。ここで初めてBeMicroをの電源を入れると、赤い電源LEDが点灯し、緑のLEDが2進カウンタとして動き始めます。懐かしなー。

と、TK-80時代を振り返るのは止めて、まずVirtualBoxでDevicesメニュー>USB> Altera USB-Blaster [1000] を選びます。次にQuartusのToolsメニューからProgrammerを選びます。もしHardware Setup...のとなりが「No Hardware」になっていたら、Hardware Setup...をクリックし、USB-Blasterを選びます(Currently selected hardware)。私は最初ここのところにUSB-Blasterが現れない→Device>USBのところにもない→もしかしてUbuntu対象外??と焦ったのですが、単にハブが落ちてたようでMacを再起動したら治りました。MacOS X El Capitainにしてからこういうことが多くてホント不便。本社新築する前にちゃんとしてくださいよお>Apple

…と余談はさておき、あとは記事通りです。

記事通り、書き込みが100%()Successfulになっても何も起こらなければ正常です。前回も書いたように、まだソフトウェアを書いてませんので。

■STEP4 Cプログラムを書き込む■


  1. Quartus IIからNios II EDSを起動
  2. ソフトウェア・テンプレートを利用する
    原因はわかりませんがうちのUbuntだとメニューバーがありませんw 左から二番目の下向きの三角にカーソルを合わせると「New」だと言ってますので、ここから「Nios II Application and BSP from Template」を選びます。
    SOPC Information File name:の「...」をクリックしてプロジェクトフォルダ下のmaxlab.sopcinfoを選びます。あとは記事通りでFinishまで。テンプレートはHelloWorldの下にあるHello World Smallなのでお間違えなく。
  3. C言語ソースの中身を加速度センサ制御用に書き換える
    雑誌にはソース掲載されていないので、ダウンロードしたものからのコピーです。
  4. 作成したソフトウェアをFPGAで実行する
    やっと こ こ ま で 来 た か って感じ。まぁreset_reset_nが無ければ大変なことは何一つなかったのですがw ここはまったく記事通り。
    …なのですが、私の場合、ここで一晩経過して電源を引っこ抜いているので、上のSTEP3'に戻ってコンフィグ書き込みを行い、それからソフトウェア書き込みを行いました。
    するとLEDがたくさん点灯するはずです(なんだよ「たくさん」ってのはよ)。BeMicroの向きを傾けていくと、真横にした辺りでパッと消え、背面になるにつれてピコピコとLEDが増えていくはずです。

    うごいた!

と、いうわけで、Nios IIが動きました。ソフト屋な私はつい「やった! これで何でもできる!!」という方向に安易に走りがちなのですが、旨いこと使いこなして行きたいと思います。はい。

とはいえ、なんにもフィードバックがないと辛いので、とりあえずは液晶でもつないでみますかね。

…そのうちに。

…マイコン駆動で。

2016年5月30日月曜日

BeMicro MAX10にNios IIを入れてLチカ(part 1:構成編)

トランジスタ技術2015年11月号 p61からの「第三章 [STEP2] コピペであっさり! 32ビット・コンピュータを作りこんで動かす」を試してみます。

前回マクニカさんの記事を参考にしたら、これが見事に「わかっている人向けの記事」だったので大いに悩んだのですが、今度は我が心の師匠・岩田利王氏の記事、きっと大丈夫です。でも、もしQurtusの操作についてわからないことがあれば、「FPGA電子工作スーパーキット」が参考になります。

ま、人の作ったもんだから何とかなるでしょ。

■と思ったら■

いきなり「前章で作成したmaxlabプロジェクトを開いて」と来ましたorz ということで、トラ技のダウンロードページから2015年11月号STEP1のプロジェクトをダウンロードして、Velilog下にあるmaxlabを適当な場所にコピーします。

Quartusを起動します。私のはQuartus Prime Lite 15.1.2です。

FileメニューのOpen Project...からmaxlabフォルダの中にあるmaxlab.pdfを開きます。ToolsメニューからQsysを選びます。

…と記事のまま書いてもブログにする意味がないので、以下は記事のわかりにくいところだけ説明します。

  1. Nios II プロセッサをシステムに追加する
  2. オンチップ・メモリをシステムに追加
  3. オンチップ・メモリのサイズを調整
  4. オンチップ・メモリの配線設定
    ちょっと悩みました。本には「マウスでクリックして繋ぐ」とありますが、どこをクリックしてもドラッグしても反応しません。クリックするのは「◯」のところです。例えば、 -<clk と ->clk1 を繋ぐ場合には、nios2_gen2_0のところにある ->clk の左にある「◯」と ->clk1 のところにある「◯」をクリックすると線が太くなって配線!となります。どうでもいいですが「はいせん!」とか書きたいですな(何がだ)。
  5. Nios IIがオンチップ・メモリから起動するように設定
    記事では「画面を閉じます」と書いてありますが、閉じるとこの後の辻褄があわなくなってしまうので閉じません。閉じるときにファイル名をnios2e.qsysにしていれば問題無いです。もし閉じてしまったら、またQuartusのToolsメニューからQsysを選びます。で、メモリベースアドレスの設定をするのですが、「図9のように」という本文の説明は大変わかりにくいです。配線図のところのonchip_memoryの下にあるs1の行の右に「BASE」という欄がありますので、ここをダブルクリックして記事にあるように「0x0001_0000」にしてみます。記事には0xついてないですが、付けます。
なお、記事はこれで「エラーが消えます」とあるのですが、「clk_0, clk_in_reset must be connected to a reset source」というエラーが残ってます。記事の図を見ても接続されていないですが、マクニカの記事だとつながっているのでつないで見たのですが、それだと最後の最後でコンパイルエラーがでます。


調査の結果わかったのは、Qsysでclk_0のckl_in_resetがexportされていないのが原因でした。clk_in_resetの行のExport欄をダブルクリックして表示が「reset」になるのを確認してください。こんな形になればOKです。雑誌の図だと「export」が隠れてて見えないんですよね…困ったもんだ。



■STEP2-2 Nios IIにI/Oを追加■

  1. 加速度センサとSPI通信するためのPIOを追加
    Qsysは開いたままです。1bitのoutputを3つと1bitのinputを1つ追加します。
  2. LED制御用PIOを追加
    width 8のoutputを1つ追加します。
  3. PIOの設定とそれぞれの接続設定をします。記事通りです。

■STEP3 FPGAに書き込む■

  1. Quartus IIで使うためのファイルを生成する
  2. Qsysで生成したファイルをQuartus IIに追加する
  3. MAX 10でNios II/eを使うための設定をする
  4. HDLソースとピン・アサインのファイルを更新
    QuartusのProject Navigator(右上の一覧)からmaxlabをダブルクリックするとmaxlab.vが表示されます。で、リスト1を打ち込みます。すぐお気づきかと思いますが、赤い文字だけが変更箇所ではないのでご注意を。あと「それらをアサインしましょう」はFileメニューからOpen Fileを選び、Files of typeをAll Filesにするとmaxlab.qsfが見えますので、開きます。もっと簡単な開き方ご存知の方、教えてくらさい。開くと雑誌リスト2の中身と大幅に違うものが出てくるのですが、set_global_assignmentは放置しておいて、set_location_assignmentを雑誌のリストと同じにしてみました。結果的にはそれでよかったみたい。
  5. コンパイルの後、FPGAにプログラムする
    ProcessingメニューからStart Compileを選びます。順調にいけば、0:errors, 22 warningsって感じで終わるはずです。

さて、あとはNios IIの上で走らせるソースをコンパイルしたりFPGAをコンフィグ(書き込みのこと)しなきゃいけないんですが、もう眠いっす。

続きは明日…無事動作しました。

2016年5月28日土曜日

生活感のあるリフロー


皿洗いと洗濯の合間にリフローしております。

最近になって、ようやくホットプレートリフローのコツがつかめてきたような気がします。基本に忠実たれ、と言いますが、やっぱり余熱は大事ですね。

最近の手順はこんな感じです。
  1. プロファイルを見ると150度で60-120秒と書いてあることが多いですが、ホットプレートの場合は熱が回りにくいので、何も入れず蓋をした状態で160度前後を数分間維持して全体の温度を上げておきます。
  2. ブツを入れて60-120秒余熱。その間、あまり温度はシビアに調整しなくても大丈夫ですが、あくまでも余熱なので150度を超えないようにしましょう。
  3. 蓋を開けて放射温度計でホットプレート面が240度を越えないように監視しながら、ハンダが十分に溶けこんだのを確認したらホットプレートのスイッチをオフ
  4. 命がけでウチワなどで扇いで温度を下げる
  5. 150度まで下がったらピンセットなどで取り出して冷ます。

余熱後〜ハンダが溶け込むまで30-45秒くらい、ウチワで150度まで冷ますのに2分ぐらいかかってしまいます。本当はもっと早く下げたいのですが…。

慣れてきたのでハンダの状態を見ればだいたい温度が推測できるんですが、それでもホットプレートの温度ムラや基板表面への熱伝達遅れなどがあるので、やっぱり放射温度計でのチェックは欠かせません。

ハンダペーストは最近また中国製のを使っています。シリンジ入のペーストと模型工作用注射針をebayから取り寄せました。作業時に十分室温に戻しておき、基板をしっかり余熱すれば特に問題ないようです。注射針は数種類の太さがセットになっているものが安いので、それを取り寄せて自分に合った太さをいろいろ試してみることをお勧めします。



ホットプレートは相変わらず山善(YAMAZEN) グリル鍋 1200W 容量2L(直径23 深さ5cm) ブラウン GN-1200(T) です。私が買った時は1445円でしたが、今は2500円に上ってますねぇ。

放射温度計は私のやつより測定範囲の広い新型(サインソニック 【-50~+380℃】 非接触式 赤外線放射温度計 SS300 電池付き! )が出てるなぁ…。

そういえばソフトチップピンセット はぜんぜん使っていません。先が太いというか分厚いので、せっかく乗せた他の部品にぶつかってしまうので。

ルーペは相変わらず安物を使っています。もうちょっと良いものが欲しいです。

2016年5月27日金曜日

Arduino空気質センサー+OLED



3年ぐらい前に作ったArduinoニオイセンサーの記事が未だにアクセスが多い。ありがたいことです。

でも、あっちの記事で使っているTGS2450は、いろいろタイミング制御やら電圧制限やらが厳しくて、気楽に使えません。

ので、先日ESP-WROOM-02でも使った空気質センサーを使って、作りなおしてみました。

なお、上の写真でグラフが急上昇しているのは、地味なので消臭スプレーを噴射してみたところです。人間の感じるいい匂いと空気質が必ずしも一致しない、という図です。でも、私が「ハー」ってやると確実に上昇します。ちなみに冬の早朝、部屋の空気を入れ替えた状態が一番低い値を示していました。

■使用部品■

Arduino nano(他のArduinoや互換機でも問題ないはず), 空気質センサー, OLED 0.96インチです。なお、安いところで買うと詳しい説明書いてないのですが、ピンの配列や対応する電源電圧などが異なる場合がありますので、十分ご注意ください。

なお、配線のためにミニブレッドボードとメス-オスのジャンプワイヤを使いました。

■配線■

Arduino nano/unoAirQuality Sensor0.96インチ OLED
A0AO(Analog out)
5VVCC
GNDGNDGND
A4SDA
A5SCK(SCL)
3v3VDD


■プログラム■

ESP-WROOM-02の記事では別のライブラリを使っていますが、ここではAdafruitさんのライブラリを使ってみました。大きなフォントが今ひとつなんですが、グラフィックスの命令が豊富なのでこのあとグラフ化も簡単でした。

コードのほとんどはOLEDへの表示です。

AirQualityセンサーからの値はアナログ値なのでanalogReadで読みます。読んだ値は64桁のバッファに格納して、これを用いてグラフを描画しています。

ソフト屋としては、「単純バッファで毎回シフトw」「グラフの描画で座標を二重に計算ww」など、ちょっと恥ずかしいのですが、わかりやすさを優先しました(真顔

あと、ドットを描画する命令がわからなかったので、drawLineで同じ座標を指定してます。ドキュメント読めば書いてあると思うんだけどw


2016年5月26日木曜日

FPGA評価モジュール:BeMicro到着


基板を手に持つとずっしり重いです。多層基板でベタGND / ベタVccがあるから?ってことだけじゃないと思うけど、とにかく存在感のある基板っす。

FPGAを使ってみたいと思ったのは、高速性とか自由度などいろいろ理由はあるんですが、GPIOが多いというのが大きいです。

このBeMicro MAX10でもコネクタに出ているだけで
  • 2x40pinのピンヘッダ
  • 80ピンカードエッジ
  • 2個の2x6pin

…こんなにあります。もううんざりするレベル。

ピン番号が横に長いExcelのセル番号みたいになってますww

LPC1114で8x8マトリクスのLED駆動してI2Cつなぐと残りが足りないわー…

MSP430G2552で4桁の7セグLEDをドライブするともうI2Cしか繋げないわー…

とか言ってた人生がイヤになります(もちろんMSP430の超低消費電力はこのFPGAが太刀打ちできる世界じゃないですし、そういう人生好きですけどね)。

さらにGPIOが多いだけでなく、標準の状態で以下のようなデバイスが付いているので、USBつなぐだけである程度のことができてしまいます。

  • 8MB RAM
  • ADC
  • 温度センサー
  • 3軸加速度センサー(ADXL362)
  • CDS
  • LED 8個
  • スイッチ2個
  • オンボードプログラマ(USB Blaster)

これで4000円(chip1stop.com…入手先によって値段は違います)。もちろん難しいんですけど、マニュアルの通りにCPU(Nios II / e)を作りこんで、多少必要な回路をその周囲に貼り付けるぐらいであれば、mbedを扱える人ならそんなにハードル高くないと思います。

この基板にはついてませんが、個人的にFPGAで何とかしたいブツとして「CMOSカメラの接続」っていうテーマがあります。ずっと前にaitendoで1.3MのCMOSカメラを「安い!」って飛びついて買ったんですが、Arduinoや下位のmbedでは簡単に御せる世界ではありません(mbed LPC-4088で制御した作例は見たことありますが)。でもMAX10ならCMOSカメラからの出力が16ピンもあってμ秒単位でいろいろ処理しなきゃならなくても、ぜんぜん余裕な世界です。

…もちろん、使いこなせれば…の話ですけどね。

パッケージ

中身
がんばります!

2016年5月25日水曜日

Chip1Stopさんからお荷物届いた

長さ1mぐらいある細長い箱。

開けるとBeMicroその他の入った袋と、レールが1本。あれ?今回レールに入れるほどIC頼んだっけなぁ…と思ったら、8pin DIPが2個入っていました。


Amazonの過剰包装にも驚くけど、これはびっくり。

こういう小口相手の商売じゃないんだろうなー。ゴメンナサイ。

2016年5月23日月曜日

FPGA学習で頭を抱える

ビールと棒々鶏とFPGA

トランジスタ技術2015年11号 p113に、16ビットのカウンタを2個使って32ビットのカウンタを構成する際の下位から上位へのキャリーの処理が以下のように記述されていまして。

CNT(15 downto 0) <= CNT(15 downto 0) + 1;
if (CNT(15 downto 0) = x"FFFE") then
  CARRY <= '1';
else
  CARRY <= '0';
end if;

これが"FFFF"との比較じゃなくて"FFFE"との比較で正しく動作する、というのがどうにも理解できなくて頭を抱えていました。記事には
・CNTとx”FFFE"を比較してCARRYを立てる回路
・CNTを+1する回路
は同時に実行されるので、これでうまく動くのです。
と説明されているのですが、少しデジタル回路をいじった経験からすれば、「下位のカウンタがFFFFから0000になるときにキャリーが1になるべき」で、いくらFPGAがソフトと違って同時に処理されるものだとしても、「今」の値がFFFFの時に「次」のキャリーの値が1になるんではないかなーという違和感が消えません。

そこで、いろいろキャリーの処理について調べてみました。結果、言語と構成は違いますが、以下の記事にこうなった原因と正しいやり方が出ていました。

触って学ぼう FPGA開発入門(6): 順序回路と組み合わせ回路を意識した記述を! (2/4)

トラ技の記事はキャリーの処理を順序回路の中に組み込んでしまったためにキャリー出力がラッチされてしまい、それを補うために1つ手前の値"FFFE"で比較してやらないといけない、ということのようです。

上の「触って学ぼう」の記事では回路図になっているので一目瞭然なのですが、トラ技の説明からはまったく理解できませんでした。というか「同時に処理されるので云々」というトラ技の説明は現象と結びつかない気がします。

いやー、ソフトウェアと違いますね。当たり前だけど。自慢じゃないけど、この落とし穴に何度も落ちる自信あります、私orz

2016年5月18日水曜日

作った基板が動作しない:切り分け編



トラブルには切り分けが大事です。

ESP-WROOM-02が起動しない原因は大きく分けて以下の3つに分類できます。
  • 部品の初期不良または製作時の破損
  • 基板設計がダメ
  • 製作上の問題

前回はESPを交換してみましたが、やっぱりダメでした。

とりあえずESP部分とは別にアナログの動作を確認するためパターンをカットし、別のESPからの信号を直結してみたところ、問題なく動作しました。アナログ回路については特に新しい要素を入れてないので、当たり前といえば当たり前ですが。

また、アナログ部分を切り離した状態でESPを起動してみましたが、やはりboot mode (5, 7)として認識されています。あきまへん。

そして、恐ろしいことに、同様にboot mode (5, 7)を返してきて、ヒーティングガンによって吹き飛ばされた最初のESPを別の基板にリフローしてみたところ、なんの問題もなく動いてしまいました。

部品に起因する問題ではない、ということはほぼ確定しました。

■今回の検証■

ESP部分の基板設計がダメなのかを検証します。ESPとその周辺のプルアップ抵抗やパスコンだけをリフローして起動するかどうか確認します。

…装置の検証としてはあんまり意味ないんですけどね。でも、とりあえず、「ESP部分は動く」ってのを確認しておきたかったもんで。

結果として、動作しました。

…もう何が何だか…orz

真っ先に思い当たるのは前回はESPのIO15あたりのハンダ付けがダメだったってことなのですが、これは端子での電圧を確認してますので、問題ないはずです。

わかってしまえばきっと物凄くくだらない原因なんだろうなーと思うんですが…今のところは no idea です。とほほ。

2016年5月15日日曜日

Arduino+ADXL345で地震酔い対策


■地震酔いとは■

東日本大震災では東京はいくつかの施設を除いては被害を免れました。でも、頻繁に震度3-4の揺れを経験していると、そのうちふと揺れを感じているかのような錯覚を覚えることがあります。本当に揺れているのか錯覚なのかわからないんですよね。

これが地震酔いです。熊本では高頻度で強い揺れが続いているので、地震酔いの症状でお困りの方もおられるのではないかと思います。

ということで、Arduinoで「揺れたら点灯」なデバイスを作ってみました。机の上に置いて、「あれ?地震?」と感じた時に点灯していなければそれは気のせい、という感じに動いてくれればいいのですが(作ってから東京で大きな地震がないので未検証です)。

周波数成分ごとに色を変えたのですが、手に持っているとどんなに心を鎮めても赤(ゆっくりした揺れ)が消えてくれません。

アル中検出器を造ってしまったのかもしれません。

なお、「酔い」と言っても色々あります。上記のように「揺れているように感じる」程度なら、物理的に揺れていないことを確認することが一種の認知療法的な効果につながると思いますが、「常時揺れているように感じて気持ちが悪い」という状態であれば、内耳に作用するタイプの乗り物酔い止めが有効です。こういう症状では「どこの医者にかかって良いかわからない」と思うんですが、メマイや酔いなどについては耳鼻咽喉科に相談してみるのがよろしいです。3.11の時、かなり深刻な症状を訴える同僚もいましたが、でも今はみんなすっきり治っています。不快な症状を我慢しないで、医師に相談しましょう。

■ハード■

Arduino nano+加速度センサーADXL345+マイコン内蔵LED WS2811です。以前、「キーボードを強く叩き過ぎたら、警告する」ってのを作りましたが、その流用です。

Arduino接続先
3.3v出力ブレッドボードの+ライン
GNDブレッドボードの-ライン
5v出力マイコン内蔵LEDのVdd
D2マイコン内蔵LEDのDin
A4ADXL345のSCL
A5ADXL345のSDA


ADXL345接続先
SCLArduino A4
SDAArduino A5
SDOGND
CS3.3v
Vs3.3v
GNDGND
Vdd3.3v

■ソフト■

加速度センサーから読み取った値を3軸分合成してからFFTにかけて、ノイズ分を除外した値が一定値を超えたら帯域ごとのパワーにわけてRGB LEDを点灯します。

当初割り込みを使って連続的に計測するプログラムを書いたのですが、インタラプト処理ルーチンでI2Cを読んだ瞬間にフリーズする、という現象を解決できなかったので、諦めて単純な逐次処理にしました。ただ整数処理のFFTを使っているので、計測漏れはそれほど大きくないです。

ADXL345に限らず3軸加速度センサーには重力加速度が常時計測されます。ので、その影響を取り除く必要があります。また、体感する揺れは三軸の合成ベクトルなので、三軸分のスカラー値を求めて、そこから重力加速度分を引き、感度を高めるためにちょっと掛け算してます。read345というルーチンでは、その後、ムダなdual buffer処理をしていますが、これは最初に書いたように当初割り込みで処理しようとしていた名残です。書き換えるの面倒なのでそのままにしています。

ノイズ処理は単に「静かにしていてもFFTからの出力が0-2程度出ているので、2以下はノイズとしてカット。それを超えた分だけ集計して、集計値が一定値を超えたら、有効と判定」というごく単純な処理です。

FFTには整数型FFTを使いました(Topic: Modified 8bit FFT in c)。ありがとうございます。ただ、開発されてから時間が経っているので、いくつか修正が必要です。まず、include文で「WProgram.h」となっている箇所は「Arduino.h」に置換します。また、データタイプの定義が変わっているので、fix_fft.cppの頭の方に
#ifndef prog_int8_t
#define prog_int8_t int8_t
#endif
を貼っておいてください。

ADXL345のライブラリはAdafruitの新しいunifiedライブラリ版を使いましたが、unifiedなインタフェース(センサーが違っても、重力加速度としての値域に変換して返すなど、センサーごとの差異をわりといい感じに吸収してくれるライブラリ群)は使わずgetX, Y, Zで取ってます。FFTが整数ですし。

WS2811は特に問題ないと思います。


■感謝■

FIX_FFTの作者の方、およびADXL345/WS2811ライブラリを公開してくださったAdafruitに感謝申し上げます。ありがとうございました。

2016年5月11日水曜日

Odyssey MAX10でLチカ



■いよいよ書き込み■


と続いてきました、いよいよ書き込みです。Quartus Prime Liteを一通り使ってみます。

マクニカさんの記事は「はじめての」と書いてあっても読んだ人間が操作に完熟しまくっていることが前提になっていますので、ちょっと大変です。大変苦労しましたが、いい勉強になります(いや皮肉じゃないよ…技術者ってマゾじゃなきゃやってられないし)

■Linux上での起動■

インストール先/altera_lite/15.1/quartus/binにパスを通すか、毎回このディレクトリへcdで移動して quartus とタイプします。何かエラーが出るんですが、良いんでしょうか。
koichi@koichi-ubuntu:~$ quartus
Inconsistency detected by ld.so: dl-close.c: 762: _dl_close: Assertion `map->l_init_called' failed!

■プロジェクトを作る■

Quartus Prime Lite IIを起動したら、ファイルメニューからNew Project Wizard...を選び、プロジェクトを作るディレクトリとプロジェクト名を入力します。私はディレクトリ名プロジェクト名トップデザイン名を「MacnicaBlinky」にしました。


Nextをクリックします。「Project Type」画面、ここはEmpty projectのまま、Nextをクリック。「Add Files」画面も何も触らないでNext。

次のFamily & Device Settingsは大事です。Familyはもちろん「MAX10なんたら」を選びます。まだまだリストには大量にチップが並んでます。絞り込みたいのですが、上記ページどころかマクニカのサイトのあちこちを探してもOdysseyに搭載されているMAX10が「10M08だ」としか書いてありません。それだけでも何個もあるっちゅーねん(怒)。FPGAマガジンのNo13に「10M08SAU169C8GES」とあったので、それを入力します。めでたく選択肢が一個になったのでNextです。いやはや。



Summary画面です。内容を一通り確認して「Finish」をクリックします。




■VHDLを打ち込む■

Fileメニュー>New...を選びます。Design Files下の「VHDL File」を選びOKをクリックします。



エディタが開くので、記事のソースをコピペします。なお、13行目あたりの代入文で「<=」であるべき箇所が「<=」になっていますので、全角の<を半角に直してください。真面目にWeb作れよなぁ、マクニカ(すっかりタメ口にw

…と、その貼ったソースもいろいろ見えない文字が埋まってたりで使えないので、掃除しました。また、entityの名前もプロジェクト名と一致させないとダメっぽいので、それも合わせてあります。

library ieee;
use ieee.std_logic_1164.all;
entity MacnicaBlinky is
port (
    BUTTON : in std_logic;
    LED    : out std_logic
    );
end MacnicaBlinky;
architecture rtl of MacnicaBlinky is
begin
    LED <= BUTTON;
end rtl;

■入出力ピン割り付け■

ここからは「トランジスタ技術2015年11月号」の特集第二章を参考にします。この記事ではテンプレから操作を追っていくのですが、苦労してVHDLを貼ったので、設定はマクニカ、操作はトラ技…というクロス技で進めていきます。

マクニカには「PB0 はK13ピン、LED0 はL13ピン」と書いてあります。

なお、マクニカの「はじめてガイド ピン・アサインの方法」によれば、「2.2.データベースの構築」というところに「ピンをアサインする前にデザイン情報を作成しておくと…とても便利です」と書いてあるので、従います。Processingメニュー>Start>Start Analysis & Elaborationを実行するとno erro / ワーニング1個だけになるはずです。

ということで、ピンの割り付けに戻ります。資料は「はじめてガイド ピン・アサインの方法」の「3.ユーザーピン アサインの方法」に戻ります。

Assignmentメニュー>Pin Plannerを選びます。

よくみかけるあの画面が出てきました。



下の一覧から上のマトリクス上にドラッグ・アンド・ドロップしてつなぐようです。「PB0 はK13ピン、LED0 はL13ピン」ですが、PB0は一覧表ではBUTTONとなっています。まずBUTTONをゆっくりドラッグしてK13のあたりでウロウロしていると黒いダイアログにK13についての説明が出てきますので、手を離します。同様にLEDをL13で。

表のI/O Standardのところをダブルクリックしプルダウンから「3.3-V LVTTL」を選びます。似たようなのが多いので間違えないように。間違えるとハード的に破損します。

■コンフィギュレーションモードを選ぶ■

「MAX 10 の CFM をどう使うか=何モードを選ぶか、になるのですが、今回は Single Compressed Image を選択します。」って書いてあるんだけどー、それはどこですかー。と喉から血を吹き出しながら叫んだら、見つかりました。

Assignmentメニュー>Device



真ん中へんにあるDevice and Pin Optionsボタンをクリックします。



左のCategoryで「Configuration」を選び、右のConfigurationのConfiguration modeのプルダウンを「Single Compressed Image(1376Kbits UFM)」」にて、OKをクリックします。




■論理回路に対するタイミング制約 ■

元記事に「論理回路に対するタイミング制約を作成&設定します。 今回はクロック制御とは無関係で、スピードを必要とする論理回路ではないですし、Pin to Pin の単純動作なので、省略します。」とあるので省略します。

■コンパイル■

Processingメニュー>Start Compilationでコンパイルを開始すると下のメッセージ欄にたらたらメッセージが出てくるのですが、毎回この表示が出て少し止まるのでちょっとココロがくじけますが、影響ないので終了を待ちます。



終わりました。


元Java屋としてはワーニングが大変気になるところですが。エラーはでていないので、気にしないことにします。

■タイミング検証■

「今回は上記の手順③-3で述べた理由から省略します。」だそうです。

■プログラミング(書き込み)■

プロデューサーさん、プロデューサーさん、ついに書き込みですよ書き込み!

…すまん。ついやってしまった。デレマスは渋凛一択だけど、アイマスとしては765プロの面々の方が好きだな。

さて、それはともかく。

あちこちひっくり返しても、接続する順番とかJTAGコネクタの向きが見当たりません。ググってやっと見つけたのがこの記事(プログラミング)。ありがとうございます。以下の作業はこの記事を参考にさせていただきました。


写真のように赤い線の向きを合わせてBlasterのケーブルを刺します。初回だとちょっと硬いかもしれませんが、根元までしっかり挿しましょう。悟空にもUSBケーブル(mini USB)もつなぎ、Odysseyにもmicro USBケーブルをつなぎます。VM上で使っている方は、VMがちゃんとUSB Blasterを認識しているか確認しておきましょう(経験者は語る)。

Toolsメニュー>Programmerを選びます。



Hardware Setup...をクリックしてCurrently selected hardwareでUSB-Blaster [1-2]を選択してCloseボタンをクリックします。


もう疲れたので、記事をそのまま引用します
4.ハードウェアにプログラミングするconfigのファイルを指定します。[Add File..]ボタンをクリックします。プロジェクトフォルダ配下のoutput_filesフォルダにconfigファイルがあります。テストの用途では拡張子がsofのファイルを選びます。

私の場合は「MacnicaBlinky.sof」を選び、Openボタンをクリックします。



なお、スクショ撮り忘れたからって同じ操作をもう一回やるとこんな画面になってしまいます。


二行目を右クリックしてDeleteすれば戻ります(ちょっと焦った)

さて、いよいよです。「Start」ボタンをクリックします。結果は右上のマドに出るのですが「Failed」でした。「プログラミング」を拝見したら、OdysseyにもUSBつなぐんですね。はっはっは。


ではケーブルをつないで、改めてStart。「100% (Successful)」キター!!

■動作テスト■

これでFPGAが俺様の回路になりましたw テストボタンを押せば、1000千万桁の円周率が算出されます!…なんてことはなく、押している間だけLEDが1個点灯します。ぽちぽち。ボタンとLEDを直結すれば5分もかからない、とか言ってはいけません。

いろいろ回り道をしましたが、ともかくOdyssey MAX10で入力と出力と回路を作ることができました。

いい加減なWeb資料を公開してくださったマクニカにも感謝します。ブログには全部書いてないけれど、回り道して調べまくって、すっげー勉強になりました。いや、でも、調べられることであれば、アウトラインでもいいから一連の処理手順が公開されているって大事なことですよね。いやマジで。今後もよろしくお願いします。

あ、お笑い系テクニカルライターの御用があれば、おこえかけてくださいねw

悟空USB BlasterをMacOS上のVirtualBox上のUbuntuで。


Power LEDの豪快なズレなど全然気にならない1200円

USB BlasterはUSBからFPGAに書き込みをするためのアダプタ。Alteraの正規品は10万円ぐらいするけど、この互換品は1200円。Amazonでレビュー1件しかなかったけど、たくさん買ってちゃんと動いたって書いてあったので、買いました。

■Ubuntu上でUSB Blasterを認識させる■

MacOS X El Capitan 10.11.4、VirtualBoxのバージョンは5.0.20、ubuntuは14.04 LTSです。Quartus II Prime Lite Edition 15.1を入れてあります。

まず、VirtualBoxのDeviceメニュー>USB>Altera USB-Blaster [0400]を選択して、Ubuntuがデバイスを認識できるようにします。

Quartus / USB Blasterの設定はここを参考にしました。

まず設定ファイルを書きます。ターミナルを起動して
sudo vi /etc/udev/rules.d/altera-usb-blaster.rules
iをタイプしてから以下をコピペ
ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="666"
:wq<return>で保存。もちろんvim以外のエディタでもOKです。

Quartusを起動します。
cd <インストールディレクトリ>/altera_lite/15.1/quartus/bin
./quartus
Toolsメニュー>ProgrammerでProgrammerを起動


画面上の「Hardware Setup...」をクリック


Currently selected hardware:で「USB-Bluster [1-2]」を選び、Close
「Hardware Setup...」ボタンの右隣りが「USB-Bluster [1-2]に変わります。

■追記 5/11■

やっとQuartus Prime Lite on Ubuntu on MacでLチカまでたどり着きました。


2016年5月8日日曜日

作った基板が動作しない:修復編

作った基板が動作しない:調査編」の続きです。

前回、吸取り網ではどうにもならず、「もう一度ホットプレートで温めるか」というところで終わったのですが、「電子工作部」にて「カプトンテープで覆ってからヒーティングガンで仕留めろ」と教えていただきました。

で、こちらが結果です。わはははははははは。



本当はカプトンテープ貼った「処理前」「処理後」を写真に撮りたかったのですが、あっという間に吹き飛んでしまったので結果のみの写真となりました。あはははははは。

様子を見るために熱風を5秒あててから温度を図ってみたら100度程度でした。もう少し長目にあててもう一度温度を見てみよう、と思って9秒までカウントしたら吹っ飛んでいました。本当にもう見事な吹っ飛び具合いです。うはははははははははは。

本当にいつもお世話になっています。ありがとうございました>電子工作部

ヒーティングガンは以前、リフロー用に買ったのですが、部品が吹き飛んでしまってダメでした。なので「今後は熱収縮チューブ収縮専用機として働いてもらおう」と言ってたのですが、「ICの交換」という用途でも働いてもらえることとなりました。よかったよかった。

なお、使用したのは「白光 ハッコーヒーティングガン 883B 100V-1KW平型プラグ 883-13 」と「白光(HAKKO) ハッコーヒーティングガン オプションノズル A1108 」です。アマゾンのヒーティングガンのページにはお勧めとしてA1111が出ているのですが、ヒーティングガン883-13用のノズルはA1108です。お間違えなく。

で、ふっとんだESP-WROOM-02を供養してから、吸取り網で残ったハンダをきれいに掃除した後、遅硬化性接着剤で新しいESPを固定します。

固まったところでハンダペーストを塗り、ハンダゴテでひと撫で。いわゆる引きハンダというやつを実行。交換が完了しました。

■残念なお知らせ■

交換しても症状変わりませんでした。

2016年5月7日土曜日

Odyssey MAX10評価キット:開封編


このごろの新しいおもちゃ興味の中心はFPGA、というかAltera MAX10です。

附属基板をちゃんと動かすのは面倒くさいからBeMicroで勉強するつもり

さくっと動かして実験するにはBeMicro MAX10というボードがコストパフォーマンス的(Chip1stopで4000円)にも規模的(FPGA上にマイコンチップを合成してまだ余る)にも使い勝手(USBつなげばプログラム可能)もよさ気ですが、まずは「Odyssey MAX10 FPGA and BLE Sensor Kit」というやつを買ってみました。

これは、FPGA MAX10と各種センサーの乗っかったBLEマイコンがセットになっているもので、iPhone/Androidの専用アプリからプリセットされた数種類の回路?を選んでFPGAをプログラミングし、動作させることができる、というものです。回路?は、もちろん自分で設計製作してダウンロード?したものも動かすことができます。キットにプリセットされた回路?や自分でプログラムする回路?はpersonalityと呼ばれています。

※「?」が多くてすみません。
 まだFPGA習い始めたばかりなので、用語に馴染めていないのです。

センサーとしては、マイク、温度、湿度、照度、加速度、DACがついていて、他にLED8個とスイッチ2個を使うことができます。

■使ってみる■

届いたのはプラスチックのケース。


開けてみると思っていたより小さいです。mbed LPC1768と同じぐらい、といえば電子工作方面の方には通じるでしょうか。Arduino Nanoより少し長いです。


クッションに2つのブツが。左のキーホルダー状プラスチックケースに入っているのはBLEマイコン用の電池ホルダーです(袋にワッシャが同梱されていますので開封時に無くさないようにご注意を)。右はFPGA+BLE基板が2階建てになっています。電池ホルダー基板+BLEマイコンだけで使う場合には、この2階建てをバラす必要がありますが、ピンセットで返しの部分をつまむと比較的簡単に外れます。ピンセットの先で基板を傷つけないようにご注意を。

準備としては
  • https://odyssey.m-pression.com/でユーザ登録
  • iPhone/Androidアプリをダウンロードし、上で登録したアカウントでログイン
  • マイクロUSBケーブル

あたりが必要です。

さっそくOdysseyにマイクロUSBを接続し、iPhoneアプリを立ち上げると、BLEのペアリング画面になります。すぐに見つかると思いますので、選択します。



するとPersonality Listが出ます。



まず「ADC and Audio Monitor」をタップします。



この時、OdysseyのUSBコネクタ近くの緑LEDが点灯しています。これは選択したPersonalityをFPGAにプログラミングしていることを示すもので、これが終わるまでiPhone画面を操作しても反応しません。LEDが消えた時点でスマフォで「ADC on」をタップし、Odyssey近くで音を出すとUSBの反対側にある緑LEDラインが音の大きさに比例した長さで点灯します。

同様に、温度&湿度、加速度、照度…などいろいろありますので試してみましょう。

なお、iPhone上の画面はWeb上でカスタマイズ可能です。配置や項目などを入れ替えることで、センサーなどに合わせたアプリとして構成することができます。例えばボタンを配置し、I2Cへのコマンド(アドレス、レジスタ番号、書き込み値、データ長など)を指定すれば、スマフォ上のボタンをタップ→BLE経由でOdysseyへ→MAX10のI2Cラインに信号を出力→結果を逆ルートでスマフォへ、という動作をします。

必ずしもすべてのI2Cデバイスに対応できるわけではないですが、よっぽどへそ曲がりなデバイス出ないかぎりは対応できそうな感じです(まぁI2Cは大抵ヘソ曲がってますけどね)。


■感想■

FPGA初体験なのですが、いやー、TTL ICにラッピングで配線して間違えたりショートしたりして苦労してたのがウソみたいに回路できちゃいますね。魔法みたいです。もちろん今までの回路図のかわりにVHDLやVerilog HDLなどとの戦いが待っているわけですが(回路図を書いていくこともできます)。

さて、明日はチュートリアルに従ってVHDLかVerilog HDLをコンパイルし、組み上がった回路をOdysseyにダウンロードして実行してみたいと思います。

当面の目標は、もちろんデジタル時計です(笑)。

■参考書など■

  • トランジスタ技術 2015年 11月号
    特集「FPGAキットで体験!チップ内電子工作」
    FPGA電子工作として、いろいろな事例が具体的に紹介されていて勉強になります。
  • FPGAマガジン No.13
    特集「入門もホビーもピッタリ! ワンチップFPGA=MAX10」
    MAX10の概要を把握したりカタログ的な意味では役に立ちましたが、表面をさらっとなでた感じの記事が多いのでちょっと不満。
  • (1)MAX10(2)ライタ(3)DVD付き! FPGA電子工作スーパーキット 
    記事は入門書として素晴らしいと思います。なおCQ出版お馴染みのマルツで部品を買い足さないと動かない基板が同梱されていますが、買い足す部品を合計するとあんまり安くないのでBeMicro MAX10を買った方が手っ取り早いと思います。ライタも悟空 ALTERA USB Blaster互換JTagケーブルが1200円ですしね。
  • HDLによる高性能ディジタル回路設計
    今の私には少し歯ごたえがありすぎるのですが、従来の回路設計の延長ではないFPGAとしての回路設計はどうあるべきかという観点から記述されているので、ソフト屋の私にはむしろ理解しやすいです。