2018年11月18日日曜日

NI-VISA install

CentOSのセットアップ
 ラズパイでGPIBのドライバが簡単にインストールできないことが、この小型PCの導入の目的でした。NI社のドライバはCentOSに対応していると書かれています。ラズパイDebian系のディストリビューションがメインです。CentOSのコードはありますが、とても古いです。
 この小型PCにCentOSの最新版をインストールします。ダウンロードのページに入って、三つある中でDVD ISOを選びました。ダウンロードしたら、書き込みツールrufusでUSBメモリにISOファイルを書き込みます。
  http://mirror.fairway.ne.jp/centos/7.5.1804/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso

BIOSでインストール・メディアを選ぶ

 ブート時にF10を押すとブート・デバイスの選択画面に入れます。USBメモリを選択します。
  インストール先はSSDですが、すでにWindowsがインストールされているので、選択してDoneを押すと、空きがないとのメニューが出るので、再選択を選び、どこかのパーティションを選んで全削除を実行します。
 KDEのGUI、開発ツールを追加してインストールしました。

 リブート後に、ネットワークを有効にしてリブートすれば、インストールは終わります。

 アイコンFavoritesを選んだ時にSearchの欄にterminalを入れ、出てきたKonsoleを選びます。Xtermではありません。こちらはコピペができません。

NI-VISAのインストール step1
 Webブラウザを起動し、NI-VISA Linuxで検索し、
 NI-VISA-17.0.0.iso Downloadsに落としてきます。ユーザ登録が必要です。ファイル名をクリックしてもダウンロードしてきません。画面下にクッキーのアラートが出ています。リンクをクリックして出てくるページで、OKボタンが出ることがあるので、押します。戻ってきてもダウンロードできないときは、ファイル名を選んで別のタブを開くを選び、そのタブに移るとダウンロードできることがあります。
 Konsoleに入り、
mkdir NI
sudo mount -o loop Downloads/NI-VISA-17.0.0.iso NI
cd NI
sudo ./INSTALL
を実行します。3回yを入れるところがあります。17.0.0f1というバージョンが今日の時点でインストールされています。
エラーが出てアボートします。
error: Failed dependencies:
libstdc++.so.6 is needed by ni-pal-17.0.0.49152-0+f0.i386
libstdc++.so.6 is needed by ni-orb-nikalmod-17.0.0.49152-0+f0.x86_64
avahi is needed by nisyscfgi-17.0.0-f0.x86_64
Error installing NI-VISA for Linux 17.0.0f1.
Installer is aborted.
 mDNSのavahiをインストールします。
sudo yum install avahi
libstdc++.so.6 is needed by ni-pal-17.0.0.49152-0+f0.i386というメッセージで必要だといわれているファイルを探します。
yum provides */libstdc++.so.6
で、
 i686というのが32ビット用です。libstdc++-4.8.5-28.e17.i686が該当するようです。
sudo yum install libstdc++-4.8.5-28.el7.i686
でインストールします。もう一つの64ビット版のx86_64も同時に入ります。再度インストールします。
sudo ./INSTALL
 最後にrebootするかと聞かれるので、yesで答えます。

Step2
 左下のApplicationsからNational Insutrumentsを選び、NI-VISAのRemoteServerを起動します。エラーが出ます。updateNIDriversを動かすようにメッセージが出ています。


 sudo /usr/local/bin/updateNIDrivers
 nikalのビルドに失敗したと出ます。ソースを次のURLからダウンロードします。
http://www.ni.com/download/ni-kal-15.1/6549/en/
 Downloadsフォルダに保存します。NIKAL151.iosというファイルでした。このファイルをダブルクリックするとArkというユーティティが立ち上がるのでExractで解凍します。解凍した中にnikal-15.1.0f2.tar.gzがあるので、これも同じ場所に解凍します。
cd Downloads/NIKAL151
sudo ./INSTALL
 最後にrebootするかと聞かれるので、yesで答えます。

Step3
 RemoteServerを起動しますが、同じエラーが出ます。ソースの3か所を修正します。ファイル・ビューワで、
 /var/lib/nikal/3.10.0-862.el7.x86_64/nikal/
にあるnikal.cをダブルクリックすると、エディタのKWriteが立ち上がります。

#define NLNIKAL_CMD_SENDで検索したその次の行に1行追加します。
#define GENL_ID_GENERATE 0 // add

