# MC3630 - 加速度センサー

SPIバスを用いた加速度センサーです。

{% hint style="warning" %}
ボードビヘイビア `<PAL_MOT>` `<PAL_NOTICE> <CUE>` を読み込んだ時のみ使用可能です。`begin(), available()`以外の共通メソッドの手続きはボードビヘイビア中で実行されています。
{% endhint %}

## 動作の流れ

1. `.begin()`: センサーの動作開始
2. `PIN_SNS_INT`割り込み または `available()`: FIFOキューが規定数に達する
3. `.get_que()`: FIFOキューからのデータを取得する

## 動作に必要な手続き

### SPI バス

特にありません。

### スリープ手続き

PIN\_SNS\_INT割り込みによる起床を行うため、スリープ前に以下の設定行います。

```cpp
pinMode(PAL_MOT::PIN_SNS_INT, WAKE_FALLING);
```

### スリープ復帰時の手続き

`.wakeup()`メソッドの呼び出しが必要です。この処理は`<PAL_MOT>`ボードビヘイビア中で実行されています。

{% hint style="warning" %}
半導体内部のFIFOキューが一杯になっても読み出さなかった場合は、データ取得は終了し、新たな値は格納されません。
{% endhint %}

## データ構造

各サンプルは[`axis_xyzt`](/latest1/api-reference/classes/axis_xyzt.md)構造体を要素とするキュー[`smplque`](/latest1/api-reference/classes/smplque.md)に格納されます。メンバーx,y,zはそれぞれX,Y,Z軸に対応します。

```cpp
struct axis_xyzt {
  int16_t x;
  int16_t y;
  int16_t z;
  uint16_t t;
};
```

各軸の値は1Gを1000とした値として格納されます。`t`はサンプルの番号で`0`から順番にサンプルごとに割り振られます。

## メソッド

### read()

```cpp
uint8_t read()
```

半導体のFIFOキューからデータを読み出します。読みだしたバイト数が戻りますが`.get_que()`で参照するキューのサイズに格納されるデータ数を読み出すようにしてください。

{% hint style="warning" %}
スリープ復帰後に`<PAL_MOT>`では`read()`が行われます。
{% endhint %}

### get\_que()

```cpp
smplque<axis_xyzt>& get_que()
```

加速度のサンプルを取得します。キューは[`axis_xyzt`](/latest1/api-reference/classes/axis_xyzt.md)を要素とした[`smplque`](/latest1/api-reference/classes/smplque.md)です。availableになってから速やかにキューを空にする必要があります。

## 共通メソッド

### setup()

```cpp
void setup() 
```

このセンサーでは`setup()`を使用しません。

### begin(), end()

```cpp
void begin(uint32_t conf)
void end()
```

`conf`で指定した設定で初期化します。

`conf[0:15]`(bit0-15) : サンプリングモード、`conf[16:23]` (bit16-23): 加速度のレンジ、`conf[24:31]` (bit24-31) : 割り込み発生までのサンプル数を設定します。

| conf\[0:15] サンプルモード      | 内容                     |
| ------------------------ | ---------------------- |
| `MODE_LP_1HZ_UNOFFICIAL` | 1Hz Low Power (非公式設定)  |
| `MODE_LP_2HZ_UNOFFICIAL` | 2Hz Low Power (非公式設定)  |
| `MODE_LP_7HZ_UNOFFICIAL` | 7Hz Low Power (非公式設定)  |
| `MODE_LP_14HZ`           | 14Hz Low Power (デフォルト) |
| `MODE_LP_28HZ`           | 28Hz Low Power         |
| `MODE_LP_54HZ`           | 54Hz Low Power         |
| `MODE_LP_105HZ`          | 105Hz Low Power        |
| `MODE_LP_210HZ`          | 210Hz Low Power        |
| `MODE_LP_400HZ`          | 400Hz Low Power        |
| `MODE_ULP_25HZ`          | 25Hz Ultra Low Power   |
| `MODE_ULP_50HZ`          | 50Hz Ultra Low Power   |
| `MODE_ULP_100HZ`         | 100Hz Ultra Low Power  |
| `MODE_ULP_190HZ`         | 190Hz Ultra Low Power  |
| `MODE_ULP_380HZ`         | 380Hz Ultra Low Power  |

{% hint style="warning" %}
非公式設定はMC3630のデータシートに記述がないもので**設定時の動作は未定義**となります。お客様のほうでの動作確認の上利用下さい。非公式設定にかかわる問題やご質問について弊社サポートでは対応いたしかねます。
{% endhint %}

| conf\[16:23] 加速度レンジ   | 内容          |
| --------------------- | ----------- |
| `RANGE_PLUS_MINUS_8G` | ±8G (デフォルト) |
| `RANGE_PLUS_MINUS_4G` | ±4G         |
| `RANGE_PLUS_MINUS_2G` | ±2G         |
| `RANGE_PLUS_MINUS_1G` | ±1G         |

### process\_ev()

```cpp
void process_ev(uint32_t arg1, uint32_t arg2 = 0)
```

このセンサーでは`process_ev()`を使用しません。

### available()

```cpp
bool available()
```

センサーにデータが読み出され内部のキューにデータが保存されていると`true`を戻します。

### probe()

```cpp
bool probe()
```

このセンサーでは`probe()`は使用できません。

### wakeup()

```cpp
void wakeup()
```

スリープ復帰後のSPIバスの再初期化を行い、加速度データを読み出します。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mwx.twelite.info/latest1/sensor_object/mc3630.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
