2021年11月27日

UART I2Cプロトコルブリッジ代替品

今回はUART I2Cプロトコルブリッジのリニューアル版について紹介します。

UART I2CプロトコルブリッジはUART通信をI2Cマスタに変換する変換ICです。マイコンやPC等からUARTコマンドをICに送ることでI2Cデバイスを制御することができます。UART I2CプロトコルブリッジはNXPからSC18IM700として販売されています。ただ、最近、NXPの製品ページではSC18IM700が新規設計非推奨となっており、将来的に供給されなくなる通知が出ていました。代替品をどうするか悩んでいたところ、リニューアルして販売されることが分かりました。

リニューアル版はSC18IM704となって別の製品として販売されるようです。データシートが公開されていたため、 SC18IM700とSC18IM704で差を比較してみました。


項目SC18IM700SC18IM704
コマンド、レジスタSC18IM700と互換有
バッファサイズ16Byte256Byte
IO電圧
2.4~3.6V
(入力5V耐圧)
1.71~3.6V
(入力5V耐圧)
GPIOモード
双方向モード
入力モード
プッシュプル出力モード
オープンドレイン出力
入力モード
プッシュプル出力モード
オープンドレイン出力
ピンアサインSC18IM700と互換なし

大きなメリットとしてバッファサイズが16Byteから256Byteに大幅に増えています。これまでI2C通信を小分けに読み書きする必要がありましたが、一度にI2Cの読み書きをすることができるようになります。通信速度のパフォーマンスが大幅に改善しそうです。

また、最低電圧が1.71Vからとなったため、FPGAやカメラモジュール等のインタフェースと親和性が良くなっています。

GPIOの機能では双方向モード(quasi-bidirectionalモード)がサポートされなくなっていますが、通常の使用法であれば入力か出力か決まっていることが多いため、そこまで問題にはならないと思います。

唯一、残念な点としてピンアサインの互換がなく、I2Cや電源等のピン番号が異なっているため、フットプリントを変更する必要があります。ここは互換性を維持して欲しかった点です。


SC18IM700USBシリアルI2C変換基板で使用しています。移行のタイミングは検討中ですが、今後入手安定性や性能向上を鑑みてSC18IM704に移行することを検討したいと思います。まだ、21年11月の現時点ではSC18IM704は販売されていないため、検討もできませんが、販売され次第、検討してみたいと思います。
posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2021年11月06日

PIC32マイコンSYS_CONSOLE

今回はPIC32MX270F256BをターゲットにMPLAB X v5.45+Harmony3+XC32 v2.50を使用して、SYS_CONSOLEの使用方法について紹介します。

マイコンのデバッグをする場合、デバッガーを使って確認する方法の他にUART等を介してシリアルコンソールに情報を表示させる方法があります。個人的にはデバッガーよりもUARTとシリアルコンソールを使ったデバッグの方が早く、必要な情報を取り出せるため、よく利用しています。PIC32のHarmony3で利用可能なSYS_CONSOLEはシリアル出力のラッパー機能となっています。UARTの関数を直接呼び出してシリアル出力するよりも汎用性高く、利用しやすくなっています。システムに応じてコンソールの出力先のUARTを変更したり、USBCDCの出力に変更することも容易です。また、コンソールのデバッグレベルを使い分けることで、必要なコンソール出力のみに制限したりすることも容易にできます。


Harmony3ではSystem ServiceのConsole、Debugとしてライブラリが準備されています。今回はConsoleをUART2に接続して利用しました。Harmony3のプロジェクトグラフは下記の通りです。

sys_console1.jpg

必要に応じてUART2のボーレートやピンアサインの設定を行います。

出力のレベルはSYS_ERROR_FATAL、SYS_ERROR_ERROR、SYS_ERROR_WARNING、SYS_ERROR_INFO、SYS_ERROR_DEBUG から選択できます。デフォルトはSYS_ERROR_DEBUGとなっており、プロジェクトグラフのDebugから出力レベルを変更できます。コードではconfiguration.h内で下記のように定義が出力されています。

#define SYS_DEBUG_ENABLE
#define SYS_DEBUG_GLOBAL_ERROR_LEVEL SYS_ERROR_DEBUG

例えば、デバッグ時はSYS_ERROR_DEBUGにして、デバッグ終了後はSYS_ERROR_INFOにすると、SYS_ERROR_INFO以下のコンソールが出力されるようになり、SYS_ERROR_DEBUGのコンソール出力は出力されなくなります。コンソール出力をコメントアウトしたりせずに一括で変更できるため、非常に便利です。