#ifdef nNIKAL1400_kHasFamilyGenlOpsGroupsで検索した2行をコメントアウトします。
#ifdef nNIKAL1400_kHasFamilyGenlOpsGroups
// if ((status = genl_register_family_with_ops(&nikal_netlink_family, nikal_netlink_ops))) return status;
#else
// if ((status = genl_register_family_with_ops(&nikal_netlink_family, nikal_netlink_ops, 1))) return status;
#endif

return do_munmap(mm, addr, len);で検索したその行の引数にNULLを追加します。
return do_munmap(mm, addr, len, NULL);
 Homeへ保存します。sudo cp nikal.c /var/lib/nikal/3.10.0-862.el7.x86_64/nikalで元の場所にコピーします。
 もう一度ドライバのアップデートを行います。時間がかかります。
sudo /usr/local/bin/updateNIDrivers
 最後にrebootするかと聞かれるので、yesで答えます。

Python3とpipのインストール
 もともとPython2が入っていました。pipは見当たりません。Python3を最初に入れます。次の二つでインストールします。
sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
sudo yum install -y python36u python36u-devel python36u-libs
 実行は、
python3.6
です。
 ライブラリ管理のpipのインストールをします。
sudo python3 -m ensurepip
python3 -m ensurepip --upgrade
sudo pip3 install upgrade pip
実行は、
pip3



です。

2018年11月15日木曜日

SCPI言語を話す測定器をPythonでコントロールしたい

HPがHP-IBを作って、測定器を自動制御する規格を広めました。ヤフオクで購入できるディジタル・マルチメータ、オシロスコープ、スペアナ、電源など、ほとんどがGPIBを備えています。
 GPIBのケーブルだけでも高価です。
 PCのGPIBボードも高価です。
 Agilent 82357BはGPIBをUSBに変換してくれます。1万円ちょっとで購入できます。

visa
 GPIBは物理層です。USBやLAN(TCP/IP)、RS-232Cも物理層です。VXIとかいうバスも物理層です。
 これらをまとめて扱えるのがvisaです。話す言語はSCPIです。GPIBの基本的なコマンド以外に、機器独自なコマンドが用意されています。

Python
 世の中で一番学びたい言語がPythonなんだそうです。たぶん、IT系の人たちでしょう。
 Pythonにはvisaのライブラリがあるので、importするだけで通信ができます。もちろん条件はあります。
 RS-232Cは、WindowsならCOMドライバが必要です。UNIX系なら/dev/ttyUSB0とかができていると通信できるかもしれません。接続自体はUSBの口ですが。
 USBは測定器がUSBTMCの規格をサポートしていると、そしてGPIBのドライバが入っていると通信できます。GPIBのドライバは、KeysightとNIが用意しています。どちらも無償で利用できます。
 LANは条件はないようです。が、Windowsではつながりますが、ラズパイだと見つけられないとか、がおこりますが。
 LANはソケットでつなぐこともできます。

連載、まだ途中です。


(1) DMM 34461A-① LAN ソケット通信
(2) DMM 34461A-② USB usbtmc
(3) 電源 E3631    USB(GPIB) visa
(4) DMM 34461A-③ USB/LAN visa

(5) DMM VOAC7602 USB-シリアル変換 visa

(6) DMM 2000 ① RS-232C
(7) 温度計おんどとり ソケット
(番外編 ) 小型PCのセットアップ
(8) DMM 2000 ② visa(GPIB)

2018年9月9日日曜日

SONY SPRESENSEでハイレゾを再生する

SPRESENSEは、Arduino IDEのスケッチを使ってハイレゾ音源を再生できます。7/31発売当時のドキュメントは分量はとても多いのですが、とても不親切な書き方で、プログラム(ライブラリのC++のソース)を読んで自分で使い方を考えろ的な姿勢が強く出ていました。9/1ごろにArduino 1.0.2になって、ドキュメントも普通の表現になりました。
 メイン・ボード本体にD級アンプが搭載されていますが、デフォルトの出力であるヘッドホン端子は、出力にでっかいCを入れなくて済むという何やらわからない性能のヘッドホン・アンプがつながっています。
 ヘッドホン・アンプの手前にあるD級アンプ出力は、レベルの下げるための470Ωの抵抗がシリーズに入っています。内蔵のボリュームを最大値の0dBにしてもスピーカからはかすかな音しか出ません。
 解説によると、470Ωと小容量のコンデンサのパーツをLと大きめのCに変更することで、スピーカから音が出ます。しかし、たぶん、無理な作業です。電動のはんだ取り器を使えば、八つのパーツを安全に取り出せますが、新しいCをはんだ付けするのは、ほとんど不可能です。10セットあったら1セットぐらい成功するかもしれません。



 ポータブル機器にスピーカを接続する際、出力にローパス・フィルタを入れる設計が多いです。しかし、普通のスピーカ・ケーブルを数mのばして普通のスピーカをつなげるとき、フィルタは現実的には不要と考えられます。
 という根拠の薄い理由で、470Ωを0Ωにするだけで済ませます。
 はんだゴテの先をきれいにし、はんだをちょっとだけつけ、フラックスが飛びきらないうちに、チップ抵抗のはんだ面(もちろん上面)にはんだをわずかに盛ります。0.3mm程度のはんだメッキ線を押し付けて抵抗をショートします。

 推定500mW弱のアンプだと思います。96dBを超えるスピーカなら、オーケストラも十分再生できます。
 9/1ごろの更新で、ハイレゾは192kHz/24ビットだけと書かれました。48kHz/24ビットも再生できますが96kHzは再生できません。
(2018/10)1.1.0になって96kHzが対応しました。ただ、スピーカからの音がとても小さくなって実用上聞こえなくなりました。私のだけかも

 playerのスケッチの変更点です。再生するwavファイルはAUDIOフォルダの中に入れておきます。

theAudio->setRenderingClockMode(AS_CLKMODE_HIRES);

theAudio->initPlayer(AudioClass::Player0, AS_CODECTYPE_WAV, "/mnt/sd0/BIN", AS_SAMPLINGRATE_192000,AS_BITLENGTH_24,AS_CHANNEL_STEREO);
myFile = theSD.open("AUDIO/192.wav");
効率90dB以下のスピーカならば、ボリュームは0でOKです。 爆音は出ません。ボリューム値を読み込んで音量を変更できますが、あんまり役に立っていません。


 で、一番重要な音ですが、最上の音楽が聴けますです。

SDメモリの音源を四つまで連続に再生するスケッチ
 SDメモリに入っている音源を全部再生できるはずなのですが、5曲目からは再生できないです。
 音源は192kHz/24ビット決め打ちにしてあります。
 ボリュームは、A0端子の電圧を読み取って値を決めています。ボリュームを付けないときは、-100とかの値を入れておいてください。

/*
    player.ino - Simple sound player example application
    Copyright 2018 Sony Semiconductor Solutions Corporation

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#include <Audio.h>
AudioClass *theAudio;
File myFile;
//#include <SDHCI.h>
SDClass SD;
#define  volumePin  A0
int volumeValue = 0;

/**
   @brief Setup audio player to play mp3 file

   Set output device to speaker <br>
   Set main player to decode stereo mp3. Stream sample rate is set to "auto detect" <br>
   System directory "/mnt/sd0/BIN" will be searched for MP3 decoder (MP3DEC file)
   Open "Sound.mp3" file <br>
   Set master volume to -16.0 dB
*/
void setup() {
  Serial.begin(115200);
  // start audio system
  theAudio = AudioClass::getInstance();
  theAudio->begin();
  Serial.println("initialization Audio Library");
    /* Set output device to speaker */
    theAudio->setRenderingClockMode(AS_CLKMODE_HIRES);
    theAudio->setPlayerMode(AS_SETPLAYER_OUTPUTDEVICE_SPHP);//AS_SETPLAYER_OUTPUTDEVICE_I2SOUTPUT
     //theAudio->setPlayerMode(AS_SETPLAYER_OUTPUTDEVICE_I2SOUTPUT);
                 /*
                 * Set main player to decode stereo mp3. Stream sample rate is set to "auto detect"
                 * Search for MP3 decoder in " / mnt / sd0 / BIN" directory
                 */
     err_t err = theAudio->initPlayer(AudioClass::Player0, AS_CODECTYPE_WAV, "/mnt/sd0/BIN", AS_SAMPLINGRATE_192000, AS_BITLENGTH_24,AS_CHANNEL_STEREO);
  Serial.println("setup AS_SAMPLINGRATE_192000");
                 /* Verify player initialize */
    if (err != AUDIOLIB_ECODE_OK) {
      printf("Player0 initialize error\n");
      exit(1);
  }
}

void loop() {
  Serial.println("---LOOP-start -------------------------------------");
  File root = SD.open("/AUDIO");
  while (true)  { // files pickup
  /* Open file placed on SD card */
        File entry = root.openNextFile();

    if (!entry) {
//      Serial.println("**nomorefiles**");
    }
 
  Serial.println("opened " + String( (entry.name())) );
  myFile = SD.open(entry.name());
   /* Verify file open */
  if (!myFile) {
     printf("File open error\n");
    exit(1);
  }
  printf("Open! % d\n",myFile);

  /* Send first frames to be decoded */
  int err = theAudio->writeFrames(AudioClass::Player0, myFile);
  if (err != AUDIOLIB_ECODE_OK) {
    printf("File Read Error! = % d\n",err);
    myFile.close();
    exit(1);
  }

  /* Main volume set to -16.0 dB */
  volumeValue = analogRead(volumePin) / 4 ;
    printf("Volume = % d\n",volumeValue);
    theAudio->setVolume(-1*(250-volumeValue));
  theAudio->startPlayer(AudioClass::Player0);

  Serial.print("Play!!!!!!!!!!!!\n");

while (1) {  // until read fifo? end
  /* Send new frames to decode in a loop until file ends */
  err = theAudio->writeFrames(AudioClass::Player0, myFile);
/*  Tell when player file ends */
  if (err == AUDIOLIB_ECODE_FILEEND) {
      printf("Main player File End!\n");
  }
/* Show error code from player and stop */
  if (err) {
//      printf("Main player error code: % d\n", err);
      goto stop_player;
  }
  usleep(30000);
  /* Don't go further and continue play */
 continue;

stop_player:
  delay(1);
      theAudio->stopPlayer(AudioClass::Player0);
      myFile.close();
//      exit(1);
        break;
}
  }
delay(100);
}

2018年7月31日火曜日

SONY SPRESENSE でLチカ

このマイコン・ボードは何て読むのでしょうか。ソニー・プレセンスかな?
Arduino IDEが用意されているので、とりあえず、動かしてみることができます。GPSやオーディオ機能は特別にライブラリが用意されています。ライブラリはもしかしたら、複数のコアを利用するような設計になっているかもしれません。

 すんなり、開発ソフトは用意できました。
  SpresenseでLチカから始める (1) Lチカは簡単か

  ハイレゾの再生

 べっとRTOSのNuttXが用意されています。

NuttXのインストール 未完成。それに、9/1ごろにだいぶ書き直されたので、当初の記述はだいぶ異なる。10/26の更新で問題点のある表記がほとんどクリアされた。が、.configファイルが2個も入れ忘れているように見えるし、1個Kconfigに文法ミスがあってコンパイルが通らない。

Ubuntu 16.04 LTS 64bit で検索してダウンロードする。WindowsでrufusでUSBメモリに書き込む。
 PC(XEON  E5 2658 V3 12コア 2.0GHz、DDR4-8Gバイト、クアドラ4000、ASRock X99 Taichi)のUSBスロットに差し込み、電源を入れて、F11でブート・メニューを出し、UEFI-USBメモリを選択してブートする。
 Ubuntuを言われたとおりにインストールし、終了したら、USBメモリを抜いて再起動。
 セオリどおりterminalから、
sudo apt-get update
sudo apt-get upgrade -y
を実行。システムが壊れているというメッセージが出るが無視する。
必要なツールをインストールする。
sudo apt install git
sudo apt install make gperf flex bison libncurses-dev
sudo apt install ruby

sudo apt-get install git gperf libncurses5-dev flex bison gcc-arm-none-eabi

その後、
git clone -n https://patacongo@bitbucket.org/nuttx/tools.git tools
cd tools
git config core.autocrlf false
git checkout -b 891510d2534287afef6b5c90a375f94442a7e94d
cd kconfig-frontends/
./configure
make
sudo make install
sudo ldconfig

たぶん、うまくいかない。

すでに何とかといわれる。
sudo adduser  dialout

cd spresense/sdk
python3 tools/config.py --kernel release
python3 tools/config.py examples/hello
make buildkernel
make

sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk

???どこかで実行するが失敗する? 直接zipをダウンロードしてフォルダにコピーする?
git clone --recursive git@github.com:sonydevworld/spresense.git
これも直接落としてきたかも
sonydevworld/spresense-nuttx

ターミナル・ソフト
 書き込みが終了したら、新しいterminalを開き、
export LANG=en_US
minicom -D /dev/ttyUSB0 -b 115200 -s


gpio
 nshのterminalをクローズ。
 .configをnanoで開く。
CONFIG_SYSTEM_GPIO=y
CONFIG_SYSTEM_GPIO_STATUS=y
をコピペしてCtrl-O,CTRL-Xで書き込む。

make buildkernel
make
sudo tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
 terminalを新たに開く。



2018年6月23日土曜日

Makerご用達 万能測定器ADALM2000

2017年4月に発表が行われましたが、その後、オープンソースの測定ソフトScopyの開発が遅れたのかもしくはAnalog Discoveryと機能が被るので、わざと遅らせたのか不明ですが、2018年6月に入手ができるようになりました。
 発表当時の予価は99ドルでしたが、149ドルに価格は変更されています。基板設計も途中であったようで、当初のケース(ADALM-PLUTO)には入らなくなり、準備中のようです。
 iioのドライバ類はADALM-PLUTOと同じものを利用します。
 ADALM1000という学習用測定器にはAliceという解説が豊富な測定ソフトがありました。これも2018年の2月にADALM2000用が用意されましたが、6月現在、うまく動きません。

これ一つで測定すべてをカバーするADALM2000

(1) セットアップ
(2) オシロスコープでOPアンプのフルスイングを見る
(3) ネットワーク・アナライザでアンプの帯域を見る-1 CRフィルタ
(4) ネットワーク・アナライザでアンプの帯域を見る-2 反転アンプ

2018年5月30日水曜日

Dell Edge Gateway 3001を使ってみた

2018年5月現在、日本では販売開始されていないDell Edge Gateway 3001です。面白そうなので、マウザーで購入しました。
A-D/DAが使えないです。こまった。I2C/SPIバイスは外に出ていません。

番外編 Dell Edge Gateway 3001は素人でも使えるのか その1 I/Oの確認
番外編 Dell Edge Gateway 3001は素人でも使えるのか その2 外部に出ているGPIOポート-1

2018年4月27日金曜日

ST Microelectronicsの距離を測るセンサ

ST Microelectronicsの  VL6180X VL53L0X VL53L1X をArduinoで利用する話が完結しました。

距離を正確に測る
 赤外線VL6180X
 レーザーVL53L0X
 レーザーVL53L1X


2018年3月26日月曜日

2018年3月14日に発売されたRaspberry Pi 3 Model B+

 Raspberry Pi 3 Model B+は、前のモデルから少しクロックが速くなり、CPU(SOC)表面が金属になりました。表面温度を測ってみると、前のモデルより温度が低いようです。

http://www.denshi.club/pc/raspi/raspberry-pi-3-model-b.html




 2018-3-13版のOSから、無線を無効にするデバイス・ドライバが用意されたので、有線LANでRaspberry Pi 3 Model B+を使うことができます。
 Raspberry Pi 3 Model B、ZERO-Wには外部アンテナ接続ができるランドが用意されていたのですが、このモデルでは廃止になったようです。

2018年2月22日木曜日

薬屋のひとりごと

Webの更新が半年ほど止まっている「薬屋のひとりごと

これって、書籍は、2種類ある。

ヒーロー文庫 


コミカライズも2種類ある。

ビッグガンガンコミックス


サンデーGXコミックス

2018年2月12日月曜日

Raspberry Pi と Mozilla’s Things Gatewayを使ったLチカの記事を公開しました。https://goo.gl/j8W9hZ

2018/02/22 作りこみのほうの解説が増えたけど、利用できるデバイスは増えていない。

2018年1月29日月曜日

Industrial I/O Subsystem:

調べてみる。情報は少ない。
●特徴
 カーネル・ドライバ=ローダブル・デバイス・ドライバとして開発。百を超えるセンサに対応している。
 一覧表が見つからない。
見つかったかもしれない。

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/iio


●使い方
 どこかに記述する。
lsmod?で確認できる。
/sys/bus/iio/devices/iio:device1 ディレクトリに設定と読み出しようのファイルがいるはず。しかし、readmeは存在しない。


●資料







2018年1月28日日曜日

ADC A-Dコンバータの利用

 24ビット SPI ADS1220 ラズベリーパイ
 24ビット I2C LTC2400 Arduino


18ビット I2C MCP3424 ラズベリーパイ

16ビット I2C ADS1115 ラズベリーパイ
16ビット I2C LTC2450 ラズベリーパイ
16ビット I2C SX8725C ラズベリーパイ
16ビット I2C ADS1110 ラズベリーパイ
16ビット I2C LTC2461 ラズベリーパイ
16ビット SPI ADS1120 ラズベリーパイ

12ビット I2C AD7991 ラズベリーパイ
12ビット I2C ADS1015 ラズベリーパイ
12ビット I2C MCP3425 ラズベリーパイ