スキップしてメイン コンテンツに移動

投稿

ラベル(PIC)が付いた投稿を表示しています

PIC32MZ基板

 趣味用にPIC32MZ 144ピンパッケージの試作基板を起こした。 最近は秋月でも石単体で取り扱いがある。  最安値のPCB製造サービスをつかうため、5x5cm 2層基板で作成。 送料含めて8ドルくらいで届く。  残念ながら回路図上で、10箇所のうちの4箇所、VCCとVSSを逆配線してしまった。 逆接箇所は足元のパターンにカプトンを張って絶縁し、外周配置のパスコンを起点に0.1mmのUEWで交差接続してリワークしている。  回路図シンボルの端子配置を実体と同じ配置にするときは、VDDとVSSの取り違えに注意しないといけない。  こうしてチェックリストが更新され、趣味基板上のミスも減っていく(はず) 仕様 ・実装クロック 24MHz(OSC)、32.768kHz(OSC) ・6ch UART(うち1chはRS422ドライバに接続) ・RS422ドライバ(EN制御可) ・内部SPI (microSD, SPI-FRAM) ・内部I2C (MPU-9250) ・外部I2C,SPIポート(オンボードとは独立したポート) ・USB-host ・CANドライバIC x 1ch ・UART1ch(3.3V)、USB5Vで電源制御(バススイッチx2) ・16ビットパラレル入力(PMP) ・ADC8ch以上、GPIO(SH 20p)、PWM 6ch ・Vref: 2048mV 外付け ・LED x2  大半のバスはPPS上の割当なので、MPLAB Harmony上で予め設定している。 2層でGNDプレーンをあるていど確保するため、パッケージのポート配置に逆らわず、最短でコネクタに逃がす。 SHやGHなどをそれなりにカシメられるクリンプ工具(PAD-11)を導入してあるので、ハーネス自体は作り放題。 セカンダリオシレータ(32.768kHz)の低速クロックまでXTじゃなくてOSCにしたのは、現行リビジョンのエラッタ回避のため。 それほど大きさも変わらなくて消費電流もμAレベルなので、容量の調整の手間を考えるとこれで良いかもしれない。  ピン数の多いパッケージなので、たくさんのバスを引き出す設定にできて楽だった。 ピンが少ないと、PPSの設定...

PIC32ブレイクアウト#2

以前試作したPIC32MM用ボードの修正板を実装してみた。 ・SOSC用に32.768kHzの水晶をシリンダタイプに変更。 ・ICSP端子を追加 ・コンデンサの外形見直し。(10μFを1608へ) ・32MX1xxに対応。(2xxだとICSP端子のデータ、クロック線が使えないけど使うことはできる。) PIC32MM 32MX1xx  ピンヘッダつけてしまうと意外とめんどくさいので、いつか端面スルーホール処理にしてみたい。  プロジェクトファイル置き場 https://github.com/kentN/PIC32-28P-Breakout

新PIC32(2017)

PIC32MZを久しぶりに触っている。 2015年にFPUが追加された第二世代のEFシリーズが登場した。(初期に登場したECシリーズはエラッタのせいか、ひっそりとNRNDとなっていた) 2014年に買った100pのプラグイン基板(PIM)をEFのチップに換装し、Chipkit CoreをインストールしたArduino環境上で試してみた。  32MZ EFが積まれたボードは、DigilentからChipkit Wi-FIREとして販売されている。 http://store.digilentinc.com/chipkit-wi-fire-wifi-enabled-mz-microcontroller-board/  32MXを置き換えるという観点で見ると、 ・下位構成ではROM512k/RAM128kも選択できて、チップ単体で1000円前後から入手可能になっている。 ・最大で144ピンのパッケージが選択できる。 ・12bit 18MSPSのADCを内蔵 ・倍精度にも対応したFPU ・ピンアサインは互換性なし DSPの仕様的には、ARMのCortex-M7クラスの仕様になる。小ロット入手だと単価は32MXとほとんど変わらない。  手軽さだけなら最近はRaspiに流れてしまうんだろうけれど、カスタムボードでも、HALとAPIの選択肢が増えてきたのもあって、いろいろな情報が得られるのでとっつきやすくなった。  多ピンをコンフィグする場合、予めMPLAB Harmony Configurator上でバスの機能ピンの割り当てを検討できるようになり、PPSピンの機能マトリクスを並べてにらめっこしていた頃と比べるとだいぶ検討が楽になった。 最大のパッケージで、UARTx6, I2Cx2, SPIx2 OC(PWM)x6,CAN, ADC (の一部) , 16bitパラレルx1を引き出してみた。 PIC32MXのほうは、従来のPPS対応の1XX, 2XXシリーズのラインナップが再び拡張され、64/100ピンファミリーが追加されていた。 最大でRAM64k、ROM512kで、第一世代とピン互換がある。シリアルバスなどのペリフェラルも増やされていて、PPS化で実質使えるバス数が増えている。クロ...

