/** datalgr_t_h 完成
* PIC 12F683 使用
* RS-232Cをsoft UARTで使う。
* AD変換を使ってアナログデータを取り込む (AN0 ,AN2,AN3)
* 温度と湿度を取り込む
* 基準電圧としてシャントレギュレーターを使う
*
* 作成開始 2010/10/29 -->2010/11/01
*
* PIN 1 : +5V (VDD)
* PIN 2 : GP5 データ出力
* PIN 3 : GP4 アナログ入力3 AN3
* PIN 4 : GP3 データ入力
* PIN 5 : GP2 アナログ入力2 AN2
* PIN 6 : GP1 Vref 参照電圧入力 シャントレギュレーターより Vref=2.495V
* PIN 7 : GP0 アナログ入力0 AN0
* PIN 8 : GND
*
*
*Clock: 8.0MHz 内蔵発振器使用
*Device Flags:
* _CP_OFF _MCLRE_OFF _PWRTE_ON _WDT_OFF _INTRC_OSC_NOCLKOUT
*
* MikroC v8.1.0.0
*/
extern void crlf() ; // CR+LF 関数を宣言
void main() {
//使用変数の定義
int temp;
unsigned short ro = 0; // RS232C input-data
unsigned short i=0 ;
unsigned short j=0 ;
unsigned short *er ; // RS232C read error pointer
char txt[7] ; // IntToStr 用のバッファー
char data ; // RS232C input-data
//マイコンの初期化
//内臓クロック8MHzに設定
OSCCON.IRCF2=1;
OSCCON.IRCF1=1;
OSCCON.IRCF0=1;
//A/D変換clock設定 0.125us*16倍=2.0us
ANSEL.ADCS2=1;
ANSEL.ADCS1=0;
ANSEL.ADCS0=1;
// A/D利用ピンの設定 // ANALOG=1, DIGITAL=0 //0
ANSEL.ANS3 = 1; //AN3(GP4)をアナログ使用
ANSEL.ANS2 = 1; //AN2(GP2)をアナログ使用
ANSEL.ANS1 = 1; //AN1(GP1)をアナログ使用 (Vref入力として利用)
ANSEL.ANS0 = 1; //AN0(GP0)をアナログ使用
GPIO = 0b00000000; //GPIOの中身をきれいにする
// 参考 TRISIO = 0b00010000; //GP4を1:入力、他5個を0:出力設定
TRISIO = 0b00011111; //GP5を0:出力に、他5個を1:入力に設定
/** 参考 VRCON = 0b00000000; 参照電圧利用 Vref 利用 コンパレーターとして使う時に必要なようだ(未確認)
* B7:1 VREF利用可能 0 不可
* B6; 使用しない 0
* B5(VRR):1 LOW RANGE 0 HIGH RANGE
* B4 使用しない 0
* B3-B0:Value selection
* B3
* B2
* B1
* B0:
* B6とB4は使わない
*/
/** 参照電圧をどれにするか
* ADCON0のVCFGビットを1にすると6番pin(GP1)を基準電圧にする
* 今回の修正点
*
*
*/
ADCON0.VCFG = 1 ; // ADCON0のBIT6(VCFG)で基準電圧をどれにするか 1:6番pinを基準電圧 0:電源を基準電圧
//AD変換の値を、右そろえか、左そろえか決める
ADCON0.ADFM=1; // 右そろえ
//マイコンの初期化終わり
er = &ro ; // pointer er に roのアドレスを与える
// RS232C Initialize 8bit non-parity 9600 baud rate
//void Soft_Uart_Init(unsigned short port, unsigned short rx inport ,
// unsigned short tx outport, unsigned short baud_rate, unsigned short inverted);
Soft_Uart_Init(GPIO, 3, 5,9600,0) ;
do {
do {
data = Soft_Uart_Read(er) ; // Receive data
} while (*er) ;
// Soft_Uart_Write(data) ; // send INPUT data via UART
// crlf() ; // send CR+LF
//アナログデータの取得
//10bit(0~1023)
switch ( data ) {
case '0' :{
temp = ADC_Read( ANS0 ); //ANS0 アナログ値を読む
IntToStr(temp,txt); // 数字を文字に変換
for ( i=0 ; i<7 ; i++ ) {
Soft_Uart_Write( txt[i] ) ; // Send アナログ値 via UART
// Soft_Uart_Write( ' ' ) ; // ブランク
}
break;
}
case '2' : {
temp = ADC_Read( ANS2 ); //ANS2 アナログ値を読む
IntToStr(temp,txt); // 数字を文字に変換
for ( i=0 ; i<7 ; i++ ) {
Soft_Uart_Write( txt[i] ) ; // Send アナログ値 via UART
// Soft_Uart_Write( ' ' ) ; // ブランク
}
break ;
}
case '3' : {
temp = ADC_Read( ANS3 ); //ANS3 アナログ値を読む
IntToStr(temp,txt); // 数字を文字に変換
for ( i=0 ; i<7 ; i++ ) {
Soft_Uart_Write( txt[i] ) ; // Send アナログ値 via UART
// Soft_Uart_Write( ' ' ) ; // ブランク
}
break ;
}
default : {
Soft_Uart_Write( 'E' ) ; // Send error via UART
}
}
crlf() ; // send CR+LF
} while (1) ;
}
// CR+LF 関数
void crlf() {
Soft_Uart_Write(0x0D) ; // Send CR CODE via UART
// Soft_Uart_Write(0x0A) ; // Send LF CODE via UART
}