« PICのお勉強(28) C言語編 SD1602を4bitモードで使ってみる | トップページ | PICのお勉強(30) C言語編 AD変換の結果をLCDに表示する »

2012年7月 8日 (日)

PICのお勉強(29) C言語編 16F88でA/D変換

16f88_ad A/D変換をやってみたくて,PICを16F88に変えました。16F84Aとピン配置が同じだからありがたいですね。
 ここの例を参考に,「RA0(AN0)の入力電圧をA/D変換して,RB3につないだLEDの点滅周期を変える」ってのをやってみました。
ソースはこれ→lesson29.c
 やってることは大したことないかもしれないけど,なんだか大きな前進をしたような気がするぞ
 設定すべき項目がたくさんあって大変ですが,16F88の各種機能を設定する特殊レジスタについてはここが大いに参考になります。感謝です。

/************************************
16F88 HI-TECH C v.9.83
RA0(AN0)の入力電圧をA/D変換してLED点滅周期変える
************************************/

#define _LEGACY_HEADERS
#include "pic.h"
#include "stdlib.h"
#define _XTAL_FREQ 4000000
__CONFIG(CCPRB3 & DEBUGDIS & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);

unsigned int adconv();
unsigned int tmp;
unsigned int i;
char str[7];

void main()
{
OSCCON = 0b0110000; // 内蔵OSC 4MHz
ADCS2 = 0; //AD変換クロック値設定
ADCS1 = 0;
ADCS0 = 1;
ADFM = 1; // AD変換結果は右詰めで格納
VCFG1 = 0; // 基準電圧はVddとVss
VCFG0 = 0;
ANSEL = 0b00000001; // RA0(AN0)はアナログ
TRISA = 0b00000001; // RA0(AN0)入力
TRISB = 0b00000000; // すべて出力
PORTA = 0b00000000;
PORTB = 0b00000000;

while (1)
{
tmp = adconv();
RB3 = 1;
for(i = 0; i<tmp; i++){};
__delay_ms(2);
RB3 = 0;
for(i = 0; i<tmp; i++){};
__delay_ms(2);
}
}

unsigned int adconv()
{
CHS2 = 0; //AD変換ポート設定 RA0(AN0)
CHS1 = 0;
CHS0 = 0;
ADON = 1; //AD変換ON
__delay_us(20); //アクィジョン時間 20us
GODONE = 1; //AD変換開始
while(GODONE); //変換完了待ち
return (ADRESH<<8) + ADRESL;
}

| |

« PICのお勉強(28) C言語編 SD1602を4bitモードで使ってみる | トップページ | PICのお勉強(30) C言語編 AD変換の結果をLCDに表示する »

PICマイコン」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: PICのお勉強(29) C言語編 16F88でA/D変換:

« PICのお勉強(28) C言語編 SD1602を4bitモードで使ってみる | トップページ | PICのお勉強(30) C言語編 AD変換の結果をLCDに表示する »