「電子工作な日々」カテゴリーアーカイブ

電子工作に関連するお話など・・

PCオーディオ(その1)

最近、自宅を離れ、渋谷に通って仕事をしていますがー、そこで支給されているPC、DELL製のそこそこ高速なヤツです。
※Corei7の2.8GHzとか

作業は共同作業なのですが、周りの雑音を聞きたく無い時は、イヤホンで音楽を聞きます、iPhoneから聞いても良いのですがー、気晴らしに観るYouTubeとかニコニコの動画はPCで観るので、差し直すのはメンドイしでPCで音楽も聞きたいのですがー、「音」が最悪ですー、DELLに限らず、メーカー製のPCでも、フロントパネルに出ているイヤホンジャック、かなり劣悪の品質と言わざるをえません、PCの電源ノイズがモロに乗っているし、長時間の視聴には耐え難いものがあります。

ならば、USBのオーディオインターフェースでヘッドホンアンプ付属の適当なやつをと思ったのですがー、安いやつは、チープな音しか出ないし、コンパクトで、高音質なやつは値段も高いと言う事で、色々考えているうちに、「自分で作ればいいんじゃね?」
と言う、いつものパターンに突入しましたww

丁度、秋月で、TI製のUSBオーディオインターフェース(PCM2704)を売りだしたので、1個買っていそいそと試作してみましたー

PCM2704は、ヘッドホンを鳴らす為のアンプも内蔵しており、このチップだけで、ヘッドホン出力が提供出来るものです、しかし、内蔵アンプは単一電源で動作する、簡易的な物で、音も期待するまでもなく、それなりの音しか出ませんし、出力も小さく、とても、自分が要求するようなレベルの物では無い事が直ぐに判りましたー
色々回路をいじっているうちに、誤配線をしてしまい、あっとゆーまに燃やして、お亡くなりになりましたー、半導体独特の燃えた匂いを嗅いだ時は、何ともいえない、気分です・・・・・・
※虚しいやら、ムカツクやら

PCM2704 試作
PCM2704 試作

※使える部品は再利用の為取り外している

最初は、1000円くらいで、そこそこ納得のいく音が出ればイイくらいに思ってましたがー、「自分のミスによる大きな損失」が次のやつを「ちゃんと」作るモチベーションに変わりましたー

そこで、ネットを探してみると、DAI(デジタルオーディオインターフェース)、D/Aコンバーターの製作例は多くて、みなさんハンパ無い投資をしている人もいますww
自分は、「まともな音」が聞ければ良いので、自分の考える範囲で、部品をセレクトして、発注してしまいました。

PCM2704(TEXAS INSTRUMENTS)
※USBからオーディオデータを取り出すのは、とりあえず、この石です、最大48KHz16ビットと最低限のものですがー、探しても、市販されているデバイスで、入手可能な物は、ほとんど無く、とりあえず、このデバイスで「良し」としました。
TENOR社にTE7022Lと言うデバイスがあり、96KHz/24Bits が可能なようですが、入手先を見つけられませんでした。
USBオーディオの標準デバイスとして、192KHz/24Bitsをサポートするのは、自分で組むしかなさそうです。(USB2.0をサポートした、デバイス
を備えた、マイクロプロセッサとFPGAが必要な感じです)

CS8416(CIRRUS LOGIC)
※PCM2704はアナログ出力の他に、S/PDIF信号も出力します、CS8416は、その信号をデコードして、D/Aコンバーターに必要なクロックと、データ信号を出力します、PLL回路や、オーバーサンプリングに必要なロジックも内蔵していて、最大192KHz、24ビットを扱え、外付け部品も少ない優れものです。
S/PDIF入力は、何系統かありますから、USB、光、COXIALなどを備えて切り替えが出来れば、D/Aコンバーター付きヘッドホンアンプとして使えます。

PCM1798(BURR-BROWN/TEXAS INSTRUMENTS)
※バーブラウン社は、デジタルオーディオ関係のデバイスの製造で有名な会社ですが、今はTIの傘下となっています。
このD/Aコンバーターは、192KHzのサンプリングで24ビット出力が可能な物です、ファミリーとして、さらに高性能なPCM1794と言う、最高ランクのD/Aがあり、マニアの間では、それを使うのが一般的のようですが、コストが倍以上しますし、PCM1794の性能を引き出すには、周辺回路にもかなりコストをかけないと、意味が無いので、今回は見送る事としました、データシートを読む限り、このデバイスでも、相当優れた性能を出せる事がわかります。

OPA2604(BURR-BROWN/TEXAS INSTRUMENTS)
このOP-AMPも、バーブラウン製です、高速、ローノイズ、低歪の高性能アンプです、スルーレートがなんと25V/usもあります。
秋月で300円ですが、それを調べる前にDigiKeyで370円で沢山買ってしまいました・・・(かなり痛いです・・)

TPA6120(TEXAS INSTRUMENTS)
ヘッドホンアンプは、まともな物を作ろうと思うと、意外と難しいです、色々と各社からICは出ていますが、どれもこれも、チープな物ばかりで、「本物」がありません、「ベスト」は、ディスクリートで組むべきでしょうが、スペースとコストを考えると、それも無理です、そんな時、見つけました、良さそうなのが・・
電流帰還型で超高速(1600V/us)、非常に大きなドライブ能力(低インピーダンス)、低ノイズ、オフセット電圧も小さく、+-両電源なので、カップリングコンデンサも必要ありません。
値段も600円程度と、まさに理想的。

これら部品と諸々で合計で5000円程度。

続く~

RX マイコンで ARM の牙城を切り崩せるか?

最近、秋月電子で最新のRXマイコンを取り扱うようになったー
※R5F56218BDFP(100pin)
※インターフェース5月号にも付録基板がついているが、数を作る事を考えた場合には、使えないので、デバイス単体で入手できるのはありがたい。
※Degi-Key でも扱いがあるようで、R5F56218BDFB(144pin)、1個1131円、25個だと951円と格安。

手始めに、非常に小規模なタイプR8C/11A,R8C/12A(AVRのATtiny2313クラス)、そして最近32ビットタイプである。
※R8C/11A,12A は、100円マイコンではあり、ATtiny2313より明らかに優れている部分も多い(A/Dコンバーターなど)ので、今後メインストリームで使いたいマイコンである。

自分は、6802からルネサスの前身である日立のマイコンを良く使ってきたー、6809、68000、H8、SH2、SH3など・・
※セガサターンでは、SH2が採用されていた事もあり、PSでは無くサターンに合わせてゲームも作った。
最後にまともなハードを作ったのは、80MHzのSH3基板を起こして組み込み機器に使ったのが最後であるけど、ルネサスに統合された後も、他メーカーのARMも色々使ったりして浮気はしたが、それでもやはり扱いやすさなどから好みのメーカーである。

しかし時代は替わる、もうほとんど全てがARM一色となり、全世界的にARMで統一されそうな気配なのである・・
マーケティングをサボり、消費者のニーズに答えてこなかったツケ、小回りの利く体制に出来なかった事が決めてとなり既にジリ貧感が否めない・・
※異論もあろうと思うが、自分にはそう見える。

RXマイコンは、比較的新しいアーキテクチャーである、三菱、日立、が関係を強調するルネサスにあって、各社のリソースを融合した結果生まれたこの新しいマイコンは、パフォーマンス、消費電力、コード効率など、特に組み込み系では非常に魅力的なものとなって登場してきた、価格も安く、性能も満足できる。
SHが好きな自分としては、多少複雑な気持ちなのだが、RXでは、非常に小さな規模から、かなり大きめな規模までを統一されたアーキテクトでカバーできる点が非常に正しいと感じる、リソースを集中できるし、サポートもやりやすい、いくらアーキテクトが優れていても、コストの関係でリソースを割けないと、疲弊してしまうだろう、その点、この「1本のラインで全てカバーできるかもしれない」と言う考え方は非常にシンプルで判り易く、使い手にとってもメリットが大きい。

以前の半導体では、(微細化が進んでいない時代)CISCよりシンプルな構造のRISCの方がメリットがあった、高速に動かす事が容易だったのだが、現在のように微細化が進み、複雑で大きな回路を作れるとRISC/CISCの違いはほとんどなく、CISCでも回路の工夫でいくらでも速度を出せるようになった、それゆえ、コード効率に優れるCISC系ならではのメリットを、小さなマイコンから大規模なマイコンまで反映できる、コンパイラもCISC系の方が効率を出しやすいと思う(まぁこの辺りは多少微妙ではあるけど・・)。

現状では、ARMが得意としている500MHz以上のメディアタブレット系のラインナップが無いが、そのうち出てくるだろう~、今から楽しみである。
※こちらは、デバイス単体よりIPコアが主流だろう・・

日本人だし、日本のメーカーに愛着もあるので、ルネサスさんには是非頑張って頂き、ARM の色を塗り替えるだけの力を魅せて欲しいと思う、アーキテクトが優れているのは疑いが無いのだから、自分も微力ながら応援したい~

------
とりあえず、最近秋月で販売が始まったRXマイコンを使ってみようと思い、SH7125で設計を進めていた部分をキャンセルして、RX6218に交換した、プログラムはSH用にかなり色々作ってきたのだが、ここは乗換どきと考え、リソースを捨てて開発し直す決意をした、また、仮に、少しくらいARMが安くても、現状のRXマイコンの戦略がぶれないのであれば、ARMに流れる必要もないだろう~

SH7125はデバイス単価900円、RX6218は1200円で300円高いが、能力の差があからさまに違う為、今後の事も考えて、切り替えた。
自分が感じた主な特徴は・・
・100MHz動作(165DMIPS)
・512KBバイトのFlashメモリー(100MHzノーウェイト、1000回書き換え)
・96キロバイトのRAM(100MHz動作)
・32ビット単精度浮動小数点演算
・高速割り込み
・当然ながらの豊富なインターフェース(インサーネット、USBなどなど)
・SDRAMインターフェース

こんだけあれば、当分、どんな仕様でも困らないだろうう~


↑この基板は、ブラシレスモーターの制御基板である。

開発環境はKPITからgccの環境を使える。
ルネサスの専用 C も、かなり良さそうなのだが、フリー版はコードサイズに制限があり、正規版を買うコストは払えないので、使えないのと一緒、初めから gcc で行う。
後、JTAGも欲しいとこだが、当面、コスト的に見合わないので、工夫して開発を進める事とする。
※開発したソフトウェアーなどは、オープンソースにする予定なので、興味ある人は利用してもらいたい。
※SH2AやSH7125、AVR関係で作ったリソースは公開済み。

後、痛い点として、まだ、低価格なデバイス付ボードが少ない点がある、デバイスが1200円なら、せめて3000円くらいのボードをリリースして欲しいと感じる、高専でロボットをやってる人もそのくらいの値段なら沢山使ってもらえると思う、ここで沢山使ってもらえれば、高専生が卒業して企業に移った時に威力を発揮できるしね。

電灯のLED化計画(その2)

先日は、LED の発熱に放熱器のキャパが足りないとこで、ペンディングだった、今日アルミなど買い足してきたので、いそいそと切ったり穴をあけたりして早速実験してみたー、今度は容量もかなり大きくなったので、温度上昇も抑えられ、問題無いようだ。
ただ、コストが、@+200円 くらいにはなる感じで、こんな事なら、最初から 250円 くらいで買える大きな放熱器を買えば良かった・・・(まぁ、250円で買える放熱器もそんなに大きいのは無いんだけど・・)

こういうのを「安物買いの銭失いと」と言う事もあるが、今回は50円の放熱器もちゃんと生かしているので、まぁいいか・・・


※2mm×40mmの板を180mm、10mmコノ字アングル90mm、4本

・2mm×40mm×2m → 1150円
・10mmコノ字アングル×2m → @420×2 840円
・工賃、ネジなど → プライスレス


※LED モジュールはネジと端子が当たって、ショートしそうなので、ジュラコンのスペーサーを間に入れておいた。

あと、9個同じもの作らなければ・・・
なんだか、すんごいめんどい・・・・・・・・・・・・・・・

電灯のLED化計画(その1)

以前から、電灯の LED 化をしようと思って、色々準備していたが、ある程度の明るさを実現する為には、かなりのコストがかかる・・、しかしようやくコストが下がり、実用的な値段で、電灯のフル LED 化が可能になりつつある。

現在入手できる白色 LED で、効率と光量が大きく、比較的コストが安い物は、「秋月電子」で売っている。
1Wクラスパワー LED(100ルーメン)
1個300円。
現在のとこ、1Wで100ルーメンが、目安のようだ・・

又、3個モジュールになっているLEDユニット(300ルーメン)
は、1個600円で、コストがさらに安い!

今回は、コストが一番安い3個モジュールになったタイプを10個使って、3000ルーメン(60W電球7個分)で製作する事にした。
※消費電力30W
※420ルーメンで60W電球並(東芝の LED 電球の説明)
※LED の光は拡散しない為、何かリフレクターを付ける必要があるので、光量が落ちる事を考慮して、大き目にしてある、又、LEDに流す電流を制御すればいくらでも、明るさを落とす事が出来るので調整は簡単だ!

パワー LED は明るいのだが、発熱も相当に大きい、最大光量(350mA)で点灯すると、かなり発熱するので放熱が必要なのだが、どのくらいの放熱器が必要か実験してみた。

↑やはり秋月で、丁度手頃な放熱器を安く売っていた(50円)ので、それに取り付け、温度を確認してみたが・・・
この体積では、30分くらいで、85度を超えてしまいそうなので、もっと表面積を大きくする必要があるようだ・・・

材料が無い為、今回はここまで・・・

-----

↑放熱器に穴を空け、3mmのタップを立てる~

9灯LEDライト

秋葉原の千石電商の関連ショップで、LED9灯のライトを安く売ってる(250円)、これは、単4、3本仕様で、コンパクトで、白色LEDライト9灯としては最安値なのではないだろうか?

実家で、ライトを探していたので、購入してみた。

どう考えても強引過ぎる、電池3本ダイレクト点灯は、LEDを痛めてしまい、3本が中途半端な本数で痛い!

以前にも改造したように、リニアテクノロジーLTC3490を使って、単4エネループ2本仕様に改造した。
2本仕様にして、ICによる定電流ドライブだと、安定した明るさを維持でき、エネループなので、充電して再利用もできるのは良いのだが、どうしても、電極を設ける必要がある。
今回は、「リン青銅」の板を買って、電極を作った、だいたいはOKだけど、完璧では無い・・・
たまに接触不良があり、振ったりすると点灯する・・・

ライトのケースはアルミ製で、アルマイト処理がされている為、電極の形状や、接触の仕方を研究する必要がありそうだ・・・

白色LED ランタン

ここ最近は、火力発電所の復活等で、計画停電実施が少なくなった為、使う場面が少なくなっているけど、今後は必要になる事もあろうって事で、自作してみた、白色 LED で痛いのは、光が拡散しない為、光量を上げると眩しくて、ユルイ光源を作りにくい点で、拡散する為のリフレクターも光量を最小限にして拡散するのは難しい・・

そこで、LED に流す電流を抑える代わりに、多くの LED を使ったランタン風 LED ライトを作ってみた。

LED には、以前に大量に買った5mm の砲弾型を36個使って、1個辺り10mA程度(全体で350mA)にしてみた、LED ドライバーには、リニアテクノロジーのLTC3490を使い、エネループ2本で駆動する。

一応、効果はイマイチだが、拡散リフレクターとして、ペットボトルを切って代用してみた。

まず、LED を等間隔に並べる為、5mm厚の低発泡塩ビ板(フォーレックス)に等間隔(10mm)で穴を空け、それに LED をセットして、端子を直接ハンダ付けした。

一つのセルに6個の LED を繋いでいる、それを6組作成。

次に3mm厚のフォーレックスを6角に切り、そこに「セル」を立て、支柱もフォーレックスで作成する。
※フォーレックスは以前にも紹介したが、それなりの強度があり軽く加工が簡単なので、最近は、何でもコレを使っている

ペットボトルから切り出した、拡散リフレクターをかぶせたとこ

光らせるとこんな感じ~

仕上げとして、ペットボトルを止める為のボスを作り、電池や制御回路が入るように底をかさ上げする。

まだ、電源SWなど付けていないが、最終形。

角を削って丸みを付けている、まだ、実験していないが、単三エネループ2本で最大輝度(350mA)で点灯した場合、連続で3時間は点灯する事が出来ると思う。

-----
一時期、電池が売り切れで、何処にも無くなったが、自分は「使い捨て」は「嫌い」なので、以前からエネループを沢山(沢山買うと安い)保持していた、エネループは自己放電も少なく、全体のコストは安く、容量も大きいので、かなりお勧めな充電池と言える、リモコンなどは消費電力が少なく、普通にアルカリ電池買った方が安いと言う人もいるが、ある程度沢山買うと、色々な物で共有でき、単価も下がるので、長い目で見ると、エネループに歩があると思う。
電灯などは、それなりに消費電力が大きいので、容量の大きい充電池にはピッタシのアプリケーションであると思う。

そのうち、太陽電池でエネループを充電するシステムでも作ってみたい。

R8CM/11A,R8CM/12A ライター

100円のマイコンと言えば、アトメルのAVRマイコン、ATtiny2313 が有名です、128バイトのデータメモリー、2キロバイトのプログラムメモリー、128バイトのEEPROM、最大20MHz動作(2.7V~5V)と、gccで開発出来て、非常にコストパフォーマンスに優れたマイコンです、ちょっとした制御ならこのデバイスで何とかなる為、非常に重宝してきました、ライターも非常に多くの書き込み機が存在し、手軽に買えるし、自作する事も出来ます。

最近、秋月電子通商で、ルネサスエレクトロニクスのR8C/M11A,R8C/M12Aがラインナップに追加されました、どちらも100円で、AVR が霞んでしまうほど素晴らしいスペックで、とても興味が湧きました~、それで早速2個づつ入手して、何か作ってみる事にしました。
※現状ではまだ情報が少ないようですね・・

まず、スペックですが、印象的に以下のような所が気に入りました。
・データメモリーが倍(2313では128バイトですが、256バイト使えます)
・フラッシュメモリーが2キロバイト(2313は128バイト)
・掛け算命令や積和演算命令を持っている
・14ピンと20ピン DIP タイプ(自作では、ちょっとした物を作る場合、非常に好都合)
・プログラムをシリアルインターフェースと簡単な回路だけで書き込める(ルネサスのFDTツールなど)
・gcc も使える(プログラム領域が2キロしか無い為、ルネサスの C も、実質制限無く使えると思います)
・2.7V~5.5Vで20MHz動作(1.8V~だと5MHz動作)
・書き換え回数10000回
・10ビットA/Dコンバーター内蔵
・豊富な機能(タイマー、割り込み、コンパレーターなどなど)
・内蔵発振機も使える
・省電力機能

今まで、ルネサス系で弱いと思っていた部分が殆ど改善されていて、ほぼスペック的には文句無しです、これなら、AVR(2313) で弱いと思っていた部分をカバー出来るのではと思います。

まず最初に用意するのは開発環境です、HEW 上、ルネサスの R8C 用コンパイラは、登録すればダウンロードでき、R8C 版はバイナリーサイズが 64K バイト以下なら、試用期間を過ぎても無償で使えるようです、自分は gcc が好きななので、KPIT の R8C 用 gcc ツールチェインをダウンロードしました(登録が必要)。

次にライターですが、シリアル入出力を接続して、モードピンを「L」にしてリセットすれば、専用アプリケーションで書き込みが出来るので、とても簡単です、参考回路はハードウェアーマニュアルに書いてあります。

とりあえず、FDT を使って認識するとこまで出来ました。

次はいよいよサンプルプログラム(多分 LED チカチカ)ですが、I/O 関係の定義ファイルが無い為、現在打ち込んでます(泣)
一応、どこかに誰かが作ってないか調べたけど無いようでした・・

SH7125 モニター改修などなど

・SH7125 関係、アーカイブにアセンブラソースが抜けていたので、再収集。
・SH7125 の Flash ROM 書き換え回数制限の問題で、RAM上でプログラムの動作確認を行う件、多少進展。

RAM 上にロードしたプログラムから、ROM 上の関数を呼ぶ場合に、ROM 上の実アドレスなどが必要なのだが、どのように解決するか、少し考えて、その仕組みを実装してみた。
リンク時に作成される「map」ファイルを sed(ストリームエディター)で加工して、シンボルとそれに対応するアドレスを取り出し、アセンブラソースコードを自動生成する。
※以前、会社勤めの時に HP の unix システムを使った事があるが・・、そこで sed の面白さと出会った、今まで随分お世話になっている、今でもそれは変わらず、テキストの加工、成形には重宝している、その為、ed や ex といった unix システムに標準であるラインエディターは今でも使えるし、emacs が使えない場合等に、使う事が多い。(逆に vi のキーバインドは知らないので使えない・・)

マップファイルには、アドレスとシンボルの対がリストされている。
0x00000000000025b0 sh7125_sci_getch

----- sed スクリプト start
/^$/d
/^ \./d
/0x/!d
/^ /!d
/[()]/d
/ _/d
/0x000000000/!d
s/0x000000000/0x0/
/vectors/d
/start/d
/main/d
/set_imask/d
/get_imask/d
s/^ *\(0x[0-9a-fA-F]*\) *\([a-zA-Z0-9_]*\)$/ .global _\2NNN_\2:NNN mov.w _\2_,r0NNN jmp @r0NNN nopNNN_\2_:NNN .word \1NNN/
/^ /d
s/NNN/\
/g
----- sed スクリプト end

↑の sed スクリプトで、以下のソースを生成。
※map ファイルで余分な行を除外してから成形して1行にまとめて、最後に改行を入れている。
※改行をマークする文字列として、「NNN」を使っているので、シンボルに「NNN」を含めると問題となる・・

.global _sh7125_sci_getch
_sh7125_sci_getch:
mov.w _sh7125_sci_getch_,r0
jmp @r0
nop
_sh7125_sci_getch_:
.word 0x000025b0

↑こんな感じに成形される~

ROM内の関数を呼ぶ場合には、このインターフェースクラスを通る事で、オーバーヘッドがあるが、まぁそれは利便性を考えると許容出来る範囲と思える。
RAM 上のプログラムでは、このアセンブラソースをアセンブルしてリンクする事で、そのままのシンボル名で呼び出せる。
※ROM 内関数のアドレスが32K(0x7fff)を超えたら、テーブルは32ビットで持つ必要があるので、このままでは不十分となる。
※関数にはRAM を使う必要もあるが、それは、0xffffbd00 から256バイトが使われている、自分のシステムで問題となるなら、リンカースクリプトを変更する必要がある。

このスクリプトなどソースコード一式は、ここに置いてある。

SH7125 簡易モニター

最近 SH7125 のボードを使う事になり、少しづつ進めていますが・・

最初の段階で、SH7125Fデバッグモニターを見つけて、使わせてもらっていました。
しかし、ある程度判ってくると、高機能なデバッグは必要無く、プログラムをダウンロードして実行出来るだけで十分です。
そこで、Sフォーマットのロードと、実行など機能を制限したモニターを作成してみました。

このモニターの特徴:
・ワークメモリーはスタックを入れても512バイト程度しか使っていない(RAMのお尻の0x200)
・通常のターミナルソフトで通信出来る為、環境に左右されない
・KPIT の SH gcc ツールチェインでコンパイルできる
・コマンドラインからプログラムを転送して実行できるなど(タイミングなどを考慮する必要がある)

ソフトウェアーを公開しますので、興味ある人はどうぞー

SH7125 簡易モニター

RAM 上で動作させるサンプル
↑RAM 上で動作させるサンプルです、参考にして下さい。

SH7125 モータードライバー試作に向けて・・・

ちょっと前からブラシレスモーターのドライバーを実験している、以前(何十年前)に大学時代マイクロマウスをやっていた頃、DCサーボモーターの制御回路を作った事があり(全てアナログ回路)その時の知識が未だに大体使えるが、三相モーターの制御はDCモーターより複雑で、ある程度の精度で、一定速度の運転をするくらいならそこそこ簡単だが、速度とトルクを高精度で、しかもデジタル制御するには、色々と新規に開拓する事も多い。
まぁ、とは言っても、昔のように1MHzで動く8ビットマイコン(6502)とかでやっていた頃とは雲泥の性能差があり、コストも安く、デバイスの入手も楽になった為、昔のような苦労は少ない。

今回の仕事、電動バイク用のコントローラーや電源管理など、全体のパッケージの開発依頼があり、開発費はもらえないが、趣味の延長とこれから色々応用も出来そうと思って勉強のつもりでとりかかった。

最初に、AVRで 簡単な実験を行って、ブラシレスモーターの「肝」を「触り」だけ実験してみた、とりあえず、回転する事は出来たので、本格的に汎用性のあるドライブ回路を実験する為、部品集めと試作回路など作り始めた。

↑ATTINY861 を使った実験回路、手持ちの貧相な部品で作った為、パワーMOS-FETが死んでしまい、もう使えない・・・


↑ラジコン飛行機用のブラシレスモーター、安いし実験には便利!
※クワッドローターのヘリコプターを作ろうと思って4個も購入したww

最初は専用コントローラーを使う事を考えて、部品を探したが、擬似的な正弦波による制御チップがほとんどで、「回すだけなら」出来るが本格的なベクトル制御には向かないものが殆どだった。
ATTINY861も、PWMが3チャネルあるとか、デッドタイムの設定が可能とか、PLLを使って高いPWM周波数が可能だとか、ブラシレスモーターを意識した構成なのだが、ちょっと物足りない、そこで、色々探したらSH7125が適格である事が判った、50MHzで動き(実質的には40MHz)積和演算も高速だし、三相モーターに必要なPWMの構成も出来る。
※以前に秋月で買っていたので、早速テストしてみる・・・

で、早速実験し始めたのだが・・・
※SH2は、以前にSH2Aのデータロガーで KPIT の gcc 環境を使っている為、これを利用すれば簡単と思っていたが、意外と手こずってる・・・

・フラッシュROMの書き換え回数が100回まで保障 ---> 少なすぎて、実用的では無い。

そこで、WEBをグルグルしてたら、デバッグ・モニターを公開しているサイトがあったので早速ダウンロードして、書き込み使ってみる。
RAM用にプログラムを作り、動かしてみるが思った通りに動かない・・・

・まず最初に引っかかったのが、「gccアセンブラ」
gccのオプションでSH2のタイプを指定しているが(-m2)これで指定しても、アセンブラレベルでは、SH2に無いニーモニックも普通にアセンブル出来てしまい(エラーが出ない)、結果、未定義命令で止まる・・・
これに気が付くまでに数時間かかった、上記のデバッガー、逆アセンブラで気が付いた。
mov.l r0,@r1+
↑この命令(ディストネーションのオートインクリメント)はSH2には無い・・・
mov.l r0,@r1
add #4,r1
にする事で回避、要は、gccの場合、アセンブラソースは極力使わないようにした方が無難なようだが、これは仕様では無くバグなのかもしれない・・・

次にはまったのは、デバッガーのバグ・・・
モトローラーのSフォーマットを食わせるのだが、ケツのデータがダウンロードされていない事が判明・・・
ホスト側のプログラム(objload.c)を見ると、Sフォーマットの最大アドレスを見つける部分に問題があるようで、そこを修正。

ついでに、逆アセンブラで、PC相対でデータを取得する部分、ワードアクセスでもロングでデータを持ってきているようなので、そこも修正、右に表示される取得データがワードアクセス命令でも正しく表示されるようになった。
※これらの修正は作者のゲストブックにコメントをしておいた。

次にタイマー割り込みを使う作ってみたが、思った通りに動作しない、とりあえず、ポーリングで動かしてみるが、全く駄目・・・
こんな簡単な部分で???
良く良くハードウェアーマニュアルを観ると・・・、初期状態では、クロックが供給されない設定のようだ・・・、これを設定、ポーリングでは動作するようになった、でも割り込みでは動作しない、割り込みを「許可」にした途端、何か別の割り込みが動いているようでそこで止まる・・・
現状ではここまで、まだまだ遠いなぁ・・・

なんでこんなとこでハマるのか・・・
まだまだ精進が必要だ・・・

------
最近、ARMの元気が良すぎる~
SHは昔から随分お世話になっている、SH3でボードを起こした事もある、それに純国産のRISCで、光っている部分も多いと思う、でもビジネスはとことんだらしない・・・、あれだけ良い部分を持っていてもARMの数の力に段々弱っている感じが観てとれる・・

開発環境もかなり弱い。
一応登録すればフリーなツールが入手出来るが(KPITのgcc)、何で登録制なのだろうか?
これでは厳密にはフリーでは無い、そしてgccもSH版はメンテナンスをしていないのではないのか・・、ルネサスはSH専用のコンパイラを外販しているが、価格が高く、オプティマイズの性能が良くても、使う気になれない(コスト比を考えると使えない)、gccとは桁違いに性能が良いようである、また、KPITのエクリプスにしろ統合環境ベースでプログラムを作ると、専用のランタイムライブラリーが勝手にリンクされてしまうし、コマンドラインでmakeとgcc、emacsで作りたいのに、それを阻害するしで、自分の好みの環境が提供されていない。
ARM だと、gccを使って幸せになれるツールチェインが沢山あるし、C++もboostも問題無く使える、しかし、SHではどうか?

そもそも、組み込み用で、gcc以外のコンパイラでまともにC++のソースコードをコンパイル出来る物はほんの一握りでしか無い事を考えると、一部のベンチマークで性能が良くても買う気にはなれないし、性能を出したければ、アセンブラで最適化すれば良いだけの話だと思える。
デバイスの値段もARMはもの凄く安くなっているし、種類も爆発的に多いし、こんな調子で、生き延びていけるのだろうかSH・・