PIC32MMGPLを試す

追記 後発のGPMシリーズが発表された。上位互換になっていて、DMA,I2Cなどが追加されている。  https://www.microchip.com/design-centers/32-bit/architecture/pic32mm-family PIC32MM0064GPL028を入手してみた。 32ビットシリーズとしては、アナログが強化され、独立した周辺モジュールが多数実装されていて、低消費電力設計になっている。 ラインナップが省ピン構成のみなのと、低価格なところはとっつきやすくて良さそう。 (エラッタリストも少なめ)  ROM/RAMの容量が控えめだが、CPUコアはmicroAptiv M14k UCコア(FPUなし)を搭載し、命令セットがmicroMIPSになった。 一応メモリ消費は抑えられている模様。 M14kコアなので、製造プロセスはMZと同じなのかな・・・? 足回りはアナログが強化された8ビットシリーズに似ている。 モーター制御向けの波形生成回路、プログラマブルロジックセル(CLC)や、12ビットADCが内蔵された。  その他、FlashがECC対応だったり、個別にUDID(ユニークデバイスID)を持っていたりと、スマート機器や産業向けの機能が盛り込まれている。 個人的に、HLVDというプログラマブルな電圧検出モジュールが気になっている。 18Fシリーズなどから搭載されていた機能で、バッテリの等の非安定化電圧のスレッショルド検知にADCを使わずに済む様子。  早速、SSOP28なものをサンプル購入したので、下駄基板を設計してelecrowに発注した。 プロトタイプ用なので、最小限の電源まわりの実装と、水晶発振子のパターンを実装した。 書き込み出来ないんだぜこれ  基板はきれいに仕上がったけれど、MCLR端子を外に引き出し忘れるという重大な設計ミスが発覚。  仕事疲れでMPが減っているときに趣味設計に走る場合、根本設計のポカミスに注意が必要だ((泣)。 とはいえ小規模試作にしか使わないので、UEWを一本延ばす必要が生じるだけではある・・・。 早速MPLAB Code Configurator(MCC)でピン設定を行い、レジスタをセットしてみた...

RetroBSDを試す

RetroBSDというプロジェクトがある。   http://retrobsd.org/wiki/doku.php 2.11BSDの組み込みマイコン向けの移植版で、MMUをもたないマイコンで動作させることが可能だ。 現在のところ、PIC32MXをサポートしている。 環境構築については、Ubuntu上でプロジェクトファイルをビルドすることができる。 カーネルはPIC32MXに焼くHEXファイルとなる。 ボードが幾つか登録されていて、使うボードに応じて基本的なコンフィグを設定する。 あと、SDカード用のイメージがある。 SDカードにはファイルシステムが入る。 自作ボードではLEDやSDカードのピン配置が異なるので、記法に従って、MAX32のカーネルコンフィグを修正してビルドしてみた。 カーネルは、ボードのブートローダーを利用して焼くことができる。 Windows上だと、コマンドラインから付属するpic32progで書き込むことになる。 オプションによってはブートローダーを経由せず、PICKIT2などを使って直接焼くことも可能だった。 ログイン画面 電源投入から数秒間待つと、ブートメッセージのあとで、おなじみのログイン画面が出て来る。 UNIXなので、Cコンパイラまで搭載している。 実際にDhrystoneのベンチマークもサンプルに入っていて、ビルドして実行することができた。 80MHzで Dhrystoneをビルドして実行した結果 binの中身 TCP/IPまわりは有効化してないので動作しないものもある デバイスドライバを掘り下げるのは又の機会ということで、カーネルの設定で遊んでみた。 デフォルトではPIC32MXの最大周波数の80MHzで動作する。 30MHzに下げたカーネルをビルドして動作させると、処理中に50mA アイドル時24mAという消費電流になった。  最大周波数と比べればもちろん動作はもっさりしてくるけど、UNIX機としては160mW程度と、かなり省電力だ。 最近では、LiteBSDというプロジェクトも出てきた。 MMUを搭載するPIC32MZ上で、4.4BSDを実行する。  32MZはエラッタにビビってまだ使えてないけれど、時間があったら動かしてみ...

PIC32MXでIrDA送受信の実験

Bluetoothが流行る前といえば、機器間通信は赤外線だった。 そろそろ赤外線でアドレス交換したことの無い世代が増えつつあるのかな・・・ さて、16/32bitなPICのUARTには、IrDA SIR規格のエンコード/デコード機能がある。 IrDA規格のトランシーバーをつなぐだけで、最高115.2kbpsの赤外線通信ができる。 以下は、プロトコルスタックに触れる前に嵌った点についての記録。 なおIrCommについては、Microchip社からアプリケーションノートとプロトコルスタックのサンプルプロジェクトが入手できる。 機能自体は、UARTのポート初期化時に、UART Modeレジスタのbit12を設定するだけで有効化できて簡単。  今回は、PIC32MXのArduinoAPI互換環境であるMPIDEのコアライブラリを少し改造し、ハードウェアUARTの初期化ルーチンでIrDAのbitを有効化してみた。  PIC32MX250F128BのUART/IrDA 115200bps 画像は、UARTの時とIrDAのTX波形を観測してみたところ。 IrDA規格では、ボーレートの16倍のクロックを基準に3クロック幅のパルスが使用される。 115.2kの場合、パルス幅は1.63usとなる。 エラッタ? 実際は、一部の機種で受信ができなかったため、だいぶ嵌っていた。  PIC32MXにはリリース時期によって2種類の周辺バスがある。 初期のピン機能固定のシリーズ、後発でPPS(ペリフェラルピンセレクト)に対応したもの。 両者ではエラッタリストの内容がだいぶ違う。  初期のシリーズのエラッタシートを読むと、IrDAについて不穏な記述があった。 よく読むと規格のパルス幅の最小値では受信できないらしい。それだけならボーレートを変えれば特に問題はなさそうだが・・・。 当初、PIC32MX340Fで実験していたが、送信はできても、受信ができなかった。 2つあるUARTポートを交換しても、 MPLABXでIrCommのサンプルをいじっても、IrDAモードで沈黙する。 後発のPIC32MX250F128Bだと問題なく信号をやり取りできるのに・・・。 ところが、初期シリーズの最上位...

MPLAB Code Configuratorを試す

PICのConfigビットの設定や、モジュールの設定はなかなか大変です。 データシートを確認したり、クロックからタイマー周期やPWM周波数、ボーレートを計算したり… MPLAB Xのプラグインとして最近リリースされた MPLAB Code Configurator(MC2) は、こうした設定をGUIで行えて、自動生成してくれるということで、試してみました。 すべての情報やドキュメントは以下から入手できます。 MPLAB ®   Code Configurator Plugin http://www.microchip.com/pagehandler/en_us/devtools/code_configurator/home.html ・MPLABのプラグイン(IDE/Toolメニューからインストールできる) ・対応している型番は今のところ8bit拡張ミッドレンジのみ 今回は、以前PIC12F1822で作った、DSM(DataSignalModulator)を使ったブザーの応用で、PIC16F1827を使ってAFSK波形を出力してみました。 使用環境  MPLAB X v2.00  XC8 v1.30 とりあえず設定してみた画面です。 最初はProject Resources欄にオシレータとConfigビット設定のSystem欄しかないので、真ん中のDevice Resources欄から使うモジュールをどんどん追加していきます。 それぞれのモジュールを選択すると真ん中のウインドウで設定ができます。 PSoCのIDEのような感じに… DSMはデータ信号とキャリアー信号を外部のピン/モジュールから供給するので、色々なモジュールを同時に設定することになります。 MC2のGUIでだいぶ楽ができます。 FSK信号を作るために、2つのキャリアー信号を使って0と1を表現します。アマチュア無線の場合、AFSKは1200Hz、2200Hzが使われているので、今回はPWMで生成しました。 1827はCCPが4つあるので1822と違って問題なく設定できます。 数値を設定するとすぐに出力周波数が計算されるので、目的の周波数を生成するのは簡単です。  今回のデータ源はE...