コンソール出力の使い方は下記の通りです。
ヘッダのインクルードを追加します。
#include "system/debug/sys_debug.h"

出力関数は下記の通りです。
SYS_DEBUG_PRINT(SYS_ERROR_DEBUG, "\r\nInitOK\r\n");


コンソール入力を利用する場合は下記の変数をグローバル変数等に定義します。
SYS_CONSOLE_HANDLE consoleHandle;
ssize_t consoleReadSize;
char consoleBuffer[130];

入力関数は下記の通りです。入力がない場合はconsoleReadSizeが0になります。入力があった場合はそのbyte数がconsoleReadSizeに入り、データはconsoleBufferに格納されます。

consoleReadSize = SYS_CONSOLE_Read( consoleHandle, consoleBuffer, sizeof(consoleBuffer) );

UARTのコンソールはPIC32MXではデフォルトでDMA&リングバッファとして設定されているため、マイコンのメイン処理に対してコンソール出力の影響を抑えてデバッグすることが可能です。

これまで毎週更新していましたが、半導体不足でプロジェクトが停滞気味のため、今後のブログ更新はペースを減らして随時記事を投稿する予定です。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2021年10月30日

販売製品一覧

今回は最近追加された製品含めて改めて販売中のCrescent製品を紹介します。※2021年10月更新
■ProjectionBall IoT (Version 5)
 ProjectionBallはベクター方式の簡易レーザープロジェクタで、
 簡単な図形や英数字などを描画できます。
 Running Electronics様で販売中です。

■磁気エンコーダモジュール
 AMS社製磁気エンコーダAS5048Aを2.54 mmピッチへ変換する基板です。
 専用の磁石を同梱。

■磁気エンコーダピッチ変換基板
 AMS社製磁気エンコーダAS5048AやAS5047Dなどを
 2.54 mmピッチへ変換する基板です。
 基板のみでエンコーダIC、磁石は同梱されていません。

■STM32F303CC搭載DIP変換基板
 Nucleo等の評価ボードが発売されていない48ピンIC STM32F303CC
 LQFP48を2.54 mmピッチへ変換した基板です。
 ※昨今の半導体不足の影響で供給が不安定になっています

■STM32F373CC搭載DIP変換基板
 Nucleo等の評価ボードが発売されていない48ピンIC STM32F303CC
 LQFP48を2.54 mmピッチへ変換した基板です。
 ※昨今の半導体不足の影響で供給が不安定になっています
 スイッチサイエンスで販売中

■アナログ出力MEMSマイク変換基板
 搭載した、ピッチ変換モジュールです。ピン間隔は2.54 mm。
 可聴音から超音波まで(100 Hz〜80 kHz)の幅広い帯域を
 高感度にセンシングすることが可能です。
 超音波センサや超音波通信などに使用可能です。

■アンプ内蔵アナログ出力MEMSマイク変換基板
 50倍のアンプを搭載した、ピッチ変換モジュールです。
 ピン間隔は2.54 mm。
 可聴音から超音波まで(100 Hz〜80 kHz)の幅広い帯域を
 高感度にセンシングすることが可能です。
 超音波センサや超音波通信などに使用可能です。

■デジタル出力MEMSマイク変換基板
 搭載した、ピッチ変換モジュールです。ピン間隔は2.54 mm。
 可聴音から超音波まで(100 Hz〜80 kHz)の幅広い帯域を
 高感度にセンシングすることが可能です。
 超音波センサや超音波通信などに使用可能です。

■LattepandaArduino変換基板
 LattepandaのLeonardoポートをArduino Leonardoピッチへ
 変換する基板です。Arduinoのシールドが使えるようになります。
 表面実装部品のみ実装済みです。
 ピンヘッダ、ソケット、リセット用のタクトスイッチは別売です。

■PS/2 USB逆変換アダプタ
 USBキーボードをPS/2化する変換アダプタです。
 標準ドライバで動作可能なUSBキーボードをPS/2キーボードとして
 使用できるように変換します。
 プログラミング専用こどもパソコンIchigoJamやサーバマシンなど、
 PS/2キーボードのみをサポートしている場合に本製品を使用して、
 USBキーボードをPS/2化します。

■e-Paper I2Cモジュール
 e-Paper I2CモジュールはWAVESHARE製200x200, 1.54inch
 E-Inkディスプレイを搭載したモジュールです。WAVESHARE製200x200,
 1.54inch E-InkディスプレイはSPI接続ですが、配線の容易性を実現するために
 SPI I2CプロトコルブリッジIC SC18IS602Bを搭載してI2C化しています。

