stm32l0104p6 mcp3425 2048000 1

Dependencies:   mbed

Committer:
caa45040
Date:
Fri Apr 30 09:22:47 2021 +0000
Revision:
0:2fb1d65282c2
stm32l010f4p6 2048000

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caa45040 0:2fb1d65282c2 1 #include "mbed.h"
caa45040 0:2fb1d65282c2 2
caa45040 0:2fb1d65282c2 3 //10の割り算 0から1028までは、正しい。主に0から999
caa45040 0:2fb1d65282c2 4 #define DVI10(n) ((n*205)>>11)
caa45040 0:2fb1d65282c2 5
caa45040 0:2fb1d65282c2 6 //16ビットadcの4ビットの変換テーブル
caa45040 0:2fb1d65282c2 7 #define ADC4BIT { 0 , 62 ,125 ,187 ,250 ,312 ,375 ,437 ,500 ,562 ,625 ,687 ,750 ,812 ,875 ,937 }
caa45040 0:2fb1d65282c2 8
caa45040 0:2fb1d65282c2 9 //AnalogIn adc_vbat(A3); //PA_4
caa45040 0:2fb1d65282c2 10
caa45040 0:2fb1d65282c2 11 #define ADDR (0xD0) // address
caa45040 0:2fb1d65282c2 12 #define ADDR_LCD (0x7C) // address
caa45040 0:2fb1d65282c2 13
caa45040 0:2fb1d65282c2 14 //I2C i2c(I2C_SDA, I2C_SCL); //767
caa45040 0:2fb1d65282c2 15 //I2C i2c(dp5, dp27); //1114
caa45040 0:2fb1d65282c2 16 I2C i2c(PA_10, PA_9); //010
caa45040 0:2fb1d65282c2 17
caa45040 0:2fb1d65282c2 18 char data_read[8]; //i2cバッファー
caa45040 0:2fb1d65282c2 19
caa45040 0:2fb1d65282c2 20 char INIT_com[]={0x0,0x38,
caa45040 0:2fb1d65282c2 21 0x0,0x39,
caa45040 0:2fb1d65282c2 22 0x0,0x4,
caa45040 0:2fb1d65282c2 23 0x0,0x14,
caa45040 0:2fb1d65282c2 24 0x0,0x70,
caa45040 0:2fb1d65282c2 25 0x0,0x56,
caa45040 0:2fb1d65282c2 26 0x0,0x6C,
caa45040 0:2fb1d65282c2 27 0x0,0x38,
caa45040 0:2fb1d65282c2 28 0x0,0xC,
caa45040 0:2fb1d65282c2 29 0x0,0x1,
caa45040 0:2fb1d65282c2 30 0x40,0x41};
caa45040 0:2fb1d65282c2 31
caa45040 0:2fb1d65282c2 32 char INIT_cls[]={0x0,0x1};
caa45040 0:2fb1d65282c2 33
caa45040 0:2fb1d65282c2 34 char ch_hex_a_b[5];
caa45040 0:2fb1d65282c2 35 char *ch_hex_a(int l_num)
caa45040 0:2fb1d65282c2 36 {
caa45040 0:2fb1d65282c2 37 int a,b,c;
caa45040 0:2fb1d65282c2 38
caa45040 0:2fb1d65282c2 39 b=DVI10(l_num);
caa45040 0:2fb1d65282c2 40 c=l_num-(b*10);
caa45040 0:2fb1d65282c2 41 l_num=b;
caa45040 0:2fb1d65282c2 42 a=DVI10(l_num);
caa45040 0:2fb1d65282c2 43 b=l_num-(a*10);
caa45040 0:2fb1d65282c2 44
caa45040 0:2fb1d65282c2 45 ch_hex_a_b[0] = '@';
caa45040 0:2fb1d65282c2 46 ch_hex_a_b[1] = '0' + a;
caa45040 0:2fb1d65282c2 47 ch_hex_a_b[2] = '0' + b;
caa45040 0:2fb1d65282c2 48 ch_hex_a_b[3] = '0' + c;
caa45040 0:2fb1d65282c2 49 ch_hex_a_b[4] = 0;
caa45040 0:2fb1d65282c2 50
caa45040 0:2fb1d65282c2 51 return(ch_hex_a_b);
caa45040 0:2fb1d65282c2 52 }
caa45040 0:2fb1d65282c2 53
caa45040 0:2fb1d65282c2 54 int ii; //ループカウンタ
caa45040 0:2fb1d65282c2 55
caa45040 0:2fb1d65282c2 56 int main()
caa45040 0:2fb1d65282c2 57 {
caa45040 0:2fb1d65282c2 58 //printf("767\r\n"); //767
caa45040 0:2fb1d65282c2 59 //液晶の初期化
caa45040 0:2fb1d65282c2 60 for(ii=0;ii<11;ii++){
caa45040 0:2fb1d65282c2 61 i2c.write(ADDR_LCD, &INIT_com[ii*2], 2);wait_ms(2);
caa45040 0:2fb1d65282c2 62 } //for
caa45040 0:2fb1d65282c2 63
caa45040 0:2fb1d65282c2 64 i2c.write(ADDR, "\230", 1); //16bit 15sps PGA x1
caa45040 0:2fb1d65282c2 65
caa45040 0:2fb1d65282c2 66 // int p,s; //767
caa45040 0:2fb1d65282c2 67 int s; //101
caa45040 0:2fb1d65282c2 68
caa45040 0:2fb1d65282c2 69 // float Volts;
caa45040 0:2fb1d65282c2 70 // float Vref = 2.048 ;
caa45040 0:2fb1d65282c2 71
caa45040 0:2fb1d65282c2 72 short bit4[]=ADC4BIT;
caa45040 0:2fb1d65282c2 73
caa45040 0:2fb1d65282c2 74 while (1) {
caa45040 0:2fb1d65282c2 75 //液晶のクリア
caa45040 0:2fb1d65282c2 76 i2c.write(ADDR_LCD,INIT_cls,2);wait_ms(2);
caa45040 0:2fb1d65282c2 77
caa45040 0:2fb1d65282c2 78 // //adcの読み込み
caa45040 0:2fb1d65282c2 79 // s = (adc_vbat.read_u16()>>4);
caa45040 0:2fb1d65282c2 80 //
caa45040 0:2fb1d65282c2 81 // // (4096*165)/2048=330 電圧の100倍に変換
caa45040 0:2fb1d65282c2 82 // //s = 13;
caa45040 0:2fb1d65282c2 83 // p = (s*165) >> 11;
caa45040 0:2fb1d65282c2 84
caa45040 0:2fb1d65282c2 85 //データの読み込み
caa45040 0:2fb1d65282c2 86 i2c.read(ADDR | 1, data_read, 2);
caa45040 0:2fb1d65282c2 87
caa45040 0:2fb1d65282c2 88 s = (data_read[0] * 256 ) + data_read[1];
caa45040 0:2fb1d65282c2 89 //s = 32767;
caa45040 0:2fb1d65282c2 90 // printf("-s=%d\r\n",s); //767
caa45040 0:2fb1d65282c2 91 // printf(" h=%d\r\n",data_read[0]);
caa45040 0:2fb1d65282c2 92 // printf(" l=%d\r\n",data_read[1]);
caa45040 0:2fb1d65282c2 93
caa45040 0:2fb1d65282c2 94 // Volts = s * Vref / 32767.0f ;
caa45040 0:2fb1d65282c2 95 // printf(" f=%f\r\n",Volts );
caa45040 0:2fb1d65282c2 96
caa45040 0:2fb1d65282c2 97 // p = ( (s >> 4) * 1000 ) + (bit4[ s & 0xf ]) ;
caa45040 0:2fb1d65282c2 98 // printf(" q= %d\r\n",p); //767
caa45040 0:2fb1d65282c2 99
caa45040 0:2fb1d65282c2 100 //s=(65536/2/2/2)+1;
caa45040 0:2fb1d65282c2 101
caa45040 0:2fb1d65282c2 102 ii=(s >> 4);
caa45040 0:2fb1d65282c2 103 if ( ii >= 2000 ) { ii = ii - 2000; /*printf("2.\n\r");*/ i2c.write(ADDR_LCD,"@2.",3); }
caa45040 0:2fb1d65282c2 104 else if( ii >= 1000 ) { ii = ii - 1000; /*printf("1.\n\r");*/ i2c.write(ADDR_LCD,"@1.",3); }
caa45040 0:2fb1d65282c2 105 else { /*printf("0.\n\r");*/ i2c.write(ADDR_LCD,"@0.",3); }
caa45040 0:2fb1d65282c2 106
caa45040 0:2fb1d65282c2 107 //printf(" o=%s\r\n",ch_hex_a( ii ) );
caa45040 0:2fb1d65282c2 108 i2c.write(ADDR_LCD, ch_hex_a( ii ) ,4);
caa45040 0:2fb1d65282c2 109
caa45040 0:2fb1d65282c2 110 //printf(" o=%s\r\n",ch_hex_a( (bit4[ s & 0xf ]) ) );
caa45040 0:2fb1d65282c2 111 i2c.write(ADDR_LCD,ch_hex_a( ( (int)bit4[ s & 0xf ])) ,4);
caa45040 0:2fb1d65282c2 112
caa45040 0:2fb1d65282c2 113 // // 32768/(163.84/2)=400 luxに変換
caa45040 0:2fb1d65282c2 114 // p=( ((s>>5)*6) + (s>>7) ) >> 4;
caa45040 0:2fb1d65282c2 115 // //printf(" p=%d\r\n",p); //767
caa45040 0:2fb1d65282c2 116 //
caa45040 0:2fb1d65282c2 117 // i2c.write(ADDR_LCD, ch_hex_a( p ) ,4);
caa45040 0:2fb1d65282c2 118
caa45040 0:2fb1d65282c2 119 wait_ms(1000);
caa45040 0:2fb1d65282c2 120 }//while
caa45040 0:2fb1d65282c2 121
caa45040 0:2fb1d65282c2 122 }//main
caa45040 0:2fb1d65282c2 123
caa45040 0:2fb1d65282c2 124 void error(const char* format, ...){}