新PIC32

 PIC32MZという新製品が出ています。 (製品出荷は14年春頃のようですが)  MIPSコアが M4K からM14kになり、200MHz動作で330DMIPSとあります。 個人的に最近MIPSアーキテクチャに興味があるので、ヘネパタ本読もうと思って色々な文献を漁っていました。 ここ10年で世の中はすっかりARMになってしまいましたが…。    コアにはL1キャッシュが内蔵され、DSPなどが統合されています。周辺回路もUSB2.0ハイスピード対応や、12bit 28MspsのADC、高速FlashメモリIFなどなど。IoT向けに暗号エンジン内蔵モデルもラインナップされています。  てんこ盛りな割に、PIC32MZは64/100/144ピンQFPパッケージ(ただし0.4mmピッチ)が用意されていて、ギリギリ手付けも可能というのがDIY寄りで面白そうな点です。 データシートのDC特性の欄を読むと、L1キャッシュが消費電力の20%を占めていることがわかったりします。(デフォルトではキャッシュ無効) 年末発注してあったPIMを入手したので早速試してみました。クロック源はクリスタルではなく、24MHzのOSC(MEMS?)が実装されていました。 サンプルプロジェクトは、microchipのPIC32用 Harmonyフレームワーク(β版)をインストールして、exampleを元に試しています。  クロックの設定は資料のConfiguration-Bit Settingsを参考にしています。   LチカついでにGPIOの速度を見てみようと思い、何MHzでHigh/Lowできるか確かめてみたところ、20MHz出ているのをロジアナで確認しました。  FreeRTOSの導入まではフレームワークのサンプルをECH100用に修正して動作確認できています。 ROM領域は広い これだけRAMがあると、なんでも出来そうですね。 なおエラッタリストを眺めると手元のA3リビジョンは目玉となる機能の幾つかが使用不能だったり、I2Cがややこしいことになっていたり、スリープモードが怪しかったりするので注意が必要です。  半年気付かなかったのですが、PIC32MXも新しいデバイスが追加されてます。 3XX,4XXシリーズに新製品が追加されて...

Chipkit DP32(クローン)を試す

Chipkit DP32 ArduinoAPI互換(0023)で、PIC32MXをベースとするChipkitシリーズのラインナップが増え、新たにDIPタイプが加わった。 Digilentのページ  http://digilentinc.com/Products/Detail.cfm?NavPath=2,892,1174&Prod=CHIPKIT-DP32 中身はPIC32MX250F128Bで、USB内蔵タイプとなる。DIPながらRAM32kB/ROM128kB、USB対応なので若干I/Oは少なめ。 ブートローダー書き込み済みのDIP単体の販売もあるようだ。 ブレッドボードで周辺回路をつくる方法も解説ページが用意されていて、DIY寄りの情報がまとめられている。 http://chipkit.net/diy-chipkit-board/   肝心のボードの提供はもうすこし先みたいだけれど、Digirentの製品ページ下部にブートローダーを含んだプロジェクトファイルが提供されている。 これを手元にあった素のPIC32MX250F128Bに焼いて、一足先に試してみた。  写真のボードは、Pinguinoを試した時に作ったもの。その時はUSB認識がうまく行かず、以来積み基板の仲間入りをしていた。  ハードウェア的には、(PIC32MXの周辺回路)、8MHzの水晶発振子、USBコネクタ、3.3Vのレギュレータ、(リセットボタン)とプログラムボタンが最低限必要。 手順 MPIDEは下記より最新バージョンをダウンロードする。 http://chipkit.net/started/ hexはPICkit3をつかい、MPLAB Xで書き込む。 プロジェクトウィザードでは、既存のバイナリを焼くためのプロジェクト新規作成する。  プログラムの書き込みは、システムのリセットボタンとプログラムボタンの2つを使う。 リセット押し→プログラム押し→リセット離し→プログラム離し、の順で押すとブートローダーが書き込み待機に入るので、IDEからスケッチを書き込む。 プログラムボタンを押しながらUSB接続することで、ブートローダーモードに入ることができる...

Chipkit

Arduino API互換のPIC32ボード ChipKit Uno32 DigiKeyで部品注文ついでに取り寄せてみたもの。 (DigiKeyでもArduinoシリーズを買えたりするんだなあ) Chipkit本家 ボードとしては、Uno32の後継なのか、RAM2倍、ROM4倍の uC32 というのが出ているので、今後はそっち買ったほうがよさそう。(チップだけ一緒に注文してたりする…)  IDEもArduinoと同じインターフェースとなっていて、サンプルコードレベルではまったく差異を感じない。  ライブラリレベルだとどうなのかは調査中。  IDEのBoards.txtを見てみると、80MHzで動かしているようだ。 拡張ピンも使えるシールドを基板で起こしたいなあ。 PIC32MXはアマチュア衛星に搭載されてる実績があるのでとても興味を持っている。

