Rev 930 Rev 931
Line 1... Line 1...
1 /**** IR Mrakomer3 ****/ 1 /**** IR Mrakomer3 ****/
2 #define VERSION "3.0" 2 #define VERSION "3.0"
3 #define ID "$Id: irmrak3.c 930 2007-12-24 10:02:51Z kakl $" 3 #define ID "$Id: irmrak3.c 931 2007-12-27 15:03:55Z kakl $"
4 #include "irmrak3.h" 4 #include "irmrak3.h"
5   5  
6 #define SA 0x00 // Slave Address (0 for single slave / 0x5A<<1 default) 6 #define SA 0x00 // Slave Address (0 for single slave / 0x5A<<1 default)
7 #define RAM_Access 0x00 // RAM access command 7 #define RAM_Access 0x00 // RAM access command
8 #define RAM_Tobj1 0x07 // To1 address in the eeprom 8 #define RAM_Tobj1 0x07 // To1 address in the eeprom
9 #define RAM_Tamb 0x06 // Ta address in the eeprom 9 #define RAM_Tamb 0x06 // Ta address in the eeprom
10 #define HEATING PIN_A2 // Heating for defrosting 10 #define HEATING PIN_A2 // Heating for defrosting
11 #define MAXHEAT 60 // Number of cycles for heating 11 #define MAXHEAT 60 // Number of cycles for heating
12   12  
13 char VER[4]=VERSION; 13 char VER[4]=VERSION;
14 char REV[50]=ID; 14 char REV[50]=ID;
-   15  
-   16 int8 heat;
-   17  
-   18 #INT_RDA
-   19 rs232_handler()
-   20 {
-   21 char ch;
-   22  
-   23 if (getc()=='h')
-   24 {
-   25 heat=0; // Need warmer
-   26 }
-   27 else
-   28 {
-   29 heat=MAXHEAT; // Stop heating
-   30 }
-   31 }
-   32  
15   33  
16 unsigned char PEC_calculation(unsigned char pec[]) // CRC calculation 34 unsigned char PEC_calculation(unsigned char pec[]) // CRC calculation
17 { 35 {
18 unsigned char crc[6]; 36 unsigned char crc[6];
19 unsigned char BitPosition=47; 37 unsigned char BitPosition=47;
Line 87... Line 105...
87 { 105 {
88 unsigned char arr[6]; // Buffer for the sent bytes 106 unsigned char arr[6]; // Buffer for the sent bytes
89 int8 crc; // Readed CRC 107 int8 crc; // Readed CRC
90 int16 temp; // Readed temperature 108 int16 temp; // Readed temperature
91   109  
-   110 disable_interrupts(GLOBAL);
92 i2c_stop(); 111 i2c_stop();
93 i2c_start(); 112 i2c_start();
94 i2c_write(addr); 113 i2c_write(addr);
95 i2c_write(RAM_Access|select); // Select the teperature sensor in device 114 i2c_write(RAM_Access|select); // Select the teperature sensor in device
96 i2c_start(); 115 i2c_start();
Line 98... Line 117...
98 arr[2]=i2c_read(1); // lo 117 arr[2]=i2c_read(1); // lo
99 arr[1]=i2c_read(1); // hi 118 arr[1]=i2c_read(1); // hi
100 temp=MAKE16(arr[1],arr[2]); 119 temp=MAKE16(arr[1],arr[2]);
101 crc=i2c_read(0); //crc 120 crc=i2c_read(0); //crc
102 i2c_stop(); 121 i2c_stop();
-   122 enable_interrupts(GLOBAL);
103   123  
104 arr[5]=addr; 124 arr[5]=addr;
105 arr[4]=RAM_Access|select; 125 arr[4]=RAM_Access|select;
106 arr[3]=addr; 126 arr[3]=addr;
107 arr[0]=0; 127 arr[0]=0;
Line 112... Line 132...
112   132  
113 void main() 133 void main()
114 { 134 {
115 unsigned int16 n, temp, tempa; 135 unsigned int16 n, temp, tempa;
116 signed int16 ta, to; 136 signed int16 ta, to;
117 int8 i; -  
118   137  
119 output_low(HEATING); // Heating off 138 output_low(HEATING); // Heating off
120 setup_wdt(WDT_2304MS); // Setup Watch Dog 139 setup_wdt(WDT_2304MS); // Setup Watch Dog
121 setup_adc_ports(NO_ANALOGS); 140 setup_adc_ports(NO_ANALOGS);
122 setup_adc(ADC_OFF); 141 setup_adc(ADC_OFF);
Line 132... Line 151...
132 printf("* %s *\n\r\n\r",REV); 151 printf("* %s *\n\r\n\r",REV);
133 tempa=ReadTemp(SA, RAM_Tamb); // Dummy read 152 tempa=ReadTemp(SA, RAM_Tamb); // Dummy read
134 temp=ReadTemp(SA, RAM_Tobj1); 153 temp=ReadTemp(SA, RAM_Tobj1);
135   154  
136 n=0; 155 n=0;
137 i=MAXHEAT; 156 heat=MAXHEAT;
-   157
-   158 enable_interrupts(GLOBAL);
-   159 enable_interrupts(INT_RDA);
138   160  
139 while(TRUE) 161 while(TRUE)
140 { 162 {
141 n++; 163 n++;
142   164  
143 if (kbhit()) // Would you like warmer? -  
144 { -  
145 getc(); i=0; -  
146 } -  
147   -  
148 tempa=ReadTemp(SA, RAM_Tamb); // Read temperatures from sensor 165 tempa=ReadTemp(SA, RAM_Tamb); // Read temperatures from sensor
149 temp=ReadTemp(SA, RAM_Tobj1); 166 temp=ReadTemp(SA, RAM_Tobj1);
150   167  
151 if((0==tempa)||(0==temp)) // Transfer error? 168 if((0==tempa)||(0==temp)) // Transfer error?
152 { 169 {
Line 157... Line 174...
157 { 174 {
158 to=(signed int16)(temp*2-27315)/100; 175 to=(signed int16)(temp*2-27315)/100;
159 ta=(signed int16)(tempa*2-27315)/100; 176 ta=(signed int16)(tempa*2-27315)/100;
160   177  
161 printf("%Lu;ta:%Ld;ts:%Ld;sta:",n,ta,to); 178 printf("%Lu;ta:%Ld;ts:%Ld;sta:",n,ta,to);
162 if (i>=MAXHEAT) 179 if (heat>=MAXHEAT)
163 { 180 {
164 printf("0\n\r"); 181 printf("0\n\r");
165 output_low(HEATING); 182 output_low(HEATING);
166 } 183 }
167 else 184 else
168 { 185 {
169 printf("1\n\r"); 186 printf("1\n\r");
170 output_high(HEATING); 187 output_high(HEATING);
171 i++; 188 heat++;
172 } 189 }
173 }; 190 };
174 restart_wdt(); 191 restart_wdt();
175 delay_ms(900); 192 delay_ms(900);
176 } 193 }