2019年11月09日

スリープ不具合調査 その2

対策しても、時々再発してしまうことがあったため、再度試行錯誤してみました。


普段はメインPCは電源を切らず、使わないときはスリープや休止で運用しています。使用しているPCのマザーボードはIntel i5-8400+ ASROCK製 H310M-ITX/acを使用しています。

High Definition Audio Controllerが原因と分かっていますが、以前、紹介した方法の「powercfg」コマンドでは完治しませんでした。


今回はドライバ側から原因を追ってみまいした。RealtechのオーディオドライバーをインストールするとRealtech Audio Cosoleを利用することができます。

「デバイス詳細設定」の項目から「フロントパネル」を「ヘッドフォン」に設定した上で、コネクタ設定「フロントパネルのジャックポップアップダイアログを無効にする」が「オフ」になっていたため、「オン」にして無効化しました。合わせて、「デバイスを差し込むとき、ジャック検出を有効にする」が「オン」になっていたため、「オフ」に設定しました。


realtech-audio.jpg

ジャック検出の無効化で様子を見てみるとスリープ状態に入らず、勝手に復帰する不具合はなくなりました。原因はジャック検出だったようです。一旦、様子をみてみたいと思います。

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

2019年11月02日

I2C/Uartコンバータ

今回はI2C/UARTプロトコルブリッジICのSC16IS740/750/760 を紹介します。SC16IS740/750/760はI2CからUARTに変換するICです。

マイコンでUARTを使用する場合、UARTのボーレートに合わせてマイコンのメインクロックを調整するといったことが必要な場合が多々あります。また、UARTポートが他の用途で使用して足りないこともあります。特にUARTの受信処理はSPIに比べ、信号タイミングを測定しながらサンプリングする必要があり、ソフトウェアUARTで実装するとマイコンの負荷が高くなりがちです。マイコンの負荷が高くなることで受信ミスも発生しやすくなります。

I2C/UARTプロトコルブリッジICのSC16IS740/750/760 を使用することでこのような問題を解決することができます。

マイコンからはSC16IS740/750/760 をI2Cデバイスとして制御し、UARTのボーレート設定、送信、受信処理をすることはできます。64 bytesのバッファを内蔵しているため、通信速度が遅いI2Cでも一旦、バッファで受けて後から受信したデータを読み出すといったことが可能です。

また、SC16IS740/750/760 は別途水晶発振子を接続する必要があり、マイコンのクロックから切り離すことができます。そのため、UARTのボーレートに合わせてマイコンのクロックを最大クロックから下げるといった調整が不要です。

SC16IS740、750、760で3種類ありますが、違いは下記の通りです。

 SC16IS740SC16IS750SC16IS760
Flow Control PinRTS/CTSRTS/CTS/DSR/DTR/CD/RIRTS/CTS/DSR/DTR/CD/RI
IO Pin088
SPI Max Clock4Mbit/s4Mbit/s15Mbit/s


SC16IS740/750/760の電源は3.3Vですが、信号の各ピンは5V耐圧のためArduino UNOなどに接続してそのまま使用することも可能です。


このSC16IS740/750/760を使用してGrove変換アダプタを作成してみました。GROVEからUARTに変換する「I2C UART Converter」とGROVEからRS232Cに変換する「I2C RS232C Converter」を設計してみました。

I2CUart.jpg

I2CRS232.jpg




GROVEの多くはI2Cデバイスですが、一部のGROVEはUARTデバイスがあります。UARTデバイスの場合、そのままI2Cポートでは接続できず、ソフトウェアUARTを使用せざるを得ない場合がありました。そのような場合に上記Converterを使用するとソフトウェアUARTを使用せずにUARTデバイスを接続することができます。

サンプルコードを作成して設計に問題なければ、どこかで販売をしたいと思います。

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