Subversion Repositories svnkaklik

Compare Revisions

Problem with comparison.

Ignore whitespace Rev HEAD → Rev 1

/roboti/3Orbis/bak/09 ruzove rukavice/master/main.BAK
0,0 → 1,296
#include ".\main.h"
 
#define KOLMO1 225 // predni kolecko sroubem dopredu
#define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu
#define STRED 128 // sredni poloha zataceciho kolecka
#define BEAR1 10//10 // 3 stupne zataceni
#define BEAR2 25//25
#define BEAR3 45//45
#define R 100 // Rozumna rychlost
#define R17 200 // X nasobek rozumne rychlosti
//#define L1 1 // cara vlevo
#define L2 2 // cara vlevo
#define L3 3 // cara vlevo
#define S 0 // cara mezi sensory
//#define R1 -1 // cara vpravo
#define R2 -2 // cara vpravo
#define R3 -3 // cara vpravo
 
// servo
#define SERVO PIN_B5
 
// kroutitka
#define CERVENA 4 // AN4
//#define CERNA 5 // AN5
//#define ZELENA 6 // AN6
#define MODRA 2 // AN2
 
// IR
#define IRTX PIN_B2
#define CIHLA PIN_A3
 
//motory
#define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred
#define FL output_low(PIN_A1); output_high(PIN_A0)
#define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad
#define BL output_low(PIN_A0); output_high(PIN_A1)
#define STOPR output_low(PIN_A6);output_low(PIN_A7)
#define STOPL output_low(PIN_A0);output_low(PIN_A1)
 
//HID
#define LED1 PIN_B1 //oranzova
#define LED2 PIN_B2 //zluta
 
#define STROBE PIN_B0
//#define SW1 PIN_A2 // Motory On/off
 
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
signed int8 line = S; // na ktere strane byla detekovana cara
//unsigned int8 dira; // pocita dobu po kterou je ztracena cara
unsigned int8 uhel; // urcuje aktualni uhel zataceni
unsigned int8 speed; // maximalni povolena rychlost
unsigned int8 turn; // rychlost toceni
unsigned int8 rovinka; // pocitadlo na zjisteni rovinky
 
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem
signed int16 Rmotor; // a pravem motoru
 
// makro pro PWM pro motory
#define GO(motor, direction, power) if(get_timer0()<=power) \
{direction##motor;} else {stop##motor;}
////////////////////////////////////////////////////////////////////////////////
#int_TIMER2
TIMER2_isr() // ovladani serva
{
unsigned int8 n;
 
output_high(SERVO);
delay_us(1000);
for(n=uhel; n>0; n--) Delay_us(2);
output_low(SERVO);
}
 
////////////////////////////////////////////////////////////////////////////////
short int IRcheck() // potvrdi detekci cihly
{
output_high(IRTX); // vypne vysilac IR
delay_ms(100);
 
output_low(STROBE);
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE);
 
if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal
{
output_low(IRTX); // zapne vysilac IR
delay_ms(100);
 
output_low(STROBE);
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE);
 
if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla
{
output_high(IRTX); // vypne vysilac IR
delay_ms(100);
 
output_low(STROBE);
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE);
 
output_low(IRTX); // zapne vysilac IR
if(bit_test(sensors,7)) return 1; // vrat 1, kdyz je stale cihla
}
};
output_low(IRTX); // zapne vysilac IR
return 0; // vrat 0, kdyz je detekovano ruseni
}
////////////////////////////////////////////////////////////////////////////////
#include ".\objizdka_centrovani.c"
////////////////////////////////////////////////////////////////////////////////
void main()
{
 
unsigned int8 n;
unsigned int8 i,j;
unsigned int8 last_sensors;
unsigned int8 RozumnaRychlost;
 
setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED|T1_DIV_BY_8);
setup_timer_2(T2_DIV_BY_16,140,16);
setup_oscillator(OSC_8MHZ|OSC_INTRC);
 
STOPR; STOPL; // zastav motory
Lmotor=0;Rmotor=0;
 
uhel = STRED; // nastav zadni kolecko na stred
rovinka = 0;
 
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
 
output_low(IRTX); // zapni IR vysilac
 
delay_ms(2000); // musime pockat na diagnostiku slave CPU
 
//nastaveni rychlosti
set_adc_channel(CERVENA);
 
Delay_ms(1);
speed=R+(read_adc()>>2); // rychlost rovne +63; kroutitko dava 0-63
set_adc_channel(MODRA);
Delay_ms(1);
turn=speed-32+(read_adc()>>2); // rychlost toceni +-32; kroutitko dava 0-63
 
RozumnaRychlost=speed;
while(true)
{
 
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor
 
delay_us(2000); // cekani na SLAVE, nez pripravi data od cidel
 
last_sensors=sensors;
 
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors; // neguj prijata data
output_high(STROBE); // zobraz data na posuvnem registru
 
i=0; // havarijni kod
for (n=0; n<=6; n++)
{
if(bit_test(sensors,n)) i++;
}
if (i>3) // zastavi, kdyz je cerno pod vice nez tremi cidly
{
BL; BR;
delay_ms(300);
STOPR; STOPL;
While(true);
};
 
if (!input(CIHLA)) // dalkova detekce cihly
{
speed=100;
}
else
{
speed=RozumnaRychlost;
}
if (bit_test(sensors,7)) // detekce cihly
{
BR;BL;
Delay_ms(400);
STOPR;STOPL;
Delay_ms(100);
cikcak();
delay_ms(500);
objizdka(); // objede cihlu
while(true);
{
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors; // neguj prijata data
output_high(STROBE); // zobraz data na posuvnem registru
delay_ms(5);
}
}
 
 
if(bit_test(sensors,3)) //...|...//
{
uhel=STRED;
Lmotor=speed;
Rmotor=speed;
line=S;
if (rovinka < 255) rovinka++;
// if (speed > R) speed--;
continue;
}
 
if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
{
uhel=STRED - BEAR3;
Lmotor=0;
Rmotor=turn;
line=L3;
// if (speed > R) speed--;
continue;
}
 
if(bit_test(sensors,6)) //......|//
{
uhel=STRED + BEAR3;
Rmotor=0;
Lmotor=turn;
line=R3;
// if (speed > R) speed--;
continue;
}
 
if(bit_test(sensors,1)) //.|.....//
{
uhel=STRED - BEAR2;
Lmotor=speed-50;
Rmotor=speed;
line=L2;
// if (speed > R) speed--;
continue;
}
 
if(bit_test(sensors,5)) //.....|.//
{
uhel=STRED + BEAR2;
Rmotor=speed-50;
Lmotor=speed;
line=R2;
// if (speed > R) speed--;
continue;
}
 
if (bit_test(sensors,2)) //..|....//
{
uhel=STRED - BEAR1;
Lmotor=speed;
Rmotor=speed;
line=L2;
if (rovinka<255) rovinka++;
// if (speed > R) speed--;
continue;
}
 
if (bit_test(sensors,4)) //....|..//
{
uhel=STRED + BEAR1;
Rmotor=speed;
Lmotor=speed;
line=L2;
if (rovinka<255) rovinka++;
// if (speed > R) speed--;
continue;
}
 
 
if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate
{
if (rovinka>50)
{
BL; BR;
Delay_ms(100);
if (rovinka > 250 || speed > 170) delay_ms(50);
};
rovinka=0;
// speed=R17;
};
}
}
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.HEX
0,0 → 1,147
:1000000000308A00612A0000FF00030E8301A10076
:100010007F08A0000A08A8008A01A00E0408A20018
:100020007708A3007808A4007908A5007A08A6003C
:100030007B08A700831383128C308400801C222845
:100040008C183528220884002308F7002408F800BB
:100050002508F9002608FA002708FB0028088A006E
:10006000210E8300FF0E7F0E09008A1147280830F9
:10007000BD02031C46283D3084000310800C00089C
:100080000319462844286400800B43280034831653
:1000900086128312861664000930BC006D30BD00E4
:1000A0003720BC0B4E282C08BB00BB0803195E2868
:1000B0006400000000000000BB0355288316861270
:1000C000831286128C108A1122283A30840000088C
:1000D00003197C280230F800BF30F7006400F70BEA
:1000E0006E28F80B6C289630F700F70B7528000087
:1000F00000006400800B6A280034E130AC006430FA
:10010000BA0065202B08023C031D88280330AB0091
:10011000AB08031D8D280330AB002B08FE3C031DEC
:100120009328FD30AB000330BA006520831606101B
:10013000831206101308930183161418A128831242
:100140009C2883121308AA00AA098316061083129A
:100150000614AA1971290330BA0065202B08033C44
:10016000031DDC280108A03C031CBF2883160510D2
:10017000831205108316851083128514C7288316F1
:10018000051083120510831685108312851001084F
:10019000A03C031CD4288316851383128513831671
:1001A000051383120517DC28831605138312051324
:1001B00083168513831285132B08FD3C031D0A2922
:1001C0000108A03C031CED288316051383120513B8
:1001D0008316851383128517F5288316051383125A
:1001E000051383168513831285130108A03C031C95
:1001F0000229831685108312851083160510831239
:1002000005140A298316051083120510831685101C
:1002100083128510AB08031D1F2983160510831256
:10022000051083168510831285108316051383121B
:1002300005138316851383128513B90A2029B90182
:100240003908633C031C5A298316061083120610D2
:1002500013089301831614182F2983122A29831255
:100260001308AA00AA098316061083120614AA1DF1
:100270003B29AB01AB282A1C40290330AB00AB283B
:100280002A1F4529FD30AB00AB28AA1C4A290330A0
:10029000AB00AB28AA1E4F29FD30AB00AB282A1DAE
:1002A00054290330AB00AB282A1E5929FD30AB007E
:1002B000AB28AB286430BA00652083160610831281
:1002C00006101308930183161418682983126329F2
:1002D00083121308AA00AA098316061083120614B3
:1002E000A928003483160510831205108316851083
:1002F00083128514831685138312851383160513C1
:10030000831205170230B9009630BA006520B90B88
:100310008429831685108312851083160510831295
:100320000514831605138312051383168513831290
:1003300085176430BA0065208316051083120510F6
:1003400083168510831285108316051383120513F7
:1003500083168513831285138030AC0083168510B5
:1003600083128510831605108312051483168513D6
:100370008312851383160513831205170230B90003
:10038000FA30BA006520B90BC029B730AC0083162B
:1003900005138312051383168513831285138316A1
:1003A0008510831285108316051083120514BE3044
:1003B000BA0065208030AC00831685138312851344
:1003C0008316051383120517831685108312851073
:1003D00083160510831205140230B900FA30BA00F2
:1003E0006520B90BEE29B730AC0083168510831257
:1003F00085108316051083120514831605138312C6
:1004000005138316851383128513C830BA0065203F
:100410008030AC0083168513831285138316051371
:100420008312051783168510831285108316051015
:10043000831205149630BA0065202A08FE39031984
:10044000302A1308930183161418282A8312232AAA
:1004500083121308AA00AA090430BA0065201D2AD5
:1004600083160510831205108316851083128514D8
:1004700083160513831205138316851383128517BC
:100480000230B900C830BA006520B90B422A4930A1
:10049000AC0083168513831285138316051383120C
:1004A0000517831605108312051083168510831215
:1004B0008510FA30BA0065200330AB007D208A1128
:1004C000D22B84011F308305703083168F001F12DA
:1004D0009F121B0880399B0007309C008312AB01E0
:1004E00083161F129F121B08803974389B001F133C
:1004F00083121F179F1783169F1383121F149412C2
:1005000083160611861406123130831294000030CF
:10051000831694000108C7390838810030308312EF
:1005200090007830F800063892008C3083169200E4
:1005300072308F00051383120513831685138312FF
:1005400085138316051083120510831685108312F8
:100550008510B101B001B301B2018030AC00AF0130
:1005600083168C14C03083128B04831606118312F9
:1005700006110830B900FA30BA006520B90BBB2A61
:100580002030F8001F08C73978049F000130BA00F6
:1005900065201F151F19CA2A1E08F700F70CF70C53
:1005A0003F30F7057708643EAD001030F8001F08B3
:1005B000C73978049F000130BA00652020302D0231
:1005C000B9001F151F19E22A1E08F700F70CF70CD7
:1005D0003F30F70577083907AE002D08B80001084D
:1005E000801FF52AB11FFD2AF72AB11B062BB1087F
:1005F000031DFD2A3002031C062B8316851083126F
:10060000851083160510831205140E2B8316051012
:100610008312051083168510831285100108801F30
:10062000142BB31F1C2B162BB31B252BB308031D38
:100630001C2B3202031C252B831685138312851372
:1006400083160513831205172D2B831605138312AA
:100650000513831685138312851364000130BA00D5
:1006600065200930B900A9018B1BA9178B136D30C8
:10067000BD003720A91B8B17B90B332B2A08B700F5
:10068000831606108312061013089301831614189C
:100690004B2B8312462B83121308AA00AA09831638
:1006A000061083120614B501B4013408063C031C7D
:1006B000672B2A08F7003408F8000319632B03108E
:1006C000F70CF80B5F2B7718B50AB40A552B3508D1
:1006D000033C0318932B8316051083120510831611
:1006E0008510831285148316051383120513831650
:1006F0008513831285170230B9009630BA00652041
:10070000B90B7D2B831605138312051383168513EE
:100710008312851383160510831205108316851026
:1007200083128510922B83168515831285199B2BB6
:100730006430AD009D2B3808AD00AA1FD22B831664
:1007400005138312051383168513831285178316E9
:10075000051083120510831685108312851402304C
:10076000B900C830BA006520B90BB12B8316051348
:1007700083120513831685138312851383160510C0
:100780008312051083168510831285106430BA0019
:1007900065207D200230B900FA30BA006520B90B1F
:1007A000CC2B7229AA1DE62B8030AC00FA012D0853
:1007B000B0007A08B100FA012D08B2007A08B3003F
:1007C000AB012F0FE42BE52BAF0AEF2A2A1CF42BE9
:1007D0005330AC00B101B001FA012E08B2007A0822
:1007E000B3000330AB00EF2A2A1F022CAD30AC005F
:1007F000B301B201FA012E08B0007A08B100FD3051
:10080000AB00EF2AAA1C142C6730AC0032302D024A
:10081000FA01B0007A08B100FA012D08B2007A0896
:10082000B3000230AB00EF2AAA1E262C9930AC0090
:1008300032302D02FA01B2007A08B300FA012D0815
:10084000B0007A08B100FE30AB00EF2A2A1D3B2C25
:100850007630AC00FA012D08B0007A08B100FA0138
:100860002D08B2007A08B3000230AB002F0F392CEC
:100870003A2CAF0AEF2A2A1E502C8A30AC00FA011B
:100880002D08B2007A08B300FA012D08B0007A08EA
:10089000B1000230AB002F0F4E2C4F2CAF0AEF2AC5
:1008A0002B08033C0319582C2B08FD3C031D7B2C03
:1008B0002F08323C03187A2C83160510831205107A
:1008C000831685108312851483160513831205136E
:1008D00083168513831285176430BA0065202F08AC
:1008E000FA3C031C772C2D08AA3C03187A2C3230D2
:0A08F000BA006520AF01EF2A630093
:04400E00383FFC3FFC
:00000001FF
;PIC16F88
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.LST
0,0 → 1,1695
CCS PCM C Compiler, Version 3.245, 27853 25-IV-06 20:23
 
Filename: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.lst
 
ROM used: 1149 words (28%)
Largest free fragment is 2048
RAM used: 32 (18%) at main() level
35 (20%) worst case
Stack: 5 worst case (3 in main + 2 for interrupts)
 
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 261
0003: NOP
0004: MOVWF 7F
0005: SWAPF 03,W
0006: CLRF 03
0007: MOVWF 21
0008: MOVF 7F,W
0009: MOVWF 20
000A: MOVF 0A,W
000B: MOVWF 28
000C: CLRF 0A
000D: SWAPF 20,F
000E: MOVF 04,W
000F: MOVWF 22
0010: MOVF 77,W
0011: MOVWF 23
0012: MOVF 78,W
0013: MOVWF 24
0014: MOVF 79,W
0015: MOVWF 25
0016: MOVF 7A,W
0017: MOVWF 26
0018: MOVF 7B,W
0019: MOVWF 27
001A: BCF 03.7
001B: BCF 03.5
001C: MOVLW 8C
001D: MOVWF 04
001E: BTFSS 00.1
001F: GOTO 022
0020: BTFSC 0C.1
0021: GOTO 035
0022: MOVF 22,W
0023: MOVWF 04
0024: MOVF 23,W
0025: MOVWF 77
0026: MOVF 24,W
0027: MOVWF 78
0028: MOVF 25,W
0029: MOVWF 79
002A: MOVF 26,W
002B: MOVWF 7A
002C: MOVF 27,W
002D: MOVWF 7B
002E: MOVF 28,W
002F: MOVWF 0A
0030: SWAPF 21,W
0031: MOVWF 03
0032: SWAPF 7F,F
0033: SWAPF 7F,W
0034: RETFIE
0035: BCF 0A.3
0036: GOTO 047
.................... #include ".\main.h"
.................... #include <16F88.h>
.................... //////// Standard Header file for the PIC16F88 device ////////////////
.................... #device PIC16F88
.................... #list
....................
.................... #device adc=8
....................
.................... #FUSES NOWDT //No Watch Dog Timer
.................... #FUSES INTRC_IO
.................... #FUSES NOPUT //No Power Up Timer
.................... #FUSES MCLR //Master Clear pin enabled
.................... #FUSES NOBROWNOUT //Reset when brownout detected
.................... #FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
.................... #FUSES NOCPD //No EE protection
.................... #FUSES NOWRT //Program memory not write protected
.................... #FUSES NODEBUG //No Debug mode for ICD
.................... #FUSES NOPROTECT //Code not protected from reading
.................... #FUSES NOFCMEN //Fail-safe clock monitor enabled
.................... #FUSES NOIESO //Internal External Switch Over mode enabled
....................
.................... #use delay(clock=8000000,RESTART_WDT)
0037: MOVLW 08
0038: SUBWF 3D,F
0039: BTFSS 03.0
003A: GOTO 046
003B: MOVLW 3D
003C: MOVWF 04
003D: BCF 03.0
003E: RRF 00,F
003F: MOVF 00,W
0040: BTFSC 03.2
0041: GOTO 046
0042: GOTO 044
0043: CLRWDT
0044: DECFSZ 00,F
0045: GOTO 043
0046: RETLW 00
*
0065: MOVLW 3A
0066: MOVWF 04
0067: MOVF 00,W
0068: BTFSC 03.2
0069: GOTO 07C
006A: MOVLW 02
006B: MOVWF 78
006C: MOVLW BF
006D: MOVWF 77
006E: CLRWDT
006F: DECFSZ 77,F
0070: GOTO 06E
0071: DECFSZ 78,F
0072: GOTO 06C
0073: MOVLW 96
0074: MOVWF 77
0075: DECFSZ 77,F
0076: GOTO 075
0077: NOP
0078: NOP
0079: CLRWDT
007A: DECFSZ 00,F
007B: GOTO 06A
007C: RETLW 00
....................
....................
....................
.................... #define KOLMO1 225 // predni kolecko sroubem dopredu
.................... #define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu
.................... #define STRED 128 // sredni poloha zataceciho kolecka
.................... #define BEAR1 10//10 // 3 stupne zataceni
.................... #define BEAR2 25//25
.................... #define BEAR3 45//45
.................... #define R 100 // Rozumna rychlost
.................... #define R17 200 // X nasobek rozumne rychlosti
.................... //#define L1 1 // cara vlevo
.................... #define L2 2 // cara vlevo
.................... #define L3 3 // cara vlevo
.................... #define S 0 // cara mezi sensory
.................... //#define R1 -1 // cara vpravo
.................... #define R2 -2 // cara vpravo
.................... #define R3 -3 // cara vpravo
....................
.................... // servo
.................... #define SERVO PIN_B5
....................
.................... // kroutitka
.................... #define CERVENA 4 // AN4
.................... //#define CERNA 5 // AN5
.................... //#define ZELENA 6 // AN6
.................... #define MODRA 2 // AN2
....................
.................... // IR
.................... #define IRTX PIN_B2
.................... #define CIHLA PIN_A3
....................
.................... //motory
.................... #define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred
.................... #define FL output_low(PIN_A1); output_high(PIN_A0)
.................... #define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad
.................... #define BL output_low(PIN_A0); output_high(PIN_A1)
.................... #define STOPR output_low(PIN_A6);output_low(PIN_A7)
.................... #define STOPL output_low(PIN_A0);output_low(PIN_A1)
....................
.................... //HID
.................... #define LED1 PIN_B1 //oranzova
.................... #define LED2 PIN_B2 //zluta
....................
.................... #define STROBE PIN_B0
.................... //#define SW1 PIN_A2 // Motory On/off
....................
.................... unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
.................... signed int8 line = S; // na ktere strane byla detekovana cara
*
026E: BCF 03.5
026F: CLRF 2B
.................... //unsigned int8 dira; // pocita dobu po kterou je ztracena cara
.................... unsigned int8 uhel; // urcuje aktualni uhel zataceni
.................... unsigned int8 speed; // maximalni povolena rychlost
.................... unsigned int8 turn; // rychlost toceni
.................... unsigned int8 rovinka; // pocitadlo na zjisteni rovinky
....................
.................... signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem
.................... signed int16 Rmotor; // a pravem motoru
....................
.................... // makro pro PWM pro motory
.................... #define GO(motor, direction, power) if(get_timer0()<=power) \
.................... {direction##motor;} else {stop##motor;}
.................... ////////////////////////////////////////////////////////////////////////////////
.................... #int_TIMER2
.................... TIMER2_isr() // ovladani serva
.................... {
.................... unsigned int8 n;
....................
.................... output_high(SERVO);
*
0047: BSF 03.5
0048: BCF 06.5
0049: BCF 03.5
004A: BSF 06.5
.................... delay_us(1000);
004B: CLRWDT
004C: MOVLW 09
004D: MOVWF 3C
004E: MOVLW 6D
004F: MOVWF 3D
0050: CALL 037
0051: DECFSZ 3C,F
0052: GOTO 04E
.................... for(n=uhel; n>0; n--) Delay_us(2);
0053: MOVF 2C,W
0054: MOVWF 3B
0055: MOVF 3B,F
0056: BTFSC 03.2
0057: GOTO 05E
0058: CLRWDT
0059: NOP
005A: NOP
005B: NOP
005C: DECF 3B,F
005D: GOTO 055
.................... output_low(SERVO);
005E: BSF 03.5
005F: BCF 06.5
0060: BCF 03.5
0061: BCF 06.5
.................... }
....................
.................... ////////////////////////////////////////////////////////////////////////////////
0062: BCF 0C.1
0063: BCF 0A.3
0064: GOTO 022
.................... short int IRcheck() // potvrdi detekci cihly
.................... {
.................... output_high(IRTX); // vypne vysilac IR
.................... delay_ms(100);
....................
.................... output_low(STROBE);
.................... sensors = spi_read(0); // cteni senzoru
.................... sensors=~sensors;
.................... output_high(STROBE);
....................
.................... if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal
.................... {
.................... output_low(IRTX); // zapne vysilac IR
.................... delay_ms(100);
....................
.................... output_low(STROBE);
.................... sensors = spi_read(0); // cteni senzoru
.................... sensors=~sensors;
.................... output_high(STROBE);
....................
.................... if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla
.................... {
.................... output_high(IRTX); // vypne vysilac IR
.................... delay_ms(100);
....................
.................... output_low(STROBE);
.................... sensors = spi_read(0); // cteni senzoru
.................... sensors=~sensors;
.................... output_high(STROBE);
....................
.................... output_low(IRTX); // zapne vysilac IR
.................... if(bit_test(sensors,7)) return 1; // vrat 1, kdyz je stale cihla
.................... }
.................... };
.................... output_low(IRTX); // zapne vysilac IR
.................... return 0; // vrat 0, kdyz je detekovano ruseni
.................... }
.................... ////////////////////////////////////////////////////////////////////////////////
.................... #include ".\objizdka_centrovani.c"
.................... #define DOLEVA 0
.................... #define DOPRAVA 1
....................
.................... void cikcak()
.................... {
.................... unsigned int8 i;
....................
.................... uhel=KOLMO1;
*
007D: MOVLW E1
007E: MOVWF 2C
.................... Delay_ms(100);
007F: MOVLW 64
0080: MOVWF 3A
0081: CALL 065
.................... if (line==L2) line=L3;
0082: MOVF 2B,W
0083: SUBLW 02
0084: BTFSS 03.2
0085: GOTO 088
0086: MOVLW 03
0087: MOVWF 2B
.................... if (line==S) line=L3;
0088: MOVF 2B,F
0089: BTFSS 03.2
008A: GOTO 08D
008B: MOVLW 03
008C: MOVWF 2B
.................... if (line==R2) line=R3;
008D: MOVF 2B,W
008E: SUBLW FE
008F: BTFSS 03.2
0090: GOTO 093
0091: MOVLW FD
0092: MOVWF 2B
....................
.................... Delay_ms(3);
0093: MOVLW 03
0094: MOVWF 3A
0095: CALL 065
....................
.................... output_low(STROBE); // vypni zobrazovani na posuvnem registru
0096: BSF 03.5
0097: BCF 06.0
0098: BCF 03.5
0099: BCF 06.0
.................... sensors = spi_read(0); // cteni senzoru
009A: MOVF 13,W
009B: CLRF 13
009C: BSF 03.5
009D: BTFSC 14.0
009E: GOTO 0A1
009F: BCF 03.5
00A0: GOTO 09C
00A1: BCF 03.5
00A2: MOVF 13,W
00A3: MOVWF 2A
.................... sensors=~sensors;
00A4: COMF 2A,F
.................... output_high(STROBE); // vypni zobrazovani na posuvnem registru
00A5: BSF 03.5
00A6: BCF 06.0
00A7: BCF 03.5
00A8: BSF 06.0
....................
.................... while(!bit_test(sensors,3))
.................... {
00A9: BTFSC 2A.3
00AA: GOTO 171
.................... while(true)
.................... {
.................... Delay_ms(3);
00AB: MOVLW 03
00AC: MOVWF 3A
00AD: CALL 065
....................
.................... if (line==L3)
00AE: MOVF 2B,W
00AF: SUBLW 03
00B0: BTFSS 03.2
00B1: GOTO 0DC
.................... {
.................... GO(L,B,160);GO(R,F,160);
00B2: MOVF 01,W
00B3: SUBLW A0
00B4: BTFSS 03.0
00B5: GOTO 0BF
00B6: BSF 03.5
00B7: BCF 05.0
00B8: BCF 03.5
00B9: BCF 05.0
00BA: BSF 03.5
00BB: BCF 05.1
00BC: BCF 03.5
00BD: BSF 05.1
00BE: GOTO 0C7
00BF: BSF 03.5
00C0: BCF 05.0
00C1: BCF 03.5
00C2: BCF 05.0
00C3: BSF 03.5
00C4: BCF 05.1
00C5: BCF 03.5
00C6: BCF 05.1
00C7: MOVF 01,W
00C8: SUBLW A0
00C9: BTFSS 03.0
00CA: GOTO 0D4
00CB: BSF 03.5
00CC: BCF 05.7
00CD: BCF 03.5
00CE: BCF 05.7
00CF: BSF 03.5
00D0: BCF 05.6
00D1: BCF 03.5
00D2: BSF 05.6
00D3: GOTO 0DC
00D4: BSF 03.5
00D5: BCF 05.6
00D6: BCF 03.5
00D7: BCF 05.6
00D8: BSF 03.5
00D9: BCF 05.7
00DA: BCF 03.5
00DB: BCF 05.7
.................... };
.................... if (line==R3)
00DC: MOVF 2B,W
00DD: SUBLW FD
00DE: BTFSS 03.2
00DF: GOTO 10A
.................... {
.................... GO(R,B,160);GO(L,F,160);
00E0: MOVF 01,W
00E1: SUBLW A0
00E2: BTFSS 03.0
00E3: GOTO 0ED
00E4: BSF 03.5
00E5: BCF 05.6
00E6: BCF 03.5
00E7: BCF 05.6
00E8: BSF 03.5
00E9: BCF 05.7
00EA: BCF 03.5
00EB: BSF 05.7
00EC: GOTO 0F5
00ED: BSF 03.5
00EE: BCF 05.6
00EF: BCF 03.5
00F0: BCF 05.6
00F1: BSF 03.5
00F2: BCF 05.7
00F3: BCF 03.5
00F4: BCF 05.7
00F5: MOVF 01,W
00F6: SUBLW A0
00F7: BTFSS 03.0
00F8: GOTO 102
00F9: BSF 03.5
00FA: BCF 05.1
00FB: BCF 03.5
00FC: BCF 05.1
00FD: BSF 03.5
00FE: BCF 05.0
00FF: BCF 03.5
0100: BSF 05.0
0101: GOTO 10A
0102: BSF 03.5
0103: BCF 05.0
0104: BCF 03.5
0105: BCF 05.0
0106: BSF 03.5
0107: BCF 05.1
0108: BCF 03.5
0109: BCF 05.1
.................... };
.................... if (line==S) {STOPL;STOPR; i++;}
010A: MOVF 2B,F
010B: BTFSS 03.2
010C: GOTO 11F
010D: BSF 03.5
010E: BCF 05.0
010F: BCF 03.5
0110: BCF 05.0
0111: BSF 03.5
0112: BCF 05.1
0113: BCF 03.5
0114: BCF 05.1
0115: BSF 03.5
0116: BCF 05.6
0117: BCF 03.5
0118: BCF 05.6
0119: BSF 03.5
011A: BCF 05.7
011B: BCF 03.5
011C: BCF 05.7
011D: INCF 39,F
.................... else i=0;
011E: GOTO 120
011F: CLRF 39
....................
.................... if (i>=100) break;
0120: MOVF 39,W
0121: SUBLW 63
0122: BTFSS 03.0
0123: GOTO 15A
....................
.................... output_low(STROBE); // vypni zobrazovani na posuvnem registru
0124: BSF 03.5
0125: BCF 06.0
0126: BCF 03.5
0127: BCF 06.0
.................... sensors = spi_read(0); // cteni senzoru
0128: MOVF 13,W
0129: CLRF 13
012A: BSF 03.5
012B: BTFSC 14.0
012C: GOTO 12F
012D: BCF 03.5
012E: GOTO 12A
012F: BCF 03.5
0130: MOVF 13,W
0131: MOVWF 2A
.................... sensors=~sensors;
0132: COMF 2A,F
.................... output_high(STROBE); // vypni zobrazovani na posuvnem registru
0133: BSF 03.5
0134: BCF 06.0
0135: BCF 03.5
0136: BSF 06.0
....................
.................... if(bit_test(sensors,3)) //...|...//
0137: BTFSS 2A.3
0138: GOTO 13B
.................... {
.................... line=S;
0139: CLRF 2B
.................... continue;
013A: GOTO 0AB
.................... }
....................
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
013B: BTFSS 2A.0
013C: GOTO 140
.................... {
.................... line=L3;
013D: MOVLW 03
013E: MOVWF 2B
.................... continue;
013F: GOTO 0AB
.................... }
....................
.................... if(bit_test(sensors,6)) //......|//
0140: BTFSS 2A.6
0141: GOTO 145
.................... {
.................... line=R3;
0142: MOVLW FD
0143: MOVWF 2B
.................... continue;
0144: GOTO 0AB
.................... }
....................
.................... if(bit_test(sensors,1)) //.|.....//
0145: BTFSS 2A.1
0146: GOTO 14A
.................... {
.................... line=L3;
0147: MOVLW 03
0148: MOVWF 2B
.................... continue;
0149: GOTO 0AB
.................... }
....................
.................... if(bit_test(sensors,5)) //.....|.//
014A: BTFSS 2A.5
014B: GOTO 14F
.................... {
.................... line=R3;
014C: MOVLW FD
014D: MOVWF 2B
.................... continue;
014E: GOTO 0AB
.................... }
....................
.................... if (bit_test(sensors,2)) //..|....//
014F: BTFSS 2A.2
0150: GOTO 154
.................... {
.................... line=L3;
0151: MOVLW 03
0152: MOVWF 2B
.................... continue;
0153: GOTO 0AB
.................... }
....................
.................... if (bit_test(sensors,4)) //....|..//
0154: BTFSS 2A.4
0155: GOTO 159
.................... {
.................... line=R3;
0156: MOVLW FD
0157: MOVWF 2B
.................... continue;
0158: GOTO 0AB
.................... }
.................... }
0159: GOTO 0AB
.................... delay_ms(100);
015A: MOVLW 64
015B: MOVWF 3A
015C: CALL 065
....................
.................... output_low(STROBE); // vypni zobrazovani na posuvnem registru
015D: BSF 03.5
015E: BCF 06.0
015F: BCF 03.5
0160: BCF 06.0
.................... sensors = spi_read(0); // cteni senzoru
0161: MOVF 13,W
0162: CLRF 13
0163: BSF 03.5
0164: BTFSC 14.0
0165: GOTO 168
0166: BCF 03.5
0167: GOTO 163
0168: BCF 03.5
0169: MOVF 13,W
016A: MOVWF 2A
.................... sensors=~sensors;
016B: COMF 2A,F
.................... output_high(STROBE); // vypni zobrazovani na posuvnem registru
016C: BSF 03.5
016D: BCF 06.0
016E: BCF 03.5
016F: BSF 06.0
.................... }
0170: GOTO 0A9
.................... }
0171: RETLW 00
....................
.................... /*
.................... void cikcak()
.................... {
.................... short int movement;
.................... unsigned int8 n,i=0;
....................
.................... if(uhel>=STRED)
.................... {
.................... uhel=KOLMO1;
.................... Delay_ms(100);
.................... }
....................
.................... if(uhel<=STRED)
.................... {
.................... uhel=KOLMO2;
.................... Delay_ms(100);
.................... }
....................
....................
.................... sensors = spi_read(0); // cteni senzoru
.................... sensors=~sensors;
.................... Delay_ms(5);
....................
.................... if ((sensors & 0b11100000)!=0) movement=DOPRAVA;
....................
.................... while(i<=100)
.................... {
.................... while(!bit_test(sensors,3))
.................... {
.................... if(DOPRAVA == movement)
.................... {
.................... FR;BL;
.................... movement=DOLEVA;
.................... n=0;
.................... //if ((sensors & 0b11100000)!=0) line=L1;
.................... //if ((sensors & 0b00001110)!=0) line=R1;
.................... //if ((sensors & 0b00010000)!=0) line=S;
....................
.................... for(n=0; n<=100; n++)
.................... {
.................... sensors = spi_read(0); // cteni senzoru
.................... sensors=~sensors;
.................... Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel
.................... if(bit_test(sensors,3)) break;
.................... else i=0;
.................... }
.................... STOPL;STOPR;
.................... }
....................
.................... if(DOLEVA == movement)
.................... {
.................... FL;BR;
.................... movement=DOPRAVA;
.................... n=0;
....................
.................... for(n=0; n<=100; n++)
.................... {
.................... sensors = spi_read(0);
.................... sensors =~ sensors;
.................... Delay_ms(5);
.................... if(bit_test(sensors,3)) break;
.................... else i=0;
.................... }
.................... STOPL;STOPR;
.................... }
.................... sensors = spi_read(0); // cteni senzoru
.................... sensors=~sensors;
.................... Delay_ms(5);
.................... }
.................... i++;
.................... }
.................... }
.................... */
.................... ////////////////////////////////////////////////////////////////////////////////
.................... void objizdka()
.................... {
.................... BL;FR;
0172: BSF 03.5
0173: BCF 05.0
0174: BCF 03.5
0175: BCF 05.0
0176: BSF 03.5
0177: BCF 05.1
0178: BCF 03.5
0179: BSF 05.1
017A: BSF 03.5
017B: BCF 05.7
017C: BCF 03.5
017D: BCF 05.7
017E: BSF 03.5
017F: BCF 05.6
0180: BCF 03.5
0181: BSF 05.6
.................... Delay_ms(300);
0182: MOVLW 02
0183: MOVWF 39
0184: MOVLW 96
0185: MOVWF 3A
0186: CALL 065
0187: DECFSZ 39,F
0188: GOTO 184
.................... FL;BR;
0189: BSF 03.5
018A: BCF 05.1
018B: BCF 03.5
018C: BCF 05.1
018D: BSF 03.5
018E: BCF 05.0
018F: BCF 03.5
0190: BSF 05.0
0191: BSF 03.5
0192: BCF 05.6
0193: BCF 03.5
0194: BCF 05.6
0195: BSF 03.5
0196: BCF 05.7
0197: BCF 03.5
0198: BSF 05.7
.................... Delay_ms(100);
0199: MOVLW 64
019A: MOVWF 3A
019B: CALL 065
.................... STOPL;STOPR;
019C: BSF 03.5
019D: BCF 05.0
019E: BCF 03.5
019F: BCF 05.0
01A0: BSF 03.5
01A1: BCF 05.1
01A2: BCF 03.5
01A3: BCF 05.1
01A4: BSF 03.5
01A5: BCF 05.6
01A6: BCF 03.5
01A7: BCF 05.6
01A8: BSF 03.5
01A9: BCF 05.7
01AA: BCF 03.5
01AB: BCF 05.7
....................
.................... uhel=STRED;
01AC: MOVLW 80
01AD: MOVWF 2C
.................... FL;FR;
01AE: BSF 03.5
01AF: BCF 05.1
01B0: BCF 03.5
01B1: BCF 05.1
01B2: BSF 03.5
01B3: BCF 05.0
01B4: BCF 03.5
01B5: BSF 05.0
01B6: BSF 03.5
01B7: BCF 05.7
01B8: BCF 03.5
01B9: BCF 05.7
01BA: BSF 03.5
01BB: BCF 05.6
01BC: BCF 03.5
01BD: BSF 05.6
.................... Delay_ms(500); // rovne
01BE: MOVLW 02
01BF: MOVWF 39
01C0: MOVLW FA
01C1: MOVWF 3A
01C2: CALL 065
01C3: DECFSZ 39,F
01C4: GOTO 1C0
....................
.................... uhel=STRED+55;
01C5: MOVLW B7
01C6: MOVWF 2C
.................... STOPR;FL;
01C7: BSF 03.5
01C8: BCF 05.6
01C9: BCF 03.5
01CA: BCF 05.6
01CB: BSF 03.5
01CC: BCF 05.7
01CD: BCF 03.5
01CE: BCF 05.7
01CF: BSF 03.5
01D0: BCF 05.1
01D1: BCF 03.5
01D2: BCF 05.1
01D3: BSF 03.5
01D4: BCF 05.0
01D5: BCF 03.5
01D6: BSF 05.0
.................... Delay_ms(190); // doprava
01D7: MOVLW BE
01D8: MOVWF 3A
01D9: CALL 065
....................
.................... uhel=STRED;
01DA: MOVLW 80
01DB: MOVWF 2C
.................... FR;FL;
01DC: BSF 03.5
01DD: BCF 05.7
01DE: BCF 03.5
01DF: BCF 05.7
01E0: BSF 03.5
01E1: BCF 05.6
01E2: BCF 03.5
01E3: BSF 05.6
01E4: BSF 03.5
01E5: BCF 05.1
01E6: BCF 03.5
01E7: BCF 05.1
01E8: BSF 03.5
01E9: BCF 05.0
01EA: BCF 03.5
01EB: BSF 05.0
.................... Delay_ms(500); // rovne
01EC: MOVLW 02
01ED: MOVWF 39
01EE: MOVLW FA
01EF: MOVWF 3A
01F0: CALL 065
01F1: DECFSZ 39,F
01F2: GOTO 1EE
....................
.................... uhel=STRED+55;
01F3: MOVLW B7
01F4: MOVWF 2C
.................... FL;STOPR;
01F5: BSF 03.5
01F6: BCF 05.1
01F7: BCF 03.5
01F8: BCF 05.1
01F9: BSF 03.5
01FA: BCF 05.0
01FB: BCF 03.5
01FC: BSF 05.0
01FD: BSF 03.5
01FE: BCF 05.6
01FF: BCF 03.5
0200: BCF 05.6
0201: BSF 03.5
0202: BCF 05.7
0203: BCF 03.5
0204: BCF 05.7
.................... Delay_ms(200); // doprava
0205: MOVLW C8
0206: MOVWF 3A
0207: CALL 065
....................
.................... uhel=STRED;
0208: MOVLW 80
0209: MOVWF 2C
.................... FR;FL;
020A: BSF 03.5
020B: BCF 05.7
020C: BCF 03.5
020D: BCF 05.7
020E: BSF 03.5
020F: BCF 05.6
0210: BCF 03.5
0211: BSF 05.6
0212: BSF 03.5
0213: BCF 05.1
0214: BCF 03.5
0215: BCF 05.1
0216: BSF 03.5
0217: BCF 05.0
0218: BCF 03.5
0219: BSF 05.0
.................... Delay_ms(150); // rovne
021A: MOVLW 96
021B: MOVWF 3A
021C: CALL 065
....................
.................... While((sensors & 0b11111110)!=0) //dokud neni cara
.................... {
021D: MOVF 2A,W
021E: ANDLW FE
021F: BTFSC 03.2
0220: GOTO 230
.................... sensors = spi_read(0); // cteni senzoru
0221: MOVF 13,W
0222: CLRF 13
0223: BSF 03.5
0224: BTFSC 14.0
0225: GOTO 228
0226: BCF 03.5
0227: GOTO 223
0228: BCF 03.5
0229: MOVF 13,W
022A: MOVWF 2A
.................... sensors=~sensors;
022B: COMF 2A,F
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel
022C: MOVLW 04
022D: MOVWF 3A
022E: CALL 065
.................... }
022F: GOTO 21D
.................... BL;BR;
0230: BSF 03.5
0231: BCF 05.0
0232: BCF 03.5
0233: BCF 05.0
0234: BSF 03.5
0235: BCF 05.1
0236: BCF 03.5
0237: BSF 05.1
0238: BSF 03.5
0239: BCF 05.6
023A: BCF 03.5
023B: BCF 05.6
023C: BSF 03.5
023D: BCF 05.7
023E: BCF 03.5
023F: BSF 05.7
.................... Delay_ms(400);
0240: MOVLW 02
0241: MOVWF 39
0242: MOVLW C8
0243: MOVWF 3A
0244: CALL 065
0245: DECFSZ 39,F
0246: GOTO 242
....................
.................... uhel=STRED-55;
0247: MOVLW 49
0248: MOVWF 2C
.................... FR;STOPL; // doleva
0249: BSF 03.5
024A: BCF 05.7
024B: BCF 03.5
024C: BCF 05.7
024D: BSF 03.5
024E: BCF 05.6
024F: BCF 03.5
0250: BSF 05.6
0251: BSF 03.5
0252: BCF 05.0
0253: BCF 03.5
0254: BCF 05.0
0255: BSF 03.5
0256: BCF 05.1
0257: BCF 03.5
0258: BCF 05.1
.................... delay_ms(250);
0259: MOVLW FA
025A: MOVWF 3A
025B: CALL 065
....................
.................... line=L3;
025C: MOVLW 03
025D: MOVWF 2B
.................... cikcak();
025E: CALL 07D
.................... }
025F: BCF 0A.3
0260: GOTO 3D2 (RETURN)
....................
....................
.................... ////////////////////////////////////////////////////////////////////////////////
.................... void main()
.................... {
0261: CLRF 04
0262: MOVLW 1F
0263: ANDWF 03,F
0264: MOVLW 70
0265: BSF 03.5
0266: MOVWF 0F
0267: BCF 1F.4
0268: BCF 1F.5
0269: MOVF 1B,W
026A: ANDLW 80
026B: MOVWF 1B
026C: MOVLW 07
026D: MOVWF 1C
....................
.................... unsigned int8 n;
.................... unsigned int8 i,j;
.................... unsigned int8 last_sensors;
.................... unsigned int8 RozumnaRychlost;
....................
.................... setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka
*
0270: BSF 03.5
0271: BCF 1F.4
0272: BCF 1F.5
0273: MOVF 1B,W
0274: ANDLW 80
0275: IORLW 74
0276: MOVWF 1B
.................... setup_adc(ADC_CLOCK_INTERNAL);
0277: BCF 1F.6
0278: BCF 03.5
0279: BSF 1F.6
027A: BSF 1F.7
027B: BSF 03.5
027C: BCF 1F.7
027D: BCF 03.5
027E: BSF 1F.0
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);
027F: BCF 14.5
0280: BSF 03.5
0281: BCF 06.2
0282: BSF 06.1
0283: BCF 06.4
0284: MOVLW 31
0285: BCF 03.5
0286: MOVWF 14
0287: MOVLW 00
0288: BSF 03.5
0289: MOVWF 14
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
028A: MOVF 01,W
028B: ANDLW C7
028C: IORLW 08
028D: MOVWF 01
.................... setup_timer_1(T1_DISABLED|T1_DIV_BY_8);
028E: MOVLW 30
028F: BCF 03.5
0290: MOVWF 10
.................... setup_timer_2(T2_DIV_BY_16,140,16);
0291: MOVLW 78
0292: MOVWF 78
0293: IORLW 06
0294: MOVWF 12
0295: MOVLW 8C
0296: BSF 03.5
0297: MOVWF 12
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC);
0298: MOVLW 72
0299: MOVWF 0F
....................
.................... STOPR; STOPL; // zastav motory
029A: BCF 05.6
029B: BCF 03.5
029C: BCF 05.6
029D: BSF 03.5
029E: BCF 05.7
029F: BCF 03.5
02A0: BCF 05.7
02A1: BSF 03.5
02A2: BCF 05.0
02A3: BCF 03.5
02A4: BCF 05.0
02A5: BSF 03.5
02A6: BCF 05.1
02A7: BCF 03.5
02A8: BCF 05.1
.................... Lmotor=0;Rmotor=0;
02A9: CLRF 31
02AA: CLRF 30
02AB: CLRF 33
02AC: CLRF 32
....................
.................... uhel = STRED; // nastav zadni kolecko na stred
02AD: MOVLW 80
02AE: MOVWF 2C
.................... rovinka = 0;
02AF: CLRF 2F
....................
.................... enable_interrupts(INT_TIMER2);
02B0: BSF 03.5
02B1: BSF 0C.1
.................... enable_interrupts(GLOBAL);
02B2: MOVLW C0
02B3: BCF 03.5
02B4: IORWF 0B,F
....................
.................... output_low(IRTX); // zapni IR vysilac
02B5: BSF 03.5
02B6: BCF 06.2
02B7: BCF 03.5
02B8: BCF 06.2
....................
.................... delay_ms(2000); // musime pockat na diagnostiku slave CPU
02B9: MOVLW 08
02BA: MOVWF 39
02BB: MOVLW FA
02BC: MOVWF 3A
02BD: CALL 065
02BE: DECFSZ 39,F
02BF: GOTO 2BB
....................
.................... //nastaveni rychlosti
.................... set_adc_channel(CERVENA);
02C0: MOVLW 20
02C1: MOVWF 78
02C2: MOVF 1F,W
02C3: ANDLW C7
02C4: IORWF 78,W
02C5: MOVWF 1F
....................
.................... Delay_ms(1);
02C6: MOVLW 01
02C7: MOVWF 3A
02C8: CALL 065
.................... speed=R+(read_adc()>>2); // rychlost rovne +63; kroutitko dava 0-63
02C9: BSF 1F.2
02CA: BTFSC 1F.2
02CB: GOTO 2CA
02CC: MOVF 1E,W
02CD: MOVWF 77
02CE: RRF 77,F
02CF: RRF 77,F
02D0: MOVLW 3F
02D1: ANDWF 77,F
02D2: MOVF 77,W
02D3: ADDLW 64
02D4: MOVWF 2D
.................... set_adc_channel(MODRA);
02D5: MOVLW 10
02D6: MOVWF 78
02D7: MOVF 1F,W
02D8: ANDLW C7
02D9: IORWF 78,W
02DA: MOVWF 1F
.................... Delay_ms(1);
02DB: MOVLW 01
02DC: MOVWF 3A
02DD: CALL 065
.................... turn=speed-32+(read_adc()>>2); // rychlost toceni +-32; kroutitko dava 0-63
02DE: MOVLW 20
02DF: SUBWF 2D,W
02E0: MOVWF 39
02E1: BSF 1F.2
02E2: BTFSC 1F.2
02E3: GOTO 2E2
02E4: MOVF 1E,W
02E5: MOVWF 77
02E6: RRF 77,F
02E7: RRF 77,F
02E8: MOVLW 3F
02E9: ANDWF 77,F
02EA: MOVF 77,W
02EB: ADDWF 39,W
02EC: MOVWF 2E
....................
.................... RozumnaRychlost=speed;
02ED: MOVF 2D,W
02EE: MOVWF 38
....................
.................... while(true)
.................... {
....................
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor
02EF: MOVF 01,W
02F0: BTFSS 00.7
02F1: GOTO 2F5
02F2: BTFSS 31.7
02F3: GOTO 2FD
02F4: GOTO 2F7
02F5: BTFSC 31.7
02F6: GOTO 306
02F7: MOVF 31,F
02F8: BTFSS 03.2
02F9: GOTO 2FD
02FA: SUBWF 30,W
02FB: BTFSS 03.0
02FC: GOTO 306
02FD: BSF 03.5
02FE: BCF 05.1
02FF: BCF 03.5
0300: BCF 05.1
0301: BSF 03.5
0302: BCF 05.0
0303: BCF 03.5
0304: BSF 05.0
0305: GOTO 30E
0306: BSF 03.5
0307: BCF 05.0
0308: BCF 03.5
0309: BCF 05.0
030A: BSF 03.5
030B: BCF 05.1
030C: BCF 03.5
030D: BCF 05.1
030E: MOVF 01,W
030F: BTFSS 00.7
0310: GOTO 314
0311: BTFSS 33.7
0312: GOTO 31C
0313: GOTO 316
0314: BTFSC 33.7
0315: GOTO 325
0316: MOVF 33,F
0317: BTFSS 03.2
0318: GOTO 31C
0319: SUBWF 32,W
031A: BTFSS 03.0
031B: GOTO 325
031C: BSF 03.5
031D: BCF 05.7
031E: BCF 03.5
031F: BCF 05.7
0320: BSF 03.5
0321: BCF 05.6
0322: BCF 03.5
0323: BSF 05.6
0324: GOTO 32D
0325: BSF 03.5
0326: BCF 05.6
0327: BCF 03.5
0328: BCF 05.6
0329: BSF 03.5
032A: BCF 05.7
032B: BCF 03.5
032C: BCF 05.7
....................
.................... delay_us(2000); // cekani na SLAVE, nez pripravi data od cidel
032D: CLRWDT
032E: MOVLW 01
032F: MOVWF 3A
0330: CALL 065
0331: MOVLW 09
0332: MOVWF 39
0333: CLRF 29
0334: BTFSC 0B.7
0335: BSF 29.7
0336: BCF 0B.7
0337: MOVLW 6D
0338: MOVWF 3D
0339: CALL 037
033A: BTFSC 29.7
033B: BSF 0B.7
033C: DECFSZ 39,F
033D: GOTO 333
....................
.................... last_sensors=sensors;
033E: MOVF 2A,W
033F: MOVWF 37
....................
.................... output_low(STROBE); // vypni zobrazovani na posuvnem registru
0340: BSF 03.5
0341: BCF 06.0
0342: BCF 03.5
0343: BCF 06.0
.................... sensors = spi_read(0); // cteni senzoru
0344: MOVF 13,W
0345: CLRF 13
0346: BSF 03.5
0347: BTFSC 14.0
0348: GOTO 34B
0349: BCF 03.5
034A: GOTO 346
034B: BCF 03.5
034C: MOVF 13,W
034D: MOVWF 2A
.................... sensors=~sensors; // neguj prijata data
034E: COMF 2A,F
.................... output_high(STROBE); // zobraz data na posuvnem registru
034F: BSF 03.5
0350: BCF 06.0
0351: BCF 03.5
0352: BSF 06.0
....................
.................... i=0; // havarijni kod
0353: CLRF 35
.................... for (n=0; n<=6; n++)
0354: CLRF 34
0355: MOVF 34,W
0356: SUBLW 06
0357: BTFSS 03.0
0358: GOTO 367
.................... {
.................... if(bit_test(sensors,n)) i++;
0359: MOVF 2A,W
035A: MOVWF 77
035B: MOVF 34,W
035C: MOVWF 78
035D: BTFSC 03.2
035E: GOTO 363
035F: BCF 03.0
0360: RRF 77,F
0361: DECFSZ 78,F
0362: GOTO 35F
0363: BTFSC 77.0
0364: INCF 35,F
.................... }
0365: INCF 34,F
0366: GOTO 355
.................... if (i>3) // zastavi, kdyz je cerno pod vice nez tremi cidly
0367: MOVF 35,W
0368: SUBLW 03
0369: BTFSC 03.0
036A: GOTO 393
.................... {
.................... BL; BR;
036B: BSF 03.5
036C: BCF 05.0
036D: BCF 03.5
036E: BCF 05.0
036F: BSF 03.5
0370: BCF 05.1
0371: BCF 03.5
0372: BSF 05.1
0373: BSF 03.5
0374: BCF 05.6
0375: BCF 03.5
0376: BCF 05.6
0377: BSF 03.5
0378: BCF 05.7
0379: BCF 03.5
037A: BSF 05.7
.................... delay_ms(300);
037B: MOVLW 02
037C: MOVWF 39
037D: MOVLW 96
037E: MOVWF 3A
037F: CALL 065
0380: DECFSZ 39,F
0381: GOTO 37D
.................... STOPR; STOPL;
0382: BSF 03.5
0383: BCF 05.6
0384: BCF 03.5
0385: BCF 05.6
0386: BSF 03.5
0387: BCF 05.7
0388: BCF 03.5
0389: BCF 05.7
038A: BSF 03.5
038B: BCF 05.0
038C: BCF 03.5
038D: BCF 05.0
038E: BSF 03.5
038F: BCF 05.1
0390: BCF 03.5
0391: BCF 05.1
.................... While(true);
0392: GOTO 392
.................... };
....................
.................... if (!input(CIHLA)) // dalkova detekce cihly
0393: BSF 03.5
0394: BSF 05.3
0395: BCF 03.5
0396: BTFSC 05.3
0397: GOTO 39B
.................... {
.................... speed=100;
0398: MOVLW 64
0399: MOVWF 2D
.................... }
.................... else
039A: GOTO 39D
.................... {
.................... speed=RozumnaRychlost;
039B: MOVF 38,W
039C: MOVWF 2D
.................... }
....................
.................... if (bit_test(sensors,7)) // detekce cihly
039D: BTFSS 2A.7
039E: GOTO 3D2
.................... {
.................... BR;BL;
039F: BSF 03.5
03A0: BCF 05.6
03A1: BCF 03.5
03A2: BCF 05.6
03A3: BSF 03.5
03A4: BCF 05.7
03A5: BCF 03.5
03A6: BSF 05.7
03A7: BSF 03.5
03A8: BCF 05.0
03A9: BCF 03.5
03AA: BCF 05.0
03AB: BSF 03.5
03AC: BCF 05.1
03AD: BCF 03.5
03AE: BSF 05.1
.................... Delay_ms(400);
03AF: MOVLW 02
03B0: MOVWF 39
03B1: MOVLW C8
03B2: MOVWF 3A
03B3: CALL 065
03B4: DECFSZ 39,F
03B5: GOTO 3B1
.................... STOPR;STOPL;
03B6: BSF 03.5
03B7: BCF 05.6
03B8: BCF 03.5
03B9: BCF 05.6
03BA: BSF 03.5
03BB: BCF 05.7
03BC: BCF 03.5
03BD: BCF 05.7
03BE: BSF 03.5
03BF: BCF 05.0
03C0: BCF 03.5
03C1: BCF 05.0
03C2: BSF 03.5
03C3: BCF 05.1
03C4: BCF 03.5
03C5: BCF 05.1
.................... Delay_ms(100);
03C6: MOVLW 64
03C7: MOVWF 3A
03C8: CALL 065
.................... cikcak();
03C9: CALL 07D
.................... delay_ms(500);
03CA: MOVLW 02
03CB: MOVWF 39
03CC: MOVLW FA
03CD: MOVWF 3A
03CE: CALL 065
03CF: DECFSZ 39,F
03D0: GOTO 3CC
.................... objizdka(); // objede cihlu
03D1: GOTO 172
.................... }
....................
....................
.................... if(bit_test(sensors,3)) //...|...//
03D2: BTFSS 2A.3
03D3: GOTO 3E6
.................... {
.................... uhel=STRED;
03D4: MOVLW 80
03D5: MOVWF 2C
.................... Lmotor=speed;
03D6: CLRF 7A
03D7: MOVF 2D,W
03D8: MOVWF 30
03D9: MOVF 7A,W
03DA: MOVWF 31
.................... Rmotor=speed;
03DB: CLRF 7A
03DC: MOVF 2D,W
03DD: MOVWF 32
03DE: MOVF 7A,W
03DF: MOVWF 33
.................... line=S;
03E0: CLRF 2B
.................... if (rovinka < 255) rovinka++;
03E1: INCFSZ 2F,W
03E2: GOTO 3E4
03E3: GOTO 3E5
03E4: INCF 2F,F
.................... // if (speed > R) speed--;
.................... continue;
03E5: GOTO 2EF
.................... }
....................
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
03E6: BTFSS 2A.0
03E7: GOTO 3F4
.................... {
.................... uhel=STRED - BEAR3;
03E8: MOVLW 53
03E9: MOVWF 2C
.................... Lmotor=0;
03EA: CLRF 31
03EB: CLRF 30
.................... Rmotor=turn;
03EC: CLRF 7A
03ED: MOVF 2E,W
03EE: MOVWF 32
03EF: MOVF 7A,W
03F0: MOVWF 33
.................... line=L3;
03F1: MOVLW 03
03F2: MOVWF 2B
.................... // if (speed > R) speed--;
.................... continue;
03F3: GOTO 2EF
.................... }
....................
.................... if(bit_test(sensors,6)) //......|//
03F4: BTFSS 2A.6
03F5: GOTO 402
.................... {
.................... uhel=STRED + BEAR3;
03F6: MOVLW AD
03F7: MOVWF 2C
.................... Rmotor=0;
03F8: CLRF 33
03F9: CLRF 32
.................... Lmotor=turn;
03FA: CLRF 7A
03FB: MOVF 2E,W
03FC: MOVWF 30
03FD: MOVF 7A,W
03FE: MOVWF 31
.................... line=R3;
03FF: MOVLW FD
0400: MOVWF 2B
.................... // if (speed > R) speed--;
.................... continue;
0401: GOTO 2EF
.................... }
....................
.................... if(bit_test(sensors,1)) //.|.....//
0402: BTFSS 2A.1
0403: GOTO 414
.................... {
.................... uhel=STRED - BEAR2;
0404: MOVLW 67
0405: MOVWF 2C
.................... Lmotor=speed-50;
0406: MOVLW 32
0407: SUBWF 2D,W
0408: CLRF 7A
0409: MOVWF 30
040A: MOVF 7A,W
040B: MOVWF 31
.................... Rmotor=speed;
040C: CLRF 7A
040D: MOVF 2D,W
040E: MOVWF 32
040F: MOVF 7A,W
0410: MOVWF 33
.................... line=L2;
0411: MOVLW 02
0412: MOVWF 2B
.................... // if (speed > R) speed--;
.................... continue;
0413: GOTO 2EF
.................... }
....................
.................... if(bit_test(sensors,5)) //.....|.//
0414: BTFSS 2A.5
0415: GOTO 426
.................... {
.................... uhel=STRED + BEAR2;
0416: MOVLW 99
0417: MOVWF 2C
.................... Rmotor=speed-50;
0418: MOVLW 32
0419: SUBWF 2D,W
041A: CLRF 7A
041B: MOVWF 32
041C: MOVF 7A,W
041D: MOVWF 33
.................... Lmotor=speed;
041E: CLRF 7A
041F: MOVF 2D,W
0420: MOVWF 30
0421: MOVF 7A,W
0422: MOVWF 31
.................... line=R2;
0423: MOVLW FE
0424: MOVWF 2B
.................... // if (speed > R) speed--;
.................... continue;
0425: GOTO 2EF
.................... }
....................
.................... if (bit_test(sensors,2)) //..|....//
0426: BTFSS 2A.2
0427: GOTO 43B
.................... {
.................... uhel=STRED - BEAR1;
0428: MOVLW 76
0429: MOVWF 2C
.................... Lmotor=speed;
042A: CLRF 7A
042B: MOVF 2D,W
042C: MOVWF 30
042D: MOVF 7A,W
042E: MOVWF 31
.................... Rmotor=speed;
042F: CLRF 7A
0430: MOVF 2D,W
0431: MOVWF 32
0432: MOVF 7A,W
0433: MOVWF 33
.................... line=L2;
0434: MOVLW 02
0435: MOVWF 2B
.................... if (rovinka<255) rovinka++;
0436: INCFSZ 2F,W
0437: GOTO 439
0438: GOTO 43A
0439: INCF 2F,F
.................... // if (speed > R) speed--;
.................... continue;
043A: GOTO 2EF
.................... }
....................
.................... if (bit_test(sensors,4)) //....|..//
043B: BTFSS 2A.4
043C: GOTO 450
.................... {
.................... uhel=STRED + BEAR1;
043D: MOVLW 8A
043E: MOVWF 2C
.................... Rmotor=speed;
043F: CLRF 7A
0440: MOVF 2D,W
0441: MOVWF 32
0442: MOVF 7A,W
0443: MOVWF 33
.................... Lmotor=speed;
0444: CLRF 7A
0445: MOVF 2D,W
0446: MOVWF 30
0447: MOVF 7A,W
0448: MOVWF 31
.................... line=L2;
0449: MOVLW 02
044A: MOVWF 2B
.................... if (rovinka<255) rovinka++;
044B: INCFSZ 2F,W
044C: GOTO 44E
044D: GOTO 44F
044E: INCF 2F,F
.................... // if (speed > R) speed--;
.................... continue;
044F: GOTO 2EF
.................... }
....................
....................
.................... if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate
0450: MOVF 2B,W
0451: SUBLW 03
0452: BTFSC 03.2
0453: GOTO 458
0454: MOVF 2B,W
0455: SUBLW FD
0456: BTFSS 03.2
0457: GOTO 47B
.................... {
.................... if (rovinka>50)
0458: MOVF 2F,W
0459: SUBLW 32
045A: BTFSC 03.0
045B: GOTO 47A
.................... {
.................... BL; BR;
045C: BSF 03.5
045D: BCF 05.0
045E: BCF 03.5
045F: BCF 05.0
0460: BSF 03.5
0461: BCF 05.1
0462: BCF 03.5
0463: BSF 05.1
0464: BSF 03.5
0465: BCF 05.6
0466: BCF 03.5
0467: BCF 05.6
0468: BSF 03.5
0469: BCF 05.7
046A: BCF 03.5
046B: BSF 05.7
.................... Delay_ms(100);
046C: MOVLW 64
046D: MOVWF 3A
046E: CALL 065
.................... if (rovinka > 250 || speed > 170) delay_ms(50);
046F: MOVF 2F,W
0470: SUBLW FA
0471: BTFSS 03.0
0472: GOTO 477
0473: MOVF 2D,W
0474: SUBLW AA
0475: BTFSC 03.0
0476: GOTO 47A
0477: MOVLW 32
0478: MOVWF 3A
0479: CALL 065
.................... };
.................... rovinka=0;
047A: CLRF 2F
.................... // speed=R17;
.................... };
.................... }
047B: GOTO 2EF
.................... }
047C: SLEEP
 
Configuration Fuses:
Word 1: 3F38 NOWDT NOPUT MCLR NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IO
Word 2: 3FFC NOFCMEN NOIESO
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.PJT
0,0 → 1,41
[PROJECT]
Target=main.HEX
Development_Mode=
Processor=0x688F
ToolSuite=CCS
 
[Directories]
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\dr
Library=
LinkerScript=
 
[Target Data]
FileList=D:\KAKLIK\programy\PIC_C\roboti\3Orbis\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=D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.c
2=D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.h
3=C:\Program Files\PICC\devices\16F88.h
4=D:\KAKLIK\programy\PIC_C\roboti\3Orbis\objizdka_centrovani.c
5=
[Units]
Count=1
1=D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.c (main)
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.SYM
0,0 → 1,76
015-016 CCP_1
015 CCP_1_LOW
016 CCP_1_HIGH
020 @INTERRUPT_AREA
021 @INTERRUPT_AREA
022 @INTERRUPT_AREA
023 @INTERRUPT_AREA
024 @INTERRUPT_AREA
025 @INTERRUPT_AREA
026 @INTERRUPT_AREA
027 @INTERRUPT_AREA
028 @INTERRUPT_AREA
029 @INTERRUPT_AREA
02A sensors
02B line
02C uhel
02D speed
02E turn
02F rovinka
030-031 Lmotor
032-033 Rmotor
034 main.n
035 main.i
036 main.j
037 main.last_sensors
038 main.RozumnaRychlost
039 cikcak.i
039 objizdka.@SCRATCH
039 main.@SCRATCH
03A @delay_ms1.P1
03A cikcak.@SCRATCH
03A main.@SCRATCH
03B TIMER2_isr.n
03C TIMER2_isr.@SCRATCH
03D @delay_us1.P1
077 @SCRATCH
078 @SCRATCH
078 _RETURN_
079 @SCRATCH
07A @SCRATCH
07B @SCRATCH
09C.6 C1OUT
09C.7 C2OUT
 
