Skip to content
arao edited this page Jul 8, 2017 · 5 revisions

Welcome to the blocks wiki!

これまで発生した主な問題

UART受信バッファのoverrun

症状

Mini-PLCとしてRasPiの様なlinuxベースのものを使った場合に不具合発生。linuxはリアルタイム処理が出来ず、適切なタイミングでデータをschedulerへ送信できない。そうすると、scheduler側の他の割り込み処理の影響でUART受信バッファ溢れとなり、データ欠損が発生。本問題は、LCDのようなアクチュエータ制御時に深刻。

対策

  • Linuxを使わない。RTOS, mbedやOSレスなものを使う。
  • I2C backplaneを2系統用意する。センサー系とアクチュエータ系。
  • PICのclock speedを上げる。

I2C slaveがACKを返さない

症状

SSP1CON2のSENがenableされてなかったので、clock strechingが無効であった。従い、I2C slave側で時間がかかる処理を行うとI2Cのステートマシン崩れとなり、通信不能となる。

対策

SSP1CON2のSEN(bit 0)を1に設定し clock stretching を有効にしたら、本問題は発生しなくなった。

I2Cバスが不安定

症状

プルアップ抵抗としてPIC内臓のWPUを使ったところ、バスのケーブル長が長くなるにつれて通信が不安定に。

対策

プルアップ抵抗を可変抵抗(最大5kΩ、2.5kΩに設定)に置き換えたところ安定した。

I2Cバスの通信距離がせいぜい80cm程度

症状

I2Cの通信距離が80cmを超えたあたりで通信が不安定に。

対策

80cmまではI2C、80cmを超える構成にはCANバスを適用=>2017年7~8月に開発する。

振動があるとシステム動作が不安定に

症状

システムを激しく揺らしたとき、Scheduler(I2C master)とLCD(I2C slave)間の通信が不能になる。Mini-PLCとScheduler間のUART接続でピンヘッダ・ピンソケットを使った接続が原因:接触不良が発生。

対策

開発用ボードでは対策不要。デモ用ボードでは、各種ケーブルを電話線のモジュラープラグ・ジャック(RJ11)や端子台などでケーブルを固定する。

ADCの変換スピードが遅い

対策

Clock speedを上げる。内部クロック(Frc)を使う。

I2Cの送信が出来ない

症状

FOSCを500kHzから32MHzへ上げたらI2Cの送信が出来なくなった。FOSC変更したのにI2Cボーレートを適切なものへ設定していなかった。

対策

I2C Master側のボーレートジェネレータ(SSPxADD)を100kHzや400kHzへ設定する。

I2Cの送信が出来ない

症状

FOSCを500kHzから32MHzへ上げたらI2Cの送信が出来なくなった。I2Cのクロックを超えるスピードでI2Cマスターが処理を行ったためデータ送信エラーとなっていた。

対策

ループの中で連続してデータ送信する場合、__delay_us(...)を入れる。

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy