« PICのお勉強(29) C言語編 16F88でA/D変換 | トップページ | PICのお勉強(31) C言語編 LM35DZで温度計 »

2012年7月 9日 (月)

PICのお勉強(30) C言語編 AD変換の結果をLCDに表示する

Adsd16024bit_mode 前回の回路にLCDをつけて,A/D変換して得られた10bitの数値データを表示してみました。
 基準電圧が5Vだから1023が5Vにあたり,分解能は約5mVってことになりますね。そこで,データを5倍してmVの単位でLCDに表示しようと思います。要するにこれは電圧計ですな。
ソースはこれ→lesson30.c
 数値データをどうやったらLCDに表示できるのか悩みましたが,itoa(Integer to Asciiって意味?)という便利な関数があるんですな。コレで文字列にしといてLCDに送ればいいみたい。あ,あとlcd.cの「TRISA=0;」をコメントアウトしないといけません。「TRISA = 0b00000001;」としといてもいいけど。
 やってみると,ちゃんと表示されるじゃないですか。アタリマエかもしれないけど嬉しいですなあ。
Lesson30 LCDは,10msごとに表示を書き換えてるので,ちょっとチラチラするんだけど,これはなんか良い方法があるのかなあ? また調べときます(^^;)
 あと,LCDのコントラスト調整についてですが,SD1602の3ピン(VO)にダイオードを1本つけておくだけで,電源電圧が多少変わっても自動的に適正コントラストになるようです。VO端子は0.5V程度の電位にしておけば,適正コントラストになるらしいのですが,ダイオードを使えば約0.6Vになりますものね。ここに書いてありました。素晴らしいアイデアです。

/************************************
16F88 HI-TECH C v.9.83
RA0(AN0)の入力電圧をA/D変換してLCDに表示する
************************************/

#define _LEGACY_HEADERS
#include "pic.h"
#include "stdlib.h"
#include "lcd.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;

 lcd_init(); //SD1602の初期化
while (1)
{
tmp = adconv()*5;
itoa(str,tmp,10);

lcd_clear(); //表示クリア
lcd_goto(0); //カーソルを0行目の先頭に移動する
lcd_puts(str);
lcd_puts("mV");
__delay_ms(10); //10msの時間待ち

}
}

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のお勉強(29) C言語編 16F88でA/D変換 | トップページ | PICのお勉強(31) C言語編 LM35DZで温度計 »

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

コメント

物理の教師とかををなされているのですか?

投稿: Coma | 2012年7月12日 (木) 15:44

コメントを書く



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


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



トラックバック


この記事へのトラックバック一覧です: PICのお勉強(30) C言語編 AD変換の結果をLCDに表示する:

« PICのお勉強(29) C言語編 16F88でA/D変換 | トップページ | PICのお勉強(31) C言語編 LM35DZで温度計 »