0065 @delay_ms1
0037 @delay_us1
0047 TIMER2_isr
007D cikcak
0172 objizdka
0261 main
0261 @cinit
 
Project Files:
D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.c
D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.h
C:\Program Files\PICC\devices\16F88.h
D:\KAKLIK\programy\PIC_C\roboti\3Orbis\objizdka_centrovani.c
 
Units:
D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.c (main)
 
Compiler Settings:
Processor: PIC16F88
Pointer Size: 8
ADC Range: 0-255
Opt Level: 9
Short,Int,Long: 1,8,16
 
Output Files:
Errors: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.err
INHX8: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.hex
Symbols: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.sym
List: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.lst
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.cof
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.tre
Statistics: D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.sta
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.c
0,0 → 1,288
#include ".\main.h"
 
#define KOLMO1 225 // predni kolecko sroubem dopredu
#define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu
#define STRED 128 // sredni poloha zataceciho kolecka
#define BEAR1 10//10 // 3 stupne zataceni
#define BEAR2 25//25
#define BEAR3 45//45
#define R 100 // Rozumna rychlost
#define R17 200 // X nasobek rozumne rychlosti
//#define L1 1 // cara vlevo
#define L2 2 // cara vlevo
#define L3 3 // cara vlevo
#define S 0 // cara mezi sensory
//#define R1 -1 // cara vpravo
#define R2 -2 // cara vpravo
#define R3 -3 // cara vpravo
 
