Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 175 → Rev 176

/roboti/istrobot/camerus/SW/876/camerus.c
12,10 → 12,53
#define LED PIN_C0 // LED signalizujici start programu
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B7 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
 
#define DATA PIN_B2
#define CP PIN_B1
 
void disp(int8 x)
{
int n;
 
x=~x;
for(n=0;n<=7;n++)
{
if (x & 1 == 1) output_high(DATA); else output_low(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
void NightRider(int x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(100);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(100);
}
}
disp(i);
delay_ms(100);
i=0;
disp(i);
}
 
void main()
{
int8 cas; // Cas hrany bila/cerna v radce
33,21 → 76,20
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111000); // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L);
output_low(MOT_R);
 
output_high(LED); // Budeme blikat LED, aby se poznalo, ze byl RESET
NightRider(1); // Aby se poznalo, ze byl RESET
// Musi se pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
delay_ms(200); // Musi se pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni kamery ...
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(0xC0); // Pro single slave musi mit vsechny zapisy adresu C0h
i2c_write(0x12); // Adresa registru COMH
60,19 → 102,20
i2c_write(0b01000001);
i2c_stop();
 
 
/*
i2c_start(); // Contrast
i2c_write(0xC0);
i2c_write(0x05);
i2c_write(0xA0);
i2c_write(0xA0); // 48h
i2c_stop();
/*
*/
i2c_start(); // Brightness
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(0x80);
i2c_write(0x90); // 80h
i2c_stop();
 
/*
i2c_start(); // Band Filter
i2c_write(0xC0);
i2c_write(0x2D);
91,16 → 134,25
i2c_write(45);
i2c_stop();
 
output_low(LED); // Blikani LED
delay_ms(200);
NightRider(1); // Aby se poznalo, ze byl RESET
 
output_high(LED); // Blikani LED
delay_ms(200);
output_low(LED);
 
cas=128; // Inicializace promenych, aby neslo servo za roh a aby se to rozjelo jeste dneska
ble=0;
 
/*
while(true)
{
disp(ble);
i2c_start();
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(ble);
i2c_stop();
delay_ms(1000);
ble+=0x10;
};
*/
 
// ... Hlavni smycka ...
while(true)
{
108,11 → 160,17
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// Dodelat rozpoznani cerne cary napric pro zastaveni
// Pockat na shozeni signalu HREF
if(!input(PIX)) // Pokud se dvakrat za sebou precetla CERNA
if(!input(PIX))
if(!input(PIX))
{
cas=get_timer0(); // Precti cas z citace casu hrany
cas=255-cas; // Vlevo je vpravo
int8 pom;
 
pom=get_timer0(); // Precti cas z citace casu hrany
// cas=255-cas; // Vlevo je vpravo
if(pom<0b11000000) cas=pom;
break;
};
};
120,7 → 178,7
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
offset=read_adc();
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(offset);
136,7 → 194,9
set_adc_channel(CERNA);
Delay_ms(1);
rr=read_adc();
 
disp(cas);
 
r1=cas>>1; // Elektronicky diferencial
r2=255-offset-(cas>>1);