2010年02月23日

MEGA32U4

P板.com のキャンペーンに合わせて、急遽MEGA32U4ボードを作ることにした。以前作った mega88系ボードをベースに CPU だけ置き換えた。

基板は 20日コースだが、MEGA32U4が入手できるのはもっと先。デジキーのリードタイムは、4/25 になっている。

    追記: これは、2010年2月の記事。2011年 10月現在は、潤沢な在庫があり(在庫数量 20,939) 入手に問題はない。→ 商品ページ

    1 個 511 円。25 個 8,010 円(単価 320円)。

    国内では、スイッチサイエンスが扱っている。→ 商品ページ

    480 円 。送料は、180円。数個だけ入手したいなら、こちらの方が安くつく。


USB の制御は、いままで作ってきた AT90USB162 のものがほとんどそのまま使えるはず。エンドポイントの数が増えるのがとても嬉しい。

これで、いんちきをしなくとも CDC + マスストレージクラスのデバイスが作れる。

それ以外にも魅力は多い。

まず、ADC 。x10,x40,x200 の利得つき差動入力ができる。また、採取した値を USB でホストに送るのも問題ない。USB のバッファは 最大256 バイトと大きく、ダブルバッファも可能なので、13 us 毎に変換したとしても途切れなく送れそうだ。

ただし、差動入力ができる ADC のピンには制限がある。ADC0,1間 か ADC0,1 と ADC4-7 間のみ。

次に PLL 入力 の高速 PWM 。PLLは USB と兼用なので、USB を使う前提なら 48MHz or 96MHz(5V の場合のみ)で発振させる必要がある。これを 1/1 ,1/1.5 , 1/2 に分周したものをクロック入力にできる。

3.3V だとたぶん 32MHz/48Mhz あたりまで。運が良ければ 64MHz も使えるかも知れない。

それはともかく。Tiny45(8pin のやつ) とか Tiny861 とかで使えている機能が MEGA32U4 でも使えるわけだ。しかも 10bit が可能で 3ch分ある。サウンド用として使うのが楽しそうだ。

ちなみに、PLL の周波数は、32/40/48/56/64/72/80/88/96 MHz。 USB につながない用途も想定しているらしい。... ただ半端な周波数に出来たとして何に使えるのだろう?

さて、設計したボードについて





eagle データ: dac23-u4.zip

    更新版3: dac23-u4-05.zip
    Fusion PCB 提出用: dac23-u4-05-fusion.zip
    (スルーホールまでレジストしないよう修正)

    更新版2: dac23-u4-04.zip
    Fusion PCB 提出用: dac23-u4-04-out.zip



    (1) NOISE 端子を PF6 に接続できるよう修正 (追記参照)
    (2) 使っていない PF6/PF7/PC6 を CN5 に出すことにした。

    更新版1: dac23-u4-03.zip

    EzPCB 向けに (1) Pad - Wire 間のクリアランスを 0.2mm → 0.235mm に変更 (2) ポリンゴンの Isolate を 0.254mm に設定。
    ついでに 、(3) TAR5SB の放熱対応。

    更新版: dac23-u4-02.zip

    アニュアリングを 0.15mm から 0.2mm に変更。ついでに、dac23 とフィルタボードも更新して添付。

まず電源。3.3V のレギュレータ TAR5SB33を使って 3.3V 駆動にしようと思う。ついでに NOISE 端子を ジャンパで AREF につなげるようにしておく。

    AREF の デカップリングコンデンサは、0.01uF 〜 0.1uF 。0.1uF だと電源が立ち上がるのに 1m sec ぐらいかかる。.. が 水晶用に 立ち上げ時間を 最遅 の 65m sec にするので問題ない。

    ちなみに、入力用コンデンサは 10uF 。USB の VBUS 用は、10uF が良いらしい。MEGA32U4 のデータシートで強く推奨されてた。

3.3V だと 16MHz はオーバクロック。だが、たぶん大丈夫だろう。たとえ だめでも CLKPR で 1/2 して 8MHz にできるのだから問題ない。
ただ、PLL の 96MHz とか タイマー4 の 64MHz 駆動とかは怪しいかも。このあたりは、最初は 48MHz で。

5V にするのは簡単で、レギュレータをバイパスすれば良い。当然このときは NOISE を基準電圧にはできない。

問題は 外部に出す信号。DAC23 ボードに接続するのを前提にしているので、条件がある。




  • CONN1

    1 NC
    2 SDA PD1 (I2C マスタ)
    3 SCL PD0 (I2C マスタ)
    4 XCK PD5 (DAC BCLK)
    5 OC0A/OC1C PB7 (DAC LRCIN)
    6 TXD PD3 (DAC DIN)
    7 RXD PD2 (DAC DOUT)
    8 PD6
    9 OC4D PD7 (DAC MCLK)
    10 GND

    こんな割り当て。PORTD 中心だが綺麗にはならない。PB7 が入るのは、どうしても 違うタイマの PWM が使いたいから。

  • CONN2

    1 VCC
    2 GND
    3 NC
    4 OC4A PC7 (DAC PWM)
    5 (AREF)
    6 ADC5 PF5
    7 ADC4 PF4
    8 ADC1 PF1
    9 ADC0 PF0
    10 GND

    4 番は、サウンド出力用 PWM 。5 番は NC だが ジャンパで AREF を外に出せるようにしておく。6-9 番 の 4pin が ADC で、説明した条件があるので、ADC 0145 の選択。

  • CONN3

    1 MISO PB3
    2 SCK PB1
    3 MOSI PB2
    4 RESET/SS PB0
    5 GND

    ISP と SPI 。RESET/SS は、スライドSW で切り替え。

    いつも混乱するのだが、mega 系の SPI だと、SPIとして使う場合、MISO は 入力で、ISP では 出力。Tiny 系の USI では、入出力は切り替わらない。ISP に合わせて、この配置にしている。


    PIN 数が多いので、専用の割り当て。

  • CONN4

    1 GND
    2 VCC
    3 PB6 (OC1B / OC4B / ADC13)
    4 PB5 (OC1A / ~OC4B / ADC12)


    とりあえず I2C マスタ用の割り当て。だが、PWM とか ADC 機能も使えてしまう。

  • LED

    右 PB4
    左 PD4

    2色LED の SEC2004 シリーズ(pdf) 用のパターンにしている。秋月だと SEC2764Cが入手可能。1608 サイズで好きな組み合わせにしても良い。

    これ以外に SEC2002 シリーズとかもある。いつ買ったのか 手持ちに SEC2492C (橙・緑)があったりする。SEC2004 が指向性アリのタイプだそうだ。


パーツリスト

    R1,R2 22 (2012/1608) : USB用 (保証外だが 47 でも行けた)
    R4 33K (2012/1608) : HWB 用
    R5 3.3K (2012/1608) : HWB 用
    R6 4701K (2012/1608) : LED 左用 (SEC2764: 高輝度赤)
    R7 150470 (2012/1608) : LED 右用 (SEC2764: 黄)
    J1,J2 0 (2012/1608) : ジャンパ

    C1 10u (2012) : レギュレータ入力用 (VBUS 用)
    C2 10u (2012) : レギュレータ出力用
    C3,C4 18p (2012) : 水晶用
    C5 0.1u (2012) : AVCC パスコン
    C6 0.1u (2012) : AREF 用
    C7 1u (2012/1608) : VCC 出力用
    C8 1u (1608) :UCAP用
    C9 0.01u0.1u (2012) : レギュレータノイズ用


  • X1 FA238-16MHz
  • SW1 LS6J2M-T or TSKB-2JL
  • SW2 IS-2235
  • D1 SEC2764C
  • FUSE MICROSMD010
  • USB-MINI UX60A-MB-5ST
  • U1 TAR5SB33
  • ATmega32U4-AU リードタイム 4/25 @ digikey

ATmega32U4-AU とチップ抵抗・コンデンサ 以外は秋月で入手できる。まぁ CPU 載っけただけのボードだからある意味当然かも知れない。現時点でチップを入手できる所は、chip1stop のみ。

    結局デジキーで購入 - 2010/12/25 入手

    2011/1/6 追記: デジキーで現在在庫している。-- 在庫しているのを初めて見た。価格は 1 個 562円。(25個なら 単価 344.2円)

arduino 関係<のメモ


Teensy-2.0 という ATmega32U4 ボードがあるが、Teensyduino という Arduino IDE の アドオンを出している。

4月末に出る学研の Japaninoも基板のパターンを見る限り ATmega32U4 っぽい。少なくとも mega88 系ではないから、なんらかの アドオンを付けるのだろう。

Metaboard の 「Metaboard for Arduino Users」の項目を見ると、hardware/boards.txt を書き換えることで、カスタマイズができるっぽい。

ググってみると、Arduino Build Processなんてページがあった。ちゃんと見ていないが、ビルド と 書き込みのカスタマイズは比較的簡単そうだ。(ただし、ATmega32u4 などは使い込まれていないので、avr-libc にいろいろバグがありそう。Fix するのは少々面倒かも知れない。)

問題はライブラリ。ちゃんとしたものを用意するのは骨が折れそうだ。まぁ、Japanino が もし ATmega32u4 なら 乗っかれば良いわけで、あまり苦労しないのかも知れない。

... 基板が出来たら チップをすぐ入手したくなるわけだが、 Japanino が出るまで ゆっくり待つのが吉だと思える。

追記:基板ができて来た。




基板ができたのは良いのだが ... 肝心の ATmega32u4 の リードタイムが 04/24 から 06/12 に延びている。値段は 変わらず 473 円。Japanino も ATmega32u4 ではなくなったらしいし。うーん。

リードタイムがさらに延びている。なんと 8/29 。どういうこと?

追記: 2010/12/9

いつまでたっても在庫がない状況がずっと続いている。 今のリードタイムは 2011/1/23。

1 ヶ月以上先だが、90日までは待つという条件にして発注をかけた。これだけ入手で待たされるわけだから思い切って 25 個(単価 352.92 円 / 合計 8,823円)。これだけで 7500円以上 10000円未満の価格。

このボードがようやく作れることになる。

    12/22 予想外に早く発送された。それは良いのだが微妙な時期に届きそう。... と思っていたら 25日に届いてしまった。


追記: 2010/12/28 ボード製作完了。自作USBライブラリの移植中。



  • RC の値は 回路図とは違うものを使っている。

    • USB の 22 Ωは 手持ちの関係で 47 Ωを使った。
    • LED は SEC2764Cを使ったが、赤 1KΩ / 黄色 300Ω。(黄色が明るすぎ 470Ωにすべきか)
    • TAR5SB33の NOISE用コンデンサは 0.01uF ではなく 0.1uF を使用。
    • FUSE MICROSMD010 は結局使わず 。ショートでも問題ないが、TAR5SB33 の負荷を下げるために ダイオードにした。-- レギュレータの前に 数Ωの抵抗 と ダイオードを入れるような使い方は 割と一般的らしい。


  • 一応は動いたのだが、少々おかしい。USB で接続できないことが多い。ただし、接続できたらちゃんと動くようだ。ブートローダも動いた。

  • angel_loader-1.2a.zip (usb162/mega32u2 用のブートローダと ライタ のおまけ)

    いろいろ調べていて気がつたのだが、ATmega32u4RC ってのがあるらしい。USB のクロックは、±0.25% の精度が必要だが、内臓RC の設定で出荷される。

    ヒューズの初期値をマニュアルと比べてみた

      実際の値 無印 RC
    • efuse 0xf3 0xf3 0xfb
    • hfuse 0x99 0x99 0x99
    • lfuse 0x5e 0x5e 0x52
    • lockbits 0x2c 0xec(0x2c) 0xff(0x3f)

    • RC版には、ブートローダは入っていないようだ。たぶん USB は動かないのだろう。

      lockbits が違うと思ったが avrdude が 6bit しか表示しないためだった。 0x2c の意味は、外部からの FLASH, EEPROM の読み書きができず、 fusebit の書き換えもできない。SPM 命令を使っての ブートローダの書き換えも出来ない。

      atmel のブートローダは、lockbit のルールを守るようになっていて、ブートローダ自体も読めないようにしている。

      ブートローダのバックアップを取るには、自作ブートローダをアプリケーションとして動くようにすれば良いのだが、ちょっとだけ面倒。32u4 は、ブートローダが公開されているので消しても困らないのだが、公開されていない 32u2 で chip erase してしまうと元に戻せないので注意。


    それはともかく、32u4 は楽しいチップだ。USB の エンドポイントが多いのも嬉しいし、ADC や 高クロックPWM の機能があるのも良い。

追記: 電源関係のメモ
      32U4
    例1 例2
    VBUS 5V 5V USB VBUS 検出用
    UVCC 5V 5V 内蔵レギュレータ入力 (3.4V 以上)
    UCAP 内蔵レギュレータ出力 - USB D+/D- 駆動
    (VCC に出力不可)
    AVCC 5V 3.3V VCC と同じ電圧 (PLL駆動 を含む)
    VCC 5V 3.3V 4.5V 〜 5.5V (16MHz) / 3.0V 以上 (8MHz)

    内蔵レギュレータ: 80mA まで(4.0v 入力時) / 55mA まで (3.4V 入力時)

    電源がやたらあるが、こういう役目らしい。内蔵レギュレータ出力(UCAP)を VCC に接続できないのはデフォルト Off だから。UVCC を無接続にして、UCAP に 3.3V を給電しても良い。

        32U2/USB162 (参考)
    例1 例2
    UVCC 5V 5V 内蔵レギュレータ入力 (3.4V 以上)
    UCAP 内蔵レギュレータ出力 - USB D+/D- 駆動 + PLL駆動
    (VCC に出力可)
    VCC 5V 3.3V 4.5V 〜 5.5V (16MHz) / 3.0V 以上 (8MHz)

    内蔵レギュレータ: 100mA まで(4.0v 入力時)

    ATmega32U2/AT90USB162は結構シンプル。UCAP から VCC に給電可能。これはデフォルト ON。
    UVCC を無接続にして、UCAP に 3.3V を給電しても良いのは同じ。

    レギュレータの前に 数Ωの抵抗 と ダイオードを入れるような使い方は 中華フォトフレームを分解したとき学んだ。電圧をできるだけ落としておいた方が レギュレータの負荷を減らせ電流を流せる。今回は、Vf が大きく電圧降下自体を目的に買った 1SS352 をヒューズのところに入れてみた。ただ定格が 100mA で レギュレータの定格より小さいので本末転倒。4.7 Ω (1/4W) なら 200mA で 0.94V の電圧降下なので 都合が良いかも。


追記: AREF についてのメモ

    レギュレーターに NOISE 端子がある TAR5SB33 を使用しているが、J2 をジャンパすることで、NOISE 端子を AREF に接続できるようにしている。

    NOISE 端子には、TAR5SB33 内部基準電圧用のデカップリングコンデンサを接続するが、データシートの 容量と 立ち上がり時間の関係のグラフからみて 20KΩ前後の 出力インピーダンスのようだ。

      1uF を接続すると 立ち上がりに 70ms かかる。立ち上がりが 1% - 99% に要する時間だとすると、その時間は、
       (ln 0.99 - ln 0.01) x RC
      で計算でき、15K Ωという値になる。このような抵抗値だから、J2 には数百Ωまでの抵抗を使っても良い。

    一方 32u4 の AREF の入力インピーダンスは 32kΩだそうだ。大丈夫だとは思うのだが一回確認しておかないといけない。

    また、J2 をジャンパすると ADCの基準電圧の設定では、内部基準電圧や VCC を設定してはいけない。その場合 AREF は出力になる。そうしてしまうと TAR5SB33 の基準電圧が上がり VCC の電圧も上がってしまうはず。32u4 のVCC の電圧は 5V でも問題ないので、壊れるということはない。いったいどうなるのか、一度確認しておかないと。

    確認してみた:

    手持ちのテスターでは、J2 無接続時 NOISE 1.280V / VCC 3.260V だった。で、J2 を 470 Ωで接続してみた。あと内部基準電圧は、2.488V -- 多分実際より低めの値。1% 低いとみなして、x1.01 すると 1.293/3.293/2.513 。

    接続するだけなら問題はない。が ADC を enable にすると BOD リセットがかかるようだ。AREF の入力インピーダンスは やはりこの値で、NOISE の電圧が下がり、VCC の電圧も下がる。

    一方 内部基準電圧 2.56V を enable にすると VCC が 4.08V まで上がった。テスターなので分かるのは平均電圧のみ -- 発振しているかも知れない。

    結論としては、J2 は接続すべきではない。ただ NOISE 端子には一定の電圧が出ているので、AREF ではなく、ADC(入力インピーダンス 100MΩ) につなぎ 内部基準電圧を校正するのには使える。

    ボードを改修することにした:

    PF6/PF7 は無接続なのでこれを、J2 に来ている NOISE 端子につなぐ。なぜ 2 つも使うかというと、PIN の中央にケーブルをハンダ付けするのだ。プログラムでは PF6を使うが、PF7もデジタル入力禁止。