// servo
#define SERVO PIN_B5
 
// kroutitka
#define CERVENA 4 // AN4
//#define CERNA 5 // AN5
//#define ZELENA 6 // AN6
#define MODRA 2 // AN2
 
// IR
#define IRTX PIN_B2
#define CIHLA PIN_A3
 
//motory
#define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred
#define FL output_low(PIN_A1); output_high(PIN_A0)
#define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad
#define BL output_low(PIN_A0); output_high(PIN_A1)
#define STOPR output_low(PIN_A6);output_low(PIN_A7)
#define STOPL output_low(PIN_A0);output_low(PIN_A1)
 
//HID
#define LED1 PIN_B1 //oranzova
#define LED2 PIN_B2 //zluta
 
#define STROBE PIN_B0
//#define SW1 PIN_A2 // Motory On/off
 
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
signed int8 line = S; // na ktere strane byla detekovana cara
//unsigned int8 dira; // pocita dobu po kterou je ztracena cara
unsigned int8 uhel; // urcuje aktualni uhel zataceni
unsigned int8 speed; // maximalni povolena rychlost
unsigned int8 turn; // rychlost toceni
unsigned int8 rovinka; // pocitadlo na zjisteni rovinky
 
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem
signed int16 Rmotor; // a pravem motoru
 
// makro pro PWM pro motory
#define GO(motor, direction, power) if(get_timer0()<=power) \
{direction##motor;} else {stop##motor;}
////////////////////////////////////////////////////////////////////////////////
#int_TIMER2
TIMER2_isr() // ovladani serva
{
unsigned int8 n;
 
output_high(SERVO);
delay_us(1000);
for(n=uhel; n>0; n--) Delay_us(2);
output_low(SERVO);
}
 
////////////////////////////////////////////////////////////////////////////////
short int IRcheck() // potvrdi detekci cihly
{
output_high(IRTX); // vypne vysilac IR
delay_ms(100);
 
output_low(STROBE);
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE);
 
if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal
{
output_low(IRTX); // zapne vysilac IR
delay_ms(100);
 
output_low(STROBE);
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE);
 
if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla
{
output_high(IRTX); // vypne vysilac IR
delay_ms(100);
 
output_low(STROBE);
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE);
 
output_low(IRTX); // zapne vysilac IR
if(bit_test(sensors,7)) return 1; // vrat 1, kdyz je stale cihla
}
};
output_low(IRTX); // zapne vysilac IR
return 0; // vrat 0, kdyz je detekovano ruseni
}
////////////////////////////////////////////////////////////////////////////////
#include ".\objizdka_centrovani.c"
////////////////////////////////////////////////////////////////////////////////
void main()
{
 
unsigned int8 n;
unsigned int8 i,j;
unsigned int8 last_sensors;
unsigned int8 RozumnaRychlost;
 
setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED|T1_DIV_BY_8);
setup_timer_2(T2_DIV_BY_16,140,16);
setup_oscillator(OSC_8MHZ|OSC_INTRC);
 
STOPR; STOPL; // zastav motory
Lmotor=0;Rmotor=0;
 
uhel = STRED; // nastav zadni kolecko na stred
rovinka = 0;
 
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
 
output_low(IRTX); // zapni IR vysilac
 
delay_ms(2000); // musime pockat na diagnostiku slave CPU
 
//nastaveni rychlosti
set_adc_channel(CERVENA);
 
Delay_ms(1);
speed=R+(read_adc()>>2); // rychlost rovne +63; kroutitko dava 0-63
set_adc_channel(MODRA);
Delay_ms(1);
turn=speed-32+(read_adc()>>2); // rychlost toceni +-32; kroutitko dava 0-63
 
RozumnaRychlost=speed;
while(true)
{
 
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor
 
delay_us(2000); // cekani na SLAVE, nez pripravi data od cidel
 
last_sensors=sensors;
 
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors; // neguj prijata data
output_high(STROBE); // zobraz data na posuvnem registru
 
i=0; // havarijni kod
for (n=0; n<=6; n++)
{
if(bit_test(sensors,n)) i++;
}
if (i>3) // zastavi, kdyz je cerno pod vice nez tremi cidly
{
BL; BR;
delay_ms(300);
STOPR; STOPL;
While(true);
};
 
if (!input(CIHLA)) // dalkova detekce cihly
{
speed=100;
}
else
{
speed=RozumnaRychlost;
}
if (bit_test(sensors,7)) // detekce cihly
{
BR;BL;
Delay_ms(400);
STOPR;STOPL;
Delay_ms(100);
cikcak();
delay_ms(500);
objizdka(); // objede cihlu
}
 
 
if(bit_test(sensors,3)) //...|...//
{
uhel=STRED;
Lmotor=speed;
Rmotor=speed;
line=S;
if (rovinka < 255) rovinka++;
// if (speed > R) speed--;
continue;
}
 
if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
{
uhel=STRED - BEAR3;
Lmotor=0;
Rmotor=turn;
line=L3;
// if (speed > R) speed--;
continue;
}
 
if(bit_test(sensors,6)) //......|//
{
uhel=STRED + BEAR3;
Rmotor=0;
Lmotor=turn;
line=R3;
// if (speed > R) speed--;
continue;
}
 
if(bit_test(sensors,1)) //.|.....//
{
uhel=STRED - BEAR2;
Lmotor=speed-50;
Rmotor=speed;
line=L2;
// if (speed > R) speed--;
continue;
}
 
if(bit_test(sensors,5)) //.....|.//
{
uhel=STRED + BEAR2;
Rmotor=speed-50;
Lmotor=speed;
line=R2;
// if (speed > R) speed--;
continue;
}
 
if (bit_test(sensors,2)) //..|....//
{
uhel=STRED - BEAR1;
Lmotor=speed;
Rmotor=speed;
line=L2;
if (rovinka<255) rovinka++;
// if (speed > R) speed--;
continue;
}
 
if (bit_test(sensors,4)) //....|..//
{
uhel=STRED + BEAR1;
Rmotor=speed;
Lmotor=speed;
line=L2;
if (rovinka<255) rovinka++;
// if (speed > R) speed--;
continue;
}
 
 
if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate
{
if (rovinka>50)
{
BL; BR;
Delay_ms(100);
if (rovinka > 250 || speed > 170) delay_ms(50);
};
rovinka=0;
// speed=R17;
};
}
}
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.cof
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
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.err
0,0 → 1,2
No Errors
0 Errors, 0 Warnings.
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.h
0,0 → 1,18
#include <16F88.h>
#device adc=8
 
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //Reset when brownout detected
#FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOFCMEN //Fail-safe clock monitor enabled
#FUSES NOIESO //Internal External Switch Over mode enabled
 
#use delay(clock=8000000,RESTART_WDT)
 
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.sta
0,0 → 1,35
 
ROM used: 1149 (28%)
1149 (28%) including unused fragments
 
1 Average locations per line
3 Average locations per statement
 
RAM used: 32 (18%) at main() level
35 (20%) worst case
 
Lines Stmts % Files
----- ----- --- -----
289 191 49 D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.c
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\3Orbis\main.h
279 0 0 C:\Program Files\PICC\devices\16F88.h
215 198 34 D:\KAKLIK\programy\PIC_C\roboti\3Orbis\objizdka_centrovani.c
----- -----
1604 778 Total
 
Page ROM % RAM Functions:
---- --- --- --- ----------
0 24 2 1 @delay_ms1
0 16 1 1 @delay_us1
0 30 3 2 TIMER2_isr
0 245 21 2 cikcak
0 239 21 1 objizdka
0 540 47 7 main
 
Segment Used Free
--------- ---- ----
00000-00003 4 0
00004-00036 51 0
00037-007FF 1094 899
00800-00FFF 0 2048
 
/roboti/3Orbis/bak/09 ruzove rukavice/master/main.tre
0,0 → 1,37
ÀÄmain
ÃÄmain 0/540 Ram=7
³ ÃÄ??0??
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_us1 0/16 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄcikcak 0/245 Ram=2
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÀÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄobjizdka 0/239 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÀÄcikcak 0/245 Ram=2
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÃÄ@delay_ms1 0/24 Ram=1
³ ³ ÀÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÀÄ@delay_ms1 0/24 Ram=1
ÀÄTIMER2_isr 0/30 Ram=2
ÀÄ@delay_us1 0/16 Ram=1
/roboti/3Orbis/bak/09 ruzove rukavice/master/objizdka_centrovani.BAK
0,0 → 1,214
#define DOLEVA 0
#define DOPRAVA 1
 
void cikcak()
{
unsigned int8 i;
 
uhel=KOLMO1;
Delay_ms(100);
if (line==L2) line=L3;
if (line==S) line=L3;
if (line==R2) line=R3;
 
Delay_ms(3);
 
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE); // vypni zobrazovani na posuvnem registru
 
while(!bit_test(sensors,3))
{
while(true)
{
Delay_ms(3);
if (line==L3)
{
GO(L,B,160);GO(R,F,160);
};
if (line==R3)
{
GO(R,B,160);GO(L,F,160);
};
if (line==S) {STOPL;STOPR; i++;}
else i=0;
if (i>=100) break;
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE); // vypni zobrazovani na posuvnem registru
if(bit_test(sensors,3)) //...|...//
{
line=S;
continue;
}
if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
{
line=L3;
continue;
}
if(bit_test(sensors,6)) //......|//
{
line=R3;
continue;
}
if(bit_test(sensors,1)) //.|.....//
{
line=L3;
continue;
}
if(bit_test(sensors,5)) //.....|.//
{
line=R3;
continue;
}
if (bit_test(sensors,2)) //..|....//
{
line=L3;
continue;
}
if (bit_test(sensors,4)) //....|..//
{
line=R3;
continue;
}
}
delay_ms(100);
 
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE); // vypni zobrazovani na posuvnem registru
}
}
 
/*
void cikcak()
{
short int movement;
unsigned int8 n,i=0;
 
if(uhel>=STRED)
{
uhel=KOLMO1;
Delay_ms(100);
}
 
if(uhel<=STRED)
{
uhel=KOLMO2;
Delay_ms(100);
}
 
 
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(5);
if ((sensors & 0b11100000)!=0) movement=DOPRAVA;
 
while(i<=100)
{
while(!bit_test(sensors,3))
{
if(DOPRAVA == movement)
{
FR;BL;
movement=DOLEVA;
n=0;
//if ((sensors & 0b11100000)!=0) line=L1;
//if ((sensors & 0b00001110)!=0) line=R1;
//if ((sensors & 0b00010000)!=0) line=S;
 
for(n=0; n<=100; n++)
{
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel
if(bit_test(sensors,3)) break;
else i=0;
}
STOPL;STOPR;
}
 
if(DOLEVA == movement)
{
FL;BR;
movement=DOPRAVA;
n=0;
 
for(n=0; n<=100; n++)
{
sensors = spi_read(0);
sensors =~ sensors;
Delay_ms(5);
if(bit_test(sensors,3)) break;
else i=0;
}
STOPL;STOPR;
}
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(5);
}
i++;
}
}
*/
////////////////////////////////////////////////////////////////////////////////
void objizdka()
{
BL;FR;
Delay_ms(300);
FL;BR;
Delay_ms(100);
STOPL;STOPR;
uhel=STRED;
FL;FR;
Delay_ms(400); // rovne
 
uhel=STRED+55;
STOPR;FL;
Delay_ms(190); // doprava
 
uhel=STRED;
FR;FL;
Delay_ms(400); // rovne
 
uhel=STRED+55;
FL;STOPR;
Delay_ms(250); // doprava
 
uhel=STRED;
FR;FL;
Delay_ms(150); // rovne
 
While((sensors & 0b11111110)!=0) //dokud neni cara
{
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel
}
BL;BR;
Delay_ms(400);
uhel=STRED-55;
FR;STOPL; // doleva
delay_ms(250);
line=L3;
cikcak();
}
/roboti/3Orbis/bak/09 ruzove rukavice/master/objizdka_centrovani.c
0,0 → 1,214
#define DOLEVA 0
#define DOPRAVA 1
 
void cikcak()
{
unsigned int8 i;
 
uhel=KOLMO1;
Delay_ms(100);
if (line==L2) line=L3;
if (line==S) line=L3;
if (line==R2) line=R3;
 
Delay_ms(3);
 
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE); // vypni zobrazovani na posuvnem registru
 
while(!bit_test(sensors,3))
{
while(true)
{
Delay_ms(3);
if (line==L3)
{
GO(L,B,160);GO(R,F,160);
};
if (line==R3)
{
GO(R,B,160);GO(L,F,160);
};
if (line==S) {STOPL;STOPR; i++;}
else i=0;
if (i>=100) break;
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE); // vypni zobrazovani na posuvnem registru
if(bit_test(sensors,3)) //...|...//
{
line=S;
continue;
}
if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
{
line=L3;
continue;
}
if(bit_test(sensors,6)) //......|//
{
line=R3;
continue;
}
if(bit_test(sensors,1)) //.|.....//
{
line=L3;
continue;
}
if(bit_test(sensors,5)) //.....|.//
{
line=R3;
continue;
}
if (bit_test(sensors,2)) //..|....//
{
line=L3;
continue;
}
if (bit_test(sensors,4)) //....|..//
{
line=R3;
continue;
}
}
delay_ms(100);
 
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
output_high(STROBE); // vypni zobrazovani na posuvnem registru
}
}
 
/*
void cikcak()
{
short int movement;
unsigned int8 n,i=0;
 
if(uhel>=STRED)
{
uhel=KOLMO1;
Delay_ms(100);
}
 
if(uhel<=STRED)
{
uhel=KOLMO2;
Delay_ms(100);
}
 
 
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(5);
if ((sensors & 0b11100000)!=0) movement=DOPRAVA;
 
while(i<=100)
{
while(!bit_test(sensors,3))
{
if(DOPRAVA == movement)
{
FR;BL;
movement=DOLEVA;
n=0;
//if ((sensors & 0b11100000)!=0) line=L1;
//if ((sensors & 0b00001110)!=0) line=R1;
//if ((sensors & 0b00010000)!=0) line=S;
 
for(n=0; n<=100; n++)
{
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel
if(bit_test(sensors,3)) break;
else i=0;
}
STOPL;STOPR;
}
 
if(DOLEVA == movement)
{
FL;BR;
movement=DOPRAVA;
n=0;
 
for(n=0; n<=100; n++)
{
sensors = spi_read(0);
sensors =~ sensors;
Delay_ms(5);
if(bit_test(sensors,3)) break;
else i=0;
}
STOPL;STOPR;
}
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(5);
}
i++;
}
}
*/
////////////////////////////////////////////////////////////////////////////////
void objizdka()
{
BL;FR;
Delay_ms(300);
FL;BR;
Delay_ms(100);
STOPL;STOPR;
uhel=STRED;
FL;FR;
Delay_ms(500); // rovne
 
uhel=STRED+55;
STOPR;FL;
Delay_ms(190); // doprava
 
uhel=STRED;
FR;FL;
Delay_ms(500); // rovne
 
uhel=STRED+55;
FL;STOPR;
Delay_ms(200); // doprava
 
uhel=STRED;
FR;FL;
Delay_ms(150); // rovne
 
While((sensors & 0b11111110)!=0) //dokud neni cara
{
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel
}
BL;BR;
Delay_ms(400);
uhel=STRED-55;
FR;STOPL; // doleva
delay_ms(250);
line=L3;
cikcak();
}
/roboti/3Orbis/bak/09 ruzove rukavice/master/objizdka_cidla.c
0,0 → 1,64
void objizdka()
{
int8 shure=0;
unsigned int16 n;
 
// toceni na miste dokud nezmizi cihla
//------------------------------------
uhel=KOLMO1; // nastav zataceci kolecko kolmo na osu robota
Delay_ms(100);
BL;FR;
Delay_ms(200); // minimalni toceni, kdyby se zastavilo sikmo k cihle
 
While(bit_test(sensors,7)) // toc, dokud neni cihla z primeho senzoru
{
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel
}
STOPL; STOPR;
 
for (n=0;n<1000;n++) // vystred se na hranu cihly
{
if(!input(CIHLA))
{
GO(L,B,180);GO(R,F,160); // zapni motory PWM podle promenych Lmotor a Rmotor
} else
{
GO(L,F,180);GO(R,B,160); // zapni motory PWM podle promenych Lmotor a Rmotor
};
delay_ms(1);
}
STOPR;STOPL;
 
uhel=STRED; // dopredu
delay_ms(100);
FR; FL;
delay_ms(500);
BL;BR;
delay_ms(200);
STOPL;STOPR;
 
uhel=STRED+BEAR3; // doprava
delay_ms(100);
FL;
delay_ms(400);
uhel=STRED+BEAR2; // min doprava
FL;FR;
delay_ms(100);
uhel=STRED+BEAR1; // jeste min doprava
FL;FR;
delay_ms(200);
While((sensors & 0b11111110)!=0) //dokud neni cara
{
sensors = spi_read(0); // cteni senzoru
sensors=~sensors;
Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel
}
BL; BR;
delay_ms(400);
 
uhel=STRED-BEAR3; // doleva
}
 
////////////////////////////////////////////////////////////////////////////////