Rev 2978 Rev 2979
1 #define VERSION "0.1" 1 #define VERSION "0.1"
2 #define ID "$Id: main.c 2916 2013-04-14 17:42:03Z kaklik $" 2 #define ID "$Id: main.c 2916 2013-04-14 17:42:03Z kaklik $"
3   3  
4 #include "main.h" 4 #include "main.h"
5   5  
6 #use i2c(master, sda=PIN_B0, scl=PIN_B1) 6 #use i2c(master, sda=PIN_C4, scl=PIN_C3)
7 #use rs232(baud=9600,parity=N,xmit=PIN_B3,rcv=PIN_B2,bits=8) //rcv TXD xmit RXD 7 #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) //rcv TXD xmit RXD
8   8  
9 #define MPL3115_ADDR_R 0xC1 //addresa pro cteni 9 #define MPL3115_ADDR_R 0xC1 //addresa pro cteni
10 #define MPL3115_ADDR_W 0xC0 10 #define MPL3115_ADDR_W 0xC0
11   11  
12   12  
13 void mpl3115_setA (void) //nastavení pro výšku 13 void mpl3115_setA (void) //nastavení pro výšku
14 { 14 {
15   15  
16 16
17 i2c_start(); //STANDBY mode 17 i2c_start(); //STANDBY mode
18 I2C_Write(MPL3115_ADDR_W); 18 I2C_Write(MPL3115_ADDR_W);
19 I2C_write(0x26); 19 I2C_write(0x26);
20 I2C_write(0xB8); 20 I2C_write(0xB8);
21 i2c_stop(); 21 i2c_stop();
22 22
23 i2c_start(); //PT_DATA_CFG set 23 i2c_start(); //PT_DATA_CFG set
24 I2C_Write(MPL3115_ADDR_W); 24 I2C_Write(MPL3115_ADDR_W);
25 I2C_write(0x13); 25 I2C_write(0x13);
26 I2C_write(0x07); //hodnota 26 I2C_write(0x07); //hodnota
27 i2c_stop(); 27 i2c_stop();
28 28
29 i2c_start(); //ACTIVE mode 29 i2c_start(); //ACTIVE mode
30 I2C_Write(MPL3115_ADDR_W); 30 I2C_Write(MPL3115_ADDR_W);
31 I2C_write(0x26); 31 I2C_write(0x26);
32 I2C_write(0xB9); 32 I2C_write(0xB9);
33 i2c_stop(); 33 i2c_stop();
34 } 34 }
35 35
36 void mpl3115_setP (void) //nastavení pro tlak 36 void mpl3115_setP (void) //nastavení pro tlak
37 { 37 {
38   38  
39 39
40 i2c_start(); //STANDBY mode 40 i2c_start(); //STANDBY mode
41 I2C_Write(MPL3115_ADDR_W); 41 I2C_Write(MPL3115_ADDR_W);
42 I2C_write(0x26); 42 I2C_write(0x26);
43 I2C_write(0xB8); 43 I2C_write(0xB8);
44 i2c_stop(); 44 i2c_stop();
45 45
46 i2c_start(); //PT_DATA_CFG set 46 i2c_start(); //PT_DATA_CFG set
47 I2C_Write(MPL3115_ADDR_W); 47 I2C_Write(MPL3115_ADDR_W);
48 I2C_write(0x13); 48 I2C_write(0x13);
49 I2C_write(0x07); //hodnota 49 I2C_write(0x07); //hodnota
50 i2c_stop(); 50 i2c_stop();
51 51
52 i2c_start(); //ACTIVE mode 52 i2c_start(); //ACTIVE mode
53 I2C_Write(MPL3115_ADDR_W); 53 I2C_Write(MPL3115_ADDR_W);
54 I2C_write(0x26); 54 I2C_write(0x26);
55 I2C_write(0x39); 55 I2C_write(0x39);
56 i2c_stop(); 56 i2c_stop();
57 } 57 }
58   58  
59   59  
60 byte mpl3115_read (byte reg) 60 byte mpl3115_read (byte reg)
61 { 61 {
62 byte i; 62 byte i;
63 63
64 i2c_start(); 64 i2c_start();
65 I2C_Write(MPL3115_ADDR_W); 65 I2C_Write(MPL3115_ADDR_W);
66 I2C_write(reg); 66 I2C_write(reg);
67 i2c_start(); 67 i2c_start();
68 I2C_Write(MPL3115_ADDR_R); 68 I2C_Write(MPL3115_ADDR_R);
69 i=i2c_read(0); 69 i=i2c_read(0);
70 i2c_stop(); 70 i2c_stop();
71 71
72 return i; 72 return i;
73 } 73 }
74   74  
75   75  
76 float mpl3115_T (void) //teplota ve stupnich 76 float mpl3115_T (void) //teplota ve stupnich
77 { 77 {
78 int m; 78 int m;
79 float l, t; 79 float l, t;
80 80
81 m = mpl3115_read (0x04); 81 m = mpl3115_read (0x04);
82 l = (float)(mpl3115_read(0x05)>>4)/16.0; 82 l = (float)(mpl3115_read(0x05)>>4)/16.0;
83 t = (float)(M + L); 83 t = (float)(M + L);
84 return t; 84 return t;
85 } 85 }
86   86  
87 float mpl3115_A (void) //vyska v m 87 float mpl3115_A (void) //vyska v m
88 { 88 {
89   89  
90 int16 m, c; 90 int16 m, c;
91 float l, a; 91 float l, a;
92 92
93 m = mpl3115_read (0x01); 93 m = mpl3115_read (0x01);
94 c = mpl3115_read (0x02); 94 c = mpl3115_read (0x02);
95 l = (float)(mpl3115_read(0x03)>>4)/16.0; 95 l = (float)(mpl3115_read(0x03)>>4)/16.0;
96 a = (float)((m << 8)|c) + l; 96 a = (float)((m << 8)|c) + l;
97 return a; 97 return a;
98 } 98 }
99   99  
100   100  
101 float mpl3115_P (void) //tlak v Pa 101 float mpl3115_P (void) //tlak v Pa
102 { 102 {
103 unsigned int32 m; 103 unsigned int32 m;
104 unsigned int16 c; 104 unsigned int16 c;
105 unsigned int l; 105 unsigned int l;
106 float p, l1; 106 float p, l1;
107 107
108 m = mpl3115_read (0x01); 108 m = mpl3115_read (0x01);
109 c = mpl3115_read (0x02); 109 c = mpl3115_read (0x02);
110 l = mpl3115_read(0x03); 110 l = mpl3115_read(0x03);
111   111  
112 l1= (float)(l>>4)/4.0; 112 l1= (float)(l>>4)/4.0;
113 p = (float)((m << 10)|(c<<2)|(l>>6)) + l1; 113 p = (float)((m << 10)|(c<<2)|(l>>6)) + l1;
114   114  
115 return p; 115 return p;
116 } 116 }
117   117  
118 void main() 118 void main()
119 { 119 {
120   120  
121 float p, t, a; 121 float p, t, a;
122 printf("Tlakomer nebo vyskomer \r\n",); 122 printf("\r\nMLAB Barometer and Altimeter demo code \r\n",);
-   123 printf("Temperature [deg C] Preassure [Pa] Altitude [m] \r\n",);
123 124
124 while(TRUE) 125 while(TRUE)
125 { 126 {
126 mpl3115_setP(); //nastaveni pro tlak a teplotu 127 mpl3115_setP(); //nastaveni pro tlak a teplotu
127 delay_ms (500); 128 delay_ms (500);
128 t=mpl3115_T(); 129 t=mpl3115_T();
129 p=mpl3115_P(); 130 p=mpl3115_P();
130 131
131 mpl3115_setA(); //nastaveni pro vysku a teplotu 132 mpl3115_setA(); //nastaveni pro vysku a teplotu
132 delay_ms (500); 133 delay_ms (500);
133 a=mpl3115_A(); 134 a=mpl3115_A();
134   135  
135   -  
136 printf("Teplota: %1.4f\r\n", t); 136 printf("%3.1f %6.1f %5.2f \r\n", t, p, a);
137 printf("Tlak: %10.4f(Pa)\r\n", p); -  
138 printf("Výška: %10.4f(m)\r\n", a); -  
139   137  
140 delay_ms (1000); 138 delay_ms (1000);
141 } 139 }
142 } 140 }
143   141  
144   142