追記: 2011/1/2 ADC 使ってみた。

  • angel_loader-1.2b.zip (usb162/mega32u2 用のブートローダと ライタ のおまけ)

    serjtag も入れておいたのだが、そのおまけ機能で ADC を読み込む機能がある。これを 32u4 用に作り直した。

    テストプログラムも添付しておいた。

      $ adctest.exe
      ADC_RANGE_V256 | ADC_CHAN_VCC : 1.28992
      ADC_RANGE_V256 | ADC_CHAN_VCC : 1.28992
      ADC_RANGE_V256 | ADC_CHAN_VCC : 1.28992
      ADC_RANGE_V512 | ADC_CHAN_VCC : 1.28992
      ADC_RANGE_V512 | ADC_CHAN_VCC : 1.28992
      ADC_RANGE_V512 | ADC_CHAN_VCC : 1.28992
      ADC_RANGE_V256 | ADC_CHAN_TEMP : 0.54727
      ADC_RANGE_V256 | ADC_CHAN_TEMP : 0.67383
      ADC_RANGE_V256 | ADC_CHAN_TEMP : 0.67383

  • こんな出力。PF6につないだNOISE 端子で校正した値。VCC となっているのは、NOISE 端子の電圧表示だが、校正しているので、指定した値にそのものになっている。

  • TEMP は、内蔵温度センサ。データシートにも載っているが、1回目は無視すべき。2回目/3回目は値が同じ -- だが 実際何度を示しているのかよくわからない。

  • テストプログラムで シリアルを扱う部分は、avrdude から借用した。GPL なので応用する場合は要注意。

追記: 2011/1/3 angel_loader-1.2c

  • angel_loader-1.2c.zip (usb162/mega32u2/mega32u4 用のブートローダと ライタ のおまけ)

    USB の接続がうまくできるようになった。ブートローダと ライタの初期化で LEDの点灯のさせかたで、USB RESET がかかるのを分かるようにしてみているのだが、これでも 何回か RESET がかかっている。

    ところでこのボードは、DAC (dac23 ボート)と接続するのをメインに設計したのだが、後で これと接続できる XMEGA ボードも作った。(接続するのは、PDI とシリアル) ちょうど PDI のテスト中なので、接続して PDI のテストをこちらに移そうかと思っている。

    というわけで 1.2c の uspasp2 ライタの 設定を次のように変えた。

    • ISP : SS(PB0) /SCK(PB1) /MOSI(PB2) /MISO(PB3)
    • PDI : SDA(PD1) = PDI_DATA, SCL(PD0) = PDI_CLK), TX(PD3) = DIR(ロジアナデバッグ用)
    • TDI : 未サポート(RESET 出力を割り当てたくなかったので)



    これが現状の接続図。



    開発用に組んだところ、下のが XMEGA ボード(L28A3) で、PDI とシリアルが接続されている。その状態で ISP 用のケーブルを付けて 普通のAVR のライタにもなる。
posted by すz at 00:09| Comment(90) | TrackBack(0) | MEGA32U4