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

日記一覧

当サイトに登録されている日記一覧
39件のうち21 - 30件目を表示しています。


[投稿日   ] [タイトル   ] [アクセス数   ]
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マイコンに置き換えて通信してみるテストです。

続きを読む |  閲覧(21205)
5月
22 (日)

ここでRasPi Audio(ラズパイ・オーディオ)を話題にするのは初ですね。

RasPi Audio つまり シングルボードコンピュータ、「RaspberryPi 」を使ったオーディオの話題です。

3年ほど前から巷で話題に上ることが増え、「音が良い」と評判になっていたのですが、トライする時間もないし静観しておりました。

そろそろかなあ、と考えていたところに、
FacebookのRaspberry Piでオーディオしま専科グループにワタヤンさんに招待いただき、今年のゴールデンウイークは割と時間が取れそうだし、Raspberry Pi 3も発売されたところだし、注文しました。

RaspberryPi本体

 RaspberryPi 3 Model B (RS版): RaspberryPiには、いくつかのモデルと製造元がありますが、最新の「3 Model B」、英国製「RS Components」を選択。 一つ問題があって、RaspberryPi 3に正式対応するOSがまだなこと。 Vollumio、MoOde Audio ともリリース候補版が出ていてほぼ動作しますし、もう少しで正式リリースに至るはず。

DACボード

 イーディオさんの販売する、1ppm-50Mhz-TCXO搭載 ES9023 DACボード。
 RasPiオーディオのFBグループで使用者が多そうなのと、1ppmクロックに惹かれて選択。最初はこうしたドーターボードタイプが、接続配線など何も考えなくて動作するのでお勧めです。もちろん、後から分岐して配線で電源分離して動作させることも可能。
 購入はこちらから、メールで。

電源

 市販のAnker製2.4A出力x2ポートタイプをとりあえず購入。 でもこの電源では本来の高音質を発揮できていなかったことを、今日、後述の改造電源にトライして認識しました。

OS

 ラズパイ・オーディオは、皆さんLinuxベースのオーディオチューンされた専用OSをインストールして使います。
 メジャーなところで、Vollumio, MoOde Audio Player, Rune Audioなどがあります。
 私は、RasPi 3対応OSへのバージョンアップが頻繁な、MoOde Audio Player を選択しました。

インストール

 1日くらいハマリましたが、できてしまえば何てことありません。 私がインストールした時点で MoOde Audio 2.6 TR2が最新でいたので(今日現在はTR4)、ダウンロードしたiso イメージをDD for windows でmicroSDカードに焼き、セットして立ち上げます。 LAN環境に、DHCPサーバーを立ち上げておくことをお勧めします。

接続と設定

  • TWSNMPマネージャ
     RasPiにはHDMI出力があり、モニタを繋いでおけばきちんと立ち上がったかどうかわかります。 この辺の説明は割愛。
     LANケーブルを繋いでおけば、DHCPサーバーから割り振られたIPアドレスで接続されますので、TWSNMPマネジャフリー版 をインストールして、「管理ツール/自動発見」を使って、IPアドレスを調べます。
     パソコンやスマホのブラウザから、調べたRasPiのアドレスに接続すると、ブラウザコントローラに繋がります。
    t_01b4c924a7304fbc105efebf6d11459c0b.jpg
    スマホでWEB画面操作
  • system
    • General
       タイムゾーンの設定など
    • Services
       ここが肝の設定です。
      I2S audio device : HiFiBerry DAC
      HiFiBerry DACはES9023ではないのですが、これを選択することでリンクします。
  • configure/Sources
     ネットワーク上においてあるWAVファイルなどの楽曲データを再生する場合、ここでNAS Sourceの設定をします。(但し最初の動作確認だけなら、USBメモリに楽曲を入れて「USB and SDCARD Sources」のほうで指定したほうが早いです)
     私は、自宅サーバーに「SMB/CIFS」を立ち上げていまして、いつものWindowsPCからもそこの楽曲を再生していますので、同じように設定しました。 接続先が見つからなかったりすると、リストに赤の「×」印が出るんでわかりやすいですね。
  • configure/MPD
     楽曲データのデコードなどを行うサーバープログラム、MPDの設定です。
    Audio output: I2S audio device
     これが選択できなかったり、できても音が出なかったりする場合、I2S audio deviceの設定を確認。
     主な設定は以上であとは参考サイトを探せば出てくるでしょう。
t_00d7fd6591754b8ea40151e02da0a8faa4.jpg
RasPi3 + 1ppm TCXO クロック内蔵 ES9023 DACドーターボード

格安改造電源の投入

 RasPiオーディオのFBグループで、ミニトランスを内蔵したDAISOの200円USB-ACアダプタを改造し、安定化回路を付加した電源を使用することでノイズが改善されて音質が向上する、とのことで、表面実装の抵抗を変更する必要があってハードルは高いのですが、思い切ってやってみました。
 いつものお約束ですが、改造は自己責任で!

主な購入資材

 正直にいうと、よくわからず買っているものもあります。chip コンデンサ → 積層セラミックコンデンサ への変更がどうなのかちと心配。 まあ問題なく動いているので良いのですが性能はわかりません。

名称型式個数単価:円(税抜)
USB-ACアダプタ(ダイソー)T3621+予備200
被膜抵抗2.2kΩ-1/4W15
基盤160
レギュレータTI7805S270
電解コンデンサ470μF 16V250
積層セラミックコンデンサ1μF 25V230
積層セラミックコンデンサ0.1μF 50V230

T362の改造

t_0277b14d08905af0e684c511a5471b1354.jpg
DAISO 200円USB-ACアダプタ T362 失敗を想定し、予備も含めていくつか買っておく
  • ケース開け
     まずはケースを開けないと話になりませんが、これがまた硬いのなんのって、ほぼ流血寸前でした。 皮手袋でもして作業をお勧めします。 コツといえるかどうかわかりませんが、USBポートの上側のスキマに精密マイナスドライバを突っ込んでグリッとやって左側をまず外すことから、順に手前を回って右のほうに開いてゆき、最後に残ったプラグ側は抜けないので2枚貝のように開いてからニッパで内側から切り離す、そんな感じです。
    t_035c39e542249b6ea262db5940a4b06c06.jpg
    DAISO 200円USB-ACアダプタ T362の内部
    t_04987c07b873bf7fd68024c1fdf010803b.jpg
    (裏面)
  • USBポートの取り外し
     はんだごてと、ハンダ吸い取り線は必須です。 ハンダ吸い取り線は、ネットでも買えますし、100円ショプでもあったような気がします。
  • R7 チップ抵抗の取り外し
     作者の方は、チップ抵抗をパラで付けたようですが、50過ぎの老眼で慣れないチップ抵抗のはんだ付けはほぼ不可能なので、R7は迷わずハンダを吸い取り飛ばして、配線で上面に引いて普通に被膜抵抗を付けました。
  • R7 取り付け!
     リード線には、柔らかい銅撚り線を使わないと、硬い線では折角はんだ付けしてもすぐに振動などで取れてしまい、私はT362を3個オシャカにしました(ランドが剥がれてしまった)。4個目でようやく成功。 でも時々取れてしまってははんだのやり直しの連続。 次回はチップ抵抗にチャレンジしたくなってきました。
     なお、抵抗値を2.2kΩに変更することで、T362の出力電圧は6.9Vになりました。 少し低いですが、5Vを安定的に出すにはとりあえず必要十分、でしょうか?
    t_089370043640382bb6b28b520896982d3c.jpg
    R7を飛ばした後に、リードをはんだ付けしたところ。R8と接触してるように見えます? 気のせいですよきっと。
    t_0532e583fd12827568c8f03db1bd67425a.jpg
    柔らかい銅撚り線で上面に引き出し、2.2kΩの抵抗を接続

(追記)
 その後、チップ抵抗のはんだ付けにトライ、新しいT362のR7を交換しました。 新たに購入したルーペを使って、はんだごて温度設定300°でやってみたところ、無事に付いたところです。ルーペ無しでは、8回やって成功はたった1回でした。 道具は重要です。

TipResistor.jpg

安定化回路の作成

 参考回路図を見て、作ります。 以上。 :hammer:

t_062f47b6a5a0c3481313ca3c666c68ac71.jpg
R7が2.2kΩで、TI7805SレギュレータのVinは6.9V
t_073ea03b768c42292749b35a19fa00aada.jpg
出力電圧Voutは5.0V

