# ADC

TWELITE の ADC について、解説します。

### ADCの概要

TWELITEには10bit, 4ch のADCが搭載されています。（ ADC2 は VREF 入力と共用です。ADC3,4 は DIO と共用になっています）

* ADCの基準電圧である Vref は約 1.235V で、外部への出力はありません。また温度特性等の情報は公開されておりません。
* ADCのレンジは、0-Vrefまたは0-2Vrefとなります。(0-Vccの相対スケールではありません)
* ADC計測ではVrefまたはレンジによってデータシートの性能を得るために必要とする電源電圧が決まっています。(0-Vrefで2.2V以上、0-2Vrefで2.6V以上)
* ADCは複数ポート計測できますが、マルチプレクサによる切り替えであるため同時に複数の計測は行えません。複数ポートの計測をするには順次ポートを切り替えて計測します。
* 精度を要求される場合は外部のADCの利用を推奨します。
* ADC は、2Mhz, 1Mhz, 500khz, 250khz （500khz 推奨）でサンプリング回路のサンプリングクロックを設定可能です。実際にこのクロックでサンプリングできるわけではなく、内部回路の周波数です。一定周期でサンプルしたい場合は、周期タイマー（TickTimer や TIMER0/1/2） 割り込みを起点にサンプル値の取得をソフトウェアで行います。ただし高周期ではタイマーの時間軸のブレ（ジッター）を考慮する必要があります。
* １サンプル取得に (2, 4, 6, 8) x 3 + 14 サンプリングクロック必要です。
* 500khz で 2 クロックの場合、2x3+14 = 20 サンプリングクロック = 40 usec となります。

#### ポート

| ポート         | 内容                                                                                                  |
| ----------- | --------------------------------------------------------------------------------------------------- |
| 電源電圧        | 電源電圧を計測します。2/3に分圧されているため、ADC値よりmV値に変換した上、3/2倍することになります。簡易的には `{ADC値(0-1023)} x 3705 / 1024` と計算します。 |
| 温度センサー      | <p>内蔵の温度センサーで、0-Vrefレンジで計測します。オフセット誤差が大きくキャリブレーションが必要になります。<br>※ TWENETでは使用していません。</p>              |
| ADC1        | アナログ専用のポートです。                                                                                       |
| ADC2 (VREF) | <p>アナログ専用のポートです<br>※ ADC2はVREFとして基準電圧の入力とすることができます(VREF 外部入力は TWENETでは使用していません)</p>                 |
| ADC3,4      | DIOと共用になっているため内部プルアップを無効にする必要があります。                                                                 |

#### 入力回路

ADCの入力回路は、図のようにモデル化できます。直列の抵抗は5kΩ～10kΩ（図では5kΩとなっています）です。外部回路の設計の参考にしてください。

![](https://mono-wireless.com/jp/tech/assets/programmig/ADC_input.png)

{% hint style="info" %}
例えば 1MΩといった高い抵抗値で分圧するなどした電圧値をを計測する場合は、出力端にキャパシタを追加します。このキャパシタは電圧変化に対する応答性を悪化させますが、計測電圧を安定化させます。
{% endhint %}

### TWENET でのソースコード

ADCの計測では、Peripheral API による手続きを、まとめた [adc.c](/hw-api-ref/perifuraru/adc/adc.c.md) を用いています。


---

# 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://sdk.twelite.info/hw-api-ref/perifuraru/adc.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.