■nanopi neo/neo2 拡張ボード
 FriendlyElec製NanoPi Neo/Neo2の拡張ボードです。
 ピンヘッダ上にあるUSB2ポート、I2Cポート(Grove)のコネクタを
 搭載しています。標準USBの1ポートで足りないという場合やGrove
 で拡張したいという場合に最適です。
 また、I2Cポートには純正NASキットと同じRTC DS1307が搭載しています。

■Digital Video Shield
 SPIからDVI出力(HDMIコネクタ)するArduinoシールドです。
 FTDI製ビデオエンジンBT816とDVIトランスミッタTFP410を搭載しています。

■ロードスイッチ変換基板
  Vishay製超低漏洩電流ロードスイッチSiP32431を搭載した変換基板です。
 1.5 V~5.5 V、最⼤1.4 Aまでの負荷の電源管理が可能です。
 FETを使⽤する場合に⽐べ、漏れ電流が10 pAと非常に⼩さいことが特徴です。

■ISO 14443 Type A RFID付きEEPROMモジュール
 デュアルインタフェースEEPROM M24SR64とアンテナを搭載したI2C Groveモジュールです。
 64k bit EEPROMにI2CとRFIDの2つの通信で内部のデータにアクセスできます。
 EEPROM M24SR64はISO 14443 NFC/RFID tag NFC forum Type 4 に対応しています。

■BLE5モジュール変換基板
 SiliconLabs製BLE5モジュールBGX13Pを搭載した変換基板です。
 BLE5の制御ソフトウェアが予め書き込まれているため、容易にBluetooth通信を使⽤できます。
 3.3 Vシリアル通信(UART,初期115200 bps)で外部機器からパラメータを設定できます。
 TELEC(技適)認証済 工事設計認証番号 209-J00282

■WiFiモジュール変換基板
 SiliconLabs製WiFiモジュールAMW037を搭載した変換基板です。
 WiFi制御ソフトウェアが予め書き込まれているため、容易にWiFi通信を使⽤することができます。
 3.3 Vシリアル通信(UART,初期115200 bps)で外部機器からパラメータを設定することが可能です。
 TELEC(技適)認証済 工事設計認証番号 201-180092

■I2C-Uart変換基板
 マイコンのI2CポートをUART通信ポートに変換するアダプタです。
 マイコンからI2Cデバイスとして制御し、UARTのボーレート設定、送信、受信処理をすることができます。

■I2C-RS232C変換基板
 マイコンのI2CポートをRS232C通信ポートに変換するアダプタです。
 マイコンからI2Cデバイスとして制御し、UARTのボーレート設定、送信、受信処理をすることができます。

■USBシリアルI2C変換基板
 USBシリアルをI2Cマスタに変換する基板です。
 シリアルCOMポートを介してPCやRPI等からI2Cデバイスを制御できます。
 I2Cデバイスの動作確認やラピッドプロトタイピングに最適です。

■デュアル出力昇圧コンバータ基板
 ADP1612スイッチングコンバータを使用した昇圧電源です。
 1.8V~5.5Vの入力で±15.1Vの出力が得られます。
 1.8Vから使用可能なため、電池駆動のアンプ電源に最適です。

■高感度磁界センサ変換基板
 TI製高感度磁界センサDRV425を使用した高感度磁界センサ基板です。
 高感度±0.5 mT、帯域最大47 kHzで磁界をアナログ出力として得ることができます。

■USB-PDM変換基板
 2個のデジタルPDM出力MEMSマイクをUSBオーディオデバイス(ステレオ)に変換します。
 24 bit、44.1 kHz/48 kHzサンプリングで変換します。
 デジタルPDM出力MEMSマイクの評価や動作確認に便利です。

■USB-SMBUS/I2C変換基板
 CP2112を使用したUSB-SMBUS/I2C変換基板です。
 Simplicity Studioを使用してVIDやPID等のパラメータを設定変更できます。
 USB-PDM変換基板のパラメータ書き換えに最適です。

■AC電流センサ基板
 ホール素子を用いた低侵襲AC電流センサ基板です。
 一般的な電源ケーブルを加工せずに近接させて使用します。
 電源ケーブルの電流に応じて比例してアナログ電圧が出力されます。

■可変アンプ内蔵アナログ出力MEMSマイク変換基板
 増幅回路TLV316とKnowles社製アナログ出力MEMSマイクSPU0410LR5Hを搭載した基板です。
 可聴音から超音波(100Hz〜80kHz)までの幅広い帯域を高感度にセンシングすることが可能です。
 RV1により約1倍〜約50倍まで増幅率を変更することが可能です。