音出し

 まずは電源改善前の音の印象。 実は当初、アンプへの接続RCAピンケーブルを、「audio-technica GOLD LINK」という少し安いやつで聞いていたのですが、まずこれが良くなかった。「audio-technica ART LINK 」に変えたところ多少良くなったみたい。 でもメインのPC~X-DDC~DC-61の音とは比べるまでもなく、霧がかかったような、フォーカスのぼやけた音でした。

 そして今日の作業で作った格安改造電源に変更しました。

 音出し当初からもうびっくり、こんなに音が変わるもの? 同じRasPi,同じDACなのに。 フォーカスもDC-61に肉薄、細やかさでは上回る印象。 ベールが2枚ほど取れた印象で、この状態でも中級CDプレーヤーなら軽くカモれーるかも。
 その後、2回路とも完成してRasPi3も2回路目分岐回路から供給。 総容量1AのUSB-ACアダプタですが、ちゃんと動きますね。(CDフォーマットのFLACでリサンプル無し再生の場合で確認する限り)そして益々、音が良くなりました。少なくとも、中高域の細やかな表現では、X-DDC+DC-61を軽く超えてしまっています。

 作者の皆さま、FaceBookのRaspberry Piでオーディオしま専科グループの皆さまに感謝申し上げます。 m(._.)m

 今度、DACの出力段のコンデンサの変更にもトライしてみます。高級機を超えるか!? ワクワク・・

コメントあり 2  |  続きを読む |  閲覧(21294)
3月
1 (金)
カテゴリー  Business
タグ  デバイス プログラム 仕事 FA C/C++

久しぶりに、仕事で使うツールを購入。

今回は、新分野へ飛びこみます。

主に組み込み用途として使われる、三菱のC言語コントローラーと、その周辺ツールソフト。

これがまた、高いんですよ。 ハードとソフト合わせると、定価ベースだと50万円オーバーします。 キャンペーンで30万円くらいで買えたけど、うちは個人企業ですからね、私一人の稼ぎで回収しなければいけない。 もうなんというか、笑っちゃいます。 :lol:

今のうちに勉強しておいて、食い付ける時がきたらガブっとね。 うまく行けばどんどん仕事請けて、がっちり儲けるのだあぁー。

しかしその前に、C言語でまともにアプリケーションを作ったことが無いという、未解決の問題が・・ :hammer:

買った物

  • C言語コントローラCPUユニット
    • Q24DHCCPU-V iQ Platform対応 リアルタイムOS(VxWorks標準搭載)
  • C言語コントローラ用エンジニアリングツールCW Workbench Q24DHCCPU-V用
    • SW1DND-CWWLQ24-E
  • C言語コントローラ用設定・モニタツール Q24DHCCPU-V用
    • SW4PVC-CCPU-J
続きを読む |  閲覧(21515)
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

続きを読む |  閲覧(24128)
3月
4 (日)

 先週フロント/リアパネルに穴あけをしてきたアンプのケースに、部品を組み付ける作業を昨日実行しまして。 今日は早速コニさん宅で古舘さんと3人でミニオフ。
 たてちゅうさんほかもお誘いしましたが直前でしたので先約有り、また次の機会に。

  • 自作プリアンプのフロント/リヤパネル裏側。フロントは2連式アッテネーターに、2入力セレクタでぎっしり。リヤもRCAとXLRコネクタで一杯。
    t_012af6abe08f7c60d3c7c2d2d80f0fcd56.jpgt_02fc9cd71242efe2a514c3583573f00d6f.jpg
  • パワーアンプhypex UcD32MP をプリアンプと同じケースに収めたけど、内寸高がピッタリ過ぎて天板にアンプモジュールがキスします。 仕方ないので天板裏側に梱包テープ貼り。
    t_03ab1d8c77dc905abee40c4bb8a9ecd649.jpgt_05b9a809ff86bd982698c482c27528a702.jpg
  • 完成型のフロント部/リヤ部。 2連式アッテネーターのツマミはもっと大きなものに交換予定。XLRケーブルはカナレのケーブルを使って最短長を狙って自作。
    t_06168324ef367312ef38308c853aa6a359.jpgt_07cd7a2a9509d4d9f3cc4f4ee736c04ebe.jpg
  • 今日は朝移動で、コニさん宅にアンプとTornadeflyを持ち込んで、ミニオフ。 行は東名経由でスイスイ。 帰りも藤沢バイパスが混んだ以外はスムーズでした。
     am11時頃から出来立てのアンプとTornadeflyをセッティング。
    t_0813751a6b7fa4e00d3feca84283cdedcd.jpg

 なんとなく、箱に収める前より音の鮮度が落ちた気がする。 ごとうさんお勧めの細いすずメッキスダレケーブルを多用しすぎたかな? 皆さんのご感想は如何に。

  • コニさんの最近のお気に入りの、自作平面スピーカーユニット。 Yoshii9系の音場型スピーカーともまた違う不思議な感覚で、楽器の音像がスピーカーの後ろに出現する。一度ハマルと癖になりそう。 時期バージョンではツイーターもグレードアップするようなので期待大です。
    t_08f58ccd46a4e65c63c1504d86a9f9f690.jpg

 あっという間の週末でした。コニさん、古舘さんありがとうございました。リフレッシュできました。明日からも頑張ろう!

コメントあり 6  |  続きを読む |  閲覧(25348)
4月
15 (火)

windowsXPのサポート終了に伴い、windows8.1にアップデートしたい。
けれどもうちのクライアントマシンは仮想マシンになっていて、そのホストであるVMWare ESXi5.0がまだwindows8をインストールできない状態だったので、ずっと放置していた。
ようやく重い腰を上げて、これにトライすることにした。 昨年の1月に構築してからすこぶる安定しているシステムなので、マイナーバージョンアップで何とかしたい。
夜中にサーバー止めて2晩ほど作業すれば終わるかな、くらいに思っていたのだが大間違い。 様々な問題が起こって都度対処し、気づけば1週間ほどの時間を費やしてしまった。

t_00ff92aeea578afe9f7edf547116ab1cd2.jpg
Puppy Linuxによるシンクライアント

...

続きを読む |  閲覧(26450)
7月
5 (木)

山形県内の某所への出張、現地調整含め2週間の業務が全て終了しました! :-)

思えば、4月末に見積もりを出した時は、現地近隣の競合他社との競争なのでまあ受注は難しかろうと思っていたのですが、 6月~7月に仕事がぽっかり空きそうだったので、思い切って利益を最小限にカットして回答したところ受注できた案件です。 一人でやっていると出てゆくお金が少ない分、こういう時に融通が効きますね。

仕事の中身は、この時の日記にも書いたように、RS485で専用制御機器と通信せねばならず、それなりに手がかかるだろうけど何とかなるさ、とたかをくくっていたところ。。

RS485通信は、上記の日記のとおり事前シミュレーションが功を奏して、割とスムーズに立ちあがりましたが、 枝葉の部分で事前準備が完全に整っていなかったところに、お客様から早速の多数の要望の洗礼。。 :-(

耳栓必須な騒音職場で、耳栓していてもうるさくて、昼間の調整が終わったら早々に定時で引き上げ、夜な夜なホテルでソフトを作り上げる毎日でした。

でも終わってみれば、実にスムーズに完了し、予定より1日早い引き渡しとなった次第。 今日、20ページオーバーの画面操作説明書を暫定版で提出し、一区切り付きました。 成功のカギは、事前の準備で一番危うそうなところを重点的に済ませてあったことと、現地でお客様が早めに要望を出してくれたことでしょうか。 ;-)

そして忘れてはならないのが・・ ここにきた時だけ味わえる、この肉!
たまには、良いよねー。 :-D

さてと、増えた体重の減量計画を立てなくちゃ・・

続きを読む |  閲覧(26474)
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  |  続きを読む |  閲覧(27273)
2月
9 (土)

この3連休、どこにも出かける予定もなく、かといって何かまとまったことをする気力もない。

 そこで長年の懸案だった、DVカメラからの動画の取り込みを始めることにした。 元々DVカメラも調子が悪くてテープを早送り・巻き戻しをするとテープを巻き込んでクシャクシャにしてしまう状態だったのだが、ずいぶん放っていたので更に状況が悪化。 :-(

 おまけに、今時IEEE1394ポートを装備するPCも減って手元に無いから、拡張ボードを新調。 なんとかかんとか作業を進めている状態で、このまま30本の作業を一気に済ませて安心したい。

...

コメントあり 6  |  続きを読む |  閲覧(28604)
7月
26 (火)

AUのAndroidなスマートフォン、IS11CA を購入しました。 色は黒!

t_0064696461b11a497fe0eaa7cffe433737.JPG

t_014d184210fbec8bf00e53bcaddc2b9ceb.JPG
人生初のカメラ付き携帯端末です。 仕事柄工場にカメラ付き携帯の持ち込み禁止なので、今まで持ってませんでした。 :-(

画面は小さく少し重いですが、skypeもできるし、(前面カメラ無いため将来のビデオ会話はできず) 防水、耐衝撃性など、自分の使用環境からすれば十分な内容です。
これから色々、勉強してゆこうと思います。

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