ADコンバータとはアナログ電圧値を数値にしてマイコンで扱えるようにすること。
ただし2Vの電圧を与えても数字の2とはならずLPCでは0~4095の値の範囲の数値に変換される。
理論上は0Vだと0 3.3Vだと4095になる(スケーリング)。(ただしつないでる負荷の状態やらマイコンのばらつきでやらで上の電圧が変わるのであくまで理論上のはなし)
大事なのは与えた電圧に対して正比例で数字が増えるというところ。
LPCにはADCが1ユニット8チャンネルある
今回はデータシート抜粋はなし。めんどくさい。
▼準備部分
LPC_SC->PCONP |= (1 << 12);//パワーオン
LPC_PINCON->PINSEL1 &= ~0x003FC000; /*A0.0~3, ADCモード まずはビットクリア */
LPC_PINCON->PINSEL1 |= 0x00154000; /*A0.0~3, ADCモード 01に設定*/
//ADCコントロールレジスタ(これがポイント)
LPC_ADC->ADCR = (0x01 << 0) | //ADC0を有効
(0x119 << 8)| //クロック分周
(0 << 16) | //バーストモードオフ
(0 << 17) | //システム予約部につき使用しない
(1 << 21) | //ADC運転準備
(1 << 24) | //スタートビットはオン
(0 << 27); //トリガーは立ち上がり
LPC_ADC->ADINTEN = 0x01; /* Enable ADC1 interrupts */
▼読み取り部分
buf = (LPC_ADC->ADDR0 >> 4) & 0xfff;
4bit右シフトして12bitでマスクするというのはお決まりのことらしい
他のチャンネルでも同様にやればできるはず
こいつとPWMを連携して電圧に対応してPWM制御するプログラムを試してみた(ソースは無いよ)
コンソールには現在のADコンバータの生値が表示
オシロにはそれに対応したPWMの波形



AD値4095を3.3Vに変換してやる処理をやれば電圧計にもなる。
ただし電源電圧を越える電圧を与えてはいけないので結局回路組んで1/10Vにしてやったりする必要がある
とりあえずマイコンからいったん離れてオシロの画面をPCに転送できるようにしたい。ちゃんとそれ用の機能が付いてるようだからね