2017年5月19日金曜日

DE0nanoでQuartus Prime Lite Editionを使う: 備忘録

新規プロジェクトの作成

  • File ⇒ New ⇒ New Quartus Prime Project ⇒(New Project Wizard画面)
  • Directory, Name, Top-Level Entity⇒ プロジェクトのディレクトリ、プロジェクト名、トップレベルモジュールの名前 ⇒ Next
  • Project Type: Empty project ⇒ Next
  • Add Files: (空白のまま)⇒ Next
  • Family, Device & Board Settings ⇒ Family: Cyclone IV E, Available devices: EP4CE22F17C6を指定 ⇒ Finish

Verilogファイルの新規作成

  • File ⇒ New ⇒ verilog HDL File
  • File ⇒ Save As ⇒ (ファイル名を確認して)保存 ⇒ (プロジェクトにファイルが追加されました)


Verilogファイルのサンプルコード

DE0nano搭載の50MHzクロックを分周してLEDを光らせてみます。
module DE0nano
(
CLOCK_50,
KEY0,
LED
);
 
input CLOCK_50;
input KEY0;
output [7:0] LED;
 
reg [27:0] count; 
always @(posedge CLOCK_50 or negedge KEY0)
begin
if (~KEY0)
count <= 0;
else if (count == 28'hFFFFFFF)
count <= 0;
else
count <= count + 1'b1;
end
 
assign LED = count[27:20]; 
endmodule

FPGAのピンアサイン

  • 事前作業としてデザイン情報を作成します。Processing ⇒ Start ⇒ Start Analysis & Elaboration
  • Assignments ⇒ Pin Planner



ピンアサインするには、Node Nameをパッケージのピン番号にドラッグ&ドロップするか、Locationにピン番号を直接記入します。I/O規格も適宜変更します。


コンパイルの実行

  • Processing ⇒ Start Compilation
  • コンパイルが無事終了したらコンパイラレポートで最大周波数などが見られます

FPGAに書き込み



ROMに書き込み

  • File ⇒ Convert Programming File 
  • Programming file type: JTAG Indirect Configuration File (.jic), Configuration device: EPCS64(基板のバージョンによりEPCS16の場合あり)
  • Input files to convert: Flash Loaderをクリック ⇒ Add Device ⇒ Cyclone IV E ⇒ EP4CE22 ⇒ OK
  • Input files to convert: SOF Dataをクリック ⇒ Add File ⇒ 変換元のsofファイルを指定
  • Generate をクリック ⇒ jic ファイルが生成される
  • Convert Programming File を終了
  • Programmer を起動
  • Add File ⇒ 先ほど生成した jic ファイルを指定
  • Program/Configure と Verifyにチェックを入れる 
  • Start で書き込み開始


2017年5月16日火曜日

DE0-nano 拡張ボード: オーディオ入出力部(2)バグ取り着手

前回からなんと3年ぶりの記事です。DesignSpark PCBで設計した基板をELECROWで製造してもらってから時間が経ってしまいました。
まーなんとかなるやろ!と試作せずに作ってしまいました。シルク印刷があるとちゃんとしているように見えますが、見落としたミスがいっぱい潜んでいるはずです。

この基板には、デジタルオーディオの光コネクタ入出力が各1個、オーディオモニタ用のBNC出力が2個、USBシリアルポート1個をつけました。このほか、AVRマイコン(ATmega328P-AU; 32TQFP)が乗っていてデジタルオーディオインターフェースのSRC4382の制御とDIPスイッチと半固定ボリュームの面倒を見ています。




2017年5月8日月曜日

ArduinoIDEから生AVRマイコンに書き込み

Arduinoのスケッチを、工場出荷状態(ブートローダなし)の生AVRマイコンに書き込む手順を確認してみました。先人の情報によりArduinoIDEから違和感なく書き込みできるようになりました。

事前準備
ArduinoIDEには、"書込装置を使って書き込む"というメニューがありますがやってみると失敗してしまいます。ファイル⇒環境設定で"より詳細な情報を表示する"にチェックを入れて確認するとavrdudeのエラーが出ています。
avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch
         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"
         Using Port                    : usb
         Using Programmer              : stk500v2
スケッチの書き込み中にエラーが発生しました
avrdude: usbdev_open(): did not find any USB device "usb" (0x03eb:0x2104)
avrdude done.  Thank you.
これはAtmel Studio 7.0とセットでArduinoIDEと互換性のないJungoドライバがインストールされてしまうことが原因で、ArduinoIDEがAVRISP MK IIを認識できない状態のようです。
解決策として、Jungoドライバと胸像できるようにlibusb-win32ドライバをインストールします。AVRISP mkII を接続したままlibusb-win32-devel-filter-1.2.6.0.exeを実行。ウィザードの最終段階でLaunch filter installer wizardにチェック。Install a device filterとして、リストからAVRISP mkIIを指定してインストールします。(参考記事1参考記事2

ArduinoIDE/AVRISP mkIIを使ったスケッチの書き込み
さらに、kosakalabの開発環境を導入してデバイスを選んで開発できるようにしてみました。ここでは、デバイスとしてATmega328、クロックは内蔵8MHzを指定しています。この段階ではヒューズビットの書き換えまでは反映していません。


ArduinoIDE/AVRISP mkIIを使ったヒューズビットの書き換え
kosakalabの開発環境では、ツール⇒ブートローダを書き込む とすると、ダミー操作のブートローダ書込を行った後にヒューズビットの書き換えとプログラムの消去が行われます。このため改めてプログラムを書き込む操作が必要です。

2017年5月7日日曜日

互換基板でArduinoを試す

食わず嫌いだったArduinoを試してみます。いきなり互換基板から入るのもどうかと思いますが、たまたま手元にあったArduino UNO R3互換の中国製NHduino UNO基板でまずはLチカしてみることにしました。Windows10ならUSBシリアルI/F CH340Gのドライバはあっさりと自動認識してくれましたし、電源はUSB給電だしラクで良いです。


Arduino IDEをインストールして、、、
よくある解説通りにファイル⇒スケッチ例⇒01.Basics⇒Blink


次にターゲット基板を指定しましょう。ツール⇒ボード としたら、既にArduino/Genuino UNOが選択されていました。また、デバイスマネージャによるとCH340GはCOM3として認識されているので、シリアルポートをそれに合わせます。


次にプログラムを書き込んでみます。右矢印をクリック(スケッチ⇒マイコンボードに書き込む Ctrl+U と同じ)するとコンパイルされたプログラムがUSBシリアルを通じて書き込まれます。Lチカのサンプルもあっさり動作。これは簡単です!



2017年4月28日金曜日

オーダーメイド枕で熟睡感を実感

このところどうも寝付きが良くありません。いびきをかいているようだし、良い睡眠がとれていない気がします。前から気になってましたが、息苦しくなって目が覚めたり朝になると枕を押しのけてうつぶせ寝をしています。これはひょっとして枕が合っていないのではないか、というわけで家人が愛用しているオーダーメイド枕を自分でも試してみることにしました。

・・・結果は、途中で目が覚めることもありませんし、何より朝になっても枕の上でちゃんと寝てる自分にびっくりでした。さらに特筆すべきは、横向きの寝やすさでしょうか。ベストな高さに調節しているから当然なんですが、今までの低反発枕では得られない使い心地です。
購入以来毎日、熟睡感を実感しています。これが睡眠の本来の姿なのかと思いますが、今までは何だったのかという思いです。枕の影響は大きいものなんですね、これほど効果があるとは予想外でした。

枕は、山形県天童市の天童プップで購入したものです。私は店頭に出向きましたが、Webを見ると通販が主力のようです。オーダーメイドですが身体に合わせて1時間ほどかけて丁寧に調整してくれます。枕そのものはシンプルな構造で、内部の4つの袋に入れるポリエチレンビーズの量を5グラム単位で調節してくれました。



2017年4月24日月曜日

地上デジタル放送のパイロット信号




地デジのパイロット信号のことがブログ記事に書かれていました。地デジのスペクトルは、台形の形をしていてスペアナでズームアップしてみてもノイズのようなものが見えるばかり。ほんとうにそれが見えるのか試してみました。
スペアナを所定の周波数にセットしてズームアップすると、13chの台形スペクトルの上端にそのパイロット信号らしきモノが見えます。アベレージングをかけると確かにキャリアが浮かび上がってきました。








ARIBの標準規格 STD-B31 地上デジタルテレビジョン放送の伝送方式 を紐解いて頑張って調べたところ、これはCP(Continual Pilot)という受信機の同期・復調用の信号だとわかりました。(ARIBの規格書、以前は自由にダウンロードできたのに今は有料になってます)さて、前述のブログ記事には、
上端パイロット信号は公称周波数+39/14MHz(+2.785714MHz)
とあります。これをARIBの規格書で調べてみましょう。
地デジのキャリア総数は5617。上端のキャリアは地デジの公称周波数から高い方へ(5617-1)/2 = 2808本目。
ここで地デジのセグメント帯域幅は6MHz/14≒428.571kHz。キャリアの周波数間隔はセグメント帯域幅の432分の1なので、428.571kHz/432≒0.992kHzです。
つまり上端キャリアの周波数は、地デジの公称周波数から (6/14) / 432 × 2808 = (39/14) [MHz]高いということで、元記事と計算が合いました。
ところで、地デジの公称周波数は物理チャンネルの中心周波数より 1/7 [MHz] 高くオフセットがかかっているので上のスペアナ画面のように 物理チャンネル13ch(中心周波数473MHz)の場合、上端パイロットの周波数は、473 + 41/14 = 475.928,571,4... [MHz] となります。
次にパイロット信号を拡大すると左側に2本のキャリアが見えてきます。それぞれセグメント番号12 キャリア番号422と425のAC(Auxiliary Channnel)信号です。AC信号は、変調波の伝送制御に関する付加情報または地震動警報情報の伝送に使われるそうです。
左側と真ん中のキャリアの周波数差は0.992kHz×3=2.976kHz。
真ん中とパイロット信号の周波数差は0.992kHz×7=6.944kHzとなるはずですが、スペアナ画面のマーカー値とは微妙に違いますね。FFTビンの都合で少しズレて見えているのかも(想像)です。
CPは連続キャリアでBPSK変調、ACはDBPSK変調されていて、信号レベルはそれぞれ同じのようです。






2017年3月21日火曜日

斬新!猫に蛸です。


デザインは昔々からのもの。専門家曰く猫(招き猫)と蛸(多幸)の目出度い組み合わせ。


サイドはこんな感じ。手作りゆえ土人形の表情はすべて違います。

山形県米沢市・相良人形