« 2015年5月 | トップページ

2015年6月

2015年6月 2日 (火)

PICのお勉強(37) C言語編 12F683でA/D変換

20150602 8ピンPICの定番,12F683でA/D変換をやってみました。
PICのお勉強(29)で16F88を使ってやったことを12f683に移植しただけですな。
10kΩVRを使って,12f683のGP4/AN3に0~3Vの電圧を入力,これを10bitのデジタル値に変換して,GP0に接続したLEDの点滅周期を変えています。

HI-TECH Cで書いたソースとhexファイルはコレ↓です。
「lesson37.c」をダウンロード
「lesson37.hex」をダウンロード

12f683_ad 16F88との違いは,ANSELレジスタやTRISIOレジスタの設定くらいでしょうか。詳細はこちらで確認して下さい。
最初,4ピンのGP3がAN3だと勘違いしていて,GP3にアナログ電圧を入力し,「プログラムは間違ってないはずなのに,全然動かないじゃないかー」としばらく悩みました(笑) この失敗は誰もがやるんじゃないかしらん。僕だけ?

ソースも貼っておきますね。

/**************************************
12F683 HI-TECH C v.9.83
GP4/AN3の入力をA/D変換,GP0のLED点滅周期変える
**************************************/

#include <htc.h>
__CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON & BOREN_ON & MCLRE_OFF & CP_OFF & IESO_OFF & FCMEN_OFF);
#define _XTAL_FREQ 1000000 // PICのクロックは1MHz

unsigned int adconv();
unsigned int tmp;
unsigned int i;

void main(void)
{
OSCCON = 0b1000000; // 内蔵OSC 1MHz
ANSEL = 0b00001000; // GP4/AN3がアナログ入力,他はデジタル
CMCON0 = 0b00000111; // コンパレータを使わない
TRISIO = 0b00001000; // GP4/AN3は入力,その他は出力

while (1)
{
tmp = adconv();
GP0 = 1;
for(i = 0; i __delay_ms(2);
}
GP0 = 0;
for(i = 0; i __delay_ms(2);
}
}
}

unsigned int adconv()
{
ADCON0 = 0b10001101; //右詰,基準電圧はVdd,GP4/AN3の入力をA/D変換
__delay_us(25);
GO=1;
while(GO);
return (ADRESH<<8)+ADRESL;
}

| | コメント (0) | トラックバック (0)

« 2015年5月 | トップページ