ソーラー目覚ましキーホルダー

キーホルダーサイズの模擬衛星を目指していたので、ここはひとつキーホルダーに収めてみようという試み。 150円で買えるソーラーLEDライトの筐体と太陽電池を流用した。 いま千石等で買えるカラフルなバージョンは、以前買った時とは違うロットらしく、中身はボタン型ニッケル水素3直3.6Vセルと、点滅制御の無いただのスイッチに変更されている。コイン型リチウム充電池を使っていた時よりはマシな選択になっているようだ。ニッ水セルはありがたく使わせていただこう… PIC12F1822をこれに押しこむのはそれほど難しくない。 だがプログラム用のISCPヘッダをつけると自由度が下がるので、今回はヘッダを付けず別の方法を選んだ。 中身 今はブザーと1.5Fの電気二重層コンデンサだけ。 センサやトランスミッタを搭載する余地を残し、まずはブザーをつけた。 太陽電池は逆流防止用にショットキーダイオードをひとつつけただけ。このケースが製品だったころと同じ方式。 省電力設定にしたので、ブザーとLEDを駆動する程度なら、5V1.5Fのキャパシタで満充電から、PICのBORで設定した1.9Vまで下がるのに3~4時間掛かる。 Arduinoで作ってた頃は電力確保で悩んだけど、最初から超低消費電力ならそういった心配も大掛かりな回路も要らない。 そして朝日とともに充電され、日没後数時間までブザーが鳴り続ける迷惑な目覚ましがここに誕生した。 フォトトランジスタや温度センサをつけて、もうちょっとインテリジェントな動作をさせよう…。 見た目はPICのブザー工作とかわりないけど、I2Cインターフェースのセンサ/メモリを繋げられるという拡張性もあるのが面白いところ。 もとはスイッチだった部分にPICを出した。これはプログラム書き込み用の配置。 秋月で売っているICテストクリップをはさむと、このように簡単に書き込みできる。 ブレッドボードでICSP用の配線が面倒だったので買ったけど、結構便利。 同じシリーズでは端子配置が共通なので、1823でもそのまま使える。

PIC12F1822のDSMを使ってみる

12F1822/16F1823 ここ数年PICはご無沙汰だったけど、別件で扱う必要が出てきたのに合わせて、拡張ミッドレンジのF1世代がおもしろそうだったので、手に入れて触ってみた。 DATA Signal Modulator 入手したのは8pinのPIC12F1822と14pinの16F1823 とても安い。 データシートを読むと、EUSART、SPI、I2Cなどひと通りの通信に対応している。 こうなってくると、少ピンなPSoC1とMSP430バリューラインの利便性に食い込んできてる気もする。 気になるのが22章にあるDATA Signal Modulatorという機能。説明を読むと、データ出力にキャリアー信号を合成してくれるらしい。 ・キャリアー(High/Low2種) ・データ信号 を用意することになる。それぞれレジスタが用意されている。 ・キャリアー信号源は外部入力/CCP1/リファレンスクロックが選べる。OOK(モールス)の時はHighだけ使うので、Lowキャリアーは入力をVSSにつなぐ。 ・データはUSARTのTX、MDBITレジスタの直接操作、外部入力が選べる。 設定によってはASK(OOK)、FSK、PSKが生成できるとある。 今回は試しにOOKを作ってみる。キャリアー1つで出来て、周波数を可聴域にすればブザーを鳴らせる…  ・DSMの出力ピンは1822の7番ピン/RA0/MDOUTピン。 ・CCP1によるキャリア生成 CCP1をPWMモードでDuty比50%の波形を生成する。設定は12F1822覚書というサイトを参考にした。 ・CCP1もUARTも外部出力ピンがあるけれど、DSMで使う信号について、外部ポート出力はMDCARH/MDCARLなどのレジスタでDisableできる。 ・リファレンスクロックによるキャリア生成 CCP1は簡単にできたのだが、12F1822にはひとつしか無いので、もう一つの信号源としてリファレンスクロックを使ってみた。  リファレンスクロックは128分周しかできないので、クロック1MHzでもちょっと周波数が高い。思い切ってシステムの動作クロックを31.25kHzにして、32分周した976HzをDSMモジュールに入力する。 省電力なので、5V...