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