■エアクオリティセンサ
 ルネサスエレクトロニクス製 室内空気質(IAQ)センサZMOD4410及び
 温湿度センサHS3001を搭載したセンサ基板と専用変換基板です。
 CO2、IAQ(空気質指標)、温度、湿度の測定ができます。

■光センサ基板
 アナログ光センサAPDS-9008-020を用いた光センサ基板です。 
 光強度のアナログ出力(A)と可変抵抗で調整可能な閾値によるデジタル出力(D)を備えています。

■I2C-RS422/485変換基板
 マイコンのI2CポートをRS422/RS485通信ポートに変換するアダプタです。
 本アダプタでI2Cから半二重RS422/RS485の送信、受信処理をすることができます。
 7.3728 MHzの水晶発振子を搭載しており、マイコンのメインクロックから独立してRS422/RS485のボーレート設定ができます。

■DC電流パルス検知基板  
 直流信号線のON、OFF状態をクランプ式CTセンサで検出するための変換基板です。
 本変換基板とクランプ式CTセンサによって信号線を加工せずに直流信号線の状態を取得することができます。
 信号線ON/OFFによって発生するパルスをCTセンサで検出し、状態をラッチします。
 ラッチ保持した状態(信号線のON/OFF状態)を1/0のデジタル信号として出力します。

■CTセンサアンプ基板
 本基板はクランプ式CTセンサの出力を増幅してRMS値(実効値)に変換する基板です。
 交流電流に応じたRMS値(実効値)をアナログ値(直流)として得ることができます。
 実効値をアナログ値として得られるため、マイコン側での高サンプリングAD変換やRMS演算等が不要です。

■I2Cバスアクセラレータ 
 本基板はLTC4311を使用したI2C通信の信号波形を改善するバスアクセラレータです。
 I2Cケーブルを延長する場合や多数デバイスを接続する場合に通信を安定させます。
 I2Cバスラインに挿入して使用します。
 Grove互換コネクタを搭載しており、既存のデバイスに容易に接続できます。




