ADALM-PLUTO gnuradio

IIO oscilloscopeをいじっていたが、多頻度でアプリが操作不能後、落ちるので
gnuradioとやらで利用してみる。
www.youtube.com

こちらのほうが性能が高そで、ほかのRTLドングルなどにも対応しているらしい?

Windowsにgnuradiuoをインストールしても
ADALM-PLUTOのブロックがなかったのでやっぱり
Ubuntuでやらないといけなさそうである。

VMplayerにUbuntu16 64bitをインストールしてあったので、そこにインストールした
基本的な導入手順は以下のサイトを参考にした。
GNU Radio [Analog Devices Wiki]
gr-iioをcmakeするときには
cmake -DCMAKE_INSTALL_PREFIX=/usr .
で行わないと
pythonのiioのimportで失敗した。

ちなみにfish shellを使っているとコマンドを改行で区切ってあるものを直接コピペ実行することができるので便利
f:id:katakanan:20180906223805p:plain

serial consoleで接続してみる
f:id:katakanan:20180907200019p:plain

rulesを書く
github.com

gnuradio-companion
で起動する。
f:id:katakanan:20180906224323p:plain

正しくインストールされていると右のカラムに
Industrial IOというところがある。(Windows版には表示されなかった)
f:id:katakanan:20180906224545p:plain




f:id:katakanan:20180909110609p:plain
こんな感じにブロックを置いた。
GNU Radio [Analog Devices Wiki]
に書いてあるように
Device URIIPアドレスとかUSBのアドレスとか設定しないとDevice Not Foundと出てしまう。

f:id:katakanan:20180909160039p:plain
f:id:katakanan:20180909160215p:plain
それっぽい?

Raspberry piでSPI通信

RaspberryでSPIする必要がでてきてその方法を調べたのでメモ。
しかもPythonじゃないといけない。
python好きじゃないけど

pi@raspberrypi:~ $ cat /proc/version
Linux version 4.14.66-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611)) #1137 SMP Fri Aug 24 16:36:53 BST 2018

raspi-configとかそんなコマンドを打てばSPIを有効にできたりした気がする。
または,/boot/config.txtに以下追記

qiita.com

#!/usr/bin/env python
import time
import sys
import spidev
import RPi.GPIO as GPIO

spi = spidev.SpiDev()
spi.open(0,0)
spi.no_cs = True
spi.max_speed_hz =

SS_list = [4,18,17,8]

GPIO.setmode(GPIO.BCM)
GPIO.setup(SS_list, GPIO.OUT)

if __name__ == '__main__':
        try:
                while True:
                        GPIO.output(4, GPIO.LOW)
                        spi.xfer2([0x55,xAA])
                        GPIO.output(4, GPIO.HIGH)
                        print("hello")

                        time.sleep(1)
        except KeyboardInterrupt:
                GPIO.cleanup();
                spi.close()
                sys.exit(0)

テストコード一秒ごとにSPI通信する。

Slave Selectを複数使いたかったのでGPIO moduleもインポートしている。

CE0をマニュアルで操作したかった。
www.raspberrypi.org

SPI_CPOL    - Clock polarity
SPI_CPHA    - Clock phase
SPI_CS_HIGH - Chip Select active high
SPI_NO_CS   - 1 device per bus, no Chip Select
SPI_3WIRE   - Bidirectional mode, data in and out pin shared

SPI_NO_CSを指定すればいいらしい
のでspidevでそのように設定している。

Raspberry Pi 3 Model B+ スターターセット BASIC

Raspberry Pi 3 Model B+ スターターセット BASIC

KiCAD 5.0 stable install

KiCAD 4.0.Xの操作感に不満を覚え始めたので、乗り換えPCBエディタを探していた。
無料のものだとEagle(古いやつ)
手頃な値段のものだと、
Diptrace, Eagle(Autodeskのほう)、CircuitStudio,
高いやつなら
Altiumとか。。。?
80万は出せない。

とかお金かけようかと悩んでいたタイミングでKiCADのver5がでてしまい
またかなり変更されているようなのでKiCAD v5を試用する。

まずはじめに、KiCAD v4とv5を共存させるためには少し手間がかかるらしい
github.com
ここら辺も勝手にどうにかしてほしい

起動して
まずメインパネルが少しだけUIがカラフルになった?
f:id:katakanan:20180801000818p:plain

回路図エディタのメイン部分はそれほど変わっていない。
ボタンアイコンがカラフルになった。
DRCチェックの虫がちょっとリアルになった?

フットプリントを関連付け。
この画面がv4に比べて重くなっている。
関連付ける対象を選ぶと回路図上でそのシンボルのところへカーソルが移動するのは昔からあったが
その動作を含めて、すべてが遅い。
関連付ける対象を選んでから10秒ぐらいたってから移動する。

ひとまず置いておいて、
PCBレイアウトへ
初回起動で以下のようなものがでた
f:id:katakanan:20180801000944p:plain

どうやらPCBレイアウトエディタは
v4でいうところのOpenGLmodeが標準?
f:id:katakanan:20180801002859p:plain
レガシーモードは昔の表示モードで
モダンツールセットはOpenGL表示モード
アクセラレータA」と「代替C」で何が違うのかはすぐにわからなかった。

f:id:katakanan:20180801003201p:plain
ビアが起き放題になった。
これでGNDパッドからダサい配線を伸ばさなくて済む。

f:id:katakanan:20180801003439p:plain
3D表示は相変わらずだった。
ただしwheelボタンを押し込んだ位置に移動する機能が付いた。
CPUレイトレーシングで表示するモードもあるがクッソ重い。

f:id:katakanan:20180801003701p:plain
きれいではある。

3D関係で最も期待していたものはSTEPファイル出力への対応
f:id:katakanan:20180801003750p:plain
個人的に3DデータフォーマットはSTEPが一番使いとおもう。
これで吐けるとFusion360に簡単にアップロードすることができて機械設計へと移行できる。(まだあまりしたことないが)

f:id:katakanan:20180801004759p:plain
コンポーネントのモデルも一緒に出力されてないはずがないと思うが、何か設定しなければならないのかと思う。
後日確かめる。
あと本当は配線もモデルに表示されていたらかっこよかったが、
DiptraceのほうでもExportされていなかったので、
データ量が多くなってしまうのだろう。残念である。

ここには書いていないが
Eagleのプロジェクトを直接インポートできるようになったとか環境変数をいろいろ設定できるとか
Spiceとの連携が強くなっているとかライブラリエディタの編集性がよくなったとか
PCBをフリップして見れるとかネットリストを介さずに回路図からPCBをアップデートできるとか
フットプリントの3Dモデルにstepファイルが使えるようになったとか言っている動画
hackaday.com

そしてもうすでにKiCAD v6の開発が始まっていた
givetokicad.web.cern.ch

3Dの強化はうれしいが、回路図/PCBエディタ上でのカクカクした操作があまり好きじゃなかったのが変わっていなかったのが残念だった。
(マウスの移動量/拡大はスムーズにおこなれて、シンボル/ワイヤーの移動量やコンポーネントはgridにスナップするとかいうオプションになればいいと思っている)

結局、v4と操作思想はほとんど変わっていないという感じだった。
逆に言うと、v4向けに書かれた本は無駄にならずに相変わらず参考になると思う。

AXI DMA テスト

AXIのDMA動作をメモしておく。

この記事を参考に
Using the AXI DMA in Vivado | FPGA Developer

DMAのパスにILAを接続しておく。
f:id:katakanan:20180722155334p:plain


手順通りにHelloWorldができたら、
HelloWorld_bspのsystem.mssを開いて
axi_dmaのImport Exampleをクリックして
xaxidma_example_simple_pollにチェックを入れてOKを押す。
f:id:katakanan:20180722160551p:plain

HelloWorld_bsp_xaxidma_example_simple_poll_1とかいうプロジェクトができるので、
これがビルドできることを確かめる。

VivadoからBitstreamを書く。

HelloWorld_bsp_xaxidma_example_simple_poll_1/Debug/HelloWorld_bsp_xaxidma_example_simple_poll_1.elfを右クリックして、
Debug as → Launch on Hardware を選択する。
f:id:katakanan:20180722161230p:plain

実行が始まると、mainの先頭で実行が止まっている状態になるので、
ここからステップ実行などができる。

一方で、Vivadoから
Program AND Debug→ Open Hardware Manager→Open Targetとすると、
ILAの画面が開く。
(プログラムをDebugで止めておかないと、ILAの画面が出てきてくれない)

あとは、ILAの画面でDMAのARVALIDなどにトリガーをつけてから、
XSDKで実行を開始すれば、DMAの動作が見れる。

f:id:katakanan:20180722161909p:plain
切断されることもある。

write_hw_ila_data my_hw_ila_data_file.zip [upload_hw_ila_data hw_ila_1]
で波形を保存できる。

display_hw_ila_data [read_hw_ila_data my_hw_ila_data_file.zip]
で波形を再生できる。

Zybo Zynq-7000 ARM/FPGA SoC Trainer Board

Zybo Zynq-7000 ARM/FPGA SoC Trainer Board

FPGAプログラミング大全 Xilinx編

FPGAプログラミング大全 Xilinx編

C++ Rest SDKでtwitter④

http://e-tipsmemo.hatenablog.com/entry/2018/07/14/000000e-tipsmemo.hatenablog.com
次は画像をアップロードする方法を示す。
昔は画像のアップロードとツイートを同時にできるENDPOINTがあったらしいが、今は使えないので
画像をアップロードしてからそれから得られるmedia_idを伴って、ツイートするという流れになる。

また、画像をアップロードするときの画像のデータ形式はバイナリでなければならない。


とりあえずアップロードする方法なので、画像を得るとか読み込む方法は無視して、
前提として、画像データ(jpg/png)のバイナリをvectorに入れたものを引数に取っているとする。


今までのsignature parameterの作り方とは違って、画像のバイナリデータをパラメータに入れない。


bodyに書き込むバイナリデータにはプログラム中の変数名で言うと、
[preData][image binary][postData]
という構成になっている。
preDataのフォーマットはコメントにあるとおりで、boundaryという文字列は適当に10文字以上ぐらいの長さであれば
本当にどんな文字列でもよくて、それを使用する。
postDataもboundaryを用いている。


あとは、headerにboundary文字列を示すものを入れておきつつ。
bodyに先ほど作ったデータを入れて、
httprequestを投げるだけ。


jsonの文字列がかえってくるので、C++ Rest SDKjson::valueクラスに突っ込むと、連想配列でアクセスできるので
ツイートするときに必要なmedia_idを得る。
帰ってくるjsonには型の違いから、media_id_string(ダブルクオーテーションでくくられている)とmedia_id(純粋に数値)があるので使いやすいほうを選べる。

また、
軽く実験したところ、他人のAccess Token Secretを利用してでアップロードされたmedia_idを利用して
つぶやくことはできない。(と思われる)

参考

blog.livedoor.jp

プログラミング言語C++ 第4版

プログラミング言語C++ 第4版

C++ Rest SDKでtwitter③

e-tipsmemo.hatenablog.com
続き。

認証が完了したら、
oauth_tokenはaccess token
oauth_token_secretはaccess token secret
を得ている。

ツイートを行う。


signatureを作るパラメータにはツイートと、画像をアップロードしてmedia_idがあるならばあるならばmedia_idsを入れる。
画像がないときは、meida_idsのパラメータ自体がなくてもよいし、その値が、空白(media_ids="")でもよい。


ツイートとmedia_idsはbodyに入れるので、parameterから消しておく。


bodyにはツイートとmedia_idsを入れる。
media_idは9桁の数字なので、四枚ツイートとするとき以下のようになる。
status=ツイート内容&media_ids=[9桁の数字],[9桁の数字],[9桁の数字],[9桁の数字]

あとは、httprequestするだけ。

ツイートidとかがjsonで帰ってくる。

ツイートidはメンションつたり、ツイート削除するときに必要となる。

プログラミング言語C++ 第4版

プログラミング言語C++ 第4版

投稿記事が100を超えた

記念すべき100記事目は
http://e-tipsmemo.hatenablog.com/entry/2018/07/08/000000e-tipsmemo.hatenablog.com

であった。
3日に1記事書くことを目標にやっているので、100記事増えるのに、だいたい1年ぐらいかかる。

記事のカテゴリは適当につけているけれどもどうしても
ソフトウェアは試行が楽なので記事の数が多くなってしまいがち。

でもハードウェアの記事も書けば結構見られているきがするし、
逆にネットにそういう記事が少ないからこそ書くというのは
ビュー数を増やす戦略になりえるかもしれない。

10000ビュー超えた記事からあまり時間が経ってはいないけれども、
はてな管理画面で見られている記事ランクを以下に示す。
(2018/07/05時点、この時点での訪問数ははてな管理画面によると、12757)

e-tipsmemo.hatenablog.com
訪問数の10%が見ているらしい。
しかしココ最近になってこの記事が急上昇しているきがする(気のせいかも)ので、
クローラー的ななにかが頻繁にきているとも思えないし、
EZ-USB FX2を使うひとはまだまだいるということだなぁと思う。

e-tipsmemo.hatenablog.com
9%の人が見たらしい。
上のEZ-USBの記事と順位が入れ替わることもある。

AMDRyzen CPUは2017年から2019、2020年にかけて最も話題のCPUのひとつなので
とくにZen2のRyzen5 2600Xの記事を発売すぐにかけるのはビュー数上昇に一役買っていると思う。
しかし内容が中途半端なので、そろそろPlexチューナーで環境を設定する記事が必要な気がしている。

e-tipsmemo.hatenablog.com
ココらへんからのビュー数順位は、あまり前と変わらない。
最近WSLもUbuntu18にアップデートしたが何の問題もなしに使えている。
機能的にはまだたりない部分があると思う。
個人的には、GPU supportや
nmapなどのコマンド、さらにext4のマウントとかが使えるようになれば言葉では言い表せないほど便利だと思う。