Subversion Repositories svnkaklik

Rev

Rev 229 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 229 Rev 234
Line 1... Line 1...
1
//********* Robot Camerus pro IstRobot 2007 ************
1
//********* Robot Camerus pro IstRobot 2007 ************
2
//"$Id: camerus.c 229 2007-04-09 11:41:19Z kakl $"
2
//"$Id: camerus.c 234 2007-04-16 21:19:54Z kaklik $"
3
//*****************************************************
3
//*****************************************************
4
 
4
 
5
#include ".\camerus.h"
5
#include ".\camerus.h"
6
 
6
 
7
#USE FAST_IO (C)     // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
7
#USE FAST_IO (C)     // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
8
 
8
 
-
 
9
#define CAMERA_adr   0xC0
-
 
10
#define SONAR_adr    0xE0
-
 
11
 
9
// A/D vstupy
12
// A/D vstupy
10
#define  RMAX     4  // AN4/RA5 - leve cidlo na vyjeti z cary
13
#define  RMAX     4  // AN4/RA5 - leve cidlo na vyjeti z cary
11
#define  LMAX     3  // AN3/RA3 - prave cidlo na vyjeti z cary
14
#define  LMAX     3  // AN3/RA3 - prave cidlo na vyjeti z cary
12
#define  CERVENA  2  // AN2/RA2 - cervene kroutitko
15
#define  CERVENA  2  // AN2/RA2 - cervene kroutitko
13
#define  ZELENA   1  // AN1/RA0 - zelene kroutitko
16
#define  ZELENA   1  // AN1/RA0 - zelene kroutitko
Line 206... Line 209...
206
   setup_ccp1(CCP_PWM); // RC1               // PWM pro motory
209
   setup_ccp1(CCP_PWM); // RC1               // PWM pro motory
207
   setup_ccp2(CCP_PWM); // RC2
210
   setup_ccp2(CCP_PWM); // RC2
208
   setup_comparator(NC_NC_NC_NC);
211
   setup_comparator(NC_NC_NC_NC);
209
   setup_vref(FALSE);
212
   setup_vref(FALSE);
210
 
213
 
211
   set_tris_c(0b11111001);     // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky
214
   set_tris_c(0b11111001);     // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
212
 
215
 
213
   set_pwm1_duty(0);    // Zastav motory
216
   set_pwm1_duty(0);    // Zastav motory
214
   set_pwm2_duty(0);
217
   set_pwm2_duty(0);
215
   output_low(MOT_L);   // Nastav smer vpred
218
   output_low(MOT_L);   // Nastav smer vpred
216
   output_low(MOT_R);
219
   output_low(MOT_R);
Line 220... Line 223...
220
   NightRider(1);    // Aby se poznalo, ze byl RESET
223
   NightRider(1);    // Aby se poznalo, ze byl RESET
221
                     // taky se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
224
                     // taky se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
222
 
225
 
223
   //... Nastaveni sonaru ...
226
   //... Nastaveni sonaru ...
224
   i2c_start();
227
   i2c_start();
225
   i2c_write(0xE0);
228
   i2c_write(SONAR_adr);
226
   i2c_write(0x02);  // dosah
229
   i2c_write(0x02);  // dosah
227
   i2c_write(0x03);  // n*43mm
230
   i2c_write(0x03);  // n*43mm
228
   i2c_stop();
231
   i2c_stop();
229
   i2c_start();
232
   i2c_start();
230
   i2c_write(0xE0);
233
   i2c_write(SONAR_adr);
231
   i2c_write(0x01);  // zesileni
234
   i2c_write(0x01);  // zesileni
232
   i2c_write(0x01);  // male, pro eliminaci echa z minuleho mereni
235
   i2c_write(0x01);  // male, pro eliminaci echa z minuleho mereni
233
   i2c_stop();
236
   i2c_stop();
234
   
237
 
235
// pro ladeni sonaru
238
// pro ladeni sonaru
236
/*
239
/*
237
   while(true)
240
   while(true)
238
   {
241
   {
239
         i2c_start();     // Sonar Ping
242
         i2c_start();     // Sonar Ping
Line 254... Line 257...
254
   }
257
   }
255
*/
258
*/
256
 
259
 
257
   //... Nastaveni kamery ...
260
   //... Nastaveni kamery ...
258
   i2c_start();      // Soft RESET kamery
261
   i2c_start();      // Soft RESET kamery
259
   i2c_write(0xC0);        // Pro single slave musi mit vsechny zapisy adresu C0h
262
   i2c_write(CAMERA_adr);        // Pro single slave musi mit vsechny zapisy adresu C0h
260
   i2c_write(0x12);        // Adresa registru COMH
263
   i2c_write(0x12);        // Adresa registru COMH
261
   i2c_write(0x80 | 0x24); // Zapis ridiciho slova
264
   i2c_write(0x80 | 0x24); // Zapis ridiciho slova
262
   i2c_stop();
265
   i2c_stop();
263
 
266
 
264
   i2c_start();      // BW
267
   i2c_start();      // BW
265
   i2c_write(0xC0);
268
   i2c_write(CAMERA_adr);
266
   i2c_write(0x28);
269
   i2c_write(0x28);
267
   i2c_write(0b01000001);
270
   i2c_write(0b01000001);
268
   i2c_stop();
271
   i2c_stop();
269
 
272
 
270
/*
273
/*
Line 280... Line 283...
280
   i2c_write(0x04 | 0x03);
283
   i2c_write(0x04 | 0x03);
281
   i2c_stop();
284
   i2c_stop();
282
*/
285
*/
283
 
286
 
284
   i2c_start();      // Fame Rate
287
   i2c_start();      // Fame Rate
285
   i2c_write(0xC0);
288
   i2c_write(CAMERA_adr);
286
   i2c_write(0x2B);
289
   i2c_write(0x2B);
287
   i2c_write(0x00);  // cca 17ms (puvodni hodnota 5Eh = 20ms)
290
   i2c_write(0x00);  // cca 17ms (puvodni hodnota 5Eh = 20ms)
288
   i2c_stop();
291
   i2c_stop();
289
 
292
 
290
   i2c_start();      // VSTRT
293
   i2c_start();      // VSTRT
291
   i2c_write(0xC0);
294
   i2c_write(CAMERA_adr);
292
   i2c_write(0x19);
295
   i2c_write(0x19);
293
   i2c_write(118);   // prostredni radka
296
   i2c_write(118);   // prostredni radka
294
   i2c_stop();
297
   i2c_stop();
295
 
298
 
296
   i2c_start();      // VEND
299
   i2c_start();      // VEND
297
   i2c_write(0xC0);
300
   i2c_write(CAMERA_adr);
298
   i2c_write(0x1A);
301
   i2c_write(0x1A);
299
   i2c_write(118);
302
   i2c_write(118);
300
   i2c_stop();
303
   i2c_stop();
301
 
304
 
302
   NightRider(1);    // Musi se dat cas kamere na AGC a AEC
305
   NightRider(1);    // Musi se dat cas kamere na AGC a AEC
303
 
306
 
304
   { // Mereni expozice
307
   { // Mereni expozice
305
      int8 t1,t2;
308
      int8 t1,t2;
306
 
309
 
307
      i2c_start();      // Brightness, zacni od uplne tmy
310
      i2c_start();      // Brightness, zacni od uplne tmy
308
      i2c_write(0xC0);
311
      i2c_write(CAMERA_adr);
309
      i2c_write(0x06);
312
      i2c_write(0x06);
310
      i2c_write(0);  // 80h default
313
      i2c_write(0);  // 80h default
311
      i2c_stop();
314
      i2c_stop();
312
      delay_ms(50);
315
      delay_ms(50);
313
 
316
 
314
      for(offset=0x04;offset<(255-0x04);offset+=0x04)   // Zacni od jasu 10h
317
      for(offset=0x04;offset<(255-0x04);offset+=0x04)   // Zacni od jasu 10h
315
      {
318
      {
316
         i2c_start();      // Brightness
319
         i2c_start();      // Brightness
317
         i2c_write(0xC0);
320
         i2c_write(CAMERA_adr);
318
         i2c_write(0x06);
321
         i2c_write(0x06);
319
         i2c_write(offset);  // 80h default
322
         i2c_write(offset);  // 80h default
320
         i2c_stop();
323
         i2c_stop();
321
         disp(offset);
324
         disp(offset);
322
         delay_ms(50);
325
         delay_ms(50);
Line 346... Line 349...
346
   offset=read_adc();
349
   offset=read_adc();
347
   offset &= 0b11111100;   // Dva nejnizsi bity ignoruj
350
   offset &= 0b11111100;   // Dva nejnizsi bity ignoruj
348
//   offset += 0x70;         // Jas nebude nikdy nizsi
351
//   offset += 0x70;         // Jas nebude nikdy nizsi
349
   disp(offset);
352
   disp(offset);
350
   i2c_start();            // Brightness
353
   i2c_start();            // Brightness
351
   i2c_write(0xC0);
354
   i2c_write(CAMERA_adr);
352
   i2c_write(0x06);
355
   i2c_write(0x06);
353
   i2c_write(offset);  // 80h default
356
   i2c_write(offset);  // 80h default
354
   i2c_stop();
357
   i2c_stop();
355
   delay_ms(1000);   // Nech hodnotu chvili na displayi
358
   delay_ms(1000);   // Nech hodnotu chvili na displayi
356
 
359