posted by Crescent at 00:00| Comment(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2021年10月23日

PIC32マイコンSDカード読み書き

今回はPIC32MX270F256BをターゲットにMPLAB X v5.45+Harmony3+XC32 v2.50を使用して、PIC32マイコンにSDカードを接続して読み書きする方法について紹介します。

Harmony3を用いることでSPI接続で簡単にSDカードの読み書きを実装することが可能です。Harmony3のプロジェクトグラフは下記の通りです。

sd_spi1.jpg

今回はSPI1をSDカード用に割り当てました。

sd_spi4.jpg

SPI1の設定はデフォルトのままで問題ありません。

sd_spi3.jpg

SD Card設定ではSDカードのチップセレクトをどのポートにするか設定します。他の設定はそのままで問題ありません。



sd_spi2.jpg
FILE SYSTEMの設定はそのままで問題ありませんが、32GB以上のSDカードを使用する場合は「Enable exFAT ~」にチェックを入れます。

sd_spi5.jpg

最後にSPI1のIOとSDのCSのポートを忘れずに設定します。SPI1のIOとCSをGPIO OUTPUTに設定します。なお、SDI1とSDO1をプルダウン有効にしていますが、必須ではありません。

Harmony3の設定完了後、Generate Codeボタンでコードを生成します。コード生成後、app.cのAPP_Tasks内にファイル書き込みのテストコードを追加します。


SYS_FS_HANDLE fileHandle;
char hello[] = "Hello World !!";
int res;
//SDカードマウント
res=SYS_FS_Mount("/dev/mmcblka1", "/mnt/myDrive1", FAT, 0, NULL);
if(res!= 0)
{
  SYS_DEBUG_PRINT(SYS_ERROR_DEBUG, "Mount ERR\r\n",res);
  return;
}
else
{
 SYS_DEBUG_PRINT(SYS_ERROR_DEBUG, "Mount OK\r\n");
}


//ファイルオープン
fileHandle = SYS_FS_FileOpen("TestData.txt", (SYS_FS_FILE_OPEN_WRITE));
if(fileHandle == SYS_FS_HANDLE_INVALID)
{
  SYS_DEBUG_PRINT(SYS_ERROR_WARNING, "FileOpen Error\r\n");
  return;
}
//ファイル書き込み
res= SYS_FS_FileWrite(fileHandle, hello, sizeof(hello));
if(res!= -1) //OK
{
  SYS_DEBUG_PRINT(SYS_ERROR_WARNING, "File Write OK\r\n",);
}
else//NG
{
  SYS_DEBUG_PRINT(SYS_ERROR_WARNING, "FileWrite NG\r\n");
  return;
}
//ファイルクローズ
SYS_FS_FileClose(fileHandle);


マウントからファイル操作、ファイルクローズまでの一連の流れは上記の通りです。

ディレクトリを生成する場合は
SYS_FS_DirectoryMake(dirname);
でdirnameに文字列を渡すことでフォルダの生成ができます。

生成したフォルダに移動する場合は
SYS_FS_DirectoryChange(dirname);
でdirnameに文字列を渡すことでそのフォルダに移動します。

逆にルートフォルダに戻る場合は
SYS_FS_DirectoryChange("/");
でルートフォルダに戻ることが可能です。


FILE SYSTEMの設定で「Enable exFAT ~」にチェックを入れることで32GB以上のSDカードに対応できますが、そのままではビルドに失敗します。ff.hで「#error exFAT feature wants C99 or later」のエラーが発生します。XC32コンパイラはexFATで使用するint64等の変数定義に対応していますが、XC32内でstdバージョン定義がされていないようです。

ff.hの37行目に
#define __STDC_VERSION__ 199902L
を追記して強制的に定義を変更します。


ファイルシステムの時刻がデフォルトは固定となっているため、RTC機能等を実装している場合はapp.cやmain.c等のユーザー側で下記の関数を追加することでファイル生成時やフォルダ生成時に日時が反映されます。なお、GetRtcDateTimeは自作の関数で必要に応じて外付けのRTC等から日時を取得する関数を実装してください。

DWORD get_fattime(void)
{
  SYS_FS_TIME time;
  time.packedTime = 0;
  uint8_t year, month, day, hour, min, sec;

  GetRtcDateTime( &year, &month, &day, &hour, &min, &sec);
  // All FAT FS times are calculated based on 0 = 1980
  time.discreteTime.year = (2000+ year - 1980);
  time.discreteTime.month = month;
  time.discreteTime.day = day;
  time.discreteTime.hour = hour;
  time.discreteTime.minute = min;
  time.discreteTime.second = sec;
  return (time.packedTime);
}


設定によってはすんなりビルドが通らない等ありましたが、比較的簡単にPIC32マイコンにSDカードを接続して読み書きすることができました。その他の注意点としてSDカードの読み書きとconsoleを有効にしただけでプログラムメモリ120kB程度(最適化レベル1)が既に使用済となりました。SDカードの読み書きをする場合は256kB以上のプログラムメモリが大きなPIC32マイコンを選択する必要があります。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする

2021年10月16日

mTouchライブラリ追加方法

今回はPIC32マイコンではなく、8bitマイコンのPIC12、PIC16系のmTouchライブラリ追加方法について紹介します。PIC12、PIC16系のマイコンの一部にはCapacitive Sensing (CPS) module、mTouch機能があります。mTouchは静電容量式のスイッチやセンサとして利用できる機能です。

MCC(MPLAB Code Configurator)が利用できるようになってから、mTouchを利用していかなったため、利用してみることにしました。調べてみるとデフォルトではmTouchの機能をMCCから利用できるようにはなっておらず、ライブラリの追加が必要であることが分かりました。マイクロチップのサイトではライブラリファイルをダウンロードして追加するという説明ですが、バージョンやサイトの表示が異なっており、試行錯誤しながらmTouchライブラリを追加することができたので、今回はその方法を紹介します。


mTouchライブラリファイルはこちらからダウンロードします。マイクロチップのサイトではmTouchという名前ですが、「MCC - Touch Library - XXX」という名前になっているようです。Application Libraries内の4ページ目に「MCC - Touch Library - XXX」という名前のフ項目を確認することができます。

webpage.jpg

ライブラリファイルがダウンロードできたら、MPLAB Xを起動させ、Tools→Optionsをクリックします。

mTouch1.jpg

マイクロチップのサイトではEmbeddedという項目にImport Libraryボタンがありますが、MPLAB X v5.45の場合はPluginsという項目のMPLAB Code Configurator 4.xのタブ内にImport Libraryボタンがあります。

mTouch2.jpg


Import Libraryボタンから先ほどダウンロードした「MCC - Touch Library - XXX」のファイルを選択してOKボタンを押すと、ライブラリがインポートされ、mTouch機能を利用することができるようになります。mTouch機能についてはまた別の機会に紹介したいと思います。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする