No changes between revisions
/Designs/ROBOTS/Opticus/DOC/MP_CizekL.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Designs/ROBOTS/Opticus/PrjInfo.txt
0,0 → 1,19
//
// Toto je popisný soubor pro popis obsahu adresáře (příklad)
//
 
[InfoShortDescription.en]
Robot Opticus
 
[InfoShortDescription.cs]
Robot Opticus
[InfoLongDescription.en]
Robot Merkur was built as project for maturita exam (2013).
The robot is classic line follower.
 
[InfoLongDescription.cs]
Robot Opticus byl postaven jako maturitní projekt (2013).
Jedná se o robota pro sledování čáry.
 
[End]
/Designs/ROBOTS/Opticus/SW/PIC/README.txt
0,0 → 1,0
Tato složka obsahuje zdrojové kódy programu použitého u maturitní zkoušky.
/Designs/ROBOTS/Opticus/SW/PIC/main.c
0,0 → 1,670
#include "main.h"
 
// NEPOUZIVAT PINY B6 A B7, JSOU VYHRAZENY PRO SERIOVOU KOMUNIKACI
// BAUD RATE = 9600
// ========================== PRIPRAVA DAT A VYSTUPU ===========================
// pomocne konstanty
#define LEFT 0
#define RIGHT 1
#define DET_EN 0 // povoluje nebo zakazuje vyhodnoceni SHARP
 
// regulator
#define CONP 2 // konstanta pro proporcionalni regulator (2)
#define CONI 0 // konstanta pro integracni regulator *0,01 (45)
#define COND 0 // konstanta pro derivacni regulator *0,01 (20)
 
#define SPD_LO 220 // zaklad pro vypocet rychlosti pomalejsiho motoru (130)
#define SPD_HI 220 // zaklad pro vypocetrychlosti rychlejsiho motoru (155)
#define SPD_MAX 220 // rychlost po rovince (240)
 
int8 reg_out;
int8 err1; // odchylka prvni hodnoty
int8 err2;
int8 err3;
int8 err4;
int8 err5; // odchylka posledni hodnoty
int8 errp; // prumer chyb
 
// mezera
#define SPACE 8 // jak dlouho robot smi nic nevidet (8)
#define CONT 25 // kontrast, kdy nic nevidime
 
// univerzalni LED diody
#define LED1 PIN_E1
#define LED2 PIN_E0
 
int16 blink;
 
// piezo pipak
#DEFINE SOUND_HI PIN_B4
#DEFINE SOUND_LO PIN_B5
 
// radkovy senzor
#define SDIN PIN_D4 // seriovy vstup
#define SDOUT input(PIN_C5) // seriovy vystup
#define SCLK PIN_D5 // takt
 
// pro komunikaci s OLSA, prvni se posila LSB
int MAIN_RESET[8]={1,1,0,1,1,0,0,0}; // hlavni reset 0x1B
int SET_MODE_RG[8]={1,1,1,1,1,0,1,0}; // zapis do MODE registru 0x5F
int CLEAR_MODE_RG[8]={0,0,0,0,0,0,0,0}; // nulovani MODE registru 0x00
 
int LEFT_OFFSET[8]={0,0,0,0,0,0,1,0}; // offset leveho segmentu senzoru 0x40
int MID_OFFSET[8]={0,1,0,0,0,0,1,0}; // offset prostredniho segmentu senzoru 0x42
int RIGHT_OFFSET[8]={0,0,1,0,0,0,1,0}; // offset praveho segmentu senzoru 0x44
int OFFSET[8]={1,0,0,0,0,0,0,1}; // minus jedna - pouzit pro vsechny segmenty 0x81
 
int LEFT_GAIN[8]={1,0,0,0,0,0,1,0}; // zisk leveho segmentu 0x41
int MID_GAIN[8]={1,1,0,0,0,0,1,0}; // zisk leveho segmentu 0x43
int RIGHT_GAIN[8]={1,0,1,0,0,0,1,0}; // zisk leveho segmentu 0x45
int GAIN[8]={1,0,1,0,0,0,0,0}; // zisk = 5 - pouzit pro vsechny segmenty 0x5
 
int START_INT[8]={0,0,0,1,0,0,0,0}; // zacatek integrace 0x08
int STOP_INT[8]={0,0,0,0,1,0,0,0}; // konec integrace 0x10
int READOUT[8]={0,1,0,0,0,0,0,0}; // cteni senzoru 0x02
 
int olsa_lseg[51]={0}; // leva cast radky (pixely 0 - 50)
int olsa_rseg[51]={0}; // prava cast radky (pixely 51 - 101)
int8 *lp; // ukazatel pro levou polovinu radky
int8 *rp; // ukazatel pro levou polovinu radky
 
int8 contrast; // rozdil mezi nejsvetlejsim a nejtmavsi mistem
int8 position; // ulozeni pozice cary
int8 old_position; // ulozeni predchozi pozice cary
int1 line_sector; // cara je vlevo/vpravo
int8 gap; // pocita, jak dlouho neni videt cara
 
// ================================= NARAZNIK ==================================
#define BUMPL input(PIN_D6)
#define BUMPR input(PIN_D7)
 
// ============================= NOUZOVE SENZORY ===============================
#define LINEL 0 // analogovy kanal pro levy senzor
#define LINER 1 // analogovy kanal pro pravy senzor
#define WHITE 30 // rozhodovaci uroven pro nouzove senzory
 
int8 line_l; // uklada hodnotu leveho senzoru
int8 line_r; // uklada hodnotu praveho senzoru
 
// ================================ DALKOMER ===================================
#define SHARP 2 // analogovy kanal pro SHARP
#define PROBLEM 55 // rozhodovaci uroven, kdy hrozi prekazka
#define BLOCK 65 // rozhodovaci uroven, kdy je jiste prekazka
#define DANGER 10 // pocita, jak dlouho je detekovan problem
 
int8 p_count;
int8 sharp_lev; // uklada hodnotu sharp
 
// ================================== MOTORY ===================================
#define LMF PIN_D0
#define LMB PIN_D1
#define RMF PIN_D2
#define RMB PIN_D3
 
int8 lm_speed; // rychlost leveho motoru
int8 rm_speed; // rychlost praveho motoru
 
// =============================== PODPROGRAMY =================================
 
// ================================= OLSA01A ===================================
 
void olsa_pulses(int count) // vytvori impulzy pro ridici logiku
{
int8 ct;
for(ct=0;ct<=count;ct++)
{
output_high(SCLK);
output_low(SCLK);
}
}
 
void olsa_pulse() // vytvori jeden impulz
{
output_high(SCLK);
output_low(SCLK);
}
 
void olsa_send(int8 info[8]) // USART komunikace s modulem OLSA01A - poslani zpravy
{
int *ip; // ukazatel na pole s informaci
int8 i; // pomocna promenna pro nastaveni 0 nebo 1 na SDIN
output_low(SDIN); // start bit
olsa_pulse();
for(ip=0;ip<8;ip++) // predani informace - 8 bit, LSB prvni > MSB posledni
{
i=info[ip]; // ziskani hodnoty z pole
if(i==1) // vyhodnoceni obsahu informace - nastav 1
{
output_high(SDIN);
}
else // vyhodnoceni obsahu informace - nastav 0
{
output_low(SDIN);
}
olsa_pulse();
}
output_high(SDIN); // stop bit
olsa_pulse();
}
 
void olsa_reset() // hlavni RESET - provadi se po zapnuti
{
output_low(SDIN);
output_low(SCLK);
olsa_pulses(30); // reset radkoveho senzoru
output_high(SDIN);
olsa_pulses(10); // start bit - synchronizace
olsa_send(MAIN_RESET);
olsa_pulses(5);
olsa_send(SET_MODE_RG);
olsa_send(CLEAR_MODE_RG);
}
void olsa_setup() // kompletni nastaveni, provadi se po resetu
{
olsa_send(LEFT_OFFSET); // nastaveni leveho segmentu (offset a zisk)
olsa_send(OFFSET);
olsa_send(LEFT_GAIN);
olsa_send(GAIN);
olsa_send(MID_OFFSET); // nastaveni prostredniho segmentu (offset a zisk)
olsa_send(OFFSET);
olsa_send(MID_GAIN);
olsa_send(GAIN);
olsa_send(RIGHT_OFFSET); // nastaveni praveho segmentu (offset a zisk)
olsa_send(OFFSET);
olsa_send(RIGHT_GAIN);
olsa_send(GAIN);
}
void olsa_integration() // snimani pixelu
{
olsa_send(START_INT); // zacatek integrace senzoru
olsa_pulses(22);
olsa_send(STOP_INT); // konec integrace senzoru
olsa_pulses(5);
}
 
void read_olsa()
{
int8 cpixel; // pocet prectenych pixelu
int8 cbit; // pocet prectenych bitu
int8 pixel; // hodnota precteneho pixelu
cpixel=0;
lp=0;
rp=0;
olsa_integration();
olsa_send(READOUT);
do // precte 102 pixelu
{
if(!SDOUT) // zacatek prenosu - zachycen start bit
{
pixel=0;
for(cbit=0;cbit<8;cbit++) // cte jednotlive bity (8 bitu - 0 az 7)
{
olsa_pulse(); // impulz pro generovani dalsiho bitu
if(SDOUT) // zachycena 1
{
bit_set(pixel,cbit); // zapise do bitu (dano cbit) bytu (pixelu) prislusnou hodnotu
}
}
olsa_pulse(); // generuje stop bit
if(cpixel<52) // ulozeni do pole
{
olsa_lseg[lp]=pixel; // leva polovina radky - leve pole
lp++;
}
else
{
olsa_rseg[rp]=pixel; // prava polovina cary - prave pole
rp++;
}
cpixel++;
}
else
{
olsa_pulse(); // generuje start bit, nebyl-li poslan
}
}
while(cpixel<102); // precte 102 pixelu
}
 
void olsa_position() // vyhodnoti pozici cary
{
int8 searchp; // ukazatel na pole
int8 dark; // nejtmavsi pixel
int8 bright; // nejsvetlejsi pixel
dark=0xff;
bright=0x00;
for(searchp=0;searchp<51;searchp++) // prohlizi levou cast radky
{
if(olsa_lseg[searchp]<dark) // porovna pixel s doposud nejtmavsim
{
dark=olsa_lseg[searchp]; // ulozi nejtmavsi pixel
position=searchp; // ulozi polohu nejtmavsiho pixelu
}
if(olsa_lseg[searchp]>bright)
{
bright=olsa_lseg[searchp]; // ulozi nejsvetlejsi pixel
}
}
for(searchp=0;searchp<49;searchp++) // prohlizi levou cast radky
{
if(olsa_rseg[searchp]<dark) // porovna pixel s doposud nejtmavsim
{
dark=olsa_rseg[searchp]; // ulozi nejtmavsi pixel
position=(searchp+51); // ulozi polohu nejtmavsiho pixelu
}
if(olsa_rseg[searchp]>bright)
{
bright=olsa_rseg[searchp]; // ulozi nejsvetlejsi pixel
}
}
contrast=(bright-dark);
if(contrast<CONT)
{
position=0;
}
}
 
// ============================ ZACHRANNE SENZORY ==============================
 
void read_blue_sensors() // cteni nouzovych senzoru
{
set_adc_channel(LINEL); // cti levy nouzovy senzor
delay_us(10);
line_l=read_adc();
set_adc_channel(LINER); // cti pravy nouzovy senzor
delay_us(10);
line_r=read_adc();
}
 
// ================================= DALKOMER =================================
 
void read_sharp() // cteni z dalkomeru
{
set_adc_channel(SHARP); // cteni z dalkomeru
delay_us(10);
sharp_lev=read_adc(); // ulozeni hodnoty
}
// ================================== PIPAK ====================================
 
void beep(int16 period,int16 length)
{
int16 bp; // promenna pro nastaveni delky
for(bp=length;bp>0;bp--) // prepina vystupy tolikrat, jakou jsme zadali delku
{
output_high(SOUND_HI);
output_low(SOUND_LO);
delay_us(period);
output_high(SOUND_LO);
output_low(SOUND_HI);
delay_us(period);
}
}
 
// ================================= REGULATOR =================================
 
void calc_error()
{
err1=err2; // ulozeni chyb
err2=err3;
err3=err4;
err4=err5;
if(position<50) // ulozeni a vypocet aktualni absolutni chyby
{
err5=(50-position); // pokud je cara vlevo
}
else
{
err5=(position-50); // pokud je cara vpravo
}
errp=((err1+err2+err3+err4+err5)/5); // vypocet chyby pro integracni regulator
}
void calc_regulator()
{
int8 p_reg;
int8 i_reg;
int8 d_reg;
p_reg=(CONP*err5); // vypocet proporcionalni slozky
i_reg=(CONI*(errp/100)); // vypocet integracni slozky
if(position>old_position) // vypocet derivacni slozky
{
d_reg=(COND*((position-old_position)/100)); // pokud je aktualni pozice vetsi nez predesla
}
else
{
d_reg=(COND*((old_position-position)/100)); // pokud je aktualni pozice mensi nez predesla
}
reg_out=(p_reg+i_reg+d_reg); // vypocet celeho regulatoru
}
 
// ================================== MOTORY ===================================
 
void l_motor_fwd(int8 speedl) // levy motor dopredu
{
output_high(LMF);
output_low(LMB);
set_pwm2_duty(speedl);
}
 
void l_motor_bwd(int8 speedl) // levy motor dozadu
{
output_high(LMB);
output_low(LMF);
set_pwm2_duty(speedl);
}
 
void r_motor_fwd(int8 speedr) // pravy motor dopredu
{
output_high(RMF);
output_low(RMB);
set_pwm1_duty(speedr);
}
 
void r_motor_bwd(int8 speedr) // pravy motor dozadu
{
output_high(RMB);
output_low(RMF);
set_pwm1_duty(speedr);
}
 
void l_motor_off() // levy motor vypnut
{
output_low(LMF);
output_low(LMB);
set_pwm2_duty(0);
}
void r_motor_off() // pravy motor vypnut
{
output_low(RMF);
output_low(RMB);
set_pwm1_duty(0);
}
 
void motor_test() // TEST MOTORU
{
int8 i;
beep(100,200);
printf("TEST MOTORU\r\n");
delay_ms(1000);
printf("LEVY MOTOR DOPREDU\r\n");
delay_ms(1000);
for(i=0;i<255;i++) // levy motor dopredu - zrychluje
{
l_motor_fwd(i);
printf("RYCHLOST: %u\r\n",i);
delay_ms(5);
}
for(i=255;i>0;i--) // levy motor dopredu - zpomaluje
{
l_motor_fwd(i);
printf("RYCHLOST: %u\r\n",i);
delay_ms(5);
}
printf("LEVY MOTOR DOZADU\r\n"); // levy motor dozadu - zrychluje
delay_ms(1000);
for(i=0;i<255;i++)
{
l_motor_bwd(i);
printf("RYCHLOST: %u\r\n",i);
delay_ms(5);
}
for(i=255;i>0;i--) // levy motor dozadu - zpomaluje
{
l_motor_bwd(i);
printf("RYCHLOST: %u\r\n",i);
delay_ms(5);
}
printf("PRAVY MOTOR DOPREDU\r\n");
delay_ms(1000);
for(i=0;i<255;i++) // pravy motor dopredu - zrychluje
{
r_motor_fwd(i);
printf("RYCHLOST: %u\r\n",i);
delay_ms(5);
}
for(i=255;i>0;i--) // pravy motor dopredu - zpomaluje
{
r_motor_fwd(i);
printf("RYCHLOST: %u\r\n",i);
delay_ms(5);
}
printf("PRAVY MOTOR DOZADU\r\n");
delay_ms(1000);
for(i=0;i<255;i++) // pravy motor dozadu - zrychluje
{
r_motor_bwd(i);
printf("RYCHLOST: %u\r\n",i);
delay_ms(5);
}
for(i=255;i>0;i--) // pravy motor dozadu - zpomaluje
{
r_motor_bwd(i);
printf("RYCHLOST: %u\r\n",i);
delay_ms(5);
}
l_motor_off(); // po ukonceni testu vypnout motory
r_motor_off();
printf("KONEC TESTU MOTORU\r\n");
delay_ms(1000);
}
 
// ================================ OBJETI CIHLY ===============================
 
void detour() // po detekci prekazky zacne objizdeni
{
l_motor_bwd(200); // zatoc doleva
r_motor_fwd(200);
delay_ms(400);
l_motor_fwd(200); // jed rovne
delay_ms(800);
r_motor_bwd(200); // zatoc doprava
delay_ms(200);
r_motor_fwd(200); // jed rovne
delay_ms(1000);
r_motor_bwd(200); // zatoc doprava
delay_ms(100);
l_motor_fwd(180);
r_motor_fwd(255); // jed rovne
delay_ms(200);
position=40;
}
// ================================ DIAGNOSTIKA ================================
 
void diag() // diagnostika - vypis senzoru s moznosti prepnuti na test motoru
{
read_blue_sensors(); // cteni nouzovych senzoru
read_sharp(); // cteni dalkomeru
read_olsa(); // cteni z optickeho radkoveho senzoru
olsa_position();
printf("LEVA: %u \t",line_l); // tiskne z leveho senzoru
printf("PRAVA: %u \t",line_r); // tiskne z praveho senzoru
printf("SHARP: %u \t",sharp_lev); // tiskne z dalkomeru
printf("POLOHA: %u\t",position); // tiskne pozici OLSA
printf("KONTRAST: %u \t", contrast); // tiskne kontrast z OLSA
printf("L_NARAZ: %u \t",BUMPL); // leve tlacitko narazniku
printf("P_NARAZ: %u \r\n",BUMPR); // prave tlacitko narazniku
if(BUMPL&&BUMPR) // po zmacknuti stran narazniku spusti test motoru
{
beep(100,1000);
printf("Levy naraznik - test OLSA\r\n");
printf("Pravy naraznik - test motoru\r\n");
delay_ms(500);
while(true)
{
if(BUMPR)
{
beep(100,500); // pipni pri startu
motor_test();
}
if(BUMPL)
{
beep(100,500);
printf("TEST OLSA\r\n");
while(true)
{
int8 tisk;
int8 *tiskp;
read_olsa();
printf("cteni\r\n"); // po precteni vsech pixelu odradkuje
for(tiskp=0;tiskp<52;tiskp++) // tisk leve casti radky
{
tisk=olsa_lseg[tiskp];
printf("%x ",tisk);
}
for(tiskp=0;tiskp<52;tiskp++) // tisk prave casti radky
{
tisk=olsa_rseg[tiskp];
printf("%x ",tisk);
}
}
}
}
}
}
 
// ============================== HLAVNI SMYCKA ================================
 
void main()
{
printf("POWER ON \r\n");
// NASTAVENI > provede se pouze pri zapnuti
setup_adc(ADC_CLOCK_INTERNAL); // interni hodniny pro AD prevodnik
setup_adc_ports(ALL_ANALOG); // aktivni vsechny analogove vstupy
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_16,255,1); // casovac pro PWM
setup_ccp1(CCP_PWM); // povoli PWM na pinu RC2
setup_ccp2(CCP_PWM); // povolí PWM na pinu RC1
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
l_motor_off(); // vypne levy motor
r_motor_off(); // vypne pravy motor
olsa_reset();
olsa_setup();
beep(350,300); // pipni pri startu
printf("OK! \r\n");
delay_ms(500);
printf("VYBRAT MOD... \r\n");
// ============================ HLAVNI CAST PROGRAMU ===========================
while(true)
{
if(blink<4000)
{
output_low(LED1);
output_high(LED2);
}
else
{
output_low(LED2);
output_high(LED1);
}
if (blink==8000)
{
blink=0;
}
blink++;
// ================================ DIAGNOSTIKA ================================
if(BUMPL)
{
output_low(LED1);
output_high(LED2);
beep(200,500);
while(true)
{
diag();
}
}
// =============================== SLEDOVANI CARY ==============================
if(BUMPR) // spusteni hledani pravym naraznikem
{
output_low(LED2);
output_high(LED1);
beep(300,500);
while(true)
{
old_position=position; // zaznamena predhozi polohu cary
read_olsa(); // precte a ulozi hodnoty z olsa
olsa_position(); // vyhodnoti pozici cary
read_blue_sensors(); // cte nouzove senzory
read_sharp(); // cte dalkomer
if(position==0) // pokud neni videt cara
{
position=old_position; // nastav predchozi pozici
gap++; // pocita, jak dlouho neni videt cara
}
else // pokud je videt
{
gap=0; // gap je roven nule
}
if(gap>SPACE)
{
if(line_l<WHITE) // cara videna levym modrym senzorem
{
position=1;
line_sector=LEFT;
}
if(line_r<WHITE) // cara videna pravym modrym senzorem
{
position=100;
line_sector=RIGHT;
}
}
calc_error();
calc_regulator();
//printf("regulator: %u\r\n",reg_out);
if(position<47) // prepocet regulatoru pro motory, pokud je cara vlevo
{
lm_speed=SPD_LO-(2*reg_out);
rm_speed=SPD_HI;
line_sector=LEFT;
}
if((position>46)&&(position<54)) // nastaveni rychlosti, pokud je cara uprostred
{
lm_speed=SPD_MAX;
rm_speed=SPD_MAX;
}
if(position>53) // prepocet regulatoru pro motory, pokud je cara vpravo
{
lm_speed=SPD_HI;
rm_speed=SPD_LO-(2*reg_out);
line_sector=RIGHT;
}
if((sharp_lev>PROBLEM)&&(DET_EN)) // zachycen odraz na dalkomeru
{
p_count++; // pocita, jak dlouho je videt
output_low(LED1);
if(p_count>DANGER) // pokud je odraz videt nebezpecne dlouho, zpomali
{
lm_speed=(lm_speed/2);
rm_speed=(rm_speed/2);
}
}
else // pokud jiz neni detekoven odraz, vynuluj pocitadlo
{
p_count=0;
output_high(LED1);
}
if((sharp_lev>BLOCK)&&(DET_EN)) // odraz zachycen nebezpecne blizko
{
l_motor_off();
r_motor_off();
beep(100,200);
read_sharp();
if(sharp_lev>BLOCK) // pokud je porad videt prekazka
{
detour(); // spust objizdeni
}
}
l_motor_fwd(lm_speed);
r_motor_fwd(rm_speed);
}
}
}
}
 
 
/Designs/ROBOTS/Opticus/SW/PIC/main.h
0,0 → 1,22
#include <16F887.h>
#device adc=8
 
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC //Internal RC Osc
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES BORV40 //Brownout reset at 4.0V
 
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B6,bits=8) //nastavi seriovou komunikaci na piny B6, B7
 
 
 
/Designs/ROBOTS/Opticus/SW/PIC/main.hex
0,0 → 1,406
:1000000005308A006C2D0000D422532AA0264F2AE6
:100010004F29D5060A00CC22D62CA0264F2A4F29DC
:1000200020224F28D222C42A0D050001D22C4324BD
:10003000CC27532A3A10A53A0D050000D22C4324B0
:10004000CC27532A3A10A53A0D050001CC22D62C14
:10005000A0264F2A4F2920224F2D4122D5060A00E3
:10006000D22C4324CC27532A3A10A53A0D0500017F
:10007000D22C4324CC27532A3A10A53A0D0500016F
:100080005029412B5910CD27D4275210C42750296D
:100090004522D5060A00D22C4324CC27532A3A10F5
:1000A000A53A0D050001D22C4324CC27532A3A103F
:1000B000A53A0D0500015029412B5910CD27D42711
:1000C0005210C427DA20C42A0D050001D22C432483
:1000D000CC27532A3A10A53A0D050001D22C43240F
:1000E000CC27532A3A10A53A0D050001CB27CE2282
:1000F0004310D422532A5510CD27D427D22A0D05D8
:100100000000CC22D6203A10A53AA00400015029C4
:10011000412B411DA0127510090053244129501D87
:10012000A01275100900D027CC27C8203A10A53A94
:100130000900CB274E2AD220532A3A10A53AA00410
:100140000001CC2FCE20D2205A1DA012751009001C
:10015000D02FCE20D2205A1DA01275100D050001FF
:10016000CC32F63C20376139613DEE346B102D10F6
:10017000F432733AA027CC29C1060A005039613BFA
:100180007910EE30F2307A37E935A016203AE539A9
:100190007410ED37F437F23A0D050001D422532ADA
:1001A000A027CC29C1060A00633A6537E9060A0090
:1001B000D027D72252104F27A0060A00CF252110A2
:1001C0000D050001D62C4229412AA0264F222E17C8
:1001D0002E100D0500008316861383128613083037
:1001E000F800F2280000F8170729F8138316031700
:1001F000CB0C8312031303188617031C861378177E
:1002000007297813F80BF6280529000086173F30D8
:100210008400840B09290000F81BF528781B0129AC
:100220000800831603178C170C14000000008312BB
:100230000C087F3903195D298316C70083120D0846
:100240008316C80083120F088316C9004708CB0025
:1002500083120313EB2083160317480883128D00C3
:100260008316490883128F0083168C170C14000024
:10027000000083120C0D0E0D7F3903195D298316C2
:10028000C70083120D088316C80083120F08831657
:10029000C9004708CB0083120313EB208316031712
:1002A000480883128D008316490883128F008D0A37
:1002B00003198F0A03131129031703130800831668
:1002C00008108312081083168810831288109B016F
:1002D00008008316081183120811831688118312EF
:1002E00088119501080083160317CA014A084902BC
:1002F000031C86290313881283128816831688121A
:100300008312881283160317CA0A762983120313ED
:1003100008008316881283128816831688128312A7
:100320008812080083160812831208128921831686
:100330000317CC01CB01CC08031DBE294B08073C99
:10034000031CBE2949084B07840083134A188317EE
:100350000008CD004D0BB3290313081283120816B1
:10036000B729831603170313081283120812892171
:1003700083160317CB0A0319CC0A9B29031308120F
:1003800083120816892108008316081283120812A6
:1003900083168812831288121E3083160317C90031
:1003A00083120313732183160812831208160A306E
:1003B00083160317C90083120313732183160317CF
:1003C000CA012930C9008312031392210530831614
:1003D0000317C90083120313732183160317CA017D
:1003E0003130C90083120313922183160317CA0107
:1003F0003930C9008312031392218A110A12C22EC6
:1004000083160317CA014130C900831203139221D6
:1004100083160317CA015930C900831203139221AE
:1004200083160317CA016130C90083120313922196
:1004300083160317CA01A830C9008312031392213F
:1004400083160317CA014930C9008312031392218E
:1004500083160317CA015930C9008312031392216E
:1004600083160317CA016930C9008312031392214E
:1004700083160317CA01A830C900831203139221FF
:1004800083160317CA015130C90083120313922146
:1004900083160317CA015930C9008312031392212E
:1004A00083160317CA01A030C900831203139221D7
:1004B00083160317CA01A830C900831203139221BF
:1004C0008A110A12C32E083083160317CE02031CAA
:1004D000752ACE30840083170310800C000803199E
:1004E000752A732A0000800B722A831203130800F6
:1004F000831603174A08CC004908CB00CB08031D1C
:10050000842ACC080319C52A03130612831206167F
:100510008316861283128612831603174808CD00AD
:10052000CD0ACD0303199C2AFF30CE00831203139A
:10053000632283160317912A4708CE008312031300
:10054000632283168612831286168316061283127E
:100550000612831603174808CD00CD0ACD030319F0
:10056000B92AFF30CE0083120313632283160317C8
:10057000AE2A4708CE0083120313632283160317A3
:100580004B080319CC03CB037E2A83120313080004
:10059000C8308400831700080319DB2A0230F800F2
:1005A000F701F70BD12AF80BD02A9730F700F70B99
:1005B000D72A800BCE2A08000030F8001F08C33964
:1005C00078049F000630F700F70BE42A00009F1420
:1005D0009F18E82A1E08FE000430F8001F08C339DF
:1005E00078049F000630F700F70BF42A00009F14F0
:1005F0009F18F82A1E088316C800831208000830C6
:10060000F8001F08C33978049F000630F700F70B85
:10061000072B00009F149F180B2B1E088316CA007F
:100620008312080083160317C601F201F101F401D9
:10063000F301CA01B030C9008312031392211630AE
:1006400083160317C900831203137321831603173C
:10065000CA01B830C90083120313922105308316F2
:100660000317C90083120313732183160317CA01EA
:10067000C030C9008312031392218316CD164D0892
:1006800087008312871A8A2B83160317C801C701B4
:100690004708073C031C6A2B831203138921831626
:1006A000CD164D0887008312871E662B0130F70098
:1006B000831603174708F8000319622B0310F70D80
:1006C000F80B5E2B7708C8048312031383160317F5
:1006D000C70A482B83120313892183160317460880
:1006E000333C031C7D2B10307107840083174808AE
:1006F0008000F10A0319F20A862B903073078400F8
:10070000831748088000F30A0319F40AC60A8D2BE0
:10071000831203138921831603174608653C031CC3
:10072000942B831203133D2B831203130800FF3015
:1007300083160317C700C801C6014608323C031CD4
:10074000C12B1030460784008317470800020318A6
:10075000B12B10304607840083170008C7004608F5
:10076000F60010304607840083170008480203187B
:10077000BF2B10304607840083170008C800C60A44
:100780009D2BC6014608303C031CE72B90304607E2
:1007900084008317470800020318D72B90304607C0
:1007A000840083170008C70033304607F6009030F6
:1007B000460784008317000848020318E52B903091
:1007C0004607840083170008C800C60AC22B4708E2
:1007D0004802F5007508183C031CEF2BF601831244
:1007E00003130800831603178C170C140000000075
:1007F00003181D2C83120C087F398316C80083123E
:100800000D088316C90083120F088316CA00480812
:10081000CB0083120313EB208316031749088312BE
:100820008D0083164A0883128F0083168C170C14D0
:1008300000000000C70B1D2C402C83120C0D0E0D68
:100840007F398316C80083120D088316C9008312EE
:100850000F088316CA004808CB0083120313EB204D
:1008600083160317490883128D0083164A088312E2
:100870008F008D0A03198F0A03108316C70BF42B00
:10088000831203130800831603174A08F80149026C
:1008900003184D2C4908F700592CF7010830CB00FC
:1008A000C90DF70D4A0877020318F700F80DCB0BB6
:1008B000502C831203130800780883160317470887
:1008C000C9006430CA0083120313432477088316D7
:1008D0000317C70078083030031D752CC81C802C06
:1008E000C819802C481A2030782CC8114812481496
:1008F000F8077808CB0083120313EB208316031745
:100900004708C9000A30CA0083120313432477083A
:1009100083160317C70078083030031D952CC819BB
:100920009D2C481C9D2C481A2030F8077808CB00D5
:1009300083120313EB20831603173030C7074708D1
:10094000CB0083120313EB200800831608108312D8
:10095000081483168810831288108316031747081B
:10096000831203139B0008008316881083128814D7
:100970008316081083120810831603174708831282
:1009800003139B00080083160811831208158316B1
:1009900088118312881183160317470883120313E3
:1009A0009500080083168811831288158316081194
:1009B0008312081183160317470883120313950047
:1009C000080083160317C71BF92C0F30F700460EDB
:1009D000F7050A3077020318F02C3030F707F22CB5
:1009E0004708F7077708CB0083120313EB20831621
:1009F00003170F30C6050A3046020318012D3030A8
:100A0000032DC7134708C6074608CB0083120313FC
:100A1000EB2008002208A1002308A2002408A3005C
:100A20002508A4007608313C031C1A2D7608323CB8
:100A3000A5001D2D32307602A500220821072307CC
:100A40002407250783160317C400C9000530CA0010
:100A50008312031343247808A6008A110A126D2F0B
:100A60000310250D83160317C300831203132608F2
:100A700083160317C9006430CA008312031343248A
:100A8000780883160317C40176087B020318562DD5
:100A90007B087602C700C9006430CA0083120313C2
:100AA0004324780883160317C501632D76087B025B
:100AB000C700C9006430CA008312031343247808B6
:100AC00083160317C5014408430745078312031320
:100AD000A0008A110A126E2F840183131F30830530
:100AE000713083168F000F088613831286178316C2
:100AF00003170908C039890003131F129F12003021
:100B000003178800831287018801890101300313CC
:100B1000A900AA00AB01AC00AD00AE01AF01B0016D
:100B2000B100B200B300B400B500B601B700B8011F
:100B3000B901BA01BB01BC01BD01BE01BF01C001C9
:100B4000C101C201C301C401C501C601C700C8017A
:100B5000C901CA00CB01CC01CD01CE01CF00D0012B
:100B6000D101D201D300D401D501D601D700D801DB
:100B7000D900DA01DB01DC01DD01DE01DF01E0008B
:100B8000E100E201E301E401E501E601E700E8013B
:100B9000E900EA00EB01EC01ED01EE01EF00F001EC
:100BA0008316A000A101A200A301A401A501A60033
:100BB000A701A800A901AA00AB01AC01AD01AE01DB
:100BC000AF01B001B101B201B300B401B501B6018A
:100BD000B701B801B901BA01BB01BC00BD01BE013A
:100BE000BF01C001C100C201C301C401C501C601EA
:100BF000C70183120317900191019201930194019F
:100C0000950196019701980199019A019B019C0118
:100C10009D019E019F01A001A101A201A301A401C8
:100C2000A501A601A701A801A901AA01AB01AC0178
:100C3000AD01AE01AF01B001B101B201B301B40128
:100C4000B501B601B701B801B901BA01BB01BC01D8
:100C5000BD01BE01BF01C001C101C20183169001E7
:100C600091019201930194019501960197019801D8
:100C700099019A019B019C019D019E019F01A00188
:100C8000A101A201A301A401A501A601A701A80138
:100C9000A901AA01AB01AC01AD01AE01AF01B001E8
:100CA000B101B201B301B401B501B601B701B80198
:100CB000B901BA01BB01BC01BD01BE01BF01C00148
:100CC000C101C201FF300313CD00D83083120317D6
:100CD0008D0000308F00031311211F179F178316FB
:100CE0009F1383121F14831603170908C0391F3876
:100CF000890003131F129F12FF300317880083120D
:100D0000031394128316CD124D0887004D164D081B
:100D10008700CD114D088700013083129400003008
:100D2000831694000108C7390838810083129001A6
:100D30000030F80006389200FF30831692004D1103
:100D40004D08870083120711831609130C30831294
:100D5000970083169B019C0101309D00CD104D082A
:100D60008700831287100C309D000130800003172C
:100D700087018801890183160313970183125F217C
:100D80006921C429002A013083160317C8005E3088
:100D9000C7000130CA002C30C90083120313782227
:100DA000DE3003178D0000308F0003131121023055
:100DB00083160317C300FA30C80083120313C82236
:100DC00083160317C30BDB2EE23083128D00003035
:100DD0008F000313112128080F3C031CFE2E031D56
:100DE000F52E27089F3C031CFE2E831689108312C4
:100DF00089108316091083120914062F831609100F
:100E00008312091083168910831289142708403C25
:100E1000031D102F28081F3C031D102FA801A70138
:100E2000A70A0319A80A831608178312081F302F70
:100E300083168910831289108316091083120914EE
:100E400083160317C801C830C7000130CA00F43048
:100E5000C9008312031378228A1500288A112C2FC7
:100E6000831688178312881FAB2F831609108312ED
:100E70000910831689108312891401308316031711
:100E8000C8002C30C7000130CA00F430C9008312FA
:100E9000031378227608FB0012239723DC22FF221B
:100EA000F608031D572F7B08F600FD0A582FFD0199
:100EB0007D08083C03186C2F7E081D3C031C632F23
:100EC0000130F6007C10831648081D3C031C6B2F74
:100ED0006430F6007C1483120A2D302D76082E3CE7
:100EE000031C7B2F0310200DDC3C8316CB00DC3071
:100EF000CC007C10831276082E3C0318882F7608CD
:100F0000353C031C882FDC308316CB00CC008312C9
:100F10007608353C0318972FDC308316CB0003107E
:100F20008312200DDC3C8316CC007C1483128316C4
:100F3000C90189108312891483164B080317C7004F
:100F400083120313A52483164C080317C7008312CA
:0A0F50000313C3244A2FEB2E6300A5
:101000008A11DC228A158A11FF228A158A1112237D
:101010008A158A1197238A15813003178D000030B5
:101020008F00031006308316C7008A118312031342
:10103000F2238A157E0883160317C7001B30C800E9
:101040008A11831203135C248A1520308316031738
:10105000CB008A1183120313EB208A150930831603
:101060000317CB008A1183120313EB208A158730F4
:1010700003178D0000308F00031007308316C70060
:101080008A1183120313F2238A1583164808031763
:10109000C7001B30C8008A11831203135C248A1511
:1010A000203083160317CB008A1183120313EB2021
:1010B0008A15093083160317CB008A118312031394
:1010C000EB208A158D3003178D0000308F00031040
:1010D00007308316C7008A1183120313F2238A157F
:1010E00083164A080317C7001B30C8008A118312F1
:1010F00003135C248A15203083160317CB008A1152
:1011000083120313EB208A15093083160317CB00D3
:101110008A1183120313EB208A15933003178D0075
:1011200000308F00031008308316C7008A11831225
:101130000313F2238A15760883160317C7001B30A2
:10114000C8008A11831203135C248A1509308316A0
:101150000317CB008A1183120313EB208A159930F1
:1011600003178D0000308F0003100A308316C7006C
:101170008A1183120313F2238A1575088316031745
:10118000C7001B30C8008A11831203135C248A1520
:10119000203083160317CB008A1183120313EB2030
:1011A0008A15093083160317CB008A1183120313A3
:1011B000EB208A158316081700308312081B0130B4
:1011C00083160317C600A13083128D0000308F00F4
:1011D000031009308316C7008A1183120313F22308
:1011E0008A15831603174608C7001B30C8008A11EA
:1011F000831203135C248A15203083160317CB0057
:101200008A1183120313EB208A1509308316031702
:10121000CB008A1183120313EB208A1583168817DB
:1012200000308312881B013083160317C600A830D4
:1012300083128D0000308F00031009308316C70021
:101240008A1183120313F2238A15831603174608A3
:10125000C7001B30C8008A11831203135C248A154F
:10126000203083160317CB008A1183120313EB205F
:101270008A150D3083160317CB008A1183120313CE
:10128000EB208A150A3083160317CB008A118312CC
:101290000313EB208A15831608178312081FDA2C14
:1012A000831688178312881FDA2C83160317C80148
:1012B0006430C7000330CA00E830C9008A118312C5
:1012C000031378228A15B03003178D0000308F0089
:1012D0008A11031311218A15BE3003178D000030C7
:1012E0008F008A11031311218A1502308316031708
:1012F000C600FA30C8008A1183120313C8228A1567
:1013000083160317C60B7929031388178312881FC6
:101310005A2C83160317C8016430C7000130CA0075
:10132000F430C9008A118312031378228A158316B8
:101330000317C8016430C700CA01C830C9008A1148
:101340008312031378228A15043003178D000030AE
:101350008F008A11031311218A1504308316031795
:10136000C700FA30C8008A1183120313C8228A15F5
:1013700083160317C70BB1290B3083128D00003081
:101380008F008A11031311218A1504308316031765
:10139000C700FA30C8008A1183120313C8228A15C5
:1013A00083160317C70BC929C601460FD829172A68
:1013B0004608C7008A1183120313A5248A15163024
:1013C00003178D0000308F0003100A308316C7000A
:1013D0008A1183120313F2238A1583160317460812
:1013E000C7001B30C8008A11831203135C248A15BE
:1013F0000D3083160317CB008A1183120313EB20E1
:101400008A150A3083160317CB008A11831203133F
:10141000EB208A15053083160317C8008A11831242
:101420000313C8228A1583160317C60AD529FF306D
:10143000C600C60803195B2A4608C7008A11831232
:101440000313A5248A151E3003178D0000308F006A
:1014500003100A308316C7008A1183120313F22384
:101460008A15831603174608C7001B30C8008A1167
:10147000831203135C248A150D3083160317CB00E7
:101480008A1183120313EB208A150A30831603177F
:10149000CB008A1183120313EB208A1505308316C3
:1014A0000317C8008A1183120313C8228A158316F2
:1014B0000317C603192A263083128D0000308F00CF
:1014C0008A11031311218A15043083160317C700EC
:1014D000FA30C8008A1183120313C8228A158316B2
:1014E0000317C70B682AC601460F772AB62A460893
:1014F000C7008A1183120313B4248A1530300317EE
:101500008D0000308F0003100A308316C7008A1147
:1015100083120313F2238A15831603174608C700A4
:101520001B30C8008A11831203135C248A150D3006
:1015300083160317CB008A1183120313EB208A153D
:101540000A3083160317CB008A1183120313EB2092
:101550008A15053083160317C8008A1183120313F6
:10156000C8228A1583160317C60A742AFF30C600DC
:10157000C6080319FA2A4608C7008A118312031302
:10158000B4248A15383003178D0000308F00031003
:101590000A308316C7008A1183120313F2238A15B7
:1015A000831603174608C7001B30C8008A11831230
:1015B00003135C248A150D3083160317CB008A11A0
:1015C00083120313EB208A150A3083160317CB000E
:1015D0008A1183120313EB208A1505308316031733
:1015E000C8008A1183120313C8228A1583160317B1
:1015F000C603B82A403083128D0000308F008A1154
:10160000031311218A15043083160317C700FA301B
:10161000C8008A1183120313C8228A158316031780
:10162000C70B072BC601460F162B552B4608C700C4
:101630008A1183120313C3248A154B3003178D00BC
:1016400000308F0003100A308316C7008A118312FE
:101650000313F2238A15831603174608C7001B30AD
:10166000C8008A11831203135C248A150D30831677
:101670000317CB008A1183120313EB208A150A305B
:1016800083160317CB008A1183120313EB208A15EC
:10169000053083160317C8008A1183120313C8226A
:1016A0008A1583160317C60A132BFF30C600C60817
:1016B0000319992B4608C7008A1183120313C32408
:1016C0008A15533003178D0000308F0003100A3045
:1016D0008316C7008A1183120313F2238A15831617
:1016E00003174608C7001B30C8008A118312031372
:1016F0005C248A150D3083160317CB008A118312E0
:101700000313EB208A150A3083160317CB008A11C6
:1017100083120313EB208A15053083160317C800C4
:101720008A1183120313C8228A1583160317C6036E
:10173000572B5B3083128D0000308F008A1103130A
:1017400011218A15043083160317C700FA30C80028
:101750008A1183120313C8228A1583160317C70B35
:10176000A62BC601460FB52BF42B4608C7008A11DD
:1017700083120313D2248A15663003178D000030BC
:101780008F0003100A308316C7008A1183120313D7
:10179000F2238A15831603174608C7001B30C800BA
:1017A0008A11831203135C248A150D3083160317E4
:1017B000CB008A1183120313EB208A150A3083169B
:1017C0000317CB008A1183120313EB208A1505300F
:1017D00083160317C8008A1183120313C8228A15BF
:1017E00083160317C60AB22BFF30C600C6080319BA
:1017F000382C4608C7008A1183120313D2248A1595
:101800006E3003178D0000308F0003100A308316EE
:10181000C7008A1183120313F2238A158316031754
:101820004608C7001B30C8008A11831203135C24CA
:101830008A150D3083160317CB008A118312031308
:10184000EB208A150A3083160317CB008A11831206
:101850000313EB208A15053083160317C8008A117D
:1018600083120313C8228A1583160317C603F62BA7
:101870008A11831203135F218A158A1169218A153F
:10188000763003178D0000308F008A110313112169
:101890008A15043083160317C700FA30C8008A116E
:1018A00083120313C8228A1583160317C70B4D2C06
:1018B00083120313831608178312081FD52C83166F
:1018C0000317C8016430C7000130CA00F430C900F2
:1018D0008A118312031378228A15CE3003178D00E4
:1018E00000308F008A11031311218A158A111223E7
:1018F0008A15D43003178D0000308F008A1103132E
:1019000011218A1583160317C501C401C508031DDB
:10191000AB2C4408333C031CAB2C10304407840030
:1019200083170008C3004308C6005730C7008A1158
:1019300083120313E1248A15203083160317CB008A
:101940008A1183120313EB208A1583160317C40A26
:101950000319C50A862CC501C401C508031DD22C74
:101960004408333C031CD22C903044078400831776
:101970000008C3004308C6005730C7008A1183120D
:101980000313E1248A15203083160317CB008A1134
:1019900083120313EB208A1583160317C40A031955
:1019A000C50AAD2C83120313762C831603178429E2
:0A19B000831203138A110A122E2F6E
:04400E00F52CFF3F4F
:00000001FF
;PIC16F887
;CRC=5148 CREATED="04-Jun-13 15:27"
/Designs/ROBOTS/Opticus/SW/PIC/main.pjt
0,0 → 1,42
[PROJECT]
Target=main.HEX
Development_Mode=2
Processor=0x887F
Processor_Text=PIC16F887
ToolSuite=CCS
 
[Directories]
Include=
Library=
LinkerScript=
 
[Target Data]
FileList=D:\MLAB_E\projekty\cizelu\Maturitni_prace\Program\PIC\main.c
BuildTool=C-COMPILER
OptionString=+FM
AdditionalOptionString=
BuildRequired=1
 
[main.c]
Type=4
Path=
FileList=
BuildTool=
OptionString=
AdditionalOptionString=
 
[mru-list]
1=main.c
 
[Windows]
0=0000 main.c 0 0 796 451 3 0
 
[Opened Files]
1=main.c
2=
3=..\..\..\..\..\..\..\..\Program Files (x86)\PICC\devices\16F887.h
4=
5=
[Units]
Count=1
1=main (main)