Arduinoのコンパイラについて(本家との差分)

今までその構成上全く興味がなく手を出していなかったArduinoですが、ふとした事から使ってみる機会ができたので少々調べつつ使ってみることにしました。と言っても正規の品ではなく、中華の互換ボードです。それ故に素のMCUを半田付けしただけの基板だと思ってブートローダの書き込みとか色々と準備していたのですが、百聞は一見に如かずで使ってみたらブートローダは書き込み済みであっさりと動かす事ができてしまったので肩透かしを食らった感じです。

それはそうと、調べている時に分かった事なのですが、使用しているコンパイラ(avr-gcc)がATMEL(Microchip)から出ている物と異なる事が分かりました。Arduino自体がATmega168/328なので関係ない部分なのですが、以前ATtiny10の為に自前でコンパイルした経緯がある自分にとっては何とも言い難い差分だったので気になりました。本家の方はATtiny10に対応したコンパイラを出しているのです。GCC本家側に反映されていない部分なので仕方がないのかもしれませんが。

あぁ、それと、Arduinoに付属のavrdudeはlibusb0のみに対応です。libusb1には対応していません。まっ、ブートローダを直接書き込もうとしない限り気にしなくても良い部分ではありますが。

今更、Arduinoを使って何をするのかですが……、いきなり飽きてしまいました。どうしてやりましょう。

Arduino版 avr-gcc の対応MCU
Known MCU names:
avr1 avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1
avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 at90s1200
attiny11 attiny12 attiny15 attiny28 at90s2313 at90s2323 at90s2333
at90s2343 attiny22 attiny26 at90s4414 at90s4433 at90s4434 at90s8515
at90c8534 at90s8535 ata5272 attiny13 attiny13a attiny2313 attiny2313a
attiny24 attiny24a attiny4313 attiny44 attiny44a attiny84 attiny84a
attiny25 attiny45 attiny85 attiny261 attiny261a attiny461 attiny461a
attiny861 attiny861a attiny87 attiny43u attiny48 attiny88 attiny828
at86rf401 at43usb355 at76c711 atmega103 at43usb320 attiny167 at90usb82
at90usb162 ata5505 atmega8u2 atmega16u2 atmega32u2 attiny1634 atmega8
ata6289 atmega8a ata6285 ata6286 atmega48 atmega48a atmega48pa atmega48p
atmega88 atmega88a atmega88p atmega88pa atmega8515 atmega8535 atmega8hva
at90pwm1 at90pwm2 at90pwm2b at90pwm3 at90pwm3b at90pwm81 at90pwm161
ata5790 ata5795 atmega16 atmega16a atmega161 atmega162 atmega163
atmega164a atmega164p atmega164pa atmega165 atmega165a atmega165p
atmega165pa atmega168 atmega168a atmega168p atmega168pa atmega169
atmega169a atmega169p atmega169pa atmega32 atmega32a atmega323
atmega324a atmega324p atmega324pa atmega325 atmega325a atmega325p
atmega325pa atmega3250 atmega3250a atmega3250p atmega3250pa atmega328
atmega328p atmega329 atmega329a atmega329p atmega329pa atmega3290
atmega3290a atmega3290p atmega3290pa atmega406 atmega64rfr2
atmega644rfr2 atmega64 atmega64a atmega640 atmega644 atmega644a
atmega644p atmega644pa atmega645 atmega645a atmega645p atmega649
atmega649a atmega649p atmega6450 atmega6450a atmega6450p atmega6490
atmega6490a atmega6490p atmega64rfr2 atmega644rfr2 atmega16hva
atmega16hva2 atmega16hvb atmega16hvbrevb atmega32hvb atmega32hvbrevb
atmega64hve at90can32 at90can64 at90pwm161 at90pwm216 at90pwm316
atmega32c1 atmega64c1 atmega16m1 atmega32m1 atmega64m1 atmega16u4
atmega32u4 atmega32u6 at90usb646 at90usb647 at90scr100 at94k m3000
atmega128 atmega128a atmega1280 atmega1281 atmega1284 atmega1284p
atmega128rfa1 atmega128rfr2 atmega1284rfr2 at90can128 at90usb1286
at90usb1287 atmega2560 atmega2561 atmega256rfr2 atmega2564rfr2
atxmega16a4 atxmega16a4u atxmega16c4 atxmega16d4 atxmega32a4
atxmega32a4u atxmega32c4 atxmega32d4 atxmega32e5 atxmega16e5 atxmega8e5
atxmega32x1 atxmega64a3 atxmega64a3u atxmega64a4u atxmega64b1
atxmega64b3 atxmega64c3 atxmega64d3 atxmega64d4 atxmega64a1 atxmega64a1u
atxmega128a3 atxmega128a3u atxmega128b1 atxmega128b3 atxmega128c3
atxmega128d3 atxmega128d4 atxmega192a3 atxmega192a3u atxmega192c3
atxmega192d3 atxmega256a3 atxmega256a3u atxmega256a3b atxmega256a3bu
atxmega256c3 atxmega256d3 atxmega384c3 atxmega384d3 atxmega128a1
atxmega128a1u atxmega128a4u



本家の対応MCU
Known MCU names:
avr1 avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1
avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 avrtiny
at90s1200 attiny11 attiny12 attiny15 attiny28 at90s2313 at90s2323
at90s2333 at90s2343 attiny22 attiny26 at90s4414 at90s4433 at90s4434
at90s8515 at90c8534 at90s8535 ata5272 attiny13 attiny13a attiny2313
attiny2313a attiny24 attiny24a attiny4313 attiny44 attiny44a attiny84
attiny84a attiny25 attiny45 attiny85 attiny261 attiny261a attiny461
attiny461a attiny861 attiny861a attiny87 attiny43u attiny48 attiny88
attiny828 at86rf401 at43usb355 at76c711 atmega103 at43usb320 attiny167
at90usb82 at90usb162 ata5505 atmega8u2 atmega16u2 atmega32u2 attiny1634
atmega8 atmega8a ata6285 ata6286 ata6289 atmega48 atmega48a atmega48pa
atmega48p atmega88 atmega88a atmega88p atmega88pa atmega8515 atmega8535
atmega8hva at90pwm1 at90pwm2 at90pwm2b at90pwm3 at90pwm3b at90pwm81
at90pwm161 ata5790 ata5795 atmega16 atmega16a atmega161 atmega162
atmega163 atmega164a atmega164p atmega164pa atmega165 atmega165a
atmega165p atmega165pa atmega168 atmega168a atmega168p atmega168pa
atmega169 atmega169a atmega169p atmega169pa atmega32 atmega32a atmega323
atmega324a atmega324p atmega324pa atmega325 atmega325a atmega325p
atmega325pa atmega3250 atmega3250a atmega3250p atmega3250pa atmega328
atmega328p atmega329 atmega329a atmega329p atmega329pa atmega3290
atmega3290a atmega3290p atmega3290pa atmega406 atmega64rfr2
atmega644rfr2 atmega64 atmega64a atmega640 atmega644 atmega644a
atmega644p atmega644pa atmega645 atmega645a atmega645p atmega649
atmega649a atmega649p atmega6450 atmega6450a atmega6450p atmega6490
atmega6490a atmega6490p atmega64rfr2 atmega644rfr2 atmega16hva
atmega16hva2 atmega16hvb atmega16hvbrevb atmega32hvb atmega32hvbrevb
atmega64hve at90can32 at90can64 at90pwm161 at90pwm216 at90pwm316
atmega32c1 atmega64c1 atmega16m1 atmega32m1 atmega64m1 atmega16u4
atmega32u4 atmega32u6 at90usb646 at90usb647 at90scr100 at94k m3000
atmega128 atmega128a atmega1280 atmega1281 atmega1284 atmega1284p
atmega128rfa1 atmega128rfr2 atmega1284rfr2 at90can128 at90usb1286
at90usb1287 atmega2560 atmega2561 atmega256rfr2 atmega2564rfr2
atxmega16a4 atxmega16a4u atxmega16c4 atxmega16d4 atxmega32a4
atxmega32a4u atxmega32c4 atxmega32d4 atxmega32e5 atxmega16e5 atxmega8e5
atxmega32x1 atxmega64a3 atxmega64a3u atxmega64a4u atxmega64b1
atxmega64b3 atxmega64c3 atxmega64d3 atxmega64d4 atxmega64a1 atxmega64a1u
atxmega128a3 atxmega128a3u atxmega128b1 atxmega128b3 atxmega128c3
atxmega128d3 atxmega128d4 atxmega192a3 atxmega192a3u atxmega192c3
atxmega192d3 atxmega256a3 atxmega256a3u atxmega256a3b atxmega256a3bu
atxmega256c3 atxmega256d3 atxmega384c3 atxmega384d3 atxmega128a1
atxmega128a1u atxmega128a4u attiny4 attiny5 attiny9 attiny10 attiny20
attiny40

スポンサーサイト

低抵抗器測定用定電流発生機(100mA)

オーディオアンプを作成していると終段のエミッタ抵抗等で1Ω以下の物を使う機会があり、この抵抗を選別しようとしても持っているテスターでは計測できないという何とも言い難いモヤモヤ感がありました。計測するには四端子測定法を使えば良いというのは知っていたのですが、定電流源が必要で何となく後回しにしていたのを今回作成しました。

回路図はこちら。

constant_current_100ma_v4.png

手持ちのテスターで0.1~10Ωの範囲で0.001Ω単位で計測できる様にしたかったので100mAの定電流源です。5V電源を使用する事にして各定数を決めています。

C3とR5(とR7)でオペアンプの発振防止を形成。手持ちの関係でC3を1nFとしましたが、少し大きかったかな~と。でも信号を流すでもなく、電源が激しく動く訳でもないのでヨシとしました。R4はオペアンプの電圧→電流変換(ROHMのトランジスタのFAQの「■抵抗R1について」を参照)とQ1の発振防止とベース・エミッタ間電流の上限規制(CN1に抵抗付け忘れた時に100mA流そうとしちゃいます)で入れています。R7を10Ωにしたのは、そもそも1Ω以下が正確に測れないので作っている回路なのに1Ωの抵抗を使うなんて…ってなところからです。1%品にしてますが、一番重要な所なので一応選別はしています。

R6は測定範囲を0.1~10Ωとして5V電源を使用する事にしたので、Q1のトランジスタだけで余りの電力を消費させるのは可哀想…というか放熱の検討が必要になるので極力熱に強い部品(抵抗器)に分担してもらうように入れました。R2,R3,VR1で基準電圧を0.924~1.134Vの間で調整できるようにしています。VR1のオペアンプ側の端子をVR1の下側とショートさせているのはボリュームが万が一オープンになっても調整範囲内で被測定物に流れる電流が小さくなる方向に倒れる様にしました。C2は…おまじない……基準電圧の揺れ防止ですが、入れても入れなくてもというところでしょうか。

当初、トランジスタのベース・エミッタ間に並列に抵抗を入れようとしていたのですが、常にトランジスタをONにしている状態で使う目的なので、いらないと判断して取り除きました。

IMG_20170204_121048.jpg IMG_20170204_170135.jpg

回路が小規模なので、基板は秋月のDタイプのユニバーサル基板を使用しています。ケースはテイシン電機のTC-102(W55xD75xH20)がちょうど良いサイズだったので使いました。トランジスタは放熱するためにケースに取り付けています。

IMG_20170204_152507.jpg IMG_20170204_180809.jpg

R7の両端の電位差が1.0VになるようにVR1を調整して出来上がりです。
DCジャックとバナナジャックと基板がギリギリ収まってます。
電源SWは無し。使用する電源のコンセントが手元にあり、SWでON/OFFできるのでそれで代用します。

IMG_20170205_081941.jpg

試しにカラーコード表記で0.47Ω±5%の抵抗器を測定したところ、47.1mVとなったので 0.471Ω。ちゃんと100mA流れてるみたいです(厳密には少し少な目になっているハズですが)。

これで、1Ω以下の抵抗も選別できるようになったので、次のステップに移行できます。

tag : 計測

KiCadを使ってみた。

今まで、回路図エディタのBSch3Vが気に入っていたのでその延長でCADソフトは Minimal Board Editor(MBE) を使っていた。MBEって結構自由度が高くてすごくいい感じで使い続けているのだけど、トラ技でKiCadが取り上げられているのを見てお試しで使ってみようと思い基板を作ってみました。

KiCadの使い方はググればいっぱい出てくるのでそっちに任せて…。自分が作ったのは簡単すぎず難しすぎず、実用性のある物として USB-UART 変換基板を作成することにしました。

6年前に秋月のキットとレベル変換ICを使って作った物をオリジナル基板にしただけなんですけどね。常々もう2つないし1つ欲しいと思っていたのでこれが最適かなと。

回路図はこんな感じです。

usb_uart_circuit_diagram.png

前回作成したのでは必ずリファレンス電圧を相手からもらう設計だったけど、5V, 3.3Vだけは自前で供給できるようにしました。その他の電圧の場合は相手からもらうということで。この改良をしたかったのも目的の1つだった訳です。

KiCadって結構MBEに似た思想と思える部分が多く少し好感触。いつの間にか手配線ですましてしまって自動配線機能を使わずじまいになってしもたです。この点は次の機会に使ってみることにする。

まー、初めて使うCADソフトで不慣れだったのと注意力が欠けていて2点やってしまいました。それは、mini-USBコネクタのパッドをリフロー用と思われる物を使ってしまって手はんだがやりずらくなった事と、隣り合う部品の番号を逆に配置してしまった事です(パターンは会っててシルクが間違っている)。

usb_mini_b.png usb_uart_cg_c9.png

基板発注はこれまた初めてのELECROW。いつもはFusionPCBだったけどなんとなく変えてみた。ELECROWで一番驚いたのは基板が出来上がって発送するときにできた基板の写真を送ってきた事。作成までちゃんとやったから後は配送業者の責任だよ的な意味合いなのかな?

基板が到着して、早速3枚作ってみました…本当は4枚だったのだけど、やはりmini-USBコネクタのところのはんだ付けが難しく、1枚失敗しちゃったんですね orz

動作確認もしてイッチョアガリ!

IMG_20160724_182215.jpg

tag : KiCad

OpenOCD MB9BF121対応版

久しぶりのblog更新となります。なんか、制欲(制作意欲)が湧かなくてアニメを見たり、小説を読んだりとフラフラとしておりました。

ずいぶん前になりますが、Cypress(Spansion)からFM3の32pinパッケージ品が出ていました。一般に手に入るようになったのは昨年末くらいだったでしょうか(Digi-Key)。少ピン品が欲しかったのでサクッと買ってしまったのが冒険の始まりに……まっ、いつものOpenOCDへ対応させる事になってしまったのです。

MB9BF121は少ピンになったので、JTAGではなくSWDで繋ぐ必要があります。OpenOCDではFDTIを使ったドングルでSWD接続できるようになったので、JTAGkey cloneで試してみました。JTAGkeyのコネクタ変換基板とMB9BF121の変換基板を作成しています。

RIMG0631.jpg RIMG0630.jpg
RIMG0629.jpg

MB9BF121に搭載されているFlashは今までのと書き込みシーケンスが異なっていたのと、CRトリミングデータが消されてしまう現象(仕様)となっていたのでチョイ変どころではない変更になってしまいました。

mb9bf121_flash_size.png

MB9BF121のFlashは上図の様に1セクタ=8Kbyteです。4byte毎にセクタが入れ替わるというヘンテコな仕様では無くなってます。また、最終セクタ(SA7)が4byte分少ないです。この4byteはというと…CRトリミングデータ用の領域に使われちゃってるんですね。それも、SA7をセクタイレースしたり、FlashをチップイレースするとCRトリミングデータも消えてくれるというステキな仕様です。なのでこのケースではイレース前にCRトリミングデータを読み出し、イレース後に書き込む処理を追加しました。

Flashへのデータ書き込みのシーケンスが大幅に変わったのでこれにも対応しました。FM3、FM4、FM0+シリーズは全てFlash書き込み時は2byteアクセスする必要があり、OpenOCDからは直接2byteアクセスが出来ない(1byteアクセスを2回行う)仕様なので、従来からFlash書き込みシーケンスはアドレス依存しないように記載したソースコードから機械語を生成してRAMに展開して書き込んでいるのですよね。なので今回同様に対応しました。この時、FM4対応で入った方法を参考にインプリしています。

これらの対応で、OpenOCDからの書き込みではCRトリミングデータを消すことなしにFlashへプログラムを書き込む事ができます。

openocd_mb9bf121_fll_write_cr.png

対応したOpenOCDとMB9BF121のプロトタイプは【物置】に置きました。
これでようやくスタートラインに立つことが出来ました。

tag : OpenOCD

トランジスタ式ミニワッターPart4 (その5)

前回測定時に電源ノイズが多量に含まれている事が起因して出力に影響が出ている事が分かりました。そこでスイッチング電源のノイズを取り除く方法を色々と試したのですが、なかなか良い結果が出ず、また、回路が複雑になって今のケースには入らなくなるので根本から変える事にしました。スイッチング電源を違う品にするという以前もやったような事です。

今まで使ってたスイッチング電源は秋月のGF18-US1512-Tです。本アンプに繋いで電源を入れた状態での電源の出力(左)とインダクタ直後の波形(右)です。これを見るとインダクタが仕事をしていないように見えます。

SCRN0028.png SCRN0029.png

次に新たに購入した電源、秋月のNP12-US1508です。電源の出力(左)とインダクタ直後の波形(右)です。この電源だとスパイクノイズの出方がその名の通りスパイク状で出現する間隔も一定(10μs)です。インダクタの効果は…少しあるでしょうか? こうなってくるとインダクタの性能が気になります……が、選ぶとしてどういった所に注目して購入すればいいのか分からない(理解していない)のでこの点に関しては保留にしておきます。使っているのはサガミエレクのパワーインダクター 7313NC-331K-RA です。電圧降下はあるので短絡はしてないと思います。

SCRN0031.png SCRN0030.png

後者電源(NP12-US1508)を使った時の特性を計測したところ、安定化電源を使用した時と遜色無い特性を示していたのと、視聴しても差が分からなかったので後者スイッチング電源で良いかな、としました。

smw4_cross_talk_sw2.png  smw4_distortion_sw2.png

出てくる音ですが、素直です。Part3より全段差動PP寄りだけどどちらにも無い傾向もあり、最初聞いたときは困惑しましたが、聞き込んでいるとこれはこれで有りだなと思わせる音色です。あわよくば、全般的にもう少し厚みが欲しい所ですが、そこまで言うとミニワッターの領域を超えてしまうかと思います。初めてbass boostを付けましたが、こっちは自分には合いませんでした。使用しているスピーカとかにも依存するのだと思います。実使用者(妻)が低音重視なので、好むのかもです。何事もなく、嫁入りできるかな?

tag : TRminiWatterPart4

tag : ぺるけ

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
02 | 2017/03 | 03
- - - 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 -
最新記事
最新コメント
カテゴリ
ユーザタグ

RaspberryPi ぺるけ Linux TRminiWatterPart4 トランジスタ式ミニワッター MPD イーサネットコンバータ OpenOCD DAC FON2405E buildroot FM3ペリフェラル BeagleBoneBlack library FM3評価ボード ODROID-U2 mingw OpenGL TL-WR700N Edison bitbake KiCad VMware シングル FM4 ミニワッター 6N6P 計測 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter