PICのお勉強(37) C言語編 12F683でA/D変換
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」をダウンロード
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のクロックは1MHzunsigned 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
「PICマイコン」カテゴリの記事
- ZK-80で足し算(2020.07.23)
- TK-80互換機 ZK-80のキット(2020.07.21)
- PICのお勉強(37) C言語編 12F683でA/D変換(2015.06.02)
- UVレジンでLEDイルミネーション (2)(2015.05.15)
- PICのお勉強(35) C言語編 PWMでサーボモータを動かす(2014.10.05)
コメント