TOP  >  なーお'nぶろぐ  >  なーお  >  デバイス

なーお さんの日記  [ メールで投稿 ]

39件のうち1 - 10件目を表示しています。

[投稿日   ] [タイトル   ] [アクセス数   ]
4月
1 (日)
カテゴリー  オーディオ
タグ  RasPi デバイス 空気録音

プリアンプ自作が大体一段落してきたところで、送り出し側のDDCをUSBインターフェースのAmanero Combo 384から、I2SインターフェースのHifiberry Digi+ Pro に変更してみました。

結果からいうと良い方向に進化したため、久しぶりにエア録音する時間がとれたので、Youtubeに動画2つアップしました。ヘッドホンで聴いてください。

01~02_LadiesVocal
https://www.youtube.com/watch?v=lErQGVnBUpM

04~07| Fusion&Classic
https://www.youtube.com/watch?v=D32A4iKKemk

今回も、FaceBookのRaspberry Piでオーディオしま専科 グループで、ごとうさんがお勧めHifiberry Digi+ Pro です。
Hifiberry Digi+ ProのマスタクロックをRasPi側に入れることでスレーブモードでI2S信号を取り出し、純粋にI2SトランスポーターとしてDACに入れてあげる、ということのようです。

信号の流れとしては。
RasPi3 -->(I2S)--> Hifiberry Digi+ Pro -->(I2S)--> ES9023黄色基板DAC改 -->(アナログRCA)--> 自作プリ -->(アナログバランス)--> UcD32MPパワーアンプ
となってきます。

購入

上のHifiBerryのオンラインショップでポチってから、国際郵便で10日ほどで届きました。Amanero combo 384 が1万円超えだったのに比べて半額以下なのはうれしいです。

HifiBerry Digi+ Pro郵便パッケージと梱包紙箱
t_0206a6d9263901a33539d03194a806822e.jpgt_00f4c192398d1f08a66ab15c2d44a330d8.jpg
HifiBerry Digi+ Pro中身
t_018171fed6768503d4cacee54c4c0ab7fe.jpg

取付け前の事前準備

まず、1年半前に買ったRasPi3のファームウエアが古いと思われ、Hifiberry Digi+ Proに対応できていないだろうからアップデートが必要。

やり方は、ここのページに書いてあるのでそのまま参考にしますが、注意点としては OSがVolumioやMoodeAudioの状態でやらずに普通のRasbianイメージのOSが入ったmicroSDで実行すること。 終わってから元のVolumioなりに戻します。 こうしないとVolumioなどのOSが立ち上がらなくなるリスクが高いそうです。

念のため手順をここにも書いておくと、

  1. RasbianイメージのOSが入ったmicroSDを作り、RasPiを立ち上げる。このためだけに高価なmicroSDXCを買う必要はなく、Lite版イメージなら安い2GbのmicroSDで足ります。
  2. rootパスワードを設定する。(下記sudoコマンドを実行するため)
  3. 下のコマンドを順次実行しそれぞれ完了を待つ。小一時間はかかります。
    $ sudo apt-get update
    $ sudo apt-get upgrade
    $ sudo apt-get dist-upgrade
    $ sudo rpi-update
  4. オーディオイメージのmicroSDXCに戻す

I2S信号の取り出し

 続いて、HifiBerry Digi+ ProからI2S信号を取り出すためのピン5本をはんだ付けして、ES9023黄色基板改DACのコネクタ線にコネクタを付けて、接続します。 接続順は、「P6」と書いてあるほうが1番として、

  1. GND(黄)
  2. MCLK(橙:接続しない)
  3. BCLK(黒)
  4. LRCLK(赤)
  5. DATA(白)

の順です。
MCLK(橙)を接続しない理由は、DACのクロックをHifiBerry Digi+ Proのマスタークロックで動かすにはES9023側のクロックの回路を1か所改造しないといけないことと、音の面でも若干ES9023側のクロックに軍配が上がるようですので、私もここは繋がず行きます。

I2S出力ピンをはんだ付けしたHifiBerry Digi+ ProをRaspberryPi3に差し込み、黄色基板と接続
t_039cddbe7df7359843601742af6e5fe430.jpgt_0474a4769642266b2da7b26bf339171b4b.jpg

試聴

今回、プレイヤーOSはVolumio2.378を試しています。
MoodeAudioの刺激の少ないサウンドとは違って、割とエッジがしっかり立って、音像がかっちりしたHiFiオーディオ的な音ですね。 Hifiberry Digi+ Proとの相性も良いのでしょうね。音場感が向上したため、妙な録音がすぐにわかってしまうようになりました。(汗)
しかし残念ながら、PCでは動くソフトボリウムがスマホでは操作できません。アップデートすれば治るのかな。でもアップデートもトラブルの可能性もあるし。。 →訂正、単なる勘違いでした。。

とりあえずいつものミニタンスに押し込み、Volumio2.378で音出し
t_059da673bef50791c2372b0cdc4199e475.jpgt_0614ecd17b166e631497ef4c160ecf23e2.jpg

 ということで、今年の集まれ!塩ビ管オフ会の私のデモは、これに自作プリ+UcD32MPパワーアンプ+トルネードフライの組み合わせで行きます。しかしエントリーはしたものの、そもそも仕事で参加が危うい状況なのですが。。

コメントあり 2  |  続きを読む | 閲覧(27200) 
7月
13 (日)

mbedで色んなことが簡単に出来るだろうことはわかったけど、遊びと勉強ばかりでは面白くないので、仕事に何か応用できないかと考えた。

そこでこの時にVB.netで作ったRS485通信のPC内シミュレータを、mbed LPC1114に移植できれば複数台の通信確認が取れるなと考えて、RS485通信トランシーバIC (TE)SN75176BP とブレッドボードその他を購入しやってみました。 :-)

今回は、3台分の機器側に成りすますシミュレータをブレッドボード上に配線します。 ブレッドボード上に1台ずつ、計3枚の普通のブレッドボードが必要。

  • 購入部品 (LED、抵抗、配線材などは手持ち品を流用)
    名称型番購入先数量単価(税抜)
    普通のブレッドボードEIC-801スイッチサイエンス3枚257円(税込)
    mbed対応マイコンLPC1114-FN28
    生産中止(?)品
    秋月電子通商3個120円
    RS485/RS422トランシーバIC(TE)SN75176BP秋月電子通商3個80円
    ディップSW5P秋月電子通商3個60円
    タクトSW各色秋月電子通商3個10円
  • 配線図
    • 電源はトラ技ライタ経由USBから取る。
    • ディップSWで局番(今回は1~3)設定可能とする。
    • SN75176BPのDE端子は、機器1台なら3.3V印加しておくだけでOKだが、機器2台以上マルチドロップの場合は、マスタからのコマンドに返信するとき以外はバスを解放する必要があるため、マイコンのdp4を返信直前にHigh、返信後20msec後にLowとするソフト処理を行う。
      • マイコン側は3.3Vなのでこのままで良いか不安もあったけど動いてるから大丈夫?
      • マスタ側ソフトは、このディレイ時間20ms分の待ちが必要。
      • この信号のHighの時に赤LEDを点灯させる。
    • RS485バスラインのプルアップ抵抗(R5)、プルダウン抵抗(R6)の抵抗値は、実際の路線長で決める必要があると思うのだけど、今回はテストなので小さ目の抵抗を入れてみた。
    • 生存確認用にLED1を点滅。 UARTポートと共に割り込みプログラムとする。
t_0009cd62ac2a8703e7120df606673547f5.jpg
  • プログラム
    • 今回は、仕事の秘匿義務の兼ね合いもあるので非公開です。すみません。
    • コーディング・デバグは、ある程度の段階でmbedオンラインコンパイラからエクスポートして、μVision4にて行いました
  • 配線状況
    テストなのでヒドイ状態ですね。(汗)
    t_01caef4c3292453d4463c7fe409610ba41.jpg
    下記動画の際には少しだけ整理しました。
  • 動画
    PLC側のテスト画面と共に映してみました。ボーレートは38,800bps。
    機器1→機器2→機器3と通信先を切り替えてサイクリックに通信します。 機器側が受信し送信中に赤LEDが点灯します。 1回のコマンドで1点灯で、点滅回数分のコマンドを処理しています。

 今後も仕事で通信案件が来た時には、こんな感じでシミュレータを作って事前テストするですね。 部品単価が安いので、USB/RS485コンバーターを買うよりずっと安価にできますし。 :-D

 ここまでテストばっかりやってきたけど、そろそろ実際に動かす何かを作るかなあ。。 :roll:

続きを読む | 閲覧(20893) 
6月
30 (月)
カテゴリー  マイコン
タグ  mbed プログラム デバイス C/C++

まずは現物から

  • LPC1114FN28とFT232RL USB/serialコンバーターで、シリアル通信+サーボモーターを回してみる。
    t_00215f18aa1dcaf25bbcdb400acb72dfcb.jpg
    以下、準備から実際のプログラムソースまでメモっておきます。

まず頭に入れてくべきこと anchor.png

準備したもの anchor.png

    • mbed対応のマイコン。今回は、LPC1114FN28 を、秋月電子で購入。 1個たったの120円!(税込)
    • USB-シリアル変換モジュール FT232RL 秋月で購入
    • Arduinoスターターキット SGK-ARD-KIT 千石電商で購入 arduino uno 付きで4,940円。 arduino unoの他に付属のセット品が色々入っていて、初めてには良いですね。 arduinoからいじり始めてみたものの、mbedを教えていただいたら断然そちらが面白くなってます。

配線 anchor.png

  • 参考
    • mbed LPC1114でLチカしてみた(1):しなぷすのハード製作記
       マイコンとFT232RLの接続が参考になります。 プログラムを書き込んだあとリセットしなくても済みます。 なお、書き込みソフトはこのページの要領ではなく、LPC1114限定で下記ページのものが使いやすいです。
    • mbed LPC1114でLチカしてみた(2):しなぷすのハード製作記
       LPC1114限定で「LPCISP」というソフトを公開しておられます。USB/serialコンバーター経由で一発書き込み、即座にリセットが働くので、楽ちんです。
      LPCISP.jpg
  • ハード図
     ブレッドボードを使うとテストは楽にできるけど、一度バラしたら再現するのが面倒になっちゃいますんで、ちゃんと図面を書くクセをつけたいですね。今回は資料への使いまわしがしやすいようにEXCELでこんな感じで書いてみました。
    • LPC1114のLED回路はソース出力(PNP)でプラスコモン、FT232RLのLEDモニタ回路は、シンク出力(NPN)でマイナスコモンになっているみたいで、ちょっと混乱します。
       工業用制御部品に関していえば、日本国内やアジア圏ではシンク(NPN)でマイナスコモン、欧州ではソース出力(PNP)でプラスコモン が多いですが、欧州への輸出時にはCEマーク表示の関係で本質安全の考え方から必ずPNPにしないといけなくなるため、国内でもPNPへの変更が徐々に進んでいる・・ のかなあ?
       組み込み部品での状況は全くわからずです。
mbed_UART_SERVO.jpg
00215f18aa1dcaf25bbcdb400acb72dfcb.jpg

プログラム anchor.png

 mbedはarduinoと違い、ほぼ素のC/C++で書けます。 オンラインコンパイラでビルドが通ったプロジェクトをエクスポートして、外部のIDEで編集・コンパイルできることからもそれを実感できます。

 とはいえまずはオンラインコンパイラで。

mbed_WorkSpace.jpg
使用ライブラリ anchor.png
  • Servo
     mbedのオンラインコンパイラ上の「Import」でキーワード「Servo」で検索し、sford cstyles さんの mbed R/C Servo Libraryを試しに使ってみました。
  • MySerial
     自作ライブラリ MySerial です。mbed標準のRawSerialクラスを継承し、受信文字列のchar配列格納を簡単にできるようにしてみました。 現時点でのソースを貼っておきます。
    • GetString メソッドは、テンプレート化でオーバーロードしてあり、引数にポインタ変数指定でも char配列指定の参照でも使えるようにしました。
    • Wait時間の設定を追加してあります。
       その他APIは、こちらを参照
    • MySerial.h
      Everything is expanded.Everything is shortened.
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      
      -
      |
      |
      |
      |
      |
      |
      |
      |
      |
      !
       
       
       
       
       
      -
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      !
      -
      |
      |
      -
      |
      |
      |
      !
      |
      |
      -
      |
      |
      |
      !
      |
      |
      -
      |
      |
      |
      |
      !
      |
      |
      -
      |
      |
      |
      |
      !
      |
      -
      |
      !
      |
      |
      |
      |
      |
      !
       
       
      
      /** mbed Serial Library extend RawSerial
       * Copyright (c) 2014 Naoki Okino
       *
       * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
       * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
       * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
       * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
       * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
       * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
       * THE SOFTWARE.
       */
      #ifndef MBED_MYSERIAL_H
      #define MBED_MYSERIAL_H
       
      #include "mbed.h"
          
      /** MySerial control class, based on a RawSerial
       *
       * Example:
       * @code
       * #include "mbed.h"
       * #include "MySerial.h"
       * 
       * MySerial pc(USBTX,USBRX);   //instance of MySerial Class
       * char cWord[16]; //receive chars  or cWord[256], cWord[1024] etc..
       * 
       * void readbuf()
       * {
       *   // int iRtn =  pc.GetString(6,&cWord);    //Serial received chars by pointer cWord
       *    int iRtn =  pc.GetString(6,cWord); //Serial received chars byref of cWord
       * }
       * int main() {
       *    pc.baud(9600);                  //set baud rate
       *    pc.format(8, MySerial::None, 1);//set bits for a byte, parity bit, stop bit
       *    pc.SetRxWait(0.01, 0.001);       //set wait getting chars after interrupted, each char
       *    pc.attach( readbuf, MySerial::RxIrq );    //Set Interrupt by Serial receive
       * }
       * @endcode
       */
      class MySerial : public RawSerial{
          
      public:
          /** constructor to get chars received by serial
           * 
           * @param PinName tx
           * @param PinName rx
           */
          MySerial(PinName tx, PinName rx);
         
          /** set wait getting chars after interrupted
           * 
           * @param float _fRxStartWait wait getting a 1st char after interrupted
           * @param float _fRxEachWait wait getting each char
          */
          void SetRxWait(float _fRxStartWait, float _fRxEachWait);
       
          /** function to get chars after received chars by serial
           * 
           * @param int size for get chars
           * @param *cWord returns got chars by pointer
           * @param returns success by 0
           */
          virtual int GetString(int size, char *cWord);
          
          /** overload function to get chars after received chars by serial
           * 
           * @param int size for get chars
           * @param cWord returns got chars by ref
           * @param returns success by 0
           */
          template <class X> int GetString(int size, X cWord)
          {
              return GetString(size, &cWord);
          }
       
      protected:
          float fRxStartWait;
          float fRxEachWait;
          
      };  /*  class MySerial  */
       
      #endif
    • MySerial.cpp
      Everything is expanded.Everything is shortened.
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      
       
       
       
      -
      |
      |
      !
       
       
      -
      |
      |
      !
       
       
      -
      |
      |
      |
      |
      |
      |
      -
      -
      |
      !
      |
      -
      |
      -
      !
      |
      |
      !
       
      !
      
      #include "MySerial.h"
       
      MySerial::MySerial(PinName tx,PinName rx):RawSerial(tx,rx)          //constructor
      {
          fRxStartWait = 0.01;    //wait getting a 1st char after interrupted
          fRxEachWait = 0.001;    //wait getting each char
      }
       
      void MySerial::SetRxWait(float _fRxStartWait, float _fRxEachWait)
      {
          fRxStartWait = _fRxStartWait;   //wait getting a 1st char after interrupted
          fRxEachWait = _fRxEachWait;     //wait getting each char
      }
       
      int MySerial::GetString(int size, char *cWord)            //by pointer
      {
          int i=0;
          int ichar;
          memset(cWord, '\0', strlen(cWord));  //initialise chars
       
          wait(fRxStartWait);
       
          while(1) {
              if(!readable())    {
                  break;
              }
              ichar = getc();
              if(i<size) {
                  cWord[i] =ichar;
                  //putc(ichar);
              }
              i++;
              wait(fRxEachWait);
          }
          return 0;
      }
メイン anchor.png
  • シリアルコマンド
    ただの実験なので、<STX><ETX>などの制御コマンドは一切無しです。(汗)
    • 「start」で開始
    • 「pxxx」(xxxは角度)で位置決め
    • 「stop」で停止
      です。
  • 受信の割り込みと、50ms定時タイマ割り込みを受けてメインで動作及びLチカさせてみました。
    • 割り込みのIRQ変数名は、シリアルが「UART_IRQn」、定時タイマが「TIMER_16_0_IRQn」でしたので、割り込み優先度や割り込み禁止を個別に管理できます。 この辺の定義は、こちらに全部書いてありますね。
  • まだ試していませんが、フロー制御を入れないと9600bps以外では取りこぼしが発生します。
  • ソース
    volatile のつけ方などわかっていないので、まだ適当です。
    • main.cpp
      Everything is expanded.Everything is shortened.
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       30
       31
       32
       33
       34
       35
       36
       37
       38
       39
       40
       41
       42
       43
       44
       45
       46
       47
       48
       49
       50
       51
       52
       53
       54
       55
       56
       57
       58
       59
       60
       61
       62
       63
       64
       65
       66
       67
       68
       69
       70
       71
       72
       73
       74
       75
       76
       77
       78
       79
       80
       81
       82
       83
       84
       85
       86
       87
       88
       89
       90
       91
       92
       93
       94
       95
       96
       97
       98
       99
      100
      101
      
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
      -
      |
      |
      !
       
       
      -
      -
      !
      !
       
       
      -
      |
      |
      -
      !
      |
      -
      |
      |
      -
      |
      |
      -
      |
      |
      |
      -
      |
      !
      -
      |
      |
      !
      !
       
       
      -
      |
      |
      -
      |
      !
      |
      |
      |
      |
      |
      |
      |
      |
      |
      |
      -
      |
      |
      |
      -
      |
      |
      |
      !
      |
      |
      -
      |
      -
      |
      |
      !
      |
      -
      !
      !
      !
      
      #include "mbed.h"
      #include "Servo.h"
      #include "MySerial.h"
       
      Servo myservo(dp18);
      MySerial pc(USBTX,USBRX);         //instance of MySerial Class
      Ticker timer;
      DigitalOut led2(LED2);            //alive check LED
       
      volatile int cntRx=0;
      volatile int cntRx_old=0;
      volatile int timeUp=0;
      volatile int timeUp_old=0;
       
      char cWord[6]; //receive chars  or cWord[256], cWord[1024] etc..
      char *pCword = cWord;    //pointer for cword
      const char ccStart[6] = "start";
      const char ccStop[5] = "stop";
      const char ccMove_[2] = "p";
       
      int readSize = 5;
      int doStatus;
      int iDeg;
       
      void atRx()
      {
          NVIC_DisableIRQ(UART_IRQn);
          cntRx++;
      }
       
      void atTimer()
      {
          //NVIC_DisableIRQ(TIMER_16_0_IRQn);
          timeUp++;
      }
       
      void readbuf()
      {
          pCword = cWord;    //pointer for cword
       
          //int iRtn =  pc.GetString( readSize, &cWord[0] ); //Serial received chars by pointer of cWord
          int iRtn =  pc.GetString( readSize, cWord ); //Serial received chars byref of cWord
       
          if(strcmp(cWord, ccStart)==0) {     // start
              doStatus=1;
              printf("started\n");
          } else if(strcmp(cWord, ccStop)==0) { // stop
              doStatus=0;
              printf("stopped\n");
          } else if(cWord[0]==ccMove_[0]) { // 1st char matches
              pCword++;                    // increment pointer to get after 2nd chars
              iDeg = atoi( pCword );
              printf("%d\n",iDeg);
          } else {                        //no action except for start/stop
              printf(" no match %s\n" , cWord);
          }
          if ((doStatus == 1) && (0 <= iDeg) && (iDeg <= 180)) {
              wait(0.01);                           // waits for the servo to get there
              myservo.position(iDeg - 83.0);
          }
      }
       
      int main()
      {
          pc.baud(9600);                  //set baud rate
          pc.format(8, MySerial::Odd, 1);//set bits for a byte, parity bit, stop bit
          //pc.format(8, MySerial::None, 1);//set bits for a byte, parity bit, stop bit
          //pc.set_flow_control(MySerial::RTSCTS,dp26,dp25);
          pc.SetRxWait(0.01, 0.001);       //set wait getting chars after interrupted, each char
       
          wait(0.25);     //startup wait
       
          pc.attach( &atRx, MySerial::RxIrq );    //Set Interrupt by Serial receive
          NVIC_SetPriority(UART_IRQn, 120);
          timer.attach( &atTimer, 0.05 );
          NVIC_SetPriority(TIMER_16_0_IRQn, 10);
       
          myservo.calibrate(/* range */ 0.00099, /* angle +/- */ 90.0);
       
          while(1) {
              wait(0.01);
       
              if(cntRx != cntRx_old)
              {
                  readbuf();
                  cntRx_old = cntRx;
                  NVIC_EnableIRQ(UART_IRQn);
              }
       
              if(timeUp != timeUp_old)
              {
                  if( 10 <= timeUp )
                  {
                      led2 = !led2;
                      timeUp=0;
                  }
                   timeUp_old = timeUp;
                  //NVIC_EnableIRQ(TIMER_16_0_IRQn);
              }
          }
      }

実行結果 anchor.png

シリアルコンソールには、定番のTeraTermではなく、「RS232cテストツール」というフリーソフトを使ってみました。

下図のように、コマンドを送ると帰ってきたアンサーが表示されます。

Comm.jpg

総括 anchor.png

 mbed、おもしろいです。 C/C++の入門にもなるし、ハード回路の勉強にもなります。

 次回は、オフラインでのコンパイルとデバグ環境にチャレンジしたいと思います。

inc​/mbed

続きを読む | 閲覧(24081) 
7月
5 (土)

 引き続き、mbedをいじってます。
 
 先日入門したばかりでもとても便利と感じるmbedのオンラインコンパイラ。

 オンライン上で先人の公開したライブラリやプロジェクトをさくっとインポート出来たり、自分のPC環境に依存しない、デバイス毎に異なる設定などは予め設定済みで、マイコンの種類を変えても少しの変更ですぐに移植できる、などなどとても良くできていて、私のような初級者には大変ありがたいものであります。

 しかしですね、、やっぱりIDEでオフラインコンパイル、ステップ実行デバグをやりたいですね。 ということでmbedと先人の知恵を頼ってやってみました。

  • 概要
     トランジスタ技術2014年3月号には付録にトラ技ライタが付いてくる。 これをEIL-MDK(μVision4)でコンパイルしたバイナリをCMSIS-DAP経由でマイコンにロードするのと、デバグで使います。 UART(USBシリアル)は同時に使えなかったので(やり方がまずかった?) 相変わらずFT232RLを繋げています。
     もっと楽をしたい方は、素直にSwitchScienceでLPC1114のmbedボードを買ったほうが良いと思います。。たぶん。
     →その後、UARTもCMSIS-DAPも同時に接続できるようになり、FT232RLは不要になりました。
  • 接続図
    左図ではUART(USBシリアル)用にFT232RLを入れていますが、これは不要になり右図のようにトラ技ライタ側のUARTポートからTx,Rxに繋ぎます。
    FT232RLあり   →   なし
    t_0157dfdec10136d9c8704638855b331dbb.jpg t_086d2ba4d9932133a57ab1b44d37a5be3a.jpg
  • 現物
     左図のブレッドボードの上段左側がトラ技ライタ。右側がLPC1114マイコンとUSBシリアルFT232RL。 右下のは次回テスト予定のRS485ドライバチップとディップSW。 右図はFT232RL無しの最終状態。
    t_00a4490651dd65c6a289fe2b323db4525f.jpgt_07d532f1048929d0cae506a1bb9f318a1e.jpg
  • μVision4でデバグポートにトラ技ライタを指定したところ。 速度は10MHzでも行ける。 μVision5では100KHzまでしか出なくて断念した。
    t_02d94c6a6211ae19a8eedc5da01bfe72c0.JPG
     →その後、トラ技のファームウエアではなく、このページのファームウエアに書き換えた後で、トラ技ライタをUSB接続した状態でこのページのUART最新ドライバをインストールしたところ、無事に全て使えるようになりました。 μVision側設定画面はこうなりました。
    t_04ba0bb0d941da6f4b1f40864d3337909a.JPG
    Windows8.1上のデバイス表示に、3つの接続が出現していればOK。 1つしか出ない場合は、USBドライバがインストール出来ていないです。
    t_07a231ae1fa5cec2e4427ff221f4e42a4b.jpg
  • 割り込みイベントが発生すると、デバグがここで止まってしまい再開不能でマイコンをリセットすることになる。 今のところ解決策がありません、どなたかご存じの方、Help me。
    t_03be0ac6617d7a3f3ddab406bff316e234.jpg
     もしかするとリアルタイムOS使っていないとだめなのかな? デバグしなければきちんと動くんだけど・・
     →これもトラ技のファームから変えて、さらにnRESET配線1本をきちんと結線することでOKになりました。 nRESETを結線すると、LPC1114に付けたタクトSWでリセットできなくなるので、その際には毎回ライタからのnRESET結線を外してSWを押す、という操作が必要になります。
     →上のほうの接続図のようにnRESET中間に1KΩの抵抗を入れることで、そのままリセットも効くようになりました。正しい回路ではないと思いますが、実用上は今のところ問題ありません。

 参考:

  • トラ技ARMライタを mbed interface にする(LPC1114FN28編
    まさにこれ!と思ってここのファームウエアを試してみましたが、UART(comポート)が出てこない、CMSIS-DAPが出てこない、という状態で断念。 PCがWindows8.1だからかなあ。。
    →再度試したところ、下記ページにあるUARTドライバをインストールしたら全てOKになりました。
    但し上のページの結線は、何かおかしいです。nRESETの配線が別のところへ行っている気がします。
    • μVision4でデバッグ!(mbed-MACRUM)
      トラ技ライタでは無くファームウエアはここのものは使いませんが、作業の流れはこれが近いです。ファーム書き換え後のUARTドライバはここからダウンロードしてインストールします。
    • Keil MDK-ARM v4 のダウンロード
      このページのv4のリンクより。 ライセンスフリー版では32Kbの制約があります。 v5は通信速度が出なかったです。 →これも再度確認したら問題ありませんでした。
    • mbedをIDEで使う(野良2-mbed
      μVision4のあたりが詳しいです。
  • トラ技のページ
    ファームウエアはここから「トラ技ARMライタ基板をCMSIS-DAP(デバッガ)として使うときのファームウェア」をダウロードして流し込みます。 →当初はこれでやっていましたが、後で別のファームでOKになり不使用です。

 次回は、この時に仕事で作ったPC上のVB.NetなRS485シミュレータを、LPC1114マイコンに置き換えて通信してみるテストです。

続きを読む | 閲覧(21160) 
12月
17 (日)
カテゴリー  オーディオ
タグ  デバイス

昨日の2017年stereo誌自作スピーカーコンテスト授賞式・試聴会の会場で12/19発売予定の書店より早く販売されていた、「極上の音質改善機器シリーズ」Pioneer製USB型ノイズクリーナー「APS-000T」を買ってきて試しています。4,600円。 今回発売される2機種には、USBジャックが付いておりスルー接続が可能となっています。

t_0030be20e8d98b1175566ccf0375e651c1.jpgt_01257f28e530dd46e8fb78a4873efff26f.jpgt_026001762d01292db4403fad82f461f4a6.jpg

実は最近、あまり音楽を聴く気になれずアンプに火を入れることすら少なく、耳が元の音に慣れていません。 そんな中でこれをRaspberryPi3+のUSBポートに差してDDCのAmanero Combo 384の間に入れて試聴しているわけですが、そうしたエクスキューズを前提とした上で言えば、音質が向上していると感じています。

具体的にどこが変わったか?というと、ノイズフロアの低下、高域のフォーカス向上、音像周辺の空気感(?)。

t_031df1331619926180caa8214d1dc9e6f4.jpg

まあこれは私の耳のプラシーボ効果もあるので、興味のある人は12/19以降に書店に立ち寄ってみて購入し、ご自身の耳で確認してくださいな。

続きを読む | 閲覧(14585) 
8月
28 (日)

5月の日記で、緑基板のDACの出力部分の改造をして、満足のゆく音が得られていました。

ただ、Raspberry Piでオーディオしま専科 グループの改造作者の方は、黄色基板の改造で実施しています。

実は、黄色基板も2枚ほど買ってあって、在庫していました。 1枚1,000円ほどですんで、これでよい音が出ればすばらしいです。

改造前は、緑基盤の時と同様にざらついた感じでしたが、改造後は滑らかさが出ていい感じです。 緑基盤との比較では、高域が少し押しが強く、低域は伸びを抑えてキレが良い方向です。

好みは分かれるところだと思いますが、現段階ではこの黄色基盤のほうが音がフレッシュで良いですね。 1個千円程度で買えるので、改造費がその半分くらい上乗せでかかりますが、それでもコスパは最高。

なお、Raspberry Piでオーディオしま専科 グループの後藤さんの改造個所に倣っていますが、コンデンサメーカーが違ったり、タイプが違ったり、容量が少し違ったり、一部取り付け位置がわからず付けていないものがあったりしています。 完全にコピーすればきっともっと良い音になると思うのですが、これ以上良い音になってもスピーカーがボトルネックで違いがわからないと思います。
なお、出力RCAジャック手前の抵抗は560Ω、ポリエステルフィルムコンデンサは2700pFです。
1曲、ソフィーミルマンの曲を録音してみました。
https://www.youtube.com/watch?v=1C5nk9GqbYg
また中途半端な状態ですが、私はこの時点ですでに満足しています。 ありがとうございます!

オリジナルの投稿
https://www.facebook.com/groups/rasp.audio/permalink/481413312052018/


ES9023 黄色ボード改造版の表

ES9023 黄色ボード改造版の裏
続きを読む | 閲覧(15436) 
3月
21 (水)

5年間、安定稼働を続けていた、我が家のVMware ESXi 仮想化サーバー。 ところが去る2月15日に、マザーボードが突然死。 :-o

2日後に、中古で暫定版のマザーボードをどうにか探して買ってきて、何とか立ち上げました。

故障したESXiサーバーの緊急保守用に暫定的に購入したマザーボード。これがまた調子が悪かった・・ :oops:
t_00976d7df4a8e7066228cb12cf90bdcb51.jpg

しかしその後、1週間に数回ほどサーバーが落ちる現象の原因がわからず。 単身赴任先から自宅に連絡して、家族にリセットしてもらっていました。

しかしこんなことを続けているわけにもいかないので、今後は構成を一気にシュリンクして、オーディオプレイヤーとしても使っているワンボードコンピューター、RaspberryPi3 へ移行することを決めました。断捨離です。

有難いことに、このサーバーで稼働中の、集まれ!塩ビ管スピーカーの経費でハード費用を支出いただけることとなり、1万円に収まる金額ですが有効に活用させていただくことにして、現在移行作業中です。どうもありがとうございます。 :-)

既に、なーお'nWEBと集まれ!塩ビ管スピーカーのWEBサイトは移行済み。WEBサーバーはApacheではなく軽量高速なnginx。 それでもハードのスペックが低いため、少しレスポンスが遅いですがどうぞご容赦を。 他のアーカイブサイトも今日中に移行完了の見込みです。 その後、メールサーバー移転に着手・・

それにしても、いくつものXOOPS Cubeサイトを動かしてしまうRasPiサーバー、恐るべき実力ですね。

(追伸)
運用開始後、サーバーダウンが頻発。再起動しても立ち上がらない。
php-fpmのログを見ると、

WARNING: [pool www] server reached pm.max_children setting (5), consider raising it

これは、子プロセスの設定がうまく行っていないということらしい。
参考:php-fpmのエラーにぶつかりながら設定の最適化を図る

/etc/php/7.0/fpm/pool.d/www.conf

; pm.max_children = 5
pm.max_children = 20

; pm.start_servers = 2
pm.start_servers = 4

pm.min_spare_servers = 2

; pm.max_spare_servers = 3
pm.max_spare_servers = 6

 これで安定してくれることを願います。。

t_0189e40d750d13c38dda06e5b89815ae59.jpgt_02760b08c60ec8556c989136a9987a584e.jpg
RaspberryPi3 B type (RS components製)と,
64GbyteのSDXCメモリ、積層式のCase。なかなか面白い。ファンも付いてきたけどまだ付けていない
t_03f73078730108070da447a22145a7dba0.jpg
Rasbian稼働中・・

...

続きを読む | 閲覧(19111) 
8月
6 (土)

Android なスマフォ IS11CA。
出張時に持ち歩くとき、オーディオプレイヤーとして使い、できるだけ高音質で聴きたい。
t_0042396ee982e71a0d46b7ad4280e7da20.jpg
ところが、IS11CAにインストール済みのオーディオプレイヤーでは、愛用してきた (SanDisk) SANSA e280 + RockBox で使えていた、WMA v9(VBR)フォーマットが再生できないことが判明。。

右往左往して試した結果、最後はRockBoxに緊急着陸した話のメモ。

標準のプレーヤーで再生できないなら、マーケットプレイスでもFreeなプレイヤーが沢山あるさ。 そう思ってあれこれインストールしては試してみたが、 ほとんどの「wma再生可能」と書かれたプレーヤーでも同様に再生できなかった。。

試した中で再生できたのは、こちらの記事にも書かれていたように、以下の2つだけだ。

  1. RockPlayer
  2. yxPlayer

いずれも音質はまあまあ、強いて挙げればRockPlayerの方が上か。
しかし、残念なことに、どちらも再生中にホーム画面や他の画面に遷移すると再生を中断してしまう。。 これじゃ使えないじゃん。

ネットを彷徨い、 まさかね、と思って 「RockBox Android」で検索してみたら、このページがひっかかった。

Android版Rockbox - 試行錯誤的知的生活blog

なんと、ファームウエアとして作られてきたRockBoxを、Androidのアプリにしてくれているとな! うっひょー。 :-)

インストールの前に、プログラムの入手。 方法は

  1. Rockboxのページからapkを手に入れる。
  2. 開発中のプログラムを自力でapkにコンパイルする
  3. 個人配布のapkを使ってみる(人柱用)

当然のように、-3の方法で「rockbox_110315_480x800_v110409.apk」を有り難くダウンロードさせていただくことにした。

microSDHCに.apkファイルをコピーし、別途インストール済みのファイルマネージャアプリ上でこのファイルを選択することで、無事にインストールできた。

起動すると、日本語が全部豆腐になっていて読めない。 上記ページにあるようにフォントをインストールすれば問題無くなった。(文字がちと小さすぎるけど、許容範囲) WMA-V9、VBRフォーマットも無事に再生できた。

 フォントの変換が便利。 このページがわかりやすい。

で、肝心の音質は、聞きなれたRockBoxの音の匂いがする。 これですよ、これ。 まあ、ファームウエアそっくり入れ替えたわけではなく、Android上で動いていることもあって、e280の音質には敵わないのは仕方のないことろか。

そして、ページを遷移してもしっかり再生を継続することと、 電話の着信時には問題無く通話に切り替わり、通話終了で勝手に戻ってきてくれる点、3種類のウイジェットまで準備されている点など、予想以上に完成度が上がっていて嬉しい。

ということで、32GBのmicroSDHCをぽちっとしてしまったのである。

コメントあり 4  |  続きを読む | 閲覧(53531) 
7月
11 (木)

KORGのDAC,DC-DAC-10を買いました! :-)

早速、サーバーの仮想ゲストWindowsXP pro-SP3にインストールし、 CDをDSD5.6Mbpsにリアルタイムアップサンプリングして聴いてみました。

0067df82b09c7f90e4272671c104d1becb.jpg
019ddd707eeaf8d02bab7eadd4e77a406e.jpg

元々、(Javs)X-DDC -(S/PDIF光)- (Accuphase)DC-61 で聴いていたので、それとの比較になります。 アンプは、(Marantz)PM-14SA-v2、及び、stereo誌付録の(Luxman)LXA-OT1(オペアンプ変更)で聴いてみました。

音出し当初は、PCM-44.1Khzで、ちょっと透明感・音場感が減った感じ。 高域のキツさはDC-61よりは軽減。 よくも悪くもあっさりしている気がした。

次に、DSD5.6Mbpsにリアルタイムアップサンプリングで。
PCが仮想PCなのでパワーが心配だったけど、20%程度で収まっている。 けれども、結構な頻度でプチプチノイズが入ってくる。 リソースの関係なのか、それとも仮想PCであることでのジッターノイズなのかは不明。

020faea6e973cb6978634fca1950158571.jpg

試しに、Windows7-proの実PCで聴いてみたが、こちらはCPUパワーも余裕があるので、ノイズはほとんど入らない。

さて肝心のDSDアップサンプリングの音はどうかというと、確かに清涼感漂う音に変化し、ボリウムを上げて長時間聴いても疲れない音だ。 ;-)
DACチップに、(Cirrus Logic) CS4398 が使われている。この石は、(Marantz)のSACDプレーヤーSA-13やSA-15あたりでも使われているもので、何となく音の傾向が似通っているような気がしないでもない。まあそちらもしっかり聴いたことがあるわけではないので、そんな気がするという程度の話だけど。
低域は実に歪感の少ない音に変化した。 自作スピーカー「スター」の低域の傾向もあって、そのあたりが良く分かって、これはかなり好印象。

現時点では、PC - USBハブ(セルフパワー) - DC-DAC-10 という接続でUSBバスパワーで聴いている。
巷では、(Aurorasound) BusPower-Pro を電源として挟むと良くなるとの情報があるし、USBケーブルも手持ちのものを仮につないだだけなので、SUPRA USB2.0 ケーブルあたりを試してみようかとも思っている。

本当に満足できる音がでれば、DC-61を手放せるのだが・・ 思った以上にDC-61の音は透明感が高いということがわかってしまったので、ちとハードルが高くなったかも。 :-P

コメントあり 2  |  続きを読む | 閲覧(17092) 
12月
22 (水)

USBサウンドカード、(JAVS) nano/V を試しに買ってみました。
結論からいうと、既に所有していたUSBサウンドカード、(AudioTrack) PRODIGY CUBE に首の差で若干届かない程度の音でした。(光アウト+ASIO4ALL 限定比較)

usb_sound.jpg
左から、PRODIGY CUBE , nano/V , Clorets(サイズ比較用)

実は、今日の今日まで、PRODIGY CUBEの音質はあまり高くないと思っていました。 その理由は、日頃使っていたノートPC (ThnkPad T42)にUSB接続して光アウト、AccuphaseのDC-61に入れた時、ジッターレベル1(±50ppm)でロックされず、レベル2(±1,000ppm)となりSFC(Sampling Frequency Converter:44.1KHz→48KHz)が働いて音が悪くなっていたからです。

ところが今日、試しに(ASUS)M2NPV-VMマザーで組んだPCにUSB接続してみたところ、なんとレベル1でロックしているではないですか!

レベル1でロックせず
lock_level2.jpg
レベル1でロック
lock_level1.jpg

これって、PCが悪かっただけって事だよね。。 :roll:

それでは物は試しと、仕事で取引先から貸与していただいているLet's Note CF-Y8 から繋げてみたところ、こちらもレベル1でロックしました。 やっぱりT42が悪かったのか? :-o

で、届いたばかりのnano/Vでも試してみたところ、Cubeと同じ結果。結論がでました。・・

T42の、ばかぁ・・ばかぁ・・ばかぁ・・

冷静になってまとめておきます。

PCT42Y8M2NPV-VM
Chipseti855PMGM 965
Express
GeForce6150
+nForce430
サウンドカード
Prodigy CubeLevel2Level1Level1
JAVS nano/VLevel2Level1Level1
Onkyo SE-90PCI(参考)--Level1

教訓としては、PCオーディオは繋げてみないとわからないんだ、ということ。 何か事前にわかる指標のようなものは無いのだろうか。

今後のオーディオPC選定が難しくなったなあ。

続きを読む | 閲覧(40332) 
39件のうち1 - 10件目を表示しています。