/roboti/3Orbis/bak/02/master/main.BAK |
---|
0,0 → 1,170 |
#include ".\main.h" |
#use rtos (timer=2, minor_cycle=2ms) |
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
unsigned int8 line; // na ktere strane byla detekovana cara |
unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
unsigned int8 uhel; // urcuje aktualni uhel zataceni |
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
signed int16 Rmotor; // a pravem motoru |
#define LMAX 190 // maximalni zatoceni doleva |
#define RMAX 60 // maximalni zatoceni doprava |
#define STRED 128 // sredni poloha zadniho kolecka |
// servo |
#define SERVO PIN_A2 |
//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 |
// makro pro PWM |
#define GO(motor, direction, power) if(get_timer0()<=power) \ |
{direction##motor;} else {stop##motor;} |
//////////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=16ms,max=2ms) |
void zatoc() // ridi servo ktere otaci kolem |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1200); |
for(n=uhel; n>0; n--); |
output_low(SERVO); |
} |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=2ms, max=500us) |
void motory() // umoznuje nezavisle rizeni vykonu na obou motorech |
{ |
if(Rmotor>0) //pravy motor |
{ |
GO(R, F, Rmotor); |
} |
if(Rmotor==0) STOPR; |
if(Rmotor<0) |
{ |
GO(R, B, abs(Rmotor)); |
} |
if(Lmotor>0) // levy motor |
{ |
GO(L, F, Lmotor); |
} |
if(Lmotor==0) STOPL; |
if(Lmotor<0) |
{ |
GO(L, B, abs(Lmotor)); |
} |
} |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=4ms, max=500us, queue=0) |
void rizeni() |
{ |
rizeni: |
sensors = spi_read(0); // cteni senzoru na caru |
output_high(STROBE); |
output_low(STROBE); |
if(bit_test(sensors,0)) //*......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
{ |
uhel=LMAX; |
Lmotor=60;Rmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,6)) //......*// |
{ |
uhel=RMAX; |
Rmotor=60;Lmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,1)) //.*.....// |
{ |
uhel=STRED+30; |
Lmotor=70;Rmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,5)) //.....*.// |
{ |
uhel=STRED-30; |
Rmotor=70;Lmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,2)) //..*....// |
{ |
uhel=STRED+20; |
Lmotor=90;Rmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,4)) //....*..// |
{ |
uhel=STRED-20; |
Rmotor=90;Lmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,3)) //...*...// |
{ |
uhel=STRED; |
Lmotor=100;Rmotor=100; |
goto rizeni; |
} |
/*STOPL;STOPR; |
if(bit_test(sensors,7)) |
{ |
}*/ |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_oscillator(OSC_8MHZ|OSC_INTRC); |
// set_pwm1_duty(0); // Spust PWM, ale zatim s trvalou 0 na vystupu |
// setup_ccp1(CCP_PWM); |
// setup_timer_2(T2_DIV_BY_16,200,1); // perioda |
// setup_timer_2(T2_DIV_BY_4,255,10); // Casovac pro regulaci |
STOPR; STOPL; |
uhel=STRED; |
// diagnostika(); |
Lmotor=0; |
Rmotor=0; |
rtos_run(); |
} |
/roboti/3Orbis/bak/02/master/main.HEX |
---|
0,0 → 1,76 |
:1000000000308A008F2900000A108A100A11820726 |
:100010002934003430340034373400343F30840025 |
:100020000008031925280230F800BF30F7006400EB |
:10003000F70B1728F80B15289630F700F70B1E283A |
:10004000000000006400800B13288A11402808304B |
:10005000BF02031C36283F3084000310800C0008C8 |
:100060000319362834286400800B33288A1143286A |
:10007000831605118312051564000130BF000E2898 |
:10008000C730BF0027282408BE00BE0803194A282D |
:10009000BE03452883160511831205113830AE00C2 |
:1000A0000030AF008A11362A0034A81B7D28A8082A |
:1000B000031D5E282708003C03187D280108801FC7 |
:1000C0006428A81F6C286628A81B7528A808031D8B |
:1000D0006C282702031C7528831685138312851349 |
:1000E00083160513831205177D28831605138312C3 |
:1000F00005138316851383128513A708031D87280C |
:10010000A808031D87288316051383120513831679 |
:10011000851383128513A81FBD280108C000280875 |
:10012000FA002708A81F9D282708003CF700FA01BD |
:100130002808031C280FFA027708F800C01FA3281C |
:10014000FA1FAC28A528FA1BB528FA08031DAC280D |
:1001500040087802031CB528831605138312051383 |
:100160008316851383128517BD2883160513831202 |
:1001700005138316851383128513A61BE528A6088D |
:10018000031DC6282508003C0318E5280108801F28 |
:10019000CC28A61FD428CE28A61BDD28A608031D20 |
:1001A000D4282502031CDD288316851083128510B0 |
:1001B0008316051083120514E52883160510831293 |
:1001C00005108316851083128510A508031DEF28DE |
:1001D000A608031DEF288316051083120510831649 |
:1001E000851083128510A61F25290108C000260846 |
:1001F000FA002508A61F05292508003CF700FA018A |
:100200002608031C260FFA027708F800C01F0B29E6 |
:10021000FA1F14290D29FA1B1D29FA08031D142998 |
:1002200040087802031C1D2983160510831205104F |
:1002300083168510831285142529831605108312D1 |
:10024000051083168510831285105530B5000030D7 |
:10025000B6008A11362A0034130893018316141845 |
:10026000332983122E2983121308A1008316061046 |
:10027000831206148316061083120610211C4829C7 |
:10028000BE30A400A601A501A8017F30A7002C293B |
:10029000211F52293C30A400A801A701A6017F30EC |
:1002A000A5002C29A11C5D299E30A400A601463082 |
:1002B000A500A8017F30A7002C29A11E6829623063 |
:1002C000A400A8014630A700A6017F30A5002C2974 |
:1002D000211D73299430A400A6015A30A500A8015D |
:1002E0007F30A7002C29211E7E296C30A400A80194 |
:1002F0005A30A700A6017F30A5002C29A11D88290E |
:100300008030A400A6016430A500A801A7002C2914 |
:100310002C30BC000130BD008A11362A0034840123 |
:100320001F308305703083168F001F129F121B0829 |
:1003300080399B0007309C001F129F121B088039D8 |
:100340009B001F1383121F179F1783169F1383127F |
:100350001F1494128316061186140612303083126D |
:1003600094000030831694000108C73908388100D2 |
:1003700083129001723083168F00051383120513C8 |
:1003800083168513831285138316051083120510B7 |
:1003900083168510831285108030A400A601A50164 |
:1003A000A801A701A901AB010830AA00AD010130E5 |
:1003B000AC003830AE000030AF00B001B201013007 |
:1003C000B100B401B3015530B5000030B600B7013B |
:1003D000B9010230B800BB01BA012C30BC000130B9 |
:1003E000BD00A0010030F80006389200FA308316F4 |
:1003F000920083128C100030F80006389200FA3018 |
:100400008316920083128C100310200DF700042035 |
:10041000F900013077070420FA0079088400000809 |
:10042000F900840A0008F700840A0008F800840A2A |
:10043000800A0008FA00031D202A840A800A840327 |
:10044000840A00087802031D382A77087A02031DFF |
:10045000382A84038001840A8001840AF91B382A1F |
:10046000840A00088A0084030008820083120313B0 |
:10047000A00A03302002031D042AA0018C1C422A7A |
:0C0480008316022A3E2AFF30A000630011 |
:04400E00F83FFF3F39 |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/02/master/main.LST |
---|
0,0 → 1,780 |
CCS PCM C Compiler, Version 3.245, 27853 01-IV-06 23:13 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
ROM used: 582 words (14%) |
Largest free fragment is 2048 |
RAM used: 35 (20%) at main() level |
38 (22%) worst case |
Stack: 3 worst case (1 in main + 2 for interrupts) |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 18F |
0003: NOP |
.................... #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 BROWNOUT //Reset when brownout detected |
.................... #FUSES LVP //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 FCMEN //Fail-safe clock monitor enabled |
.................... #FUSES IESO //Internal External Switch Over mode enabled |
.................... |
.................... #use delay(clock=8000000,RESTART_WDT) |
000E: MOVLW 3F |
000F: MOVWF 04 |
0010: MOVF 00,W |
0011: BTFSC 03.2 |
0012: GOTO 025 |
0013: MOVLW 02 |
0014: MOVWF 78 |
0015: MOVLW BF |
0016: MOVWF 77 |
0017: CLRWDT |
0018: DECFSZ 77,F |
0019: GOTO 017 |
001A: DECFSZ 78,F |
001B: GOTO 015 |
001C: MOVLW 96 |
001D: MOVWF 77 |
001E: DECFSZ 77,F |
001F: GOTO 01E |
0020: NOP |
0021: NOP |
0022: CLRWDT |
0023: DECFSZ 00,F |
0024: GOTO 013 |
0025: BCF 0A.3 |
0026: GOTO 040 (RETURN) |
0027: MOVLW 08 |
0028: SUBWF 3F,F |
0029: BTFSS 03.0 |
002A: GOTO 036 |
002B: MOVLW 3F |
002C: MOVWF 04 |
002D: BCF 03.0 |
002E: RRF 00,F |
002F: MOVF 00,W |
0030: BTFSC 03.2 |
0031: GOTO 036 |
0032: GOTO 034 |
0033: CLRWDT |
0034: DECFSZ 00,F |
0035: GOTO 033 |
0036: BCF 0A.3 |
0037: GOTO 043 (RETURN) |
.................... |
.................... |
.................... |
.................... #use rtos (timer=2, minor_cycle=2ms) |
.................... |
.................... unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
.................... unsigned int8 line; // na ktere strane byla detekovana cara |
.................... unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
.................... unsigned int8 uhel; // urcuje aktualni uhel zataceni |
.................... |
.................... signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
.................... signed int16 Rmotor; // a pravem motoru |
.................... |
.................... #define LMAX 190 // maximalni zatoceni doleva |
.................... #define RMAX 60 // maximalni zatoceni doprava |
.................... #define STRED 128 // sredni poloha zadniho kolecka |
.................... |
.................... // servo |
.................... #define SERVO PIN_A2 |
.................... |
.................... //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 |
.................... |
.................... // makro pro PWM |
.................... #define GO(motor, direction, power) if(get_timer0()<=power) \ |
.................... {direction##motor;} else {stop##motor;} |
.................... |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... /* |
.................... void diagnostika() |
.................... { |
.................... if(input(SW1))STOPR;STOPL;While(TRUE); |
.................... // if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
.................... // if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #task (rate=16ms,max=2ms) |
.................... void zatoc() // ridi servo ktere otaci kolem |
.................... { |
.................... unsigned int8 n; |
.................... output_high(SERVO); |
0038: BSF 03.5 |
0039: BCF 05.2 |
003A: BCF 03.5 |
003B: BSF 05.2 |
.................... delay_us(1200); |
003C: CLRWDT |
003D: MOVLW 01 |
003E: MOVWF 3F |
003F: GOTO 00E |
0040: MOVLW C7 |
0041: MOVWF 3F |
0042: GOTO 027 |
.................... for(n=uhel; n>0; n--); |
0043: MOVF 24,W |
0044: MOVWF 3E |
0045: MOVF 3E,F |
0046: BTFSC 03.2 |
0047: GOTO 04A |
0048: DECF 3E,F |
0049: GOTO 045 |
.................... output_low(SERVO); |
004A: BSF 03.5 |
004B: BCF 05.2 |
004C: BCF 03.5 |
004D: BCF 05.2 |
.................... } |
004E: MOVLW 38 |
004F: MOVWF 2E |
0050: MOVLW 00 |
0051: MOVWF 2F |
0052: BCF 0A.3 |
0053: GOTO 236 |
0054: RETLW 00 |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #task (rate=2ms, max=500us) |
.................... void motory() // umoznuje nezavisle rizeni vykonu na obou motorech |
.................... { |
.................... |
.................... if(Rmotor>0) //pravy motor |
0055: BTFSC 28.7 |
0056: GOTO 07D |
0057: MOVF 28,F |
0058: BTFSS 03.2 |
0059: GOTO 05E |
005A: MOVF 27,W |
005B: SUBLW 00 |
005C: BTFSC 03.0 |
005D: GOTO 07D |
.................... { |
.................... GO(R, F, Rmotor); |
005E: MOVF 01,W |
005F: BTFSS 00.7 |
0060: GOTO 064 |
0061: BTFSS 28.7 |
0062: GOTO 06C |
0063: GOTO 066 |
0064: BTFSC 28.7 |
0065: GOTO 075 |
0066: MOVF 28,F |
0067: BTFSS 03.2 |
0068: GOTO 06C |
0069: SUBWF 27,W |
006A: BTFSS 03.0 |
006B: GOTO 075 |
006C: BSF 03.5 |
006D: BCF 05.7 |
006E: BCF 03.5 |
006F: BCF 05.7 |
0070: BSF 03.5 |
0071: BCF 05.6 |
0072: BCF 03.5 |
0073: BSF 05.6 |
0074: GOTO 07D |
0075: BSF 03.5 |
0076: BCF 05.6 |
0077: BCF 03.5 |
0078: BCF 05.6 |
0079: BSF 03.5 |
007A: BCF 05.7 |
007B: BCF 03.5 |
007C: BCF 05.7 |
.................... } |
.................... |
.................... if(Rmotor==0) STOPR; |
007D: MOVF 27,F |
007E: BTFSS 03.2 |
007F: GOTO 087 |
0080: MOVF 28,F |
0081: BTFSS 03.2 |
0082: GOTO 087 |
0083: BSF 03.5 |
0084: BCF 05.6 |
0085: BCF 03.5 |
0086: BCF 05.6 |
0087: BSF 03.5 |
0088: BCF 05.7 |
0089: BCF 03.5 |
008A: BCF 05.7 |
.................... |
.................... if(Rmotor<0) |
008B: BTFSS 28.7 |
008C: GOTO 0BD |
.................... { |
.................... GO(R, B, abs(Rmotor)); |
008D: MOVF 01,W |
008E: MOVWF 40 |
008F: MOVF 28,W |
0090: MOVWF 7A |
0091: MOVF 27,W |
0092: BTFSS 28.7 |
0093: GOTO 09D |
0094: MOVF 27,W |
0095: SUBLW 00 |
0096: MOVWF 77 |
0097: CLRF 7A |
0098: MOVF 28,W |
0099: BTFSS 03.0 |
009A: INCFSZ 28,W |
009B: SUBWF 7A,F |
009C: MOVF 77,W |
009D: MOVWF 78 |
009E: BTFSS 40.7 |
009F: GOTO 0A3 |
00A0: BTFSS 7A.7 |
00A1: GOTO 0AC |
00A2: GOTO 0A5 |
00A3: BTFSC 7A.7 |
00A4: GOTO 0B5 |
00A5: MOVF 7A,F |
00A6: BTFSS 03.2 |
00A7: GOTO 0AC |
00A8: MOVF 40,W |
00A9: SUBWF 78,W |
00AA: BTFSS 03.0 |
00AB: GOTO 0B5 |
00AC: BSF 03.5 |
00AD: BCF 05.6 |
00AE: BCF 03.5 |
00AF: BCF 05.6 |
00B0: BSF 03.5 |
00B1: BCF 05.7 |
00B2: BCF 03.5 |
00B3: BSF 05.7 |
00B4: GOTO 0BD |
00B5: BSF 03.5 |
00B6: BCF 05.6 |
00B7: BCF 03.5 |
00B8: BCF 05.6 |
00B9: BSF 03.5 |
00BA: BCF 05.7 |
00BB: BCF 03.5 |
00BC: BCF 05.7 |
.................... } |
.................... |
.................... if(Lmotor>0) // levy motor |
00BD: BTFSC 26.7 |
00BE: GOTO 0E5 |
00BF: MOVF 26,F |
00C0: BTFSS 03.2 |
00C1: GOTO 0C6 |
00C2: MOVF 25,W |
00C3: SUBLW 00 |
00C4: BTFSC 03.0 |
00C5: GOTO 0E5 |
.................... { |
.................... GO(L, F, Lmotor); |
00C6: MOVF 01,W |
00C7: BTFSS 00.7 |
00C8: GOTO 0CC |
00C9: BTFSS 26.7 |
00CA: GOTO 0D4 |
00CB: GOTO 0CE |
00CC: BTFSC 26.7 |
00CD: GOTO 0DD |
00CE: MOVF 26,F |
00CF: BTFSS 03.2 |
00D0: GOTO 0D4 |
00D1: SUBWF 25,W |
00D2: BTFSS 03.0 |
00D3: GOTO 0DD |
00D4: BSF 03.5 |
00D5: BCF 05.1 |
00D6: BCF 03.5 |
00D7: BCF 05.1 |
00D8: BSF 03.5 |
00D9: BCF 05.0 |
00DA: BCF 03.5 |
00DB: BSF 05.0 |
00DC: GOTO 0E5 |
00DD: BSF 03.5 |
00DE: BCF 05.0 |
00DF: BCF 03.5 |
00E0: BCF 05.0 |
00E1: BSF 03.5 |
00E2: BCF 05.1 |
00E3: BCF 03.5 |
00E4: BCF 05.1 |
.................... } |
.................... |
.................... if(Lmotor==0) STOPL; |
00E5: MOVF 25,F |
00E6: BTFSS 03.2 |
00E7: GOTO 0EF |
00E8: MOVF 26,F |
00E9: BTFSS 03.2 |
00EA: GOTO 0EF |
00EB: BSF 03.5 |
00EC: BCF 05.0 |
00ED: BCF 03.5 |
00EE: BCF 05.0 |
00EF: BSF 03.5 |
00F0: BCF 05.1 |
00F1: BCF 03.5 |
00F2: BCF 05.1 |
.................... |
.................... if(Lmotor<0) |
00F3: BTFSS 26.7 |
00F4: GOTO 125 |
.................... { |
.................... GO(L, B, abs(Lmotor)); |
00F5: MOVF 01,W |
00F6: MOVWF 40 |
00F7: MOVF 26,W |
00F8: MOVWF 7A |
00F9: MOVF 25,W |
00FA: BTFSS 26.7 |
00FB: GOTO 105 |
00FC: MOVF 25,W |
00FD: SUBLW 00 |
00FE: MOVWF 77 |
00FF: CLRF 7A |
0100: MOVF 26,W |
0101: BTFSS 03.0 |
0102: INCFSZ 26,W |
0103: SUBWF 7A,F |
0104: MOVF 77,W |
0105: MOVWF 78 |
0106: BTFSS 40.7 |
0107: GOTO 10B |
0108: BTFSS 7A.7 |
0109: GOTO 114 |
010A: GOTO 10D |
010B: BTFSC 7A.7 |
010C: GOTO 11D |
010D: MOVF 7A,F |
010E: BTFSS 03.2 |
010F: GOTO 114 |
0110: MOVF 40,W |
0111: SUBWF 78,W |
0112: BTFSS 03.0 |
0113: GOTO 11D |
0114: BSF 03.5 |
0115: BCF 05.0 |
0116: BCF 03.5 |
0117: BCF 05.0 |
0118: BSF 03.5 |
0119: BCF 05.1 |
011A: BCF 03.5 |
011B: BSF 05.1 |
011C: GOTO 125 |
011D: BSF 03.5 |
011E: BCF 05.0 |
011F: BCF 03.5 |
0120: BCF 05.0 |
0121: BSF 03.5 |
0122: BCF 05.1 |
0123: BCF 03.5 |
0124: BCF 05.1 |
.................... } |
.................... } |
0125: MOVLW 55 |
0126: MOVWF 35 |
0127: MOVLW 00 |
0128: MOVWF 36 |
0129: BCF 0A.3 |
012A: GOTO 236 |
012B: RETLW 00 |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #task (rate=4ms, max=500us, queue=0) |
.................... void rizeni() |
.................... { |
.................... rizeni: |
.................... |
.................... sensors = spi_read(0); // cteni senzoru na caru |
012C: MOVF 13,W |
012D: CLRF 13 |
012E: BSF 03.5 |
012F: BTFSC 14.0 |
0130: GOTO 133 |
0131: BCF 03.5 |
0132: GOTO 12E |
0133: BCF 03.5 |
0134: MOVF 13,W |
0135: MOVWF 21 |
.................... output_high(STROBE); |
0136: BSF 03.5 |
0137: BCF 06.0 |
0138: BCF 03.5 |
0139: BSF 06.0 |
.................... output_low(STROBE); |
013A: BSF 03.5 |
013B: BCF 06.0 |
013C: BCF 03.5 |
013D: BCF 06.0 |
.................... |
.................... if(bit_test(sensors,0)) //*......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
013E: BTFSS 21.0 |
013F: GOTO 148 |
.................... { |
.................... uhel=LMAX; |
0140: MOVLW BE |
0141: MOVWF 24 |
.................... Lmotor=0;Rmotor=127; |
0142: CLRF 26 |
0143: CLRF 25 |
0144: CLRF 28 |
0145: MOVLW 7F |
0146: MOVWF 27 |
.................... goto rizeni; |
0147: GOTO 12C |
.................... } |
.................... if(bit_test(sensors,6)) //......*// |
0148: BTFSS 21.6 |
0149: GOTO 152 |
.................... { |
.................... uhel=RMAX; |
014A: MOVLW 3C |
014B: MOVWF 24 |
.................... Rmotor=0;Lmotor=127; |
014C: CLRF 28 |
014D: CLRF 27 |
014E: CLRF 26 |
014F: MOVLW 7F |
0150: MOVWF 25 |
.................... goto rizeni; |
0151: GOTO 12C |
.................... } |
.................... if(bit_test(sensors,1)) //.*.....// |
0152: BTFSS 21.1 |
0153: GOTO 15D |
.................... { |
.................... uhel=STRED+30; |
0154: MOVLW 9E |
0155: MOVWF 24 |
.................... Lmotor=70;Rmotor=127; |
0156: CLRF 26 |
0157: MOVLW 46 |
0158: MOVWF 25 |
0159: CLRF 28 |
015A: MOVLW 7F |
015B: MOVWF 27 |
.................... goto rizeni; |
015C: GOTO 12C |
.................... } |
.................... if(bit_test(sensors,5)) //.....*.// |
015D: BTFSS 21.5 |
015E: GOTO 168 |
.................... { |
.................... uhel=STRED-30; |
015F: MOVLW 62 |
0160: MOVWF 24 |
.................... Rmotor=70;Lmotor=127; |
0161: CLRF 28 |
0162: MOVLW 46 |
0163: MOVWF 27 |
0164: CLRF 26 |
0165: MOVLW 7F |
0166: MOVWF 25 |
.................... goto rizeni; |
0167: GOTO 12C |
.................... } |
.................... if(bit_test(sensors,2)) //..*....// |
0168: BTFSS 21.2 |
0169: GOTO 173 |
.................... { |
.................... uhel=STRED+20; |
016A: MOVLW 94 |
016B: MOVWF 24 |
.................... Lmotor=90;Rmotor=127; |
016C: CLRF 26 |
016D: MOVLW 5A |
016E: MOVWF 25 |
016F: CLRF 28 |
0170: MOVLW 7F |
0171: MOVWF 27 |
.................... goto rizeni; |
0172: GOTO 12C |
.................... } |
.................... if(bit_test(sensors,4)) //....*..// |
0173: BTFSS 21.4 |
0174: GOTO 17E |
.................... { |
.................... uhel=STRED-20; |
0175: MOVLW 6C |
0176: MOVWF 24 |
.................... Rmotor=90;Lmotor=127; |
0177: CLRF 28 |
0178: MOVLW 5A |
0179: MOVWF 27 |
017A: CLRF 26 |
017B: MOVLW 7F |
017C: MOVWF 25 |
.................... goto rizeni; |
017D: GOTO 12C |
.................... } |
.................... if(bit_test(sensors,3)) //...*...// |
017E: BTFSS 21.3 |
017F: GOTO 188 |
.................... { |
.................... uhel=STRED; |
0180: MOVLW 80 |
0181: MOVWF 24 |
.................... Lmotor=100;Rmotor=100; |
0182: CLRF 26 |
0183: MOVLW 64 |
0184: MOVWF 25 |
0185: CLRF 28 |
0186: MOVWF 27 |
.................... goto rizeni; |
0187: GOTO 12C |
.................... } |
.................... |
.................... /*STOPL;STOPR; |
.................... if(bit_test(sensors,7)) |
.................... { |
.................... |
.................... }*/ |
.................... } |
0188: MOVLW 2C |
0189: MOVWF 3C |
018A: MOVLW 01 |
018B: MOVWF 3D |
018C: BCF 0A.3 |
018D: GOTO 236 |
018E: RETLW 00 |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
018F: CLRF 04 |
0190: MOVLW 1F |
0191: ANDWF 03,F |
0192: MOVLW 70 |
0193: BSF 03.5 |
0194: MOVWF 0F |
0195: BCF 1F.4 |
0196: BCF 1F.5 |
0197: MOVF 1B,W |
0198: ANDLW 80 |
0199: MOVWF 1B |
019A: MOVLW 07 |
019B: MOVWF 1C |
.................... setup_adc_ports(NO_ANALOGS); |
019C: BCF 1F.4 |
019D: BCF 1F.5 |
019E: MOVF 1B,W |
019F: ANDLW 80 |
01A0: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
01A1: BCF 1F.6 |
01A2: BCF 03.5 |
01A3: BSF 1F.6 |
01A4: BSF 1F.7 |
01A5: BSF 03.5 |
01A6: BCF 1F.7 |
01A7: BCF 03.5 |
01A8: BSF 1F.0 |
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
01A9: BCF 14.5 |
01AA: BSF 03.5 |
01AB: BCF 06.2 |
01AC: BSF 06.1 |
01AD: BCF 06.4 |
01AE: MOVLW 30 |
01AF: BCF 03.5 |
01B0: MOVWF 14 |
01B1: MOVLW 00 |
01B2: BSF 03.5 |
01B3: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
01B4: MOVF 01,W |
01B5: ANDLW C7 |
01B6: IORLW 08 |
01B7: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
01B8: BCF 03.5 |
01B9: CLRF 10 |
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC); |
01BA: MOVLW 72 |
01BB: BSF 03.5 |
01BC: MOVWF 0F |
.................... // set_pwm1_duty(0); // Spust PWM, ale zatim s trvalou 0 na vystupu |
.................... // setup_ccp1(CCP_PWM); |
.................... // setup_timer_2(T2_DIV_BY_16,200,1); // perioda |
.................... // setup_timer_2(T2_DIV_BY_4,255,10); // Casovac pro regulaci |
.................... |
.................... STOPR; STOPL; |
01BD: BCF 05.6 |
01BE: BCF 03.5 |
01BF: BCF 05.6 |
01C0: BSF 03.5 |
01C1: BCF 05.7 |
01C2: BCF 03.5 |
01C3: BCF 05.7 |
01C4: BSF 03.5 |
01C5: BCF 05.0 |
01C6: BCF 03.5 |
01C7: BCF 05.0 |
01C8: BSF 03.5 |
01C9: BCF 05.1 |
01CA: BCF 03.5 |
01CB: BCF 05.1 |
.................... uhel=STRED; |
01CC: MOVLW 80 |
01CD: MOVWF 24 |
.................... // diagnostika(); |
.................... Lmotor=0; |
01CE: CLRF 26 |
01CF: CLRF 25 |
.................... Rmotor=0; |
01D0: CLRF 28 |
01D1: CLRF 27 |
.................... rtos_run(); |
01D2: CLRF 29 |
01D3: CLRF 2B |
01D4: MOVLW 08 |
01D5: MOVWF 2A |
01D6: CLRF 2D |
01D7: MOVLW 01 |
01D8: MOVWF 2C |
01D9: MOVLW 38 |
01DA: MOVWF 2E |
01DB: MOVLW 00 |
01DC: MOVWF 2F |
01DD: CLRF 30 |
01DE: CLRF 32 |
01DF: MOVLW 01 |
01E0: MOVWF 31 |
01E1: CLRF 34 |
01E2: CLRF 33 |
01E3: MOVLW 55 |
01E4: MOVWF 35 |
01E5: MOVLW 00 |
01E6: MOVWF 36 |
01E7: CLRF 37 |
01E8: CLRF 39 |
01E9: MOVLW 02 |
01EA: MOVWF 38 |
01EB: CLRF 3B |
01EC: CLRF 3A |
01ED: MOVLW 2C |
01EE: MOVWF 3C |
01EF: MOVLW 01 |
01F0: MOVWF 3D |
01F1: CLRF 20 |
01F2: MOVLW 00 |
01F3: MOVWF 78 |
01F4: IORLW 06 |
01F5: MOVWF 12 |
01F6: MOVLW FA |
01F7: BSF 03.5 |
01F8: MOVWF 12 |
01F9: BCF 03.5 |
01FA: BCF 0C.1 |
01FB: MOVLW 00 |
01FC: MOVWF 78 |
01FD: IORLW 06 |
01FE: MOVWF 12 |
01FF: MOVLW FA |
0200: BSF 03.5 |
0201: MOVWF 12 |
0202: BCF 03.5 |
0203: BCF 0C.1 |
0204: BCF 03.0 |
0205: RLF 20,W |
0206: MOVWF 77 |
0207: CALL 004 |
0208: MOVWF 79 |
0209: MOVLW 01 |
020A: ADDWF 77,W |
020B: CALL 004 |
020C: MOVWF 7A |
020D: MOVF 79,W |
020E: MOVWF 04 |
020F: MOVF 00,W |
0210: MOVWF 79 |
0211: INCF 04,F |
0212: MOVF 00,W |
0213: MOVWF 77 |
0214: INCF 04,F |
0215: MOVF 00,W |
0216: MOVWF 78 |
0217: INCF 04,F |
0218: INCF 00,F |
0219: MOVF 00,W |
021A: MOVWF 7A |
021B: BTFSS 03.2 |
021C: GOTO 220 |
021D: INCF 04,F |
021E: INCF 00,F |
021F: DECF 04,F |
0220: INCF 04,F |
0221: MOVF 00,W |
0222: SUBWF 78,W |
0223: BTFSS 03.2 |
0224: GOTO 238 |
0225: MOVF 77,W |
0226: SUBWF 7A,W |
0227: BTFSS 03.2 |
0228: GOTO 238 |
0229: DECF 04,F |
022A: CLRF 00 |
022B: INCF 04,F |
022C: CLRF 00 |
022D: INCF 04,F |
022E: BTFSC 79.7 |
022F: GOTO 238 |
0230: INCF 04,F |
0231: MOVF 00,W |
0232: MOVWF 0A |
0233: DECF 04,F |
0234: MOVF 00,W |
0235: MOVWF 02 |
0236: BCF 03.5 |
0237: BCF 03.6 |
0238: INCF 20,F |
0239: MOVLW 03 |
023A: SUBWF 20,W |
023B: BTFSS 03.2 |
023C: GOTO 204 |
023D: CLRF 20 |
023E: BTFSS 0C.1 |
023F: GOTO 242 |
0240: BSF 03.5 |
0241: GOTO 202 |
0242: GOTO 23E |
0243: MOVLW FF |
0244: MOVWF 20 |
.................... |
.................... } |
0245: SLEEP |
Configuration Fuses: |
Word 1: 3FF8 NOWDT NOPUT MCLR BROWNOUT LVP NOCPD NOWRT NODEBUG CCPB0 NOPROTECT INTRC_IO |
Word 2: 3FFF FCMEN IESO |
/roboti/3Orbis/bak/02/master/main.PJT |
---|
0,0 → 1,40 |
[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\istrobot\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\istrobot\3Orbis\main.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
4= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
/roboti/3Orbis/bak/02/master/main.SYM |
---|
0,0 → 1,82 |
015-016 CCP_1 |
015 CCP_1_LOW |
016 CCP_1_HIGH |
020 @CURRENT_TASK |
021 sensors |
022 line |
023 dira |
024 uhel |
025-026 Lmotor |
027-028 Rmotor |
029-02F @TASKINFO1_2_2_0_0 |
030-036 @TASKINFO2_2_2_0_0 |
037-03D @TASKINFO3_2_2_0_0 |
03E zatoc.n |
03F @delay_ms1.P1 |
03F @delay_us1.P2 |
040 motory.@SCRATCH |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
000E @delay_ms1 |
0027 @delay_us1 |
0038 zatoc |
0055 motory |
012C rizeni |
018F main |
0004 @const10133 |
018F @cinit |
012C rizeni |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
Compiler Settings: |
Processor: PIC16F88 |
Pointer Size: 8 |
ADC Range: 0-255 |
Opt Level: 9 |
Short,Int,Long: 1,8,16 |
Task Schedule: |
500 us motory |
500 us rizeni |
Sync to next 2, ms |
2, ms zatoc |
500 us motory |
Sync to next 2, ms |
500 us motory |
500 us rizeni |
Sync to next 2, ms |
500 us motory |
Sync to next 2, ms |
500 us motory |
500 us rizeni |
Sync to next 2, ms |
500 us motory |
Sync to next 2, ms |
500 us motory |
500 us rizeni |
Sync to next 2, ms |
500 us motory |
Sync to next 2, ms |
Output Files: |
Errors: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sta |
/roboti/3Orbis/bak/02/master/main.c |
---|
0,0 → 1,170 |
#include ".\main.h" |
#use rtos (timer=2, minor_cycle=2ms) |
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
unsigned int8 line; // na ktere strane byla detekovana cara |
unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
unsigned int8 uhel; // urcuje aktualni uhel zataceni |
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
signed int16 Rmotor; // a pravem motoru |
#define LMAX 190 // maximalni zatoceni doleva |
#define RMAX 60 // maximalni zatoceni doprava |
#define STRED 128 // sredni poloha zadniho kolecka |
// servo |
#define SERVO PIN_A2 |
//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 |
// makro pro PWM |
#define GO(motor, direction, power) if(get_timer0()<=power) \ |
{direction##motor;} else {stop##motor;} |
//////////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=16ms,max=2ms) |
void zatoc() // ridi servo ktere otaci kolem |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1200); |
for(n=uhel; n>0; n--); |
output_low(SERVO); |
} |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=2ms, max=500us) |
void motory() // umoznuje nezavisle rizeni vykonu na obou motorech |
{ |
if(Rmotor>0) //pravy motor |
{ |
GO(R, F, Rmotor); |
} |
if(Rmotor==0) STOPR; |
if(Rmotor<0) |
{ |
GO(R, B, abs(Rmotor)); |
} |
if(Lmotor>0) // levy motor |
{ |
GO(L, F, Lmotor); |
} |
if(Lmotor==0) STOPL; |
if(Lmotor<0) |
{ |
GO(L, B, abs(Lmotor)); |
} |
} |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=4ms, max=500us, queue=0) |
void rizeni() |
{ |
rizeni: |
sensors = spi_read(0); // cteni senzoru na caru |
output_high(STROBE); |
output_low(STROBE); |
if(bit_test(sensors,0)) //*......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
{ |
uhel=LMAX; |
Lmotor=0;Rmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,6)) //......*// |
{ |
uhel=RMAX; |
Rmotor=0;Lmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,1)) //.*.....// |
{ |
uhel=STRED+30; |
Lmotor=70;Rmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,5)) //.....*.// |
{ |
uhel=STRED-30; |
Rmotor=70;Lmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,2)) //..*....// |
{ |
uhel=STRED+20; |
Lmotor=90;Rmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,4)) //....*..// |
{ |
uhel=STRED-20; |
Rmotor=90;Lmotor=127; |
goto rizeni; |
} |
if(bit_test(sensors,3)) //...*...// |
{ |
uhel=STRED; |
Lmotor=100;Rmotor=100; |
goto rizeni; |
} |
/*STOPL;STOPR; |
if(bit_test(sensors,7)) |
{ |
}*/ |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_oscillator(OSC_8MHZ|OSC_INTRC); |
// set_pwm1_duty(0); // Spust PWM, ale zatim s trvalou 0 na vystupu |
// setup_ccp1(CCP_PWM); |
// setup_timer_2(T2_DIV_BY_16,200,1); // perioda |
// setup_timer_2(T2_DIV_BY_4,255,10); // Casovac pro regulaci |
STOPR; STOPL; |
uhel=STRED; |
// diagnostika(); |
Lmotor=0; |
Rmotor=0; |
rtos_run(); |
} |
/roboti/3Orbis/bak/02/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/02/master/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/02/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 BROWNOUT //Reset when brownout detected |
#FUSES LVP //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 FCMEN //Fail-safe clock monitor enabled |
#FUSES IESO //Internal External Switch Over mode enabled |
#use delay(clock=8000000,RESTART_WDT) |
/roboti/3Orbis/bak/02/master/main.sta |
---|
0,0 → 1,34 |
ROM used: 582 (14%) |
582 (14%) including unused fragments |
1 Average locations per line |
5 Average locations per statement |
RAM used: 35 (20%) at main() level |
38 (22%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
171 111 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
938 222 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 25 4 1 @delay_ms1 |
0 17 3 1 @delay_us1 |
0 29 5 1 zatoc |
0 215 37 1 motory |
0 99 17 0 rizeni |
0 183 31 0 main |
0 10 2 0 @const10133 |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-007FF 578 1466 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/02/master/main.tre |
---|
0,0 → 1,10 |
ÀÄmain |
ÃÄmain 0/183 Ram=0 |
³ ÃÄ??0?? |
³ ÃÄ@const10133 0/10 Ram=0 |
³ ÀÄ@const10133 0/10 Ram=0 |
ÃÄzatoc 0/29 Ram=1 |
³ ÃÄ@delay_ms1 0/25 Ram=1 |
³ ÀÄ@delay_us1 0/17 Ram=1 |
ÃÄmotory 0/215 Ram=1 |
ÀÄrizeni 0/99 Ram=0 |
/roboti/3Orbis/bak/03 docela funkcni/main.BAK |
---|
0,0 → 1,168 |
#include ".\main.h" |
#use rtos (timer=2, minor_cycle=2ms) |
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
unsigned int8 line; // na ktere strane byla detekovana cara |
unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
unsigned int8 uhel; // urcuje aktualni uhel zataceni |
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
signed int16 Rmotor; // a pravem motoru |
#define STRED 128 // sredni poloha zadniho kolecka |
#define BEAR1 20 // 3 stupne zataceni |
#define BEAR2 40 |
#define BEAR3 60 |
// servo |
#define SERVO PIN_A2 |
//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 |
// makro pro PWM |
#define GO(motor, direction, power) if(get_timer0()<=power) \ |
{direction##motor;} else {stop##motor;} |
//////////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=16ms,max=2ms) |
void zatoc() // ridi servo ktere otaci kolem |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1100); |
for(n=uhel; n>0; n--); |
output_low(SERVO); |
} |
void diag() // ridi servo ktere otaci kolem |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1100); |
for(n=uhel; n>0; n--); |
output_low(SERVO); |
} |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=2ms, max=1ms) |
void rizeni() |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); |
delay_us(500); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru na caru |
output_high(STROBE); |
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=190; |
return; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
Rmotor=0;Lmotor=190; |
uhel=STRED-BEAR3; |
return; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED+BEAR2; |
Lmotor=150;Rmotor=190; |
return; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED-BEAR2; |
Rmotor=150;Lmotor=190; |
return; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED+BEAR1; |
Lmotor=150;Rmotor=190; |
return; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED-BEAR1; |
Rmotor=150;Lmotor=190; |
return; |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=190;Rmotor=190; |
return; |
} |
/*STOPL;STOPR; |
if(bit_test(sensors,7)) |
{ |
}*/ |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int16 i; |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_oscillator(OSC_8MHZ|OSC_INTRC); |
STOPR; STOPL; |
uhel=STRED; |
for(i=0;i<100;i++) |
{ |
diag(); |
delay_ms(16); |
} |
// diagnostika(); |
Lmotor=0; |
Rmotor=0; |
rtos_run(); |
} |
/roboti/3Orbis/bak/03 docela funkcni/main.HEX |
---|
0,0 → 1,61 |
:1000000000308A00122900000A108A100A118207A3 |
:1000100029340034303400343C30840000080319A3 |
:1000200023280230F800BF30F7006400F70B1528D2 |
:10003000F80B13289630F700F70B1C28000000007F |
:100040006400800B112800340830BE02031C3328E2 |
:100050003E3084000310800C000803193328312837 |
:100060006400800B302800348316051183120515B7 |
:1000700064000130BC000C206330BE002420240842 |
:10008000BB00BB0803194628BB0341288316051192 |
:10009000831205113430AE000030AF008A11BF2941 |
:1000A00000340108801F5728A61F5F285928A61B67 |
:1000B0006828A608031D5F282502031C68288316EC |
:1000C000851083128510831605108312051470287D |
:1000D0008316051083120510831685108312851070 |
:1000E0000108801F7628A81F7E287828A81B87284B |
:1000F000A808031D7E282702031C87288316851362 |
:100100008312851383160513831205178F28831610 |
:100110000513831205138316851383128513640058 |
:100120000230BD00F730BE002420BD0B922883169C |
:100130000610831206101308930183161418A228C0 |
:1001400083129D2883121308A100831606108312C0 |
:100150000614211CB328BC30A400A601A501A801E7 |
:10016000BE30A700F328211FBD28A801A701A601C2 |
:10017000BE30A5004430A400F328A11CC828A83034 |
:10018000A400A6019630A500A801BE30A700F32860 |
:10019000A11ED3285830A400A8019630A700A601BC |
:1001A000BE30A500F328211DDE289430A400A6014E |
:1001B0009630A500A801BE30A700F328211EE9282B |
:1001C0006C30A400A8019630A700A601BE30A5009F |
:1001D000F328A11DF3288030A400A601BE30A5009D |
:1001E000A801A700F3285130B5000030B6008A11ED |
:1001F000BF290034831605118312051564000130F0 |
:10020000BC000C206330BE0024202408B900B908CB |
:1002100003190C29B9030729831605118312051147 |
:100220008A115B2984011F308305703083168F008B |
:100230001F129F121B0880399B0007309C001F1261 |
:100240009F121B0880399B001F1383121F179F17D3 |
:1002500083169F1383121F1494128316061186149B |
:100260000612303083129400003083169400010887 |
:10027000C7390838810083129001723083168F00CD |
:1002800005138312051383168513831285138316B2 |
:100290000510831205108316851083128510803097 |
:1002A000A400B801B701B808031D62293708633CF0 |
:1002B000031C6229FA281030BC000C20B70A03196D |
:1002C000B80A5329A601A501A801A701A901AB01FC |
:1002D0000830AA00AD01AC013430AE000030AF00F0 |
:1002E000B001B2010130B100B401B3015130B50029 |
:1002F0000030B600A0010030F80006389200FA3055 |
:100300008316920083128C100030F8000638920099 |
:10031000FA308316920083128C100310200DF70020 |
:100320000420F900013077070420FA0079088400DE |
:100330000008F900840A0008F700840A0008F800A1 |
:10034000840A800A0008FA00031DA929840A800A89 |
:100350008403840A00087802031DC12977087A0201 |
:10036000031DC12984038001840A8001840AF91BCA |
:10037000C129840A00088A008403000882008312CD |
:100380000313A00A02302002031D8D29A0018C1C3A |
:0E039000CB2983168B29C729FF30A0006300FC |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/03 docela funkcni/main.LST |
---|
0,0 → 1,664 |
CCS PCM C Compiler, Version 3.245, 27853 03-IV-06 20:04 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
ROM used: 463 words (11%) |
Largest free fragment is 2048 |
RAM used: 30 (17%) at main() level |
36 (21%) worst case |
Stack: 4 worst case (2 in main + 2 for interrupts) |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 112 |
0003: NOP |
.................... #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) |
000C: MOVLW 3C |
000D: MOVWF 04 |
000E: MOVF 00,W |
000F: BTFSC 03.2 |
0010: GOTO 023 |
0011: MOVLW 02 |
0012: MOVWF 78 |
0013: MOVLW BF |
0014: MOVWF 77 |
0015: CLRWDT |
0016: DECFSZ 77,F |
0017: GOTO 015 |
0018: DECFSZ 78,F |
0019: GOTO 013 |
001A: MOVLW 96 |
001B: MOVWF 77 |
001C: DECFSZ 77,F |
001D: GOTO 01C |
001E: NOP |
001F: NOP |
0020: CLRWDT |
0021: DECFSZ 00,F |
0022: GOTO 011 |
0023: RETLW 00 |
0024: MOVLW 08 |
0025: SUBWF 3E,F |
0026: BTFSS 03.0 |
0027: GOTO 033 |
0028: MOVLW 3E |
0029: MOVWF 04 |
002A: BCF 03.0 |
002B: RRF 00,F |
002C: MOVF 00,W |
002D: BTFSC 03.2 |
002E: GOTO 033 |
002F: GOTO 031 |
0030: CLRWDT |
0031: DECFSZ 00,F |
0032: GOTO 030 |
0033: RETLW 00 |
.................... |
.................... |
.................... |
.................... #use rtos (timer=2, minor_cycle=2ms) |
.................... |
.................... unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
.................... unsigned int8 line; // na ktere strane byla detekovana cara |
.................... unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
.................... unsigned int8 uhel; // urcuje aktualni uhel zataceni |
.................... |
.................... signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
.................... signed int16 Rmotor; // a pravem motoru |
.................... |
.................... #define STRED 128 // sredni poloha zadniho kolecka |
.................... #define BEAR1 20 // 3 stupne zataceni |
.................... #define BEAR2 40 |
.................... #define BEAR3 60 |
.................... // servo |
.................... #define SERVO PIN_A2 |
.................... |
.................... //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 |
.................... |
.................... // makro pro PWM |
.................... #define GO(motor, direction, power) if(get_timer0()<=power) \ |
.................... {direction##motor;} else {stop##motor;} |
.................... |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... /* |
.................... void diagnostika() |
.................... { |
.................... if(input(SW1))STOPR;STOPL;While(TRUE); |
.................... // if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
.................... // if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #task (rate=16ms,max=2ms) |
.................... void zatoc() // ridi servo ktere otaci kolem |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
0034: BSF 03.5 |
0035: BCF 05.2 |
0036: BCF 03.5 |
0037: BSF 05.2 |
.................... delay_us(1100); |
0038: CLRWDT |
0039: MOVLW 01 |
003A: MOVWF 3C |
003B: CALL 00C |
003C: MOVLW 63 |
003D: MOVWF 3E |
003E: CALL 024 |
.................... for(n=uhel; n>0; n--); |
003F: MOVF 24,W |
0040: MOVWF 3B |
0041: MOVF 3B,F |
0042: BTFSC 03.2 |
0043: GOTO 046 |
0044: DECF 3B,F |
0045: GOTO 041 |
.................... output_low(SERVO); |
0046: BSF 03.5 |
0047: BCF 05.2 |
0048: BCF 03.5 |
0049: BCF 05.2 |
.................... } |
004A: MOVLW 34 |
004B: MOVWF 2E |
004C: MOVLW 00 |
004D: MOVWF 2F |
004E: BCF 0A.3 |
004F: GOTO 1BF |
0050: RETLW 00 |
.................... |
.................... |
.................... void diag() // ridi servo ktere otaci kolem |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
* |
00FA: BSF 03.5 |
00FB: BCF 05.2 |
00FC: BCF 03.5 |
00FD: BSF 05.2 |
.................... delay_us(1100); |
00FE: CLRWDT |
00FF: MOVLW 01 |
0100: MOVWF 3C |
0101: CALL 00C |
0102: MOVLW 63 |
0103: MOVWF 3E |
0104: CALL 024 |
.................... for(n=uhel; n>0; n--); |
0105: MOVF 24,W |
0106: MOVWF 39 |
0107: MOVF 39,F |
0108: BTFSC 03.2 |
0109: GOTO 10C |
010A: DECF 39,F |
010B: GOTO 107 |
.................... output_low(SERVO); |
010C: BSF 03.5 |
010D: BCF 05.2 |
010E: BCF 03.5 |
010F: BCF 05.2 |
.................... } |
0110: BCF 0A.3 |
0111: GOTO 15B (RETURN) |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #task (rate=2ms, max=1ms) |
.................... void rizeni() |
.................... { |
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); |
* |
0051: MOVF 01,W |
0052: BTFSS 00.7 |
0053: GOTO 057 |
0054: BTFSS 26.7 |
0055: GOTO 05F |
0056: GOTO 059 |
0057: BTFSC 26.7 |
0058: GOTO 068 |
0059: MOVF 26,F |
005A: BTFSS 03.2 |
005B: GOTO 05F |
005C: SUBWF 25,W |
005D: BTFSS 03.0 |
005E: GOTO 068 |
005F: BSF 03.5 |
0060: BCF 05.1 |
0061: BCF 03.5 |
0062: BCF 05.1 |
0063: BSF 03.5 |
0064: BCF 05.0 |
0065: BCF 03.5 |
0066: BSF 05.0 |
0067: GOTO 070 |
0068: BSF 03.5 |
0069: BCF 05.0 |
006A: BCF 03.5 |
006B: BCF 05.0 |
006C: BSF 03.5 |
006D: BCF 05.1 |
006E: BCF 03.5 |
006F: BCF 05.1 |
0070: MOVF 01,W |
0071: BTFSS 00.7 |
0072: GOTO 076 |
0073: BTFSS 28.7 |
0074: GOTO 07E |
0075: GOTO 078 |
0076: BTFSC 28.7 |
0077: GOTO 087 |
0078: MOVF 28,F |
0079: BTFSS 03.2 |
007A: GOTO 07E |
007B: SUBWF 27,W |
007C: BTFSS 03.0 |
007D: GOTO 087 |
007E: BSF 03.5 |
007F: BCF 05.7 |
0080: BCF 03.5 |
0081: BCF 05.7 |
0082: BSF 03.5 |
0083: BCF 05.6 |
0084: BCF 03.5 |
0085: BSF 05.6 |
0086: GOTO 08F |
0087: BSF 03.5 |
0088: BCF 05.6 |
0089: BCF 03.5 |
008A: BCF 05.6 |
008B: BSF 03.5 |
008C: BCF 05.7 |
008D: BCF 03.5 |
008E: BCF 05.7 |
.................... |
.................... delay_us(500); |
008F: CLRWDT |
0090: MOVLW 02 |
0091: MOVWF 3D |
0092: MOVLW F7 |
0093: MOVWF 3E |
0094: CALL 024 |
0095: DECFSZ 3D,F |
0096: GOTO 092 |
.................... |
.................... output_low(STROBE); |
0097: BSF 03.5 |
0098: BCF 06.0 |
0099: BCF 03.5 |
009A: BCF 06.0 |
.................... sensors = spi_read(0); // cteni senzoru na caru |
009B: MOVF 13,W |
009C: CLRF 13 |
009D: BSF 03.5 |
009E: BTFSC 14.0 |
009F: GOTO 0A2 |
00A0: BCF 03.5 |
00A1: GOTO 09D |
00A2: BCF 03.5 |
00A3: MOVF 13,W |
00A4: MOVWF 21 |
.................... output_high(STROBE); |
00A5: BSF 03.5 |
00A6: BCF 06.0 |
00A7: BCF 03.5 |
00A8: BSF 06.0 |
.................... |
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
00A9: BTFSS 21.0 |
00AA: GOTO 0B3 |
.................... { |
.................... uhel=STRED+BEAR3; |
00AB: MOVLW BC |
00AC: MOVWF 24 |
.................... Lmotor=0;Rmotor=190; |
00AD: CLRF 26 |
00AE: CLRF 25 |
00AF: CLRF 28 |
00B0: MOVLW BE |
00B1: MOVWF 27 |
.................... return; |
00B2: GOTO 0F3 |
.................... } |
.................... |
.................... if(bit_test(sensors,6)) //......|// |
00B3: BTFSS 21.6 |
00B4: GOTO 0BD |
.................... { |
.................... Rmotor=0;Lmotor=190; |
00B5: CLRF 28 |
00B6: CLRF 27 |
00B7: CLRF 26 |
00B8: MOVLW BE |
00B9: MOVWF 25 |
.................... uhel=STRED-BEAR3; |
00BA: MOVLW 44 |
00BB: MOVWF 24 |
.................... return; |
00BC: GOTO 0F3 |
.................... |
.................... } |
.................... |
.................... if(bit_test(sensors,1)) //.|.....// |
00BD: BTFSS 21.1 |
00BE: GOTO 0C8 |
.................... { |
.................... uhel=STRED+BEAR2; |
00BF: MOVLW A8 |
00C0: MOVWF 24 |
.................... Lmotor=150;Rmotor=190; |
00C1: CLRF 26 |
00C2: MOVLW 96 |
00C3: MOVWF 25 |
00C4: CLRF 28 |
00C5: MOVLW BE |
00C6: MOVWF 27 |
.................... return; |
00C7: GOTO 0F3 |
.................... } |
.................... |
.................... if(bit_test(sensors,5)) //.....|.// |
00C8: BTFSS 21.5 |
00C9: GOTO 0D3 |
.................... { |
.................... uhel=STRED-BEAR2; |
00CA: MOVLW 58 |
00CB: MOVWF 24 |
.................... Rmotor=150;Lmotor=190; |
00CC: CLRF 28 |
00CD: MOVLW 96 |
00CE: MOVWF 27 |
00CF: CLRF 26 |
00D0: MOVLW BE |
00D1: MOVWF 25 |
.................... return; |
00D2: GOTO 0F3 |
.................... } |
.................... |
.................... if (bit_test(sensors,2)) //..|....// |
00D3: BTFSS 21.2 |
00D4: GOTO 0DE |
.................... { |
.................... uhel=STRED+BEAR1; |
00D5: MOVLW 94 |
00D6: MOVWF 24 |
.................... Lmotor=150;Rmotor=190; |
00D7: CLRF 26 |
00D8: MOVLW 96 |
00D9: MOVWF 25 |
00DA: CLRF 28 |
00DB: MOVLW BE |
00DC: MOVWF 27 |
.................... return; |
00DD: GOTO 0F3 |
.................... } |
.................... |
.................... if (bit_test(sensors,4)) //....|..// |
00DE: BTFSS 21.4 |
00DF: GOTO 0E9 |
.................... { |
.................... uhel=STRED-BEAR1; |
00E0: MOVLW 6C |
00E1: MOVWF 24 |
.................... Rmotor=150;Lmotor=190; |
00E2: CLRF 28 |
00E3: MOVLW 96 |
00E4: MOVWF 27 |
00E5: CLRF 26 |
00E6: MOVLW BE |
00E7: MOVWF 25 |
.................... return; |
00E8: GOTO 0F3 |
.................... } |
.................... |
.................... if(bit_test(sensors,3)) //...|...// |
00E9: BTFSS 21.3 |
00EA: GOTO 0F3 |
.................... { |
.................... uhel=STRED; |
00EB: MOVLW 80 |
00EC: MOVWF 24 |
.................... Lmotor=190;Rmotor=190; |
00ED: CLRF 26 |
00EE: MOVLW BE |
00EF: MOVWF 25 |
00F0: CLRF 28 |
00F1: MOVWF 27 |
.................... return; |
00F2: GOTO 0F3 |
.................... } |
.................... |
.................... /*STOPL;STOPR; |
.................... if(bit_test(sensors,7)) |
.................... { |
.................... |
.................... }*/ |
.................... } |
00F3: MOVLW 51 |
00F4: MOVWF 35 |
00F5: MOVLW 00 |
00F6: MOVWF 36 |
00F7: BCF 0A.3 |
00F8: GOTO 1BF |
00F9: RETLW 00 |
.................... |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
* |
0112: CLRF 04 |
0113: MOVLW 1F |
0114: ANDWF 03,F |
0115: MOVLW 70 |
0116: BSF 03.5 |
0117: MOVWF 0F |
0118: BCF 1F.4 |
0119: BCF 1F.5 |
011A: MOVF 1B,W |
011B: ANDLW 80 |
011C: MOVWF 1B |
011D: MOVLW 07 |
011E: MOVWF 1C |
.................... unsigned int16 i; |
.................... |
.................... setup_adc_ports(NO_ANALOGS); |
011F: BCF 1F.4 |
0120: BCF 1F.5 |
0121: MOVF 1B,W |
0122: ANDLW 80 |
0123: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
0124: BCF 1F.6 |
0125: BCF 03.5 |
0126: BSF 1F.6 |
0127: BSF 1F.7 |
0128: BSF 03.5 |
0129: BCF 1F.7 |
012A: BCF 03.5 |
012B: BSF 1F.0 |
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
012C: BCF 14.5 |
012D: BSF 03.5 |
012E: BCF 06.2 |
012F: BSF 06.1 |
0130: BCF 06.4 |
0131: MOVLW 30 |
0132: BCF 03.5 |
0133: MOVWF 14 |
0134: MOVLW 00 |
0135: BSF 03.5 |
0136: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
0137: MOVF 01,W |
0138: ANDLW C7 |
0139: IORLW 08 |
013A: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
013B: BCF 03.5 |
013C: CLRF 10 |
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC); |
013D: MOVLW 72 |
013E: BSF 03.5 |
013F: MOVWF 0F |
.................... |
.................... STOPR; STOPL; |
0140: BCF 05.6 |
0141: BCF 03.5 |
0142: BCF 05.6 |
0143: BSF 03.5 |
0144: BCF 05.7 |
0145: BCF 03.5 |
0146: BCF 05.7 |
0147: BSF 03.5 |
0148: BCF 05.0 |
0149: BCF 03.5 |
014A: BCF 05.0 |
014B: BSF 03.5 |
014C: BCF 05.1 |
014D: BCF 03.5 |
014E: BCF 05.1 |
.................... uhel=STRED; |
014F: MOVLW 80 |
0150: MOVWF 24 |
.................... |
.................... for(i=0;i<100;i++) |
0151: CLRF 38 |
0152: CLRF 37 |
0153: MOVF 38,F |
0154: BTFSS 03.2 |
0155: GOTO 162 |
0156: MOVF 37,W |
0157: SUBLW 63 |
0158: BTFSS 03.0 |
0159: GOTO 162 |
.................... { |
.................... diag(); |
015A: GOTO 0FA |
.................... delay_ms(16); |
015B: MOVLW 10 |
015C: MOVWF 3C |
015D: CALL 00C |
.................... } |
015E: INCF 37,F |
015F: BTFSC 03.2 |
0160: INCF 38,F |
0161: GOTO 153 |
.................... // diagnostika(); |
.................... Lmotor=0; |
0162: CLRF 26 |
0163: CLRF 25 |
.................... Rmotor=0; |
0164: CLRF 28 |
0165: CLRF 27 |
.................... rtos_run(); |
0166: CLRF 29 |
0167: CLRF 2B |
0168: MOVLW 08 |
0169: MOVWF 2A |
016A: CLRF 2D |
016B: CLRF 2C |
016C: MOVLW 34 |
016D: MOVWF 2E |
016E: MOVLW 00 |
016F: MOVWF 2F |
0170: CLRF 30 |
0171: CLRF 32 |
0172: MOVLW 01 |
0173: MOVWF 31 |
0174: CLRF 34 |
0175: CLRF 33 |
0176: MOVLW 51 |
0177: MOVWF 35 |
0178: MOVLW 00 |
0179: MOVWF 36 |
017A: CLRF 20 |
017B: MOVLW 00 |
017C: MOVWF 78 |
017D: IORLW 06 |
017E: MOVWF 12 |
017F: MOVLW FA |
0180: BSF 03.5 |
0181: MOVWF 12 |
0182: BCF 03.5 |
0183: BCF 0C.1 |
0184: MOVLW 00 |
0185: MOVWF 78 |
0186: IORLW 06 |
0187: MOVWF 12 |
0188: MOVLW FA |
0189: BSF 03.5 |
018A: MOVWF 12 |
018B: BCF 03.5 |
018C: BCF 0C.1 |
018D: BCF 03.0 |
018E: RLF 20,W |
018F: MOVWF 77 |
0190: CALL 004 |
0191: MOVWF 79 |
0192: MOVLW 01 |
0193: ADDWF 77,W |
0194: CALL 004 |
0195: MOVWF 7A |
0196: MOVF 79,W |
0197: MOVWF 04 |
0198: MOVF 00,W |
0199: MOVWF 79 |
019A: INCF 04,F |
019B: MOVF 00,W |
019C: MOVWF 77 |
019D: INCF 04,F |
019E: MOVF 00,W |
019F: MOVWF 78 |
01A0: INCF 04,F |
01A1: INCF 00,F |
01A2: MOVF 00,W |
01A3: MOVWF 7A |
01A4: BTFSS 03.2 |
01A5: GOTO 1A9 |
01A6: INCF 04,F |
01A7: INCF 00,F |
01A8: DECF 04,F |
01A9: INCF 04,F |
01AA: MOVF 00,W |
01AB: SUBWF 78,W |
01AC: BTFSS 03.2 |
01AD: GOTO 1C1 |
01AE: MOVF 77,W |
01AF: SUBWF 7A,W |
01B0: BTFSS 03.2 |
01B1: GOTO 1C1 |
01B2: DECF 04,F |
01B3: CLRF 00 |
01B4: INCF 04,F |
01B5: CLRF 00 |
01B6: INCF 04,F |
01B7: BTFSC 79.7 |
01B8: GOTO 1C1 |
01B9: INCF 04,F |
01BA: MOVF 00,W |
01BB: MOVWF 0A |
01BC: DECF 04,F |
01BD: MOVF 00,W |
01BE: MOVWF 02 |
01BF: BCF 03.5 |
01C0: BCF 03.6 |
01C1: INCF 20,F |
01C2: MOVLW 02 |
01C3: SUBWF 20,W |
01C4: BTFSS 03.2 |
01C5: GOTO 18D |
01C6: CLRF 20 |
01C7: BTFSS 0C.1 |
01C8: GOTO 1CB |
01C9: BSF 03.5 |
01CA: GOTO 18B |
01CB: GOTO 1C7 |
01CC: MOVLW FF |
01CD: MOVWF 20 |
.................... |
.................... } |
01CE: 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/03 docela funkcni/main.PJT |
---|
0,0 → 1,40 |
[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\istrobot\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\istrobot\3Orbis\main.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
4= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
/roboti/3Orbis/bak/03 docela funkcni/main.SYM |
---|
0,0 → 1,78 |
015-016 CCP_1 |
015 CCP_1_LOW |
016 CCP_1_HIGH |
020 @CURRENT_TASK |
021 sensors |
022 line |
023 dira |
024 uhel |
025-026 Lmotor |
027-028 Rmotor |
029-02F @TASKINFO1_2_2_0_0 |
030-036 @TASKINFO2_2_2_0_0 |
037-038 main.i |
039 diag.n |
03B zatoc.n |
03C @delay_ms1.P1 |
03D rizeni.@SCRATCH |
03E @delay_us1.P1 |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
000C @delay_ms1 |
0024 @delay_us1 |
0034 zatoc |
00FA diag |
0051 rizeni |
0112 main |
0004 @const10107 |
0112 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
Compiler Settings: |
Processor: PIC16F88 |
Pointer Size: 8 |
ADC Range: 0-255 |
Opt Level: 9 |
Short,Int,Long: 1,8,16 |
Task Schedule: |
2, ms zatoc |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
Output Files: |
Errors: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sta |
/roboti/3Orbis/bak/03 docela funkcni/main.c |
---|
0,0 → 1,168 |
#include ".\main.h" |
#use rtos (timer=2, minor_cycle=2ms) |
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru |
unsigned int8 line; // na ktere strane byla detekovana cara |
unsigned int8 dira; // pocita dobu po kterou je ztracena cara |
unsigned int8 uhel; // urcuje aktualni uhel zataceni |
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
signed int16 Rmotor; // a pravem motoru |
#define STRED 128 // sredni poloha zadniho kolecka |
#define BEAR1 20 // 3 stupne zataceni |
#define BEAR2 40 |
#define BEAR3 60 |
// servo |
#define SERVO PIN_A2 |
//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 |
// makro pro PWM |
#define GO(motor, direction, power) if(get_timer0()<=power) \ |
{direction##motor;} else {stop##motor;} |
//////////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=16ms,max=2ms) |
void zatoc() // ridi servo ktere otaci kolem |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1100); |
for(n=uhel; n>0; n--); |
output_low(SERVO); |
} |
void diag() // ridi servo ktere otaci kolem |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1100); |
for(n=uhel; n>0; n--); |
output_low(SERVO); |
} |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=2ms, max=1ms) |
void rizeni() |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); |
delay_us(500); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru na caru |
output_high(STROBE); |
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=190; |
return; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
Rmotor=0;Lmotor=190; |
uhel=STRED-BEAR3; |
return; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED+BEAR2; |
Lmotor=150;Rmotor=190; |
return; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED-BEAR2; |
Rmotor=150;Lmotor=190; |
return; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED+BEAR1; |
Lmotor=150;Rmotor=190; |
return; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED-BEAR1; |
Rmotor=150;Lmotor=190; |
return; |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=190;Rmotor=190; |
return; |
} |
/*STOPL;STOPR; |
if(bit_test(sensors,7)) |
{ |
}*/ |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int16 i; |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_oscillator(OSC_8MHZ|OSC_INTRC); |
STOPR; STOPL; |
uhel=STRED; |
for(i=0;i<100;i++) |
{ |
diag(); |
delay_ms(16); |
} |
// diagnostika(); |
Lmotor=0; |
Rmotor=0; |
rtos_run(); |
} |
/roboti/3Orbis/bak/03 docela funkcni/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/03 docela funkcni/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/03 docela funkcni/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/03 docela funkcni/main.sta |
---|
0,0 → 1,34 |
ROM used: 463 (11%) |
463 (11%) including unused fragments |
1 Average locations per line |
5 Average locations per statement |
RAM used: 30 (17%) at main() level |
36 (21%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
169 90 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
934 180 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 24 5 1 @delay_ms1 |
0 16 3 1 @delay_us1 |
0 29 6 1 zatoc |
0 24 5 1 diag |
0 169 37 1 rizeni |
0 189 41 2 main |
0 8 2 0 @const10107 |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-007FF 459 1585 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/03 docela funkcni/main.tre |
---|
0,0 → 1,14 |
ÀÄmain |
ÃÄmain 0/189 Ram=2 |
³ ÃÄ??0?? |
³ ÃÄdiag 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÀÄ@delay_us1 0/16 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@const10107 0/8 Ram=0 |
³ ÀÄ@const10107 0/8 Ram=0 |
ÃÄzatoc 0/29 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÀÄ@delay_us1 0/16 Ram=1 |
ÀÄrizeni 0/169 Ram=1 |
ÀÄ@delay_us1 0/16 Ram=1 |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.BAK |
---|
0,0 → 1,146 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>100) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.HEX |
---|
0,0 → 1,39 |
:1000000000308A000428000084011F30830560301E |
:1000100083168F0086108312861483161F129F1278 |
:100020001B0880399B0007309C001F129F121B0881 |
:1000300080397F389B001F1383121F179F17831669 |
:100040009F1383121F14941283160611861406162A |
:100050003530831294004030831694000108C7396C |
:1000600008388100831290010030F80092000030BF |
:100070008316920007309C00050864000230F700E8 |
:10008000F70B4028000000001C0883120D13831694 |
:100090009D0108308312A100A200A3010030F800E6 |
:1000A0001F08C73978049F00A40164000230F700DC |
:1000B000F70B5828000000001F151F195D281E08A7 |
:1000C000A5000830F8001F08C73978049F002508EC |
:1000D0003B3C031C74282508283C0318732822087D |
:1000E0000139A404742824141F151F1975281E082B |
:1000F000A5001030F8001F08C73978049F002508B4 |
:100100003B3C031C8C282508283C03188B2822081C |
:100110000239A4048C28A4141F151F198D281E0849 |
:10012000A5001830F8001F08C73978049F0025087B |
:100130003B3C031CA4282508283C0318A3282208BC |
:100140000439A404A42824151F151F19A5281E0866 |
:10015000A5002030F8001F08C73978049F00250843 |
:100160003B3C031CBC282508283C0318BB2822085C |
:100170000839A404BC28A4151F151F19BD281E0882 |
:10018000A5002830F8001F08C73978049F0025080B |
:100190003B3C031CD4282508283C0318D3282208FC |
:1001A0001039A404D42824161F151F19D5281E0899 |
:1001B000A5003030F8001F08C73978049F002508D3 |
:1001C0003B3C031CEC282508283C0318EB2822089C |
:1001D0002039A404EC28A4161F151F19ED281E08A9 |
:1001E000A50025083B3C031CFE282508283C0318D5 |
:1001F000FD2822084039A404FE2824172408A20060 |
:1002000083160614831206180A29230F08290929C0 |
:10021000A30A0B29A30123080A3C031CA417A40961 |
:1002200024089300831614181729831212298312A5 |
:040230004E286300F1 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.LST |
---|
0,0 → 1,454 |
CCS PCM C Compiler, Version 3.245, 27853 15-IV-06 16:26 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
ROM used: 282 words (7%) |
Largest free fragment is 2048 |
RAM used: 12 (7%) at main() level |
12 (7%) worst case |
Stack: 0 locations |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 004 |
0003: NOP |
.................... #include ".\cidla.h" |
.................... #include <16F88.h> |
.................... //////// Standard Header file for the PIC16F88 device //////////////// |
.................... #device PIC16F88 |
.................... #list |
.................... |
.................... #device adc=8 |
.................... #fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
.................... #use delay(clock=4000000,RESTART_WDT) |
.................... |
.................... |
.................... //#include <stdlib.h> |
.................... |
.................... #use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
.................... |
.................... #define IRRX PIN_B0 |
.................... |
.................... #define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
.................... #define TRESHOLD_MIN 40 |
.................... #define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
.................... |
.................... unsigned int8 radius; // co cidla vidi |
.................... unsigned int8 last_radius; // rozsah |
.................... unsigned int8 last_cidla; // co cidla videla minule |
.................... unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
.................... |
.................... //tuning |
.................... /*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
.................... |
.................... //Vystup PWM je na PIN_B3 |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
.................... { |
.................... unsigned int8 i,n; |
.................... for(n=0;n<=3;n++) |
.................... { |
.................... for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
.................... for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
.................... } |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
0004: CLRF 04 |
0005: MOVLW 1F |
0006: ANDWF 03,F |
0007: MOVLW 60 |
0008: BSF 03.5 |
0009: MOVWF 0F |
000A: BCF 06.1 |
000B: BCF 03.5 |
000C: BSF 06.1 |
000D: BSF 03.5 |
000E: BCF 1F.4 |
000F: BCF 1F.5 |
0010: MOVF 1B,W |
0011: ANDLW 80 |
0012: MOVWF 1B |
0013: MOVLW 07 |
0014: MOVWF 1C |
.................... int8 cidla; |
.................... unsigned int8 a; |
.................... unsigned int8 n; |
.................... |
.................... setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
0015: BCF 1F.4 |
0016: BCF 1F.5 |
0017: MOVF 1B,W |
0018: ANDLW 80 |
0019: IORLW 7F |
001A: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
001B: BCF 1F.6 |
001C: BCF 03.5 |
001D: BSF 1F.6 |
001E: BSF 1F.7 |
001F: BSF 03.5 |
0020: BCF 1F.7 |
0021: BCF 03.5 |
0022: BSF 1F.0 |
.................... setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
0023: BCF 14.5 |
0024: BSF 03.5 |
0025: BCF 06.2 |
0026: BSF 06.1 |
0027: BSF 06.4 |
0028: MOVLW 35 |
0029: BCF 03.5 |
002A: MOVWF 14 |
002B: MOVLW 40 |
002C: BSF 03.5 |
002D: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
002E: MOVF 01,W |
002F: ANDLW C7 |
0030: IORLW 08 |
0031: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
0032: BCF 03.5 |
0033: CLRF 10 |
.................... setup_timer_2(T2_DISABLED,0,1); |
0034: MOVLW 00 |
0035: MOVWF 78 |
0036: MOVWF 12 |
0037: MOVLW 00 |
0038: BSF 03.5 |
0039: MOVWF 12 |
.................... setup_comparator(NC_NC_NC_NC); |
003A: MOVLW 07 |
003B: MOVWF 1C |
003C: MOVF 05,W |
003D: CLRWDT |
003E: MOVLW 02 |
003F: MOVWF 77 |
0040: DECFSZ 77,F |
0041: GOTO 040 |
0042: NOP |
0043: NOP |
0044: MOVF 1C,W |
0045: BCF 03.5 |
0046: BCF 0D.6 |
.................... setup_vref(FALSE); |
0047: BSF 03.5 |
0048: CLRF 1D |
.................... |
.................... last_radius=0b00001000; // minimalni rozsah snimani od stredu |
0049: MOVLW 08 |
004A: BCF 03.5 |
004B: MOVWF 21 |
.................... last_cidla=0b00001000; |
004C: MOVWF 22 |
.................... |
.................... shure=0; |
004D: CLRF 23 |
.................... |
.................... while(true) |
.................... { |
.................... set_adc_channel(0); |
004E: MOVLW 00 |
004F: MOVWF 78 |
0050: MOVF 1F,W |
0051: ANDLW C7 |
0052: IORWF 78,W |
0053: MOVWF 1F |
.................... cidla=0; |
0054: CLRF 24 |
.................... Delay_us(10); |
0055: CLRWDT |
0056: MOVLW 02 |
0057: MOVWF 77 |
0058: DECFSZ 77,F |
0059: GOTO 058 |
005A: NOP |
005B: NOP |
.................... a=read_adc(); |
005C: BSF 1F.2 |
005D: BTFSC 1F.2 |
005E: GOTO 05D |
005F: MOVF 1E,W |
0060: MOVWF 25 |
.................... |
.................... set_adc_channel(1); |
0061: MOVLW 08 |
0062: MOVWF 78 |
0063: MOVF 1F,W |
0064: ANDLW C7 |
0065: IORWF 78,W |
0066: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) //hystereze cidel |
0067: MOVF 25,W |
0068: SUBLW 3B |
0069: BTFSS 03.0 |
006A: GOTO 074 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
006B: MOVF 25,W |
006C: SUBLW 28 |
006D: BTFSC 03.0 |
006E: GOTO 073 |
.................... { |
.................... cidla |= (last_cidla & 0b00000001); |
006F: MOVF 22,W |
0070: ANDLW 01 |
0071: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000001; |
0072: GOTO 074 |
0073: BSF 24.0 |
.................... } |
.................... |
.................... a=read_adc(); |
0074: BSF 1F.2 |
0075: BTFSC 1F.2 |
0076: GOTO 075 |
0077: MOVF 1E,W |
0078: MOVWF 25 |
.................... |
.................... set_adc_channel(2); |
0079: MOVLW 10 |
007A: MOVWF 78 |
007B: MOVF 1F,W |
007C: ANDLW C7 |
007D: IORWF 78,W |
007E: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
007F: MOVF 25,W |
0080: SUBLW 3B |
0081: BTFSS 03.0 |
0082: GOTO 08C |
.................... { |
.................... if(a>TRESHOLD_MIN) |
0083: MOVF 25,W |
0084: SUBLW 28 |
0085: BTFSC 03.0 |
0086: GOTO 08B |
.................... { |
.................... cidla |= (last_cidla & 0b00000010); |
0087: MOVF 22,W |
0088: ANDLW 02 |
0089: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000010; |
008A: GOTO 08C |
008B: BSF 24.1 |
.................... } |
.................... |
.................... a=read_adc(); |
008C: BSF 1F.2 |
008D: BTFSC 1F.2 |
008E: GOTO 08D |
008F: MOVF 1E,W |
0090: MOVWF 25 |
.................... |
.................... set_adc_channel(3); |
0091: MOVLW 18 |
0092: MOVWF 78 |
0093: MOVF 1F,W |
0094: ANDLW C7 |
0095: IORWF 78,W |
0096: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
0097: MOVF 25,W |
0098: SUBLW 3B |
0099: BTFSS 03.0 |
009A: GOTO 0A4 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
009B: MOVF 25,W |
009C: SUBLW 28 |
009D: BTFSC 03.0 |
009E: GOTO 0A3 |
.................... { |
.................... cidla |= (last_cidla & 0b00000100); |
009F: MOVF 22,W |
00A0: ANDLW 04 |
00A1: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000100; |
00A2: GOTO 0A4 |
00A3: BSF 24.2 |
.................... } |
.................... |
.................... a=read_adc(); |
00A4: BSF 1F.2 |
00A5: BTFSC 1F.2 |
00A6: GOTO 0A5 |
00A7: MOVF 1E,W |
00A8: MOVWF 25 |
.................... |
.................... set_adc_channel(4); |
00A9: MOVLW 20 |
00AA: MOVWF 78 |
00AB: MOVF 1F,W |
00AC: ANDLW C7 |
00AD: IORWF 78,W |
00AE: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
00AF: MOVF 25,W |
00B0: SUBLW 3B |
00B1: BTFSS 03.0 |
00B2: GOTO 0BC |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00B3: MOVF 25,W |
00B4: SUBLW 28 |
00B5: BTFSC 03.0 |
00B6: GOTO 0BB |
.................... { |
.................... cidla |= (last_cidla & 0b00001000); |
00B7: MOVF 22,W |
00B8: ANDLW 08 |
00B9: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00001000; |
00BA: GOTO 0BC |
00BB: BSF 24.3 |
.................... } |
.................... a=read_adc(); |
00BC: BSF 1F.2 |
00BD: BTFSC 1F.2 |
00BE: GOTO 0BD |
00BF: MOVF 1E,W |
00C0: MOVWF 25 |
.................... |
.................... set_adc_channel(5); |
00C1: MOVLW 28 |
00C2: MOVWF 78 |
00C3: MOVF 1F,W |
00C4: ANDLW C7 |
00C5: IORWF 78,W |
00C6: MOVWF 1F |
.................... |
.................... if(a<TRESHOLD_MAX) |
00C7: MOVF 25,W |
00C8: SUBLW 3B |
00C9: BTFSS 03.0 |
00CA: GOTO 0D4 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00CB: MOVF 25,W |
00CC: SUBLW 28 |
00CD: BTFSC 03.0 |
00CE: GOTO 0D3 |
.................... { |
.................... cidla |= (last_cidla & 0b00010000); |
00CF: MOVF 22,W |
00D0: ANDLW 10 |
00D1: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00010000; |
00D2: GOTO 0D4 |
00D3: BSF 24.4 |
.................... } |
.................... a=read_adc(); |
00D4: BSF 1F.2 |
00D5: BTFSC 1F.2 |
00D6: GOTO 0D5 |
00D7: MOVF 1E,W |
00D8: MOVWF 25 |
.................... |
.................... set_adc_channel(6); |
00D9: MOVLW 30 |
00DA: MOVWF 78 |
00DB: MOVF 1F,W |
00DC: ANDLW C7 |
00DD: IORWF 78,W |
00DE: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
00DF: MOVF 25,W |
00E0: SUBLW 3B |
00E1: BTFSS 03.0 |
00E2: GOTO 0EC |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00E3: MOVF 25,W |
00E4: SUBLW 28 |
00E5: BTFSC 03.0 |
00E6: GOTO 0EB |
.................... { |
.................... cidla |= (last_cidla & 0b00100000); |
00E7: MOVF 22,W |
00E8: ANDLW 20 |
00E9: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00100000; |
00EA: GOTO 0EC |
00EB: BSF 24.5 |
.................... } |
.................... a=read_adc(); |
00EC: BSF 1F.2 |
00ED: BTFSC 1F.2 |
00EE: GOTO 0ED |
00EF: MOVF 1E,W |
00F0: MOVWF 25 |
.................... |
.................... if(a<TRESHOLD_MAX) |
00F1: MOVF 25,W |
00F2: SUBLW 3B |
00F3: BTFSS 03.0 |
00F4: GOTO 0FE |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00F5: MOVF 25,W |
00F6: SUBLW 28 |
00F7: BTFSC 03.0 |
00F8: GOTO 0FD |
.................... { |
.................... cidla |=(last_cidla & 0b01000000); |
00F9: MOVF 22,W |
00FA: ANDLW 40 |
00FB: IORWF 24,F |
.................... } |
.................... else cidla |= 0b01000000; |
00FC: GOTO 0FE |
00FD: BSF 24.6 |
.................... } |
.................... |
.................... last_cidla=cidla; |
00FE: MOVF 24,W |
00FF: MOVWF 22 |
.................... |
.................... if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
0100: BSF 03.5 |
0101: BSF 06.0 |
0102: BCF 03.5 |
0103: BTFSC 06.0 |
0104: GOTO 10A |
0105: INCFSZ 23,W |
0106: GOTO 108 |
0107: GOTO 109 |
0108: INCF 23,F |
0109: GOTO 10B |
010A: CLRF 23 |
.................... if (shure>CIHLA) cidla|=0b10000000; |
010B: MOVF 23,W |
010C: SUBLW 0A |
010D: BTFSS 03.0 |
010E: BSF 24.7 |
.................... |
.................... cidla=~cidla; |
010F: COMF 24,F |
.................... spi_write(cidla); |
0110: MOVF 24,W |
0111: MOVWF 13 |
0112: BSF 03.5 |
0113: BTFSC 14.0 |
0114: GOTO 117 |
0115: BCF 03.5 |
0116: GOTO 112 |
.................... } |
0117: BCF 03.5 |
0118: GOTO 04E |
.................... } |
0119: 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/04 posledni RTOS/cidla/cidla.PJT |
---|
0,0 → 1,44 |
[PROJECT] |
Target=cidla.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\istrobot\3Orbis\cidla\cidla.c |
BuildTool=C-COMPILER |
OptionString=+FM |
AdditionalOptionString= |
BuildRequired=1 |
[cidla.c] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=cidla.c |
[Windows] |
0=0000 cidla.c 0 0 796 451 3 0 |
[Opened Files] |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=C:\Program Files\PICC\drivers\stdlib.h |
4=C:\Program Files\PICC\drivers\stddef.h |
5=C:\Program Files\PICC\drivers\string.h |
6=C:\Program Files\PICC\drivers\ctype.h |
7=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
8= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c (main) |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.SYM |
---|
0,0 → 1,45 |
015-016 CCP_1 |
015 CCP_1_LOW |
016 CCP_1_HIGH |
020 radius |
021 last_radius |
022 last_cidla |
023 shure |
024 main.cidla |
025 main.a |
026 main.n |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
0004 main |
0004 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.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\istrobot\3Orbis\cidla\cidla.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sta |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.c |
---|
0,0 → 1,147 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
#define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.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/04 posledni RTOS/cidla/cidla.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.h |
---|
0,0 → 1,5 |
#include <16F88.h> |
#device adc=8 |
#fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
#use delay(clock=4000000,RESTART_WDT) |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.sta |
---|
0,0 → 1,28 |
ROM used: 282 (7%) |
282 (7%) including unused fragments |
1 Average locations per line |
3 Average locations per statement |
RAM used: 12 (7%) at main() level |
12 (7%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
148 83 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
6 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
866 166 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 278 99 3 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-007FF 278 1766 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/cidla.tre |
---|
0,0 → 1,3 |
ÀÄcidla |
ÀÄmain 0/278 Ram=3 |
ÀÄ??0?? |
/roboti/3Orbis/bak/04 posledni RTOS/cidla/macro.ini |
---|
--- 04 posledni RTOS/main/main.BAK (nonexistent) |
+++ 04 posledni RTOS/main/main.BAK (revision 1) |
@@ -0,0 +1,268 @@ |
+#include ".\main.h" |
+ |
+#use rtos (timer=2, minor_cycle=2ms) |
+ |
+#define STRED 128 // sredni poloha zadniho kolecka |
+#define BEAR1 12 // 3 stupne zataceni |
+#define BEAR2 34 |
+#define BEAR3 70 |
+#define SPEEDMAX 120 // maximalni rychlost |
+ |
+#define L 1 |
+#define S 2 |
+#define R 0 |
+ |
+// servo |
+#define SERVO PIN_A2 |
+ |
+// IR |
+#define IRTX PIN_B2 |
+ |
+//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 |
+unsigned int8 line; // 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 rovinka; // pocitadlo na zjisteni rovinky |
+ |
+signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
+signed int16 Rmotor; // a pravem motoru |
+ |
+// makro pro PWM |
+#define GO(motor, direction, power) if(get_timer0()<=power) \ |
+{direction##motor;} else {stop##motor;} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+//////////////////////////////////////////////////////////////////////////////// |
+/* |
+void diagnostika() |
+{ |
+ if(input(SW1))STOPR;STOPL;While(TRUE); |
+// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
+// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
+} |
+*/ |
+//////////////////////////////////////////////////////////////////////////////// |
+#task (rate=18ms,max=2ms) |
+void zatoc() // ridi servo ktere otaci kolem |
+{ |
+ unsigned int8 n; |
+ |
+ output_high(SERVO); |
+ delay_us(1100); |
+ for(n=uhel; n>0; n--); |
+ output_low(SERVO); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+void diag() // ridi servo ktere otaci kolem |
+{ |
+ unsigned int8 n; |
+ |
+ output_high(SERVO); |
+ delay_us(1100); |
+ for(n=uhel; n>0; n--); |
+ output_low(SERVO); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+short int IRcheck() // potvrdi detekci cihly |
+{ |
+ output_high(IRTX); // vypne vysilac IR |
+ |
+ output_low(STROBE); |
+ sensors = spi_read(0); // cteni senzoru |
+ output_high(STROBE); |
+ |
+ if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal |
+ { |
+ output_low(IRTX); // zapne vysilac IR |
+ |
+ output_low(STROBE); |
+ sensors = spi_read(0); // cteni senzoru |
+ output_high(STROBE); |
+ |
+ if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla |
+ { |
+ output_high(IRTX); // vypne vysilac IR |
+ |
+ output_low(STROBE); |
+ sensors = spi_read(0); // cteni senzoru |
+ output_high(STROBE); |
+ |
+ if(bit_test(sensors,7)) return 1; // |
+ |
+ else return 0; // vrat 0 kdyz je ruseni |
+ } |
+ else return 0; // vrat 0 kdyz to nebyla cihla |
+ } |
+ else return 0; // vrat 0 kdyz je detekovano ruseni |
+} |
+//////////////////////////////////////////////////////////////////////////////// |
+/* |
+#task (rate=4ms, max=20us) |
+void rychlost() |
+{ |
+ if(speed<255) speed++; |
+} |
+*/ |
+//////////////////////////////////////////////////////////////////////////////// |
+#task (rate=2ms, max=1ms) |
+void rizeni() |
+{ |
+ unsigned int16 n; |
+ unsigned int8 i; |
+ |
+ GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
+ |
+ delay_us(500); |
+ |
+ output_low(STROBE); |
+ sensors = spi_read(0); // cteni senzoru |
+ sensors=~sensors; |
+ output_high(STROBE); |
+ |
+ i=0; // havarijni kod |
+ for (n=0; n<=6; n++) |
+ { |
+ if(bit_test(sensors,n)) i++; |
+ } |
+ if (i>3) rtos_terminate(); // zastavi, kdyz je cerno pod vice nez tremi cidly |
+ |
+ |
+ if(bit_test(sensors,3)) //...|...// |
+ { |
+ uhel=STRED; |
+ Lmotor=SPEEDMAX; |
+ Rmotor=SPEEDMAX; |
+ line=S; |
+ if (rovinka<255) rovinka++; |
+ return; |
+ } |
+ |
+ 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=SPEEDMAX; |
+ line=L; |
+ return; |
+ } |
+ |
+ if(bit_test(sensors,6)) //......|// |
+ { |
+ uhel=STRED+BEAR3; |
+ Rmotor=0; |
+ Lmotor=SPEEDMAX; |
+ line=R; |
+ return; |
+ |
+ } |
+ |
+ if(bit_test(sensors,1)) //.|.....// |
+ { |
+ uhel=STRED-BEAR2; |
+ Lmotor=SPEEDMAX-50; |
+ Rmotor=SPEEDMAX; |
+ line=S; |
+ return; |
+ } |
+ |
+ if(bit_test(sensors,5)) //.....|.// |
+ { |
+ uhel=STRED+BEAR2; |
+ Rmotor=SPEEDMAX-50; |
+ Lmotor=SPEEDMAX; |
+ line=S; |
+ return; |
+ } |
+ |
+ if (bit_test(sensors,2)) //..|....// |
+ { |
+ uhel=STRED-BEAR1; |
+ Lmotor=SPEEDMAX; |
+ Rmotor=SPEEDMAX; |
+ line=S; |
+ if (rovinka<255) rovinka++; |
+ return; |
+ } |
+ |
+ if (bit_test(sensors,4)) //....|..// |
+ { |
+ uhel=STRED+BEAR1; |
+ Rmotor=SPEEDMAX; |
+ Lmotor=SPEEDMAX; |
+ line=S; |
+ if (rovinka<255) rovinka++; |
+ return; |
+ } |
+ |
+ if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
+ { |
+ if (rovinka>250) |
+ { |
+ BL; BR; |
+ for(n=1; n<(60); n++) {rtos_yield(); delay_us(500);}; |
+ }; |
+ rovinka=0; |
+ } |
+ |
+ if(bit_test(sensors,7)) // zjisti jestli neni cihla |
+ { |
+ rtos_terminate(); |
+ } |
+} |
+ |
+ |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+void main() |
+{ |
+ unsigned int16 i; |
+ unsigned int8 last; |
+ |
+ setup_adc_ports(NO_ANALOGS); |
+ setup_adc(ADC_CLOCK_INTERNAL); |
+ setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
+ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
+ setup_timer_1(T1_DISABLED); |
+ setup_oscillator(OSC_8MHZ|OSC_INTRC); |
+ |
+ STOPR; STOPL; // zastav motory |
+ Lmotor=0;Rmotor=0; |
+ |
+ uhel=STRED; // nastav zadni kolecko na stred |
+ rovinka=0; |
+ |
+ output_low(IRTX); // zapni IR vysilac |
+ |
+ for(i=0;i<100;i++) // pockej, nez se zadni kolecko vystredi |
+ { |
+ diag(); |
+ delay_ms(16); |
+ } |
+// diagnostika(); |
+ |
+ while(true) |
+ { |
+ rtos_run(); |
+ STOPR; |
+ STOPL; |
+ while(true); |
+ } |
+} |
/roboti/3Orbis/bak/04 posledni RTOS/main/main.HEX |
---|
0,0 → 1,78 |
:1000000000308A00822900000A108A100A11820733 |
:1000100029340034303400343D30840000080319A2 |
:1000200023280230F800BF30F7006400F70B1528D2 |
:10003000F80B13289630F700F70B1C28000000007F |
:100040006400800B112800340830C202031C3328DE |
:10005000423084000310800C000803193328312833 |
:100060006400800B302800348316051183120515B7 |
:1000700064000130BD000C206330C200242023083E |
:10008000BC00BC0803194628BC034128831605118F |
:10009000831205113430AE000030AF008A11342ACB |
:1000A00000340108801F5728A61F5F285928A61B67 |
:1000B0006828A608031D5F282502031C68288316EC |
:1000C000851083128510831605108312051470287D |
:1000D0008316051083120510831685108312851070 |
:1000E0000108801F7628A81F7E287828A81B87284B |
:1000F000A808031D7E282702031C87288316851362 |
:100100008312851383160513831205178F28831610 |
:100110000513831205138316851383128513640058 |
:100120000230C100F730C2002420C10B9228831690 |
:100130000610831206101308930183161418A228C0 |
:1001400083129D2883121308A100A10983160610AB |
:1001500083120614C001BF01BE01BF08031DC428DD |
:100160003E08063C031CC4282108F7003E08F8009E |
:100170000319BE280310F70CF80BBA287718C00A29 |
:10018000BE0A0319BF0AAD284008033C031C412ADC |
:10019000A11DD8288030A300A6017830A500A801B1 |
:1001A000A7000230A200240FD628D728A40A63296A |
:1001B000211CE4283A30A300A601A501A80178304B |
:1001C000A7000130A2006329211FEF28C630A30039 |
:1001D000A801A701A6017830A500A2016329A11CEE |
:1001E000FC285E30A300A6014630A500A8017830A7 |
:1001F000A7000230A2006329A11E0929A230A30092 |
:10020000A8014630A700A6017830A5000230A20060 |
:100210006329211D19297430A300A6017830A50097 |
:10022000A801A7000230A200240F17291829A40A48 |
:100230006329211E29298C30A300A8017830A7004A |
:10024000A601A5000230A200240F27292829A40A0C |
:100250006329220B2C292F29A208031D60292408B9 |
:10026000FA3C03185F2983160510831205108316C4 |
:1002700085108312851483160513831205138316C4 |
:10028000851383128517BF010130BE00BF08031D0F |
:100290005F293E083B3C031C5F295330B500013009 |
:1002A000B6008A11342A64000230C100F730C2005F |
:1002B0002420C10B5629BE0A0319BF0A4629A401EE |
:1002C000A11F6329412A5130B5000030B6008A11C0 |
:1002D000342A003483160511831205156400013099 |
:1002E000BD000C206330C20024202308BA00BA08E5 |
:1002F00003197C29BA037729831605118312051186 |
:100300008A11D42984011F308305703083168F0031 |
:100310001F129F121B0880399B0007309C001F1280 |
:100320009F121B0880399B001F1383121F179F17F2 |
:1003300083169F1383121F149412831606118614BA |
:1003400006123030831294000030831694000108A6 |
:10035000C7390838810083129001723083168F00EC |
:1003600005138312051383168513831285138316D1 |
:100370000510831205108316851083128510A601BF |
:10038000A501A801A7018030A300A40183160611CE |
:1003900083120611B801B701B808031DDB2937081D |
:1003A000633C031CDB296A291030BD000C20B70A0E |
:1003B0000319B80ACC29A901AB010930AA00AD0183 |
:1003C000AC013430AE000030AF00B001B2010130FA |
:1003D000B100B401B3015130B5000030B600A00146 |
:1003E0000030F80006389200FA308316920083122B |
:1003F0008C100030F80006389200FA308316920014 |
:1004000083128C100310200DF7000420F900013036 |
:1004100077070420FA00790884000008F900840AAC |
:100420000008F700840A0008F800840A800A00081F |
:10043000FA00031D1E2A840A800A8403840A000825 |
:100440007802031D362A77087A02031D362A8403B0 |
:100450008001840A8001840AF91B362A840A000874 |
:100460008A0084030008820083120313A00A02306A |
:100470002002031D022AA0018C1C402A8316002A98 |
:100480003C2AFF30A0008316051383120513831640 |
:1004900085138312851383160510831205108316A6 |
:0C04A000851083128510532ADB296300AD |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/04 posledni RTOS/main/main.LST |
---|
0,0 → 1,899 |
CCS PCM C Compiler, Version 3.245, 27853 15-IV-06 16:28 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
ROM used: 598 words (15%) |
Largest free fragment is 2048 |
RAM used: 31 (18%) at main() level |
40 (23%) worst case |
Stack: 4 worst case (2 in main + 2 for interrupts) |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 182 |
0003: NOP |
.................... #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) |
000C: MOVLW 3D |
000D: MOVWF 04 |
000E: MOVF 00,W |
000F: BTFSC 03.2 |
0010: GOTO 023 |
0011: MOVLW 02 |
0012: MOVWF 78 |
0013: MOVLW BF |
0014: MOVWF 77 |
0015: CLRWDT |
0016: DECFSZ 77,F |
0017: GOTO 015 |
0018: DECFSZ 78,F |
0019: GOTO 013 |
001A: MOVLW 96 |
001B: MOVWF 77 |
001C: DECFSZ 77,F |
001D: GOTO 01C |
001E: NOP |
001F: NOP |
0020: CLRWDT |
0021: DECFSZ 00,F |
0022: GOTO 011 |
0023: RETLW 00 |
0024: MOVLW 08 |
0025: SUBWF 42,F |
0026: BTFSS 03.0 |
0027: GOTO 033 |
0028: MOVLW 42 |
0029: MOVWF 04 |
002A: BCF 03.0 |
002B: RRF 00,F |
002C: MOVF 00,W |
002D: BTFSC 03.2 |
002E: GOTO 033 |
002F: GOTO 031 |
0030: CLRWDT |
0031: DECFSZ 00,F |
0032: GOTO 030 |
0033: RETLW 00 |
.................... |
.................... |
.................... |
.................... #use rtos (timer=2, minor_cycle=2ms) |
.................... |
.................... #define STRED 128 // sredni poloha zadniho kolecka |
.................... #define BEAR1 12 // 3 stupne zataceni |
.................... #define BEAR2 34 |
.................... #define BEAR3 70 |
.................... #define SPEEDMAX 120 // maximalni rychlost |
.................... |
.................... #define L 1 |
.................... #define S 2 |
.................... #define R 0 |
.................... |
.................... // servo |
.................... #define SERVO PIN_A2 |
.................... |
.................... // IR |
.................... #define IRTX PIN_B2 |
.................... |
.................... //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 |
.................... unsigned int8 line; // 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 rovinka; // pocitadlo na zjisteni rovinky |
.................... |
.................... signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
.................... signed int16 Rmotor; // a pravem motoru |
.................... |
.................... // makro pro PWM |
.................... #define GO(motor, direction, power) if(get_timer0()<=power) \ |
.................... {direction##motor;} else {stop##motor;} |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... /* |
.................... void diagnostika() |
.................... { |
.................... if(input(SW1))STOPR;STOPL;While(TRUE); |
.................... // if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
.................... // if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #task (rate=18ms,max=2ms) |
.................... void zatoc() // ridi servo ktere otaci kolem |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
0034: BSF 03.5 |
0035: BCF 05.2 |
0036: BCF 03.5 |
0037: BSF 05.2 |
.................... delay_us(1100); |
0038: CLRWDT |
0039: MOVLW 01 |
003A: MOVWF 3D |
003B: CALL 00C |
003C: MOVLW 63 |
003D: MOVWF 42 |
003E: CALL 024 |
.................... for(n=uhel; n>0; n--); |
003F: MOVF 23,W |
0040: MOVWF 3C |
0041: MOVF 3C,F |
0042: BTFSC 03.2 |
0043: GOTO 046 |
0044: DECF 3C,F |
0045: GOTO 041 |
.................... output_low(SERVO); |
0046: BSF 03.5 |
0047: BCF 05.2 |
0048: BCF 03.5 |
0049: BCF 05.2 |
.................... } |
004A: MOVLW 34 |
004B: MOVWF 2E |
004C: MOVLW 00 |
004D: MOVWF 2F |
004E: BCF 0A.3 |
004F: GOTO 234 |
0050: RETLW 00 |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void diag() // ridi servo ktere otaci kolem |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
* |
016A: BSF 03.5 |
016B: BCF 05.2 |
016C: BCF 03.5 |
016D: BSF 05.2 |
.................... delay_us(1100); |
016E: CLRWDT |
016F: MOVLW 01 |
0170: MOVWF 3D |
0171: CALL 00C |
0172: MOVLW 63 |
0173: MOVWF 42 |
0174: CALL 024 |
.................... for(n=uhel; n>0; n--); |
0175: MOVF 23,W |
0176: MOVWF 3A |
0177: MOVF 3A,F |
0178: BTFSC 03.2 |
0179: GOTO 17C |
017A: DECF 3A,F |
017B: GOTO 177 |
.................... output_low(SERVO); |
017C: BSF 03.5 |
017D: BCF 05.2 |
017E: BCF 03.5 |
017F: BCF 05.2 |
.................... } |
0180: BCF 0A.3 |
0181: GOTO 1D4 (RETURN) |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... short int IRcheck() // potvrdi detekci cihly |
.................... { |
.................... output_high(IRTX); // vypne vysilac IR |
.................... |
.................... output_low(STROBE); |
.................... sensors = spi_read(0); // cteni senzoru |
.................... output_high(STROBE); |
.................... |
.................... if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal |
.................... { |
.................... output_low(IRTX); // zapne vysilac IR |
.................... |
.................... output_low(STROBE); |
.................... sensors = spi_read(0); // cteni senzoru |
.................... output_high(STROBE); |
.................... |
.................... if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla |
.................... { |
.................... output_high(IRTX); // vypne vysilac IR |
.................... |
.................... output_low(STROBE); |
.................... sensors = spi_read(0); // cteni senzoru |
.................... output_high(STROBE); |
.................... |
.................... if(bit_test(sensors,7)) return 1; // |
.................... |
.................... else return 0; // vrat 0 kdyz je ruseni |
.................... } |
.................... else return 0; // vrat 0 kdyz to nebyla cihla |
.................... } |
.................... else return 0; // vrat 0 kdyz je detekovano ruseni |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... /* |
.................... #task (rate=4ms, max=20us) |
.................... void rychlost() |
.................... { |
.................... if(speed<255) speed++; |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #task (rate=2ms, max=1ms) |
.................... void rizeni() |
.................... { |
.................... unsigned int16 n; |
.................... unsigned int8 i; |
.................... |
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
* |
0051: MOVF 01,W |
0052: BTFSS 00.7 |
0053: GOTO 057 |
0054: BTFSS 26.7 |
0055: GOTO 05F |
0056: GOTO 059 |
0057: BTFSC 26.7 |
0058: GOTO 068 |
0059: MOVF 26,F |
005A: BTFSS 03.2 |
005B: GOTO 05F |
005C: SUBWF 25,W |
005D: BTFSS 03.0 |
005E: GOTO 068 |
005F: BSF 03.5 |
0060: BCF 05.1 |
0061: BCF 03.5 |
0062: BCF 05.1 |
0063: BSF 03.5 |
0064: BCF 05.0 |
0065: BCF 03.5 |
0066: BSF 05.0 |
0067: GOTO 070 |
0068: BSF 03.5 |
0069: BCF 05.0 |
006A: BCF 03.5 |
006B: BCF 05.0 |
006C: BSF 03.5 |
006D: BCF 05.1 |
006E: BCF 03.5 |
006F: BCF 05.1 |
0070: MOVF 01,W |
0071: BTFSS 00.7 |
0072: GOTO 076 |
0073: BTFSS 28.7 |
0074: GOTO 07E |
0075: GOTO 078 |
0076: BTFSC 28.7 |
0077: GOTO 087 |
0078: MOVF 28,F |
0079: BTFSS 03.2 |
007A: GOTO 07E |
007B: SUBWF 27,W |
007C: BTFSS 03.0 |
007D: GOTO 087 |
007E: BSF 03.5 |
007F: BCF 05.7 |
0080: BCF 03.5 |
0081: BCF 05.7 |
0082: BSF 03.5 |
0083: BCF 05.6 |
0084: BCF 03.5 |
0085: BSF 05.6 |
0086: GOTO 08F |
0087: BSF 03.5 |
0088: BCF 05.6 |
0089: BCF 03.5 |
008A: BCF 05.6 |
008B: BSF 03.5 |
008C: BCF 05.7 |
008D: BCF 03.5 |
008E: BCF 05.7 |
.................... |
.................... delay_us(500); |
008F: CLRWDT |
0090: MOVLW 02 |
0091: MOVWF 41 |
0092: MOVLW F7 |
0093: MOVWF 42 |
0094: CALL 024 |
0095: DECFSZ 41,F |
0096: GOTO 092 |
.................... |
.................... output_low(STROBE); |
0097: BSF 03.5 |
0098: BCF 06.0 |
0099: BCF 03.5 |
009A: BCF 06.0 |
.................... sensors = spi_read(0); // cteni senzoru |
009B: MOVF 13,W |
009C: CLRF 13 |
009D: BSF 03.5 |
009E: BTFSC 14.0 |
009F: GOTO 0A2 |
00A0: BCF 03.5 |
00A1: GOTO 09D |
00A2: BCF 03.5 |
00A3: MOVF 13,W |
00A4: MOVWF 21 |
.................... sensors=~sensors; |
00A5: COMF 21,F |
.................... output_high(STROBE); |
00A6: BSF 03.5 |
00A7: BCF 06.0 |
00A8: BCF 03.5 |
00A9: BSF 06.0 |
.................... |
.................... i=0; // havarijni kod |
00AA: CLRF 40 |
.................... for (n=0; n<=6; n++) |
00AB: CLRF 3F |
00AC: CLRF 3E |
00AD: MOVF 3F,F |
00AE: BTFSS 03.2 |
00AF: GOTO 0C4 |
00B0: MOVF 3E,W |
00B1: SUBLW 06 |
00B2: BTFSS 03.0 |
00B3: GOTO 0C4 |
.................... { |
.................... if(bit_test(sensors,n)) i++; |
00B4: MOVF 21,W |
00B5: MOVWF 77 |
00B6: MOVF 3E,W |
00B7: MOVWF 78 |
00B8: BTFSC 03.2 |
00B9: GOTO 0BE |
00BA: BCF 03.0 |
00BB: RRF 77,F |
00BC: DECFSZ 78,F |
00BD: GOTO 0BA |
00BE: BTFSC 77.0 |
00BF: INCF 40,F |
.................... } |
00C0: INCF 3E,F |
00C1: BTFSC 03.2 |
00C2: INCF 3F,F |
00C3: GOTO 0AD |
.................... if (i>3) rtos_terminate(); // zastavi, kdyz je cerno pod vice nez tremi cidly |
00C4: MOVF 40,W |
00C5: SUBLW 03 |
00C6: BTFSS 03.0 |
00C7: GOTO 241 |
.................... |
.................... |
.................... if(bit_test(sensors,3)) //...|...// |
00C8: BTFSS 21.3 |
00C9: GOTO 0D8 |
.................... { |
.................... uhel=STRED; |
00CA: MOVLW 80 |
00CB: MOVWF 23 |
.................... Lmotor=SPEEDMAX; |
00CC: CLRF 26 |
00CD: MOVLW 78 |
00CE: MOVWF 25 |
.................... Rmotor=SPEEDMAX; |
00CF: CLRF 28 |
00D0: MOVWF 27 |
.................... line=S; |
00D1: MOVLW 02 |
00D2: MOVWF 22 |
.................... if (rovinka<255) rovinka++; |
00D3: INCFSZ 24,W |
00D4: GOTO 0D6 |
00D5: GOTO 0D7 |
00D6: INCF 24,F |
.................... return; |
00D7: GOTO 163 |
.................... } |
.................... |
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
00D8: BTFSS 21.0 |
00D9: GOTO 0E4 |
.................... { |
.................... uhel=STRED-BEAR3; |
00DA: MOVLW 3A |
00DB: MOVWF 23 |
.................... Lmotor=0; |
00DC: CLRF 26 |
00DD: CLRF 25 |
.................... Rmotor=SPEEDMAX; |
00DE: CLRF 28 |
00DF: MOVLW 78 |
00E0: MOVWF 27 |
.................... line=L; |
00E1: MOVLW 01 |
00E2: MOVWF 22 |
.................... return; |
00E3: GOTO 163 |
.................... } |
.................... |
.................... if(bit_test(sensors,6)) //......|// |
00E4: BTFSS 21.6 |
00E5: GOTO 0EF |
.................... { |
.................... uhel=STRED+BEAR3; |
00E6: MOVLW C6 |
00E7: MOVWF 23 |
.................... Rmotor=0; |
00E8: CLRF 28 |
00E9: CLRF 27 |
.................... Lmotor=SPEEDMAX; |
00EA: CLRF 26 |
00EB: MOVLW 78 |
00EC: MOVWF 25 |
.................... line=R; |
00ED: CLRF 22 |
.................... return; |
00EE: GOTO 163 |
.................... |
.................... } |
.................... |
.................... if(bit_test(sensors,1)) //.|.....// |
00EF: BTFSS 21.1 |
00F0: GOTO 0FC |
.................... { |
.................... uhel=STRED-BEAR2; |
00F1: MOVLW 5E |
00F2: MOVWF 23 |
.................... Lmotor=SPEEDMAX-50; |
00F3: CLRF 26 |
00F4: MOVLW 46 |
00F5: MOVWF 25 |
.................... Rmotor=SPEEDMAX; |
00F6: CLRF 28 |
00F7: MOVLW 78 |
00F8: MOVWF 27 |
.................... line=S; |
00F9: MOVLW 02 |
00FA: MOVWF 22 |
.................... return; |
00FB: GOTO 163 |
.................... } |
.................... |
.................... if(bit_test(sensors,5)) //.....|.// |
00FC: BTFSS 21.5 |
00FD: GOTO 109 |
.................... { |
.................... uhel=STRED+BEAR2; |
00FE: MOVLW A2 |
00FF: MOVWF 23 |
.................... Rmotor=SPEEDMAX-50; |
0100: CLRF 28 |
0101: MOVLW 46 |
0102: MOVWF 27 |
.................... Lmotor=SPEEDMAX; |
0103: CLRF 26 |
0104: MOVLW 78 |
0105: MOVWF 25 |
.................... line=S; |
0106: MOVLW 02 |
0107: MOVWF 22 |
.................... return; |
0108: GOTO 163 |
.................... } |
.................... |
.................... if (bit_test(sensors,2)) //..|....// |
0109: BTFSS 21.2 |
010A: GOTO 119 |
.................... { |
.................... uhel=STRED-BEAR1; |
010B: MOVLW 74 |
010C: MOVWF 23 |
.................... Lmotor=SPEEDMAX; |
010D: CLRF 26 |
010E: MOVLW 78 |
010F: MOVWF 25 |
.................... Rmotor=SPEEDMAX; |
0110: CLRF 28 |
0111: MOVWF 27 |
.................... line=S; |
0112: MOVLW 02 |
0113: MOVWF 22 |
.................... if (rovinka<255) rovinka++; |
0114: INCFSZ 24,W |
0115: GOTO 117 |
0116: GOTO 118 |
0117: INCF 24,F |
.................... return; |
0118: GOTO 163 |
.................... } |
.................... |
.................... if (bit_test(sensors,4)) //....|..// |
0119: BTFSS 21.4 |
011A: GOTO 129 |
.................... { |
.................... uhel=STRED+BEAR1; |
011B: MOVLW 8C |
011C: MOVWF 23 |
.................... Rmotor=SPEEDMAX; |
011D: CLRF 28 |
011E: MOVLW 78 |
011F: MOVWF 27 |
.................... Lmotor=SPEEDMAX; |
0120: CLRF 26 |
0121: MOVWF 25 |
.................... line=S; |
0122: MOVLW 02 |
0123: MOVWF 22 |
.................... if (rovinka<255) rovinka++; |
0124: INCFSZ 24,W |
0125: GOTO 127 |
0126: GOTO 128 |
0127: INCF 24,F |
.................... return; |
0128: GOTO 163 |
.................... } |
.................... |
.................... if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
0129: DECFSZ 22,W |
012A: GOTO 12C |
012B: GOTO 12F |
012C: MOVF 22,F |
012D: BTFSS 03.2 |
012E: GOTO 160 |
.................... { |
.................... if (rovinka>250) |
012F: MOVF 24,W |
0130: SUBLW FA |
0131: BTFSC 03.0 |
0132: GOTO 15F |
.................... { |
.................... BL; BR; |
0133: BSF 03.5 |
0134: BCF 05.0 |
0135: BCF 03.5 |
0136: BCF 05.0 |
0137: BSF 03.5 |
0138: BCF 05.1 |
0139: BCF 03.5 |
013A: BSF 05.1 |
013B: BSF 03.5 |
013C: BCF 05.6 |
013D: BCF 03.5 |
013E: BCF 05.6 |
013F: BSF 03.5 |
0140: BCF 05.7 |
0141: BCF 03.5 |
0142: BSF 05.7 |
.................... for(n=1; n<(60); n++) {rtos_yield(); delay_us(500);}; |
0143: CLRF 3F |
0144: MOVLW 01 |
0145: MOVWF 3E |
0146: MOVF 3F,F |
0147: BTFSS 03.2 |
0148: GOTO 15F |
0149: MOVF 3E,W |
014A: SUBLW 3B |
014B: BTFSS 03.0 |
014C: GOTO 15F |
014D: MOVLW 53 |
014E: MOVWF 35 |
014F: MOVLW 01 |
0150: MOVWF 36 |
0151: BCF 0A.3 |
0152: GOTO 234 |
0153: CLRWDT |
0154: MOVLW 02 |
0155: MOVWF 41 |
0156: MOVLW F7 |
0157: MOVWF 42 |
0158: CALL 024 |
0159: DECFSZ 41,F |
015A: GOTO 156 |
015B: INCF 3E,F |
015C: BTFSC 03.2 |
015D: INCF 3F,F |
015E: GOTO 146 |
.................... }; |
.................... rovinka=0; |
015F: CLRF 24 |
.................... } |
.................... |
.................... if(bit_test(sensors,7)) // zjisti jestli neni cihla |
0160: BTFSS 21.7 |
0161: GOTO 163 |
.................... { |
.................... rtos_terminate(); |
0162: GOTO 241 |
.................... } |
.................... } |
0163: MOVLW 51 |
0164: MOVWF 35 |
0165: MOVLW 00 |
0166: MOVWF 36 |
0167: BCF 0A.3 |
0168: GOTO 234 |
0169: RETLW 00 |
.................... |
.................... |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
* |
0182: CLRF 04 |
0183: MOVLW 1F |
0184: ANDWF 03,F |
0185: MOVLW 70 |
0186: BSF 03.5 |
0187: MOVWF 0F |
0188: BCF 1F.4 |
0189: BCF 1F.5 |
018A: MOVF 1B,W |
018B: ANDLW 80 |
018C: MOVWF 1B |
018D: MOVLW 07 |
018E: MOVWF 1C |
.................... unsigned int16 i; |
.................... unsigned int8 last; |
.................... |
.................... setup_adc_ports(NO_ANALOGS); |
018F: BCF 1F.4 |
0190: BCF 1F.5 |
0191: MOVF 1B,W |
0192: ANDLW 80 |
0193: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
0194: BCF 1F.6 |
0195: BCF 03.5 |
0196: BSF 1F.6 |
0197: BSF 1F.7 |
0198: BSF 03.5 |
0199: BCF 1F.7 |
019A: BCF 03.5 |
019B: BSF 1F.0 |
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
019C: BCF 14.5 |
019D: BSF 03.5 |
019E: BCF 06.2 |
019F: BSF 06.1 |
01A0: BCF 06.4 |
01A1: MOVLW 30 |
01A2: BCF 03.5 |
01A3: MOVWF 14 |
01A4: MOVLW 00 |
01A5: BSF 03.5 |
01A6: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
01A7: MOVF 01,W |
01A8: ANDLW C7 |
01A9: IORLW 08 |
01AA: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
01AB: BCF 03.5 |
01AC: CLRF 10 |
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC); |
01AD: MOVLW 72 |
01AE: BSF 03.5 |
01AF: MOVWF 0F |
.................... |
.................... STOPR; STOPL; // zastav motory |
01B0: BCF 05.6 |
01B1: BCF 03.5 |
01B2: BCF 05.6 |
01B3: BSF 03.5 |
01B4: BCF 05.7 |
01B5: BCF 03.5 |
01B6: BCF 05.7 |
01B7: BSF 03.5 |
01B8: BCF 05.0 |
01B9: BCF 03.5 |
01BA: BCF 05.0 |
01BB: BSF 03.5 |
01BC: BCF 05.1 |
01BD: BCF 03.5 |
01BE: BCF 05.1 |
.................... Lmotor=0;Rmotor=0; |
01BF: CLRF 26 |
01C0: CLRF 25 |
01C1: CLRF 28 |
01C2: CLRF 27 |
.................... |
.................... uhel=STRED; // nastav zadni kolecko na stred |
01C3: MOVLW 80 |
01C4: MOVWF 23 |
.................... rovinka=0; |
01C5: CLRF 24 |
.................... |
.................... output_low(IRTX); // zapni IR vysilac |
01C6: BSF 03.5 |
01C7: BCF 06.2 |
01C8: BCF 03.5 |
01C9: BCF 06.2 |
.................... |
.................... for(i=0;i<100;i++) // pockej, nez se zadni kolecko vystredi |
01CA: CLRF 38 |
01CB: CLRF 37 |
01CC: MOVF 38,F |
01CD: BTFSS 03.2 |
01CE: GOTO 1DB |
01CF: MOVF 37,W |
01D0: SUBLW 63 |
01D1: BTFSS 03.0 |
01D2: GOTO 1DB |
.................... { |
.................... diag(); |
01D3: GOTO 16A |
.................... delay_ms(16); |
01D4: MOVLW 10 |
01D5: MOVWF 3D |
01D6: CALL 00C |
.................... } |
01D7: INCF 37,F |
01D8: BTFSC 03.2 |
01D9: INCF 38,F |
01DA: GOTO 1CC |
.................... // diagnostika(); |
.................... |
.................... while(true) |
.................... { |
.................... rtos_run(); |
01DB: CLRF 29 |
01DC: CLRF 2B |
01DD: MOVLW 09 |
01DE: MOVWF 2A |
01DF: CLRF 2D |
01E0: CLRF 2C |
01E1: MOVLW 34 |
01E2: MOVWF 2E |
01E3: MOVLW 00 |
01E4: MOVWF 2F |
01E5: CLRF 30 |
01E6: CLRF 32 |
01E7: MOVLW 01 |
01E8: MOVWF 31 |
01E9: CLRF 34 |
01EA: CLRF 33 |
01EB: MOVLW 51 |
01EC: MOVWF 35 |
01ED: MOVLW 00 |
01EE: MOVWF 36 |
01EF: CLRF 20 |
01F0: MOVLW 00 |
01F1: MOVWF 78 |
01F2: IORLW 06 |
01F3: MOVWF 12 |
01F4: MOVLW FA |
01F5: BSF 03.5 |
01F6: MOVWF 12 |
01F7: BCF 03.5 |
01F8: BCF 0C.1 |
01F9: MOVLW 00 |
01FA: MOVWF 78 |
01FB: IORLW 06 |
01FC: MOVWF 12 |
01FD: MOVLW FA |
01FE: BSF 03.5 |
01FF: MOVWF 12 |
0200: BCF 03.5 |
0201: BCF 0C.1 |
0202: BCF 03.0 |
0203: RLF 20,W |
0204: MOVWF 77 |
0205: CALL 004 |
0206: MOVWF 79 |
0207: MOVLW 01 |
0208: ADDWF 77,W |
0209: CALL 004 |
020A: MOVWF 7A |
020B: MOVF 79,W |
020C: MOVWF 04 |
020D: MOVF 00,W |
020E: MOVWF 79 |
020F: INCF 04,F |
0210: MOVF 00,W |
0211: MOVWF 77 |
0212: INCF 04,F |
0213: MOVF 00,W |
0214: MOVWF 78 |
0215: INCF 04,F |
0216: INCF 00,F |
0217: MOVF 00,W |
0218: MOVWF 7A |
0219: BTFSS 03.2 |
021A: GOTO 21E |
021B: INCF 04,F |
021C: INCF 00,F |
021D: DECF 04,F |
021E: INCF 04,F |
021F: MOVF 00,W |
0220: SUBWF 78,W |
0221: BTFSS 03.2 |
0222: GOTO 236 |
0223: MOVF 77,W |
0224: SUBWF 7A,W |
0225: BTFSS 03.2 |
0226: GOTO 236 |
0227: DECF 04,F |
0228: CLRF 00 |
0229: INCF 04,F |
022A: CLRF 00 |
022B: INCF 04,F |
022C: BTFSC 79.7 |
022D: GOTO 236 |
022E: INCF 04,F |
022F: MOVF 00,W |
0230: MOVWF 0A |
0231: DECF 04,F |
0232: MOVF 00,W |
0233: MOVWF 02 |
0234: BCF 03.5 |
0235: BCF 03.6 |
0236: INCF 20,F |
0237: MOVLW 02 |
0238: SUBWF 20,W |
0239: BTFSS 03.2 |
023A: GOTO 202 |
023B: CLRF 20 |
023C: BTFSS 0C.1 |
023D: GOTO 240 |
023E: BSF 03.5 |
023F: GOTO 200 |
0240: GOTO 23C |
0241: MOVLW FF |
0242: MOVWF 20 |
.................... STOPR; |
0243: BSF 03.5 |
0244: BCF 05.6 |
0245: BCF 03.5 |
0246: BCF 05.6 |
0247: BSF 03.5 |
0248: BCF 05.7 |
0249: BCF 03.5 |
024A: BCF 05.7 |
.................... STOPL; |
024B: BSF 03.5 |
024C: BCF 05.0 |
024D: BCF 03.5 |
024E: BCF 05.0 |
024F: BSF 03.5 |
0250: BCF 05.1 |
0251: BCF 03.5 |
0252: BCF 05.1 |
.................... while(true); |
0253: GOTO 253 |
.................... } |
0254: GOTO 1DB |
.................... } |
0255: 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/04 posledni RTOS/main/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\istrobot\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\istrobot\3Orbis\main.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
4= |
5= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
/roboti/3Orbis/bak/04 posledni RTOS/main/main.SYM |
---|
0,0 → 1,83 |
015 CCP_1_LOW |
015-016 CCP_1 |
016 CCP_1_HIGH |
020 @CURRENT_TASK |
021 sensors |
022 line |
023 uhel |
024 rovinka |
025-026 Lmotor |
027-028 Rmotor |
029-02F @TASKINFO1_2_2_0_0 |
030-036 @TASKINFO2_2_2_0_0 |
037-038 main.i |
039 main.last |
03A diag.n |
03C zatoc.n |
03D @delay_ms1.P1 |
03E-03F rizeni.n |
040 rizeni.i |
041 rizeni.@SCRATCH |
042 @delay_us1.P1 |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
000C @delay_ms1 |
0024 @delay_us1 |
0034 zatoc |
016A diag |
0051 rizeni |
0182 main |
0004 @const10176 |
0182 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
Compiler Settings: |
Processor: PIC16F88 |
Pointer Size: 8 |
ADC Range: 0-255 |
Opt Level: 9 |
Short,Int,Long: 1,8,16 |
Task Schedule: |
2, ms zatoc |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
1, ms rizeni |
Sync to next 2, ms |
Output Files: |
Errors: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sta |
/roboti/3Orbis/bak/04 posledni RTOS/main/main.c |
---|
0,0 → 1,275 |
#include ".\main.h" |
#use rtos (timer=2, minor_cycle=2ms) |
#define STRED 128 // sredni poloha zadniho kolecka |
#define BEAR1 12 // 3 stupne zataceni |
#define BEAR2 34 |
#define BEAR3 70 |
#define SPEEDMAX 120 // maximalni rychlost |
#define L 1 |
#define S 2 |
#define R 0 |
// servo |
#define SERVO PIN_A2 |
// IR |
#define IRTX PIN_B2 |
//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 |
unsigned int8 line; // 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 rovinka; // pocitadlo na zjisteni rovinky |
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem |
signed int16 Rmotor; // a pravem motoru |
// makro pro PWM |
#define GO(motor, direction, power) if(get_timer0()<=power) \ |
{direction##motor;} else {stop##motor;} |
//////////////////////////////////////////////////////////////////////////////// |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=18ms,max=2ms) |
void zatoc() // ridi servo ktere otaci kolem |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1100); |
for(n=uhel; n>0; n--); |
output_low(SERVO); |
} |
//////////////////////////////////////////////////////////////////////////////// |
void diag() // ridi servo ktere otaci kolem |
{ |
unsigned int8 n; |
output_high(SERVO); |
delay_us(1100); |
for(n=uhel; n>0; n--); |
output_low(SERVO); |
} |
//////////////////////////////////////////////////////////////////////////////// |
short int IRcheck() // potvrdi detekci cihly |
{ |
output_high(IRTX); // vypne vysilac IR |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
output_high(STROBE); |
if(true==bit_test(sensors,7)) // otestuje, jestli je stale detekovan IR signal |
{ |
output_low(IRTX); // zapne vysilac IR |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
output_high(STROBE); |
if(false==bit_test(sensors,7)) // otestuje, jestli je detekovana cihla |
{ |
output_high(IRTX); // vypne vysilac IR |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
output_high(STROBE); |
if(bit_test(sensors,7)) return 1; // |
else return 0; // vrat 0 kdyz je ruseni |
} |
else return 0; // vrat 0 kdyz to nebyla cihla |
} |
else return 0; // vrat 0 kdyz je detekovano ruseni |
} |
//////////////////////////////////////////////////////////////////////////////// |
void ojizdka() |
{ |
} |
//////////////////////////////////////////////////////////////////////////////// |
/* |
#task (rate=4ms, max=20us) |
void rychlost() |
{ |
if(speed<255) speed++; |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#task (rate=2ms, max=1ms) |
void rizeni() |
{ |
unsigned int16 n; |
unsigned int8 i; |
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
delay_us(500); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
i=0; // havarijni kod |
for (n=0; n<=6; n++) |
{ |
if(bit_test(sensors,n)) i++; |
} |
if (i>3) rtos_terminate(); // zastavi, kdyz je cerno pod vice nez tremi cidly |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
return; |
} |
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=SPEEDMAX; |
line=L; |
return; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
uhel=STRED+BEAR3; |
Rmotor=0; |
Lmotor=SPEEDMAX; |
line=R; |
return; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED-BEAR2; |
Lmotor=SPEEDMAX-50; |
Rmotor=SPEEDMAX; |
line=S; |
return; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED+BEAR2; |
Rmotor=SPEEDMAX-50; |
Lmotor=SPEEDMAX; |
line=S; |
return; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED-BEAR1; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
return; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED+BEAR1; |
Rmotor=SPEEDMAX; |
Lmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
return; |
} |
if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>250) |
{ |
BL; BR; |
for(n=1; n<(60); n++) {rtos_yield(); delay_us(500);}; |
}; |
rovinka=0; |
} |
if(bit_test(sensors,7)) // zjisti jestli neni cihla |
{ |
rtos_terminate(); |
} |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int16 i; |
unsigned int8 last; |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_oscillator(OSC_8MHZ|OSC_INTRC); |
STOPR; STOPL; // zastav motory |
Lmotor=0;Rmotor=0; |
uhel=STRED; // nastav zadni kolecko na stred |
rovinka=0; |
output_low(IRTX); // zapni IR vysilac |
for(i=0;i<100;i++) // pockej, nez se zadni kolecko vystredi |
{ |
diag(); |
delay_ms(16); |
} |
// diagnostika(); |
while(true) |
{ |
rtos_run(); |
STOPR; |
STOPL; |
If(IRcheck()) objizdka(); |
while(true); |
} |
} |
/roboti/3Orbis/bak/04 posledni RTOS/main/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/04 posledni RTOS/main/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/04 posledni RTOS/main/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/04 posledni RTOS/main/main.sta |
---|
0,0 → 1,34 |
ROM used: 598 (15%) |
598 (15%) including unused fragments |
1 Average locations per line |
4 Average locations per statement |
RAM used: 31 (18%) at main() level |
40 (23%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
269 160 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
1134 320 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 24 4 1 @delay_ms1 |
0 16 3 1 @delay_us1 |
0 29 5 1 zatoc |
0 24 4 1 diag |
0 281 47 4 rizeni |
0 212 35 3 main |
0 8 1 0 @const10176 |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-007FF 594 1450 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/04 posledni RTOS/main/main.tre |
---|
0,0 → 1,15 |
ÀÄmain |
ÃÄmain 0/212 Ram=3 |
³ ÃÄ??0?? |
³ ÃÄdiag 0/24 Ram=1 |
³ ³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ³ ÀÄ@delay_us1 0/16 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@const10176 0/8 Ram=0 |
³ ÀÄ@const10176 0/8 Ram=0 |
ÃÄzatoc 0/29 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÀÄ@delay_us1 0/16 Ram=1 |
ÀÄrizeni 0/281 Ram=4 |
ÃÄ@delay_us1 0/16 Ram=1 |
ÀÄ@delay_us1 0/16 Ram=1 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.BAK |
---|
0,0 → 1,357 |
#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 12 // 3 stupne zataceni |
#define BEAR2 34 |
#define BEAR3 55 |
#define SPEEDMAX 140 // maximalni rychlost |
#define L 1 // cara vlevo |
#define S 2 // casa mezi sensory |
#define R 0 // cara vpravo |
// servo |
#define SERVO PIN_A2 |
// 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 |
unsigned int8 line; // 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 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;} |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void cikcak() |
{ |
short int movement; |
if(uhel>STRED) |
{ |
movement = R; |
uhel=KOLMO1; |
Delay_ms(60); |
} |
if(uhel<STRED) |
{ |
movement = L; |
uhel=KOLMO2; |
Delay_ms(60); |
} |
sem: |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel |
if(!bit_test(sensors,3) == sensors) |
{ |
if(R == movement) |
{ |
FR;BL; |
movement=L; |
While(bit_test(sensors,3) == sensors) |
{ |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(5); |
} |
STOPL;STOPR; |
GoTo sem; |
} |
if(L == movement) |
{ |
FL;BR; |
movement=R; |
While(bit_test(sensors,3) == sensors) |
{ |
sensors = spi_read(0); |
sensors =~ sensors; |
Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel |
} |
STOPL;STOPR; |
GoTo sem; |
} |
} |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
int8 shure=0; |
unsigned int16 n; |
BR;BL; |
Delay_ms(400); |
STOPR;STOPL; |
uhel=KOLMO1; |
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<1500;n++) // vystred se na hranu cihly |
{ |
if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
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(200); |
uhel=STRED+BEAR2; // min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED+BEAR1; // jeste min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED; // rovne |
FL;FR; |
delay_ms(100); |
While((sensors & 0b01111111)!=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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int16 n; |
unsigned int8 i; |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
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(1000); |
while(true) |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
delay_us(1500); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
i=0; // havarijni kod |
for (n=0; n<=6; n++) |
{ |
if(bit_test(sensors,n)) i++; |
} |
if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
if(bit_test(sensors,7)) // detekce dihly |
{ |
objizdka(); |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
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=SPEEDMAX; |
line=L; |
continue; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
uhel=STRED+BEAR3; |
Rmotor=0; |
Lmotor=SPEEDMAX; |
line=R; |
continue; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED-BEAR2; |
Lmotor=SPEEDMAX-50; |
Rmotor=SPEEDMAX; |
line=S; |
continue; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED+BEAR2; |
Rmotor=SPEEDMAX-50; |
Lmotor=SPEEDMAX; |
line=S; |
continue; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED-BEAR1; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED+BEAR1; |
Rmotor=SPEEDMAX; |
Lmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>250) |
{ |
BL; BR; |
Delay_ms(100); |
}; |
rovinka=0; |
}; |
} |
} |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.HEX |
---|
0,0 → 1,110 |
:1000000000308A00E3290000FF00030E8301A100F5 |
:100010007F08A0000A08A8008A01A00E0408A20018 |
:100020007708A3007808A4007908A5007A08A6003C |
:100030007B08A700831383128C308400801C222845 |
:100040008C183528220884002308F7002408F800BB |
:100050002508F9002608FA002708FB0028088A006E |
:10006000210E8300FF0E7F0E09008A1147280830F9 |
:10007000BC02031C46283C3084000310800C00089E |
:100080000319462844286400800B43280034831653 |
:1000900005118312051564000930BB006D30BC00EA |
:1000A0003720BB0B4E282C08BA00BA0803195E286B |
:1000B0006400000000000000BA03552883160511F3 |
:1000C000831205118C108A1122283930840000080F |
:1000D00003197C280230F800BF30F7006400F70BEA |
:1000E0006E28F80B6C289630F700F70B7528000087 |
:1000F00000006400800B6A280034B50183160513E4 |
:100100008312051383168513831285178316051032 |
:100110008312051083168510831285140230B800EF |
:10012000C830B9006520B80B9028831605138312D8 |
:100130000513831685138312851383160510831206 |
:1001400005108316851083128510E130AC006430F1 |
:10015000B9006520831605108312051083168510DB |
:100160008312851483168513831285138316051352 |
:1001700083120517C830B9006520AA1FCE281308BE |
:10018000930183161418C6288312C12883121308FA |
:10019000AA00AA090430B9006520BD2883160510FD |
:1001A000831205108316851083128510831605139C |
:1001B000831205138316851383128513B701B601C5 |
:1001C0003708053C031C1729031DEA283608DB3CC9 |
:1001D000031C172983168515831285190029831698 |
:1001E000051083120510831685108312851483165B |
:1001F000851383128513831605138312051710299F |
:10020000831685108312851083160510831205143A |
:10021000831605138312051383168513831285171E |
:100220000130B9006520B60A0319B70AE028831621 |
:100230000513831205138316851383128513831602 |
:1002400005108312051083168510831285108030E7 |
:10025000AC006430B90065208316851383128513C2 |
:1002600083160513831205178316851083128510D4 |
:1002700083160510831205140230B800FA30B90055 |
:100280006520B80B3E2983160510831205108316CE |
:1002900085108312851483160513831205138316A4 |
:1002A000851383128517C830B900652083160510A1 |
:1002B000831205108316851083128510831605138B |
:1002C000831205138316851383128513B730AC0090 |
:1002D0006430B9006520831685108312851083165B |
:1002E000051083120514C830B9006520A230AC0097 |
:1002F000831685108312851083160510831205144A |
:10030000831685138312851383160513831205172D |
:10031000C830B90065208C30AC008316851083127C |
:100320008510831605108312051483168513831216 |
:1003300085138316051383120517C830B90065208D |
:100340008030AC008316851083128510831605104B |
:1003500083120514831685138312851383160513E0 |
:10036000831205176430B90065202A087F39031904 |
:10037000C8291308930183161418C0298312BB29B6 |
:1003800083121308AA00AA090430B9006520B52910 |
:1003900083160510831205108316851083128514A9 |
:1003A000831605138312051383168513831285178D |
:1003B0000230B800C830B9006520B80BDA294930DE |
:1003C000AC008A11D12A84011F3083057030831656 |
:1003D0008F001F129F121B0880399B0007309C0062 |
:1003E0001F129F121B0880399B001F1383121F17B7 |
:1003F0009F1783169F1383121F14941283160611DE |
:100400008614061230308312940000308316940054 |
:100410000108C73908388100831290017830F8004C |
:10042000063892008C308316920072308F000513CC |
:100430008312051383168513831285138316051003 |
:10044000831205108316851083128510AF01AE014B |
:10045000B101B0018030AC00AD0183168C14C03006 |
:1004600083128B0483160611831206110430B50023 |
:10047000FA30B9006520B50B382A0108801F432ADD |
:10048000AF1F4B2A452AAF1B542AAF08031D4B2A26 |
:100490002E02031C542A831685108312851083169E |
:1004A0000510831205145C2A8316051083120510AB |
:1004B00083168510831285100108801F622AB11FE0 |
:1004C0006A2A642AB11B732AB108031D6A2A300202 |
:1004D000031C732A83168513831285138316051351 |
:1004E000831205177B2A83160513831205138316BF |
:1004F00085138312851364000130B9006520023032 |
:10050000B500A9018B1BA9178B13F730BC0037204E |
:10051000A91B8B17B50B812A8316061083120610B0 |
:100520001308930183161418972A8312922A8312B0 |
:100530001308AA00AA098316061083120614B40130 |
:10054000B301B201B308031DB92A3208063C031CEB |
:10055000B92A2A08F7003208F8000319B32A031051 |
:10056000F70CF80BAF2A7718B40AB20A0319B30ACA |
:10057000A22A3408033C0318CE2A831605138312DB |
:1005800005138316851383128513831605108312B2 |
:1005900005108316851083128510BD2AAA1FD12A43 |
:1005A0007D28AA1DE12A8030AC00AF018C30AE005E |
:1005B000B101B0000230AB002D0FDF2AE02AAD0AF6 |
:1005C0003D2A2A1CED2A4930AC00AF01AE01B10131 |
:1005D0008C30B0000130AB003D2A2A1FF82AB7301A |
:1005E000AC00B101B001AF018C30AE00AB013D2ACF |
:1005F000AA1C052B5E30AC00AF015A30AE00B10131 |
:100600008C30B0000230AB003D2AAA1E122BA23063 |
:10061000AC00B1015A30B000AF018C30AE000230F6 |
:10062000AB003D2A2A1D222B7430AC00AF018C3068 |
:10063000AE00B101B0000230AB002D0F202B212BFA |
:10064000AD0A3D2A2A1E312B8C30AC00B101B0001E |
:10065000AF01AE000230AB002D0F2F2B302BAD0AB7 |
:100660003D2A2B0B342B372BAB08031D4F2B2D08AA |
:10067000FA3C03184E2B83160510831205108316BF |
:1006800085108312851483160513831205138316B0 |
:100690008513831285176430B9006520AD013D2AAA |
:0206A0006300F5 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.LST |
---|
0,0 → 1,1192 |
CCS PCM C Compiler, Version 3.245, 27853 17-IV-06 12:46 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
ROM used: 849 words (21%) |
Largest free fragment is 2048 |
RAM used: 27 (15%) at main() level |
34 (19%) worst case |
Stack: 4 worst case (2 in main + 2 for interrupts) |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 1E3 |
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 3C,F |
0039: BTFSS 03.0 |
003A: GOTO 046 |
003B: MOVLW 3C |
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 39 |
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 12 // 3 stupne zataceni |
.................... #define BEAR2 34 |
.................... #define BEAR3 55 |
.................... #define SPEEDMAX 140 // maximalni rychlost |
.................... |
.................... #define L 1 // cara vlevo |
.................... #define S 2 // casa mezi sensory |
.................... #define R 0 // cara vpravo |
.................... |
.................... // servo |
.................... #define SERVO PIN_A2 |
.................... |
.................... // 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 |
.................... unsigned int8 line; // 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 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;} |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... /* |
.................... void diagnostika() |
.................... { |
.................... if(input(SW1))STOPR;STOPL;While(TRUE); |
.................... // if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
.................... // if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #int_TIMER2 |
.................... TIMER2_isr() // ovladani serva |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
* |
0047: BSF 03.5 |
0048: BCF 05.2 |
0049: BCF 03.5 |
004A: BSF 05.2 |
.................... delay_us(1000); |
004B: CLRWDT |
004C: MOVLW 09 |
004D: MOVWF 3B |
004E: MOVLW 6D |
004F: MOVWF 3C |
0050: CALL 037 |
0051: DECFSZ 3B,F |
0052: GOTO 04E |
.................... for(n=uhel; n>0; n--) Delay_us(2); |
0053: MOVF 2C,W |
0054: MOVWF 3A |
0055: MOVF 3A,F |
0056: BTFSC 03.2 |
0057: GOTO 05E |
0058: CLRWDT |
0059: NOP |
005A: NOP |
005B: NOP |
005C: DECF 3A,F |
005D: GOTO 055 |
.................... output_low(SERVO); |
005E: BSF 03.5 |
005F: BCF 05.2 |
0060: BCF 03.5 |
0061: BCF 05.2 |
.................... } |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
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 |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void objizdka() |
.................... { |
.................... int8 shure=0; |
* |
007D: CLRF 35 |
.................... unsigned int16 n; |
.................... |
.................... BR;BL; |
007E: BSF 03.5 |
007F: BCF 05.6 |
0080: BCF 03.5 |
0081: BCF 05.6 |
0082: BSF 03.5 |
0083: BCF 05.7 |
0084: BCF 03.5 |
0085: BSF 05.7 |
0086: BSF 03.5 |
0087: BCF 05.0 |
0088: BCF 03.5 |
0089: BCF 05.0 |
008A: BSF 03.5 |
008B: BCF 05.1 |
008C: BCF 03.5 |
008D: BSF 05.1 |
.................... Delay_ms(400); |
008E: MOVLW 02 |
008F: MOVWF 38 |
0090: MOVLW C8 |
0091: MOVWF 39 |
0092: CALL 065 |
0093: DECFSZ 38,F |
0094: GOTO 090 |
.................... STOPR;STOPL; |
0095: BSF 03.5 |
0096: BCF 05.6 |
0097: BCF 03.5 |
0098: BCF 05.6 |
0099: BSF 03.5 |
009A: BCF 05.7 |
009B: BCF 03.5 |
009C: BCF 05.7 |
009D: BSF 03.5 |
009E: BCF 05.0 |
009F: BCF 03.5 |
00A0: BCF 05.0 |
00A1: BSF 03.5 |
00A2: BCF 05.1 |
00A3: BCF 03.5 |
00A4: BCF 05.1 |
.................... |
.................... uhel=KOLMO1; // nastav zataceci kolecko kolmo na osu robota |
00A5: MOVLW E1 |
00A6: MOVWF 2C |
.................... Delay_ms(100); |
00A7: MOVLW 64 |
00A8: MOVWF 39 |
00A9: CALL 065 |
.................... BL;FR; |
00AA: BSF 03.5 |
00AB: BCF 05.0 |
00AC: BCF 03.5 |
00AD: BCF 05.0 |
00AE: BSF 03.5 |
00AF: BCF 05.1 |
00B0: BCF 03.5 |
00B1: BSF 05.1 |
00B2: BSF 03.5 |
00B3: BCF 05.7 |
00B4: BCF 03.5 |
00B5: BCF 05.7 |
00B6: BSF 03.5 |
00B7: BCF 05.6 |
00B8: BCF 03.5 |
00B9: BSF 05.6 |
.................... Delay_ms(200); // minimalni toceni, kdyby se zastavilo sikmo k cihle |
00BA: MOVLW C8 |
00BB: MOVWF 39 |
00BC: CALL 065 |
.................... |
.................... While(bit_test(sensors,7)) // toc, dokud neni cihla z primeho senzoru |
.................... { |
00BD: BTFSS 2A.7 |
00BE: GOTO 0CE |
.................... sensors = spi_read(0); // cteni senzoru |
00BF: MOVF 13,W |
00C0: CLRF 13 |
00C1: BSF 03.5 |
00C2: BTFSC 14.0 |
00C3: GOTO 0C6 |
00C4: BCF 03.5 |
00C5: GOTO 0C1 |
00C6: BCF 03.5 |
00C7: MOVF 13,W |
00C8: MOVWF 2A |
.................... sensors=~sensors; |
00C9: COMF 2A,F |
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
00CA: MOVLW 04 |
00CB: MOVWF 39 |
00CC: CALL 065 |
.................... } |
00CD: GOTO 0BD |
.................... STOPL; STOPR; |
00CE: BSF 03.5 |
00CF: BCF 05.0 |
00D0: BCF 03.5 |
00D1: BCF 05.0 |
00D2: BSF 03.5 |
00D3: BCF 05.1 |
00D4: BCF 03.5 |
00D5: BCF 05.1 |
00D6: BSF 03.5 |
00D7: BCF 05.6 |
00D8: BCF 03.5 |
00D9: BCF 05.6 |
00DA: BSF 03.5 |
00DB: BCF 05.7 |
00DC: BCF 03.5 |
00DD: BCF 05.7 |
.................... |
.................... for (n=0;n<1500;n++) // vystred se na hranu cihly |
00DE: CLRF 37 |
00DF: CLRF 36 |
00E0: MOVF 37,W |
00E1: SUBLW 05 |
00E2: BTFSS 03.0 |
00E3: GOTO 117 |
00E4: BTFSS 03.2 |
00E5: GOTO 0EA |
00E6: MOVF 36,W |
00E7: SUBLW DB |
00E8: BTFSS 03.0 |
00E9: GOTO 117 |
.................... { |
.................... if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
00EA: BSF 03.5 |
00EB: BSF 05.3 |
00EC: BCF 03.5 |
00ED: BTFSC 05.3 |
00EE: GOTO 100 |
00EF: BSF 03.5 |
00F0: BCF 05.0 |
00F1: BCF 03.5 |
00F2: BCF 05.0 |
00F3: BSF 03.5 |
00F4: BCF 05.1 |
00F5: BCF 03.5 |
00F6: BSF 05.1 |
00F7: BSF 03.5 |
00F8: BCF 05.7 |
00F9: BCF 03.5 |
00FA: BCF 05.7 |
00FB: BSF 03.5 |
00FC: BCF 05.6 |
00FD: BCF 03.5 |
00FE: BSF 05.6 |
00FF: GOTO 110 |
0100: BSF 03.5 |
0101: BCF 05.1 |
0102: BCF 03.5 |
0103: BCF 05.1 |
0104: BSF 03.5 |
0105: BCF 05.0 |
0106: BCF 03.5 |
0107: BSF 05.0 |
0108: BSF 03.5 |
0109: BCF 05.6 |
010A: BCF 03.5 |
010B: BCF 05.6 |
010C: BSF 03.5 |
010D: BCF 05.7 |
010E: BCF 03.5 |
010F: BSF 05.7 |
.................... delay_ms(1); |
0110: MOVLW 01 |
0111: MOVWF 39 |
0112: CALL 065 |
.................... } |
0113: INCF 36,F |
0114: BTFSC 03.2 |
0115: INCF 37,F |
0116: GOTO 0E0 |
.................... STOPR;STOPL; |
0117: BSF 03.5 |
0118: BCF 05.6 |
0119: BCF 03.5 |
011A: BCF 05.6 |
011B: BSF 03.5 |
011C: BCF 05.7 |
011D: BCF 03.5 |
011E: BCF 05.7 |
011F: BSF 03.5 |
0120: BCF 05.0 |
0121: BCF 03.5 |
0122: BCF 05.0 |
0123: BSF 03.5 |
0124: BCF 05.1 |
0125: BCF 03.5 |
0126: BCF 05.1 |
.................... |
.................... uhel=STRED; // dopredu |
0127: MOVLW 80 |
0128: MOVWF 2C |
.................... delay_ms(100); |
0129: MOVLW 64 |
012A: MOVWF 39 |
012B: CALL 065 |
.................... FR; FL; |
012C: BSF 03.5 |
012D: BCF 05.7 |
012E: BCF 03.5 |
012F: BCF 05.7 |
0130: BSF 03.5 |
0131: BCF 05.6 |
0132: BCF 03.5 |
0133: BSF 05.6 |
0134: BSF 03.5 |
0135: BCF 05.1 |
0136: BCF 03.5 |
0137: BCF 05.1 |
0138: BSF 03.5 |
0139: BCF 05.0 |
013A: BCF 03.5 |
013B: BSF 05.0 |
.................... delay_ms(500); |
013C: MOVLW 02 |
013D: MOVWF 38 |
013E: MOVLW FA |
013F: MOVWF 39 |
0140: CALL 065 |
0141: DECFSZ 38,F |
0142: GOTO 13E |
.................... BL;BR; |
0143: BSF 03.5 |
0144: BCF 05.0 |
0145: BCF 03.5 |
0146: BCF 05.0 |
0147: BSF 03.5 |
0148: BCF 05.1 |
0149: BCF 03.5 |
014A: BSF 05.1 |
014B: BSF 03.5 |
014C: BCF 05.6 |
014D: BCF 03.5 |
014E: BCF 05.6 |
014F: BSF 03.5 |
0150: BCF 05.7 |
0151: BCF 03.5 |
0152: BSF 05.7 |
.................... delay_ms(200); |
0153: MOVLW C8 |
0154: MOVWF 39 |
0155: CALL 065 |
.................... STOPL;STOPR; |
0156: BSF 03.5 |
0157: BCF 05.0 |
0158: BCF 03.5 |
0159: BCF 05.0 |
015A: BSF 03.5 |
015B: BCF 05.1 |
015C: BCF 03.5 |
015D: BCF 05.1 |
015E: BSF 03.5 |
015F: BCF 05.6 |
0160: BCF 03.5 |
0161: BCF 05.6 |
0162: BSF 03.5 |
0163: BCF 05.7 |
0164: BCF 03.5 |
0165: BCF 05.7 |
.................... |
.................... uhel=STRED+BEAR3; // doprava |
0166: MOVLW B7 |
0167: MOVWF 2C |
.................... delay_ms(100); |
0168: MOVLW 64 |
0169: MOVWF 39 |
016A: CALL 065 |
.................... FL; |
016B: BSF 03.5 |
016C: BCF 05.1 |
016D: BCF 03.5 |
016E: BCF 05.1 |
016F: BSF 03.5 |
0170: BCF 05.0 |
0171: BCF 03.5 |
0172: BSF 05.0 |
.................... delay_ms(200); |
0173: MOVLW C8 |
0174: MOVWF 39 |
0175: CALL 065 |
.................... uhel=STRED+BEAR2; // min doprava |
0176: MOVLW A2 |
0177: MOVWF 2C |
.................... FL;FR; |
0178: BSF 03.5 |
0179: BCF 05.1 |
017A: BCF 03.5 |
017B: BCF 05.1 |
017C: BSF 03.5 |
017D: BCF 05.0 |
017E: BCF 03.5 |
017F: BSF 05.0 |
0180: BSF 03.5 |
0181: BCF 05.7 |
0182: BCF 03.5 |
0183: BCF 05.7 |
0184: BSF 03.5 |
0185: BCF 05.6 |
0186: BCF 03.5 |
0187: BSF 05.6 |
.................... delay_ms(200); |
0188: MOVLW C8 |
0189: MOVWF 39 |
018A: CALL 065 |
.................... uhel=STRED+BEAR1; // jeste min doprava |
018B: MOVLW 8C |
018C: MOVWF 2C |
.................... FL;FR; |
018D: BSF 03.5 |
018E: BCF 05.1 |
018F: BCF 03.5 |
0190: BCF 05.1 |
0191: BSF 03.5 |
0192: BCF 05.0 |
0193: BCF 03.5 |
0194: BSF 05.0 |
0195: BSF 03.5 |
0196: BCF 05.7 |
0197: BCF 03.5 |
0198: BCF 05.7 |
0199: BSF 03.5 |
019A: BCF 05.6 |
019B: BCF 03.5 |
019C: BSF 05.6 |
.................... delay_ms(200); |
019D: MOVLW C8 |
019E: MOVWF 39 |
019F: CALL 065 |
.................... uhel=STRED; // rovne |
01A0: MOVLW 80 |
01A1: MOVWF 2C |
.................... FL;FR; |
01A2: BSF 03.5 |
01A3: BCF 05.1 |
01A4: BCF 03.5 |
01A5: BCF 05.1 |
01A6: BSF 03.5 |
01A7: BCF 05.0 |
01A8: BCF 03.5 |
01A9: BSF 05.0 |
01AA: BSF 03.5 |
01AB: BCF 05.7 |
01AC: BCF 03.5 |
01AD: BCF 05.7 |
01AE: BSF 03.5 |
01AF: BCF 05.6 |
01B0: BCF 03.5 |
01B1: BSF 05.6 |
.................... delay_ms(100); |
01B2: MOVLW 64 |
01B3: MOVWF 39 |
01B4: CALL 065 |
.................... While((sensors & 0b01111111)!=0) //dokud neni cara |
.................... { |
01B5: MOVF 2A,W |
01B6: ANDLW 7F |
01B7: BTFSC 03.2 |
01B8: GOTO 1C8 |
.................... sensors = spi_read(0); // cteni senzoru |
01B9: MOVF 13,W |
01BA: CLRF 13 |
01BB: BSF 03.5 |
01BC: BTFSC 14.0 |
01BD: GOTO 1C0 |
01BE: BCF 03.5 |
01BF: GOTO 1BB |
01C0: BCF 03.5 |
01C1: MOVF 13,W |
01C2: MOVWF 2A |
.................... sensors=~sensors; |
01C3: COMF 2A,F |
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
01C4: MOVLW 04 |
01C5: MOVWF 39 |
01C6: CALL 065 |
.................... } |
01C7: GOTO 1B5 |
.................... BL; BR; |
01C8: BSF 03.5 |
01C9: BCF 05.0 |
01CA: BCF 03.5 |
01CB: BCF 05.0 |
01CC: BSF 03.5 |
01CD: BCF 05.1 |
01CE: BCF 03.5 |
01CF: BSF 05.1 |
01D0: BSF 03.5 |
01D1: BCF 05.6 |
01D2: BCF 03.5 |
01D3: BCF 05.6 |
01D4: BSF 03.5 |
01D5: BCF 05.7 |
01D6: BCF 03.5 |
01D7: BSF 05.7 |
.................... delay_ms(400); |
01D8: MOVLW 02 |
01D9: MOVWF 38 |
01DA: MOVLW C8 |
01DB: MOVWF 39 |
01DC: CALL 065 |
01DD: DECFSZ 38,F |
01DE: GOTO 1DA |
.................... |
.................... uhel=STRED-BEAR3; // doleva |
01DF: MOVLW 49 |
01E0: MOVWF 2C |
.................... } |
01E1: BCF 0A.3 |
01E2: GOTO 2D1 (RETURN) |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
01E3: CLRF 04 |
01E4: MOVLW 1F |
01E5: ANDWF 03,F |
01E6: MOVLW 70 |
01E7: BSF 03.5 |
01E8: MOVWF 0F |
01E9: BCF 1F.4 |
01EA: BCF 1F.5 |
01EB: MOVF 1B,W |
01EC: ANDLW 80 |
01ED: MOVWF 1B |
01EE: MOVLW 07 |
01EF: MOVWF 1C |
.................... |
.................... unsigned int16 n; |
.................... unsigned int8 i; |
.................... |
.................... setup_adc_ports(NO_ANALOGS); |
01F0: BCF 1F.4 |
01F1: BCF 1F.5 |
01F2: MOVF 1B,W |
01F3: ANDLW 80 |
01F4: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
01F5: BCF 1F.6 |
01F6: BCF 03.5 |
01F7: BSF 1F.6 |
01F8: BSF 1F.7 |
01F9: BSF 03.5 |
01FA: BCF 1F.7 |
01FB: BCF 03.5 |
01FC: BSF 1F.0 |
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
01FD: BCF 14.5 |
01FE: BSF 03.5 |
01FF: BCF 06.2 |
0200: BSF 06.1 |
0201: BCF 06.4 |
0202: MOVLW 30 |
0203: BCF 03.5 |
0204: MOVWF 14 |
0205: MOVLW 00 |
0206: BSF 03.5 |
0207: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
0208: MOVF 01,W |
0209: ANDLW C7 |
020A: IORLW 08 |
020B: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
020C: BCF 03.5 |
020D: CLRF 10 |
.................... setup_timer_2(T2_DIV_BY_16,140,16); |
020E: MOVLW 78 |
020F: MOVWF 78 |
0210: IORLW 06 |
0211: MOVWF 12 |
0212: MOVLW 8C |
0213: BSF 03.5 |
0214: MOVWF 12 |
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC); |
0215: MOVLW 72 |
0216: MOVWF 0F |
.................... |
.................... STOPR; STOPL; // zastav motory |
0217: BCF 05.6 |
0218: BCF 03.5 |
0219: BCF 05.6 |
021A: BSF 03.5 |
021B: BCF 05.7 |
021C: BCF 03.5 |
021D: BCF 05.7 |
021E: BSF 03.5 |
021F: BCF 05.0 |
0220: BCF 03.5 |
0221: BCF 05.0 |
0222: BSF 03.5 |
0223: BCF 05.1 |
0224: BCF 03.5 |
0225: BCF 05.1 |
.................... Lmotor=0;Rmotor=0; |
0226: CLRF 2F |
0227: CLRF 2E |
0228: CLRF 31 |
0229: CLRF 30 |
.................... |
.................... uhel=STRED; // nastav zadni kolecko na stred |
022A: MOVLW 80 |
022B: MOVWF 2C |
.................... rovinka=0; |
022C: CLRF 2D |
.................... |
.................... enable_interrupts(INT_TIMER2); |
022D: BSF 03.5 |
022E: BSF 0C.1 |
.................... enable_interrupts(GLOBAL); |
022F: MOVLW C0 |
0230: BCF 03.5 |
0231: IORWF 0B,F |
.................... |
.................... output_low(IRTX); // zapni IR vysilac |
0232: BSF 03.5 |
0233: BCF 06.2 |
0234: BCF 03.5 |
0235: BCF 06.2 |
.................... |
.................... delay_ms(1000); |
0236: MOVLW 04 |
0237: MOVWF 35 |
0238: MOVLW FA |
0239: MOVWF 39 |
023A: CALL 065 |
023B: DECFSZ 35,F |
023C: GOTO 238 |
.................... |
.................... while(true) |
.................... { |
.................... |
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
023D: MOVF 01,W |
023E: BTFSS 00.7 |
023F: GOTO 243 |
0240: BTFSS 2F.7 |
0241: GOTO 24B |
0242: GOTO 245 |
0243: BTFSC 2F.7 |
0244: GOTO 254 |
0245: MOVF 2F,F |
0246: BTFSS 03.2 |
0247: GOTO 24B |
0248: SUBWF 2E,W |
0249: BTFSS 03.0 |
024A: GOTO 254 |
024B: BSF 03.5 |
024C: BCF 05.1 |
024D: BCF 03.5 |
024E: BCF 05.1 |
024F: BSF 03.5 |
0250: BCF 05.0 |
0251: BCF 03.5 |
0252: BSF 05.0 |
0253: GOTO 25C |
0254: BSF 03.5 |
0255: BCF 05.0 |
0256: BCF 03.5 |
0257: BCF 05.0 |
0258: BSF 03.5 |
0259: BCF 05.1 |
025A: BCF 03.5 |
025B: BCF 05.1 |
025C: MOVF 01,W |
025D: BTFSS 00.7 |
025E: GOTO 262 |
025F: BTFSS 31.7 |
0260: GOTO 26A |
0261: GOTO 264 |
0262: BTFSC 31.7 |
0263: GOTO 273 |
0264: MOVF 31,F |
0265: BTFSS 03.2 |
0266: GOTO 26A |
0267: SUBWF 30,W |
0268: BTFSS 03.0 |
0269: GOTO 273 |
026A: BSF 03.5 |
026B: BCF 05.7 |
026C: BCF 03.5 |
026D: BCF 05.7 |
026E: BSF 03.5 |
026F: BCF 05.6 |
0270: BCF 03.5 |
0271: BSF 05.6 |
0272: GOTO 27B |
0273: BSF 03.5 |
0274: BCF 05.6 |
0275: BCF 03.5 |
0276: BCF 05.6 |
0277: BSF 03.5 |
0278: BCF 05.7 |
0279: BCF 03.5 |
027A: BCF 05.7 |
.................... |
.................... delay_us(1500); |
027B: CLRWDT |
027C: MOVLW 01 |
027D: MOVWF 39 |
027E: CALL 065 |
027F: MOVLW 02 |
0280: MOVWF 35 |
0281: CLRF 29 |
0282: BTFSC 0B.7 |
0283: BSF 29.7 |
0284: BCF 0B.7 |
0285: MOVLW F7 |
0286: MOVWF 3C |
0287: CALL 037 |
0288: BTFSC 29.7 |
0289: BSF 0B.7 |
028A: DECFSZ 35,F |
028B: GOTO 281 |
.................... |
.................... output_low(STROBE); |
028C: BSF 03.5 |
028D: BCF 06.0 |
028E: BCF 03.5 |
028F: BCF 06.0 |
.................... sensors = spi_read(0); // cteni senzoru |
0290: MOVF 13,W |
0291: CLRF 13 |
0292: BSF 03.5 |
0293: BTFSC 14.0 |
0294: GOTO 297 |
0295: BCF 03.5 |
0296: GOTO 292 |
0297: BCF 03.5 |
0298: MOVF 13,W |
0299: MOVWF 2A |
.................... sensors=~sensors; |
029A: COMF 2A,F |
.................... output_high(STROBE); |
029B: BSF 03.5 |
029C: BCF 06.0 |
029D: BCF 03.5 |
029E: BSF 06.0 |
.................... |
.................... i=0; // havarijni kod |
029F: CLRF 34 |
.................... for (n=0; n<=6; n++) |
02A0: CLRF 33 |
02A1: CLRF 32 |
02A2: MOVF 33,F |
02A3: BTFSS 03.2 |
02A4: GOTO 2B9 |
02A5: MOVF 32,W |
02A6: SUBLW 06 |
02A7: BTFSS 03.0 |
02A8: GOTO 2B9 |
.................... { |
.................... if(bit_test(sensors,n)) i++; |
02A9: MOVF 2A,W |
02AA: MOVWF 77 |
02AB: MOVF 32,W |
02AC: MOVWF 78 |
02AD: BTFSC 03.2 |
02AE: GOTO 2B3 |
02AF: BCF 03.0 |
02B0: RRF 77,F |
02B1: DECFSZ 78,F |
02B2: GOTO 2AF |
02B3: BTFSC 77.0 |
02B4: INCF 34,F |
.................... } |
02B5: INCF 32,F |
02B6: BTFSC 03.2 |
02B7: INCF 33,F |
02B8: GOTO 2A2 |
.................... if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
02B9: MOVF 34,W |
02BA: SUBLW 03 |
02BB: BTFSC 03.0 |
02BC: GOTO 2CE |
02BD: BSF 03.5 |
02BE: BCF 05.6 |
02BF: BCF 03.5 |
02C0: BCF 05.6 |
02C1: BSF 03.5 |
02C2: BCF 05.7 |
02C3: BCF 03.5 |
02C4: BCF 05.7 |
02C5: BSF 03.5 |
02C6: BCF 05.0 |
02C7: BCF 03.5 |
02C8: BCF 05.0 |
02C9: BSF 03.5 |
02CA: BCF 05.1 |
02CB: BCF 03.5 |
02CC: BCF 05.1 |
02CD: GOTO 2BD |
.................... |
.................... if(bit_test(sensors,7)) // detekce dihly |
02CE: BTFSS 2A.7 |
02CF: GOTO 2D1 |
.................... { |
.................... objizdka(); |
02D0: GOTO 07D |
.................... } |
.................... |
.................... if(bit_test(sensors,3)) //...|...// |
02D1: BTFSS 2A.3 |
02D2: GOTO 2E1 |
.................... { |
.................... uhel=STRED; |
02D3: MOVLW 80 |
02D4: MOVWF 2C |
.................... Lmotor=SPEEDMAX; |
02D5: CLRF 2F |
02D6: MOVLW 8C |
02D7: MOVWF 2E |
.................... Rmotor=SPEEDMAX; |
02D8: CLRF 31 |
02D9: MOVWF 30 |
.................... line=S; |
02DA: MOVLW 02 |
02DB: MOVWF 2B |
.................... if (rovinka<255) rovinka++; |
02DC: INCFSZ 2D,W |
02DD: GOTO 2DF |
02DE: GOTO 2E0 |
02DF: INCF 2D,F |
.................... continue; |
02E0: GOTO 23D |
.................... } |
.................... |
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
02E1: BTFSS 2A.0 |
02E2: GOTO 2ED |
.................... { |
.................... uhel=STRED-BEAR3; |
02E3: MOVLW 49 |
02E4: MOVWF 2C |
.................... Lmotor=0; |
02E5: CLRF 2F |
02E6: CLRF 2E |
.................... Rmotor=SPEEDMAX; |
02E7: CLRF 31 |
02E8: MOVLW 8C |
02E9: MOVWF 30 |
.................... line=L; |
02EA: MOVLW 01 |
02EB: MOVWF 2B |
.................... continue; |
02EC: GOTO 23D |
.................... } |
.................... |
.................... if(bit_test(sensors,6)) //......|// |
02ED: BTFSS 2A.6 |
02EE: GOTO 2F8 |
.................... { |
.................... uhel=STRED+BEAR3; |
02EF: MOVLW B7 |
02F0: MOVWF 2C |
.................... Rmotor=0; |
02F1: CLRF 31 |
02F2: CLRF 30 |
.................... Lmotor=SPEEDMAX; |
02F3: CLRF 2F |
02F4: MOVLW 8C |
02F5: MOVWF 2E |
.................... line=R; |
02F6: CLRF 2B |
.................... continue; |
02F7: GOTO 23D |
.................... } |
.................... |
.................... if(bit_test(sensors,1)) //.|.....// |
02F8: BTFSS 2A.1 |
02F9: GOTO 305 |
.................... { |
.................... uhel=STRED-BEAR2; |
02FA: MOVLW 5E |
02FB: MOVWF 2C |
.................... Lmotor=SPEEDMAX-50; |
02FC: CLRF 2F |
02FD: MOVLW 5A |
02FE: MOVWF 2E |
.................... Rmotor=SPEEDMAX; |
02FF: CLRF 31 |
0300: MOVLW 8C |
0301: MOVWF 30 |
.................... line=S; |
0302: MOVLW 02 |
0303: MOVWF 2B |
.................... continue; |
0304: GOTO 23D |
.................... } |
.................... |
.................... if(bit_test(sensors,5)) //.....|.// |
0305: BTFSS 2A.5 |
0306: GOTO 312 |
.................... { |
.................... uhel=STRED+BEAR2; |
0307: MOVLW A2 |
0308: MOVWF 2C |
.................... Rmotor=SPEEDMAX-50; |
0309: CLRF 31 |
030A: MOVLW 5A |
030B: MOVWF 30 |
.................... Lmotor=SPEEDMAX; |
030C: CLRF 2F |
030D: MOVLW 8C |
030E: MOVWF 2E |
.................... line=S; |
030F: MOVLW 02 |
0310: MOVWF 2B |
.................... continue; |
0311: GOTO 23D |
.................... } |
.................... |
.................... if (bit_test(sensors,2)) //..|....// |
0312: BTFSS 2A.2 |
0313: GOTO 322 |
.................... { |
.................... uhel=STRED-BEAR1; |
0314: MOVLW 74 |
0315: MOVWF 2C |
.................... Lmotor=SPEEDMAX; |
0316: CLRF 2F |
0317: MOVLW 8C |
0318: MOVWF 2E |
.................... Rmotor=SPEEDMAX; |
0319: CLRF 31 |
031A: MOVWF 30 |
.................... line=S; |
031B: MOVLW 02 |
031C: MOVWF 2B |
.................... if (rovinka<255) rovinka++; |
031D: INCFSZ 2D,W |
031E: GOTO 320 |
031F: GOTO 321 |
0320: INCF 2D,F |
.................... continue; |
0321: GOTO 23D |
.................... } |
.................... |
.................... if (bit_test(sensors,4)) //....|..// |
0322: BTFSS 2A.4 |
0323: GOTO 331 |
.................... { |
.................... uhel=STRED+BEAR1; |
0324: MOVLW 8C |
0325: MOVWF 2C |
.................... Rmotor=SPEEDMAX; |
0326: CLRF 31 |
0327: MOVWF 30 |
.................... Lmotor=SPEEDMAX; |
0328: CLRF 2F |
0329: MOVWF 2E |
.................... line=S; |
032A: MOVLW 02 |
032B: MOVWF 2B |
.................... if (rovinka<255) rovinka++; |
032C: INCFSZ 2D,W |
032D: GOTO 32F |
032E: GOTO 330 |
032F: INCF 2D,F |
.................... continue; |
0330: GOTO 23D |
.................... } |
.................... |
.................... if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
0331: DECFSZ 2B,W |
0332: GOTO 334 |
0333: GOTO 337 |
0334: MOVF 2B,F |
0335: BTFSS 03.2 |
0336: GOTO 34F |
.................... { |
.................... if (rovinka>250) |
0337: MOVF 2D,W |
0338: SUBLW FA |
0339: BTFSC 03.0 |
033A: GOTO 34E |
.................... { |
.................... BL; BR; |
033B: BSF 03.5 |
033C: BCF 05.0 |
033D: BCF 03.5 |
033E: BCF 05.0 |
033F: BSF 03.5 |
0340: BCF 05.1 |
0341: BCF 03.5 |
0342: BSF 05.1 |
0343: BSF 03.5 |
0344: BCF 05.6 |
0345: BCF 03.5 |
0346: BCF 05.6 |
0347: BSF 03.5 |
0348: BCF 05.7 |
0349: BCF 03.5 |
034A: BSF 05.7 |
.................... Delay_ms(100); |
034B: MOVLW 64 |
034C: MOVWF 39 |
034D: CALL 065 |
.................... }; |
.................... rovinka=0; |
034E: CLRF 2D |
.................... }; |
.................... |
.................... } |
034F: GOTO 23D |
.................... } |
0350: 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/05 bez RTOS -dacela funkcni objizdka/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\istrobot\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\istrobot\3Orbis\main.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
4= |
5= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.SYM |
---|
0,0 → 1,70 |
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 rovinka |
02E-02F Lmotor |
030-031 Rmotor |
032-033 main.n |
034 main.i |
035 objizdka.shure |
035 main.@SCRATCH |
036-037 objizdka.n |
038 objizdka.@SCRATCH |
039 @delay_ms1.P1 |
03A TIMER2_isr.n |
03B TIMER2_isr.@SCRATCH |
03C @delay_us1.P1 |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
09C.6 C1OUT |
09C.7 C2OUT |
0065 @delay_ms1 |
0037 @delay_us1 |
0047 TIMER2_isr |
007D objizdka |
01E3 main |
01E3 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\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\istrobot\3Orbis\main.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sta |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.c |
---|
0,0 → 1,302 |
#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 12 // 3 stupne zataceni |
#define BEAR2 34 |
#define BEAR3 55 |
#define SPEEDMAX 140 // maximalni rychlost |
#define L 1 // cara vlevo |
#define S 2 // casa mezi sensory |
#define R 0 // cara vpravo |
// servo |
#define SERVO PIN_A2 |
// 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 |
unsigned int8 line; // 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 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;} |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
int8 shure=0; |
unsigned int16 n; |
BR;BL; |
Delay_ms(400); |
STOPR;STOPL; |
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<1500;n++) // vystred se na hranu cihly |
{ |
if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
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(200); |
uhel=STRED+BEAR2; // min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED+BEAR1; // jeste min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED; // rovne |
FL;FR; |
delay_ms(100); |
While((sensors & 0b01111111)!=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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int16 n; |
unsigned int8 i; |
setup_adc_ports(NO_ANALOGS); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
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(1000); |
while(true) |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory |
delay_us(1500); |
output_low(STROBE); |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); |
i=0; // havarijni kod |
for (n=0; n<=6; n++) |
{ |
if(bit_test(sensors,n)) i++; |
} |
if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
if(bit_test(sensors,7)) // detekce dihly |
{ |
objizdka(); |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
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=SPEEDMAX; |
line=L; |
continue; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
uhel=STRED+BEAR3; |
Rmotor=0; |
Lmotor=SPEEDMAX; |
line=R; |
continue; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED-BEAR2; |
Lmotor=SPEEDMAX-50; |
Rmotor=SPEEDMAX; |
line=S; |
continue; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED+BEAR2; |
Rmotor=SPEEDMAX-50; |
Lmotor=SPEEDMAX; |
line=S; |
continue; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED-BEAR1; |
Lmotor=SPEEDMAX; |
Rmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED+BEAR1; |
Rmotor=SPEEDMAX; |
Lmotor=SPEEDMAX; |
line=S; |
if (rovinka<255) rovinka++; |
continue; |
} |
if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>250) |
{ |
BL; BR; |
Delay_ms(100); |
}; |
rovinka=0; |
}; |
} |
} |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/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/05 bez RTOS -dacela funkcni objizdka/master/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/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/05 bez RTOS -dacela funkcni objizdka/master/main.sta |
---|
0,0 → 1,33 |
ROM used: 849 (21%) |
849 (21%) including unused fragments |
1 Average locations per line |
3 Average locations per statement |
RAM used: 27 (15%) at main() level |
34 (19%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
303 252 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
1202 504 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 24 3 1 @delay_ms1 |
0 16 2 1 @delay_us1 |
0 30 4 2 TIMER2_isr |
0 358 42 4 objizdka |
0 366 43 4 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-00036 51 0 |
00037-007FF 794 1199 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/master/main.tre |
---|
0,0 → 1,25 |
ÀÄmain |
ÃÄmain 0/366 Ram=4 |
³ ÃÄ??0?? |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@delay_us1 0/16 Ram=1 |
³ ÃÄobjizdka 0/358 Ram=4 |
³ ³ ÃÄ@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 |
³ ³ ÃÄ@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/05 bez RTOS -dacela funkcni objizdka/slave/cidla.BAK |
---|
0,0 → 1,147 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
#define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.HEX |
---|
0,0 → 1,39 |
:1000000000308A000428000084011F30830560301E |
:1000100083168F0086108312861483161F129F1278 |
:100020001B0880399B0007309C001F129F121B0881 |
:1000300080397F389B001F1383121F179F17831669 |
:100040009F1383121F14941283160611861406162A |
:100050003530831294004030831694000108C7396C |
:1000600008388100831290010030F80092000030BF |
:100070008316920007309C00050864000230F700E8 |
:10008000F70B4028000000001C0883120D13831694 |
:100090009D0108308312A100A200A3010030F800E6 |
:1000A0001F08C73978049F00A40164000230F700DC |
:1000B000F70B5828000000001F151F195D281E08A7 |
:1000C000A5000830F8001F08C73978049F002508EC |
:1000D0003B3C031C74282508283C0318732822087D |
:1000E0000139A404742824141F151F1975281E082B |
:1000F000A5001030F8001F08C73978049F002508B4 |
:100100003B3C031C8C282508283C03188B2822081C |
:100110000239A4048C28A4141F151F198D281E0849 |
:10012000A5001830F8001F08C73978049F0025087B |
:100130003B3C031CA4282508283C0318A3282208BC |
:100140000439A404A42824151F151F19A5281E0866 |
:10015000A5002030F8001F08C73978049F00250843 |
:100160003B3C031CBC282508283C0318BB2822085C |
:100170000839A404BC28A4151F151F19BD281E0882 |
:10018000A5002830F8001F08C73978049F0025080B |
:100190003B3C031CD4282508283C0318D3282208FC |
:1001A0001039A404D42824161F151F19D5281E0899 |
:1001B000A5003030F8001F08C73978049F002508D3 |
:1001C0003B3C031CEC282508283C0318EB2822089C |
:1001D0002039A404EC28A4161F151F19ED281E08A9 |
:1001E000A50025083B3C031CFE282508283C0318D5 |
:1001F000FD2822084039A404FE2824172408A20060 |
:1002000083160614831206180A29230F08290929C0 |
:10021000A30A0B29A3012308323C031CA417A40939 |
:1002200024089300831614181729831212298312A5 |
:040230004E286300F1 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.LST |
---|
0,0 → 1,454 |
CCS PCM C Compiler, Version 3.245, 27853 16-IV-06 23:31 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
ROM used: 282 words (7%) |
Largest free fragment is 2048 |
RAM used: 12 (7%) at main() level |
12 (7%) worst case |
Stack: 0 locations |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 004 |
0003: NOP |
.................... #include ".\cidla.h" |
.................... #include <16F88.h> |
.................... //////// Standard Header file for the PIC16F88 device //////////////// |
.................... #device PIC16F88 |
.................... #list |
.................... |
.................... #device adc=8 |
.................... #fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
.................... #use delay(clock=4000000,RESTART_WDT) |
.................... |
.................... |
.................... //#include <stdlib.h> |
.................... |
.................... #use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
.................... |
.................... #define IRRX PIN_B0 |
.................... |
.................... #define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
.................... #define TRESHOLD_MIN 40 |
.................... #define CIHLA 50 // doba, po kterou musi byt detekovana cihla |
.................... |
.................... unsigned int8 radius; // co cidla vidi |
.................... unsigned int8 last_radius; // rozsah |
.................... unsigned int8 last_cidla; // co cidla videla minule |
.................... unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
.................... |
.................... //tuning |
.................... /*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
.................... |
.................... //Vystup PWM je na PIN_B3 |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
.................... { |
.................... unsigned int8 i,n; |
.................... for(n=0;n<=3;n++) |
.................... { |
.................... for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
.................... for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
.................... } |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
0004: CLRF 04 |
0005: MOVLW 1F |
0006: ANDWF 03,F |
0007: MOVLW 60 |
0008: BSF 03.5 |
0009: MOVWF 0F |
000A: BCF 06.1 |
000B: BCF 03.5 |
000C: BSF 06.1 |
000D: BSF 03.5 |
000E: BCF 1F.4 |
000F: BCF 1F.5 |
0010: MOVF 1B,W |
0011: ANDLW 80 |
0012: MOVWF 1B |
0013: MOVLW 07 |
0014: MOVWF 1C |
.................... int8 cidla; |
.................... unsigned int8 a; |
.................... unsigned int8 n; |
.................... |
.................... setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
0015: BCF 1F.4 |
0016: BCF 1F.5 |
0017: MOVF 1B,W |
0018: ANDLW 80 |
0019: IORLW 7F |
001A: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
001B: BCF 1F.6 |
001C: BCF 03.5 |
001D: BSF 1F.6 |
001E: BSF 1F.7 |
001F: BSF 03.5 |
0020: BCF 1F.7 |
0021: BCF 03.5 |
0022: BSF 1F.0 |
.................... setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
0023: BCF 14.5 |
0024: BSF 03.5 |
0025: BCF 06.2 |
0026: BSF 06.1 |
0027: BSF 06.4 |
0028: MOVLW 35 |
0029: BCF 03.5 |
002A: MOVWF 14 |
002B: MOVLW 40 |
002C: BSF 03.5 |
002D: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
002E: MOVF 01,W |
002F: ANDLW C7 |
0030: IORLW 08 |
0031: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
0032: BCF 03.5 |
0033: CLRF 10 |
.................... setup_timer_2(T2_DISABLED,0,1); |
0034: MOVLW 00 |
0035: MOVWF 78 |
0036: MOVWF 12 |
0037: MOVLW 00 |
0038: BSF 03.5 |
0039: MOVWF 12 |
.................... setup_comparator(NC_NC_NC_NC); |
003A: MOVLW 07 |
003B: MOVWF 1C |
003C: MOVF 05,W |
003D: CLRWDT |
003E: MOVLW 02 |
003F: MOVWF 77 |
0040: DECFSZ 77,F |
0041: GOTO 040 |
0042: NOP |
0043: NOP |
0044: MOVF 1C,W |
0045: BCF 03.5 |
0046: BCF 0D.6 |
.................... setup_vref(FALSE); |
0047: BSF 03.5 |
0048: CLRF 1D |
.................... |
.................... last_radius=0b00001000; // minimalni rozsah snimani od stredu |
0049: MOVLW 08 |
004A: BCF 03.5 |
004B: MOVWF 21 |
.................... last_cidla=0b00001000; |
004C: MOVWF 22 |
.................... |
.................... shure=0; |
004D: CLRF 23 |
.................... |
.................... while(true) |
.................... { |
.................... set_adc_channel(0); |
004E: MOVLW 00 |
004F: MOVWF 78 |
0050: MOVF 1F,W |
0051: ANDLW C7 |
0052: IORWF 78,W |
0053: MOVWF 1F |
.................... cidla=0; |
0054: CLRF 24 |
.................... Delay_us(10); |
0055: CLRWDT |
0056: MOVLW 02 |
0057: MOVWF 77 |
0058: DECFSZ 77,F |
0059: GOTO 058 |
005A: NOP |
005B: NOP |
.................... a=read_adc(); |
005C: BSF 1F.2 |
005D: BTFSC 1F.2 |
005E: GOTO 05D |
005F: MOVF 1E,W |
0060: MOVWF 25 |
.................... |
.................... set_adc_channel(1); |
0061: MOVLW 08 |
0062: MOVWF 78 |
0063: MOVF 1F,W |
0064: ANDLW C7 |
0065: IORWF 78,W |
0066: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) //hystereze cidel |
0067: MOVF 25,W |
0068: SUBLW 3B |
0069: BTFSS 03.0 |
006A: GOTO 074 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
006B: MOVF 25,W |
006C: SUBLW 28 |
006D: BTFSC 03.0 |
006E: GOTO 073 |
.................... { |
.................... cidla |= (last_cidla & 0b00000001); |
006F: MOVF 22,W |
0070: ANDLW 01 |
0071: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000001; |
0072: GOTO 074 |
0073: BSF 24.0 |
.................... } |
.................... |
.................... a=read_adc(); |
0074: BSF 1F.2 |
0075: BTFSC 1F.2 |
0076: GOTO 075 |
0077: MOVF 1E,W |
0078: MOVWF 25 |
.................... |
.................... set_adc_channel(2); |
0079: MOVLW 10 |
007A: MOVWF 78 |
007B: MOVF 1F,W |
007C: ANDLW C7 |
007D: IORWF 78,W |
007E: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
007F: MOVF 25,W |
0080: SUBLW 3B |
0081: BTFSS 03.0 |
0082: GOTO 08C |
.................... { |
.................... if(a>TRESHOLD_MIN) |
0083: MOVF 25,W |
0084: SUBLW 28 |
0085: BTFSC 03.0 |
0086: GOTO 08B |
.................... { |
.................... cidla |= (last_cidla & 0b00000010); |
0087: MOVF 22,W |
0088: ANDLW 02 |
0089: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000010; |
008A: GOTO 08C |
008B: BSF 24.1 |
.................... } |
.................... |
.................... a=read_adc(); |
008C: BSF 1F.2 |
008D: BTFSC 1F.2 |
008E: GOTO 08D |
008F: MOVF 1E,W |
0090: MOVWF 25 |
.................... |
.................... set_adc_channel(3); |
0091: MOVLW 18 |
0092: MOVWF 78 |
0093: MOVF 1F,W |
0094: ANDLW C7 |
0095: IORWF 78,W |
0096: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
0097: MOVF 25,W |
0098: SUBLW 3B |
0099: BTFSS 03.0 |
009A: GOTO 0A4 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
009B: MOVF 25,W |
009C: SUBLW 28 |
009D: BTFSC 03.0 |
009E: GOTO 0A3 |
.................... { |
.................... cidla |= (last_cidla & 0b00000100); |
009F: MOVF 22,W |
00A0: ANDLW 04 |
00A1: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000100; |
00A2: GOTO 0A4 |
00A3: BSF 24.2 |
.................... } |
.................... |
.................... a=read_adc(); |
00A4: BSF 1F.2 |
00A5: BTFSC 1F.2 |
00A6: GOTO 0A5 |
00A7: MOVF 1E,W |
00A8: MOVWF 25 |
.................... |
.................... set_adc_channel(4); |
00A9: MOVLW 20 |
00AA: MOVWF 78 |
00AB: MOVF 1F,W |
00AC: ANDLW C7 |
00AD: IORWF 78,W |
00AE: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
00AF: MOVF 25,W |
00B0: SUBLW 3B |
00B1: BTFSS 03.0 |
00B2: GOTO 0BC |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00B3: MOVF 25,W |
00B4: SUBLW 28 |
00B5: BTFSC 03.0 |
00B6: GOTO 0BB |
.................... { |
.................... cidla |= (last_cidla & 0b00001000); |
00B7: MOVF 22,W |
00B8: ANDLW 08 |
00B9: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00001000; |
00BA: GOTO 0BC |
00BB: BSF 24.3 |
.................... } |
.................... a=read_adc(); |
00BC: BSF 1F.2 |
00BD: BTFSC 1F.2 |
00BE: GOTO 0BD |
00BF: MOVF 1E,W |
00C0: MOVWF 25 |
.................... |
.................... set_adc_channel(5); |
00C1: MOVLW 28 |
00C2: MOVWF 78 |
00C3: MOVF 1F,W |
00C4: ANDLW C7 |
00C5: IORWF 78,W |
00C6: MOVWF 1F |
.................... |
.................... if(a<TRESHOLD_MAX) |
00C7: MOVF 25,W |
00C8: SUBLW 3B |
00C9: BTFSS 03.0 |
00CA: GOTO 0D4 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00CB: MOVF 25,W |
00CC: SUBLW 28 |
00CD: BTFSC 03.0 |
00CE: GOTO 0D3 |
.................... { |
.................... cidla |= (last_cidla & 0b00010000); |
00CF: MOVF 22,W |
00D0: ANDLW 10 |
00D1: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00010000; |
00D2: GOTO 0D4 |
00D3: BSF 24.4 |
.................... } |
.................... a=read_adc(); |
00D4: BSF 1F.2 |
00D5: BTFSC 1F.2 |
00D6: GOTO 0D5 |
00D7: MOVF 1E,W |
00D8: MOVWF 25 |
.................... |
.................... set_adc_channel(6); |
00D9: MOVLW 30 |
00DA: MOVWF 78 |
00DB: MOVF 1F,W |
00DC: ANDLW C7 |
00DD: IORWF 78,W |
00DE: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
00DF: MOVF 25,W |
00E0: SUBLW 3B |
00E1: BTFSS 03.0 |
00E2: GOTO 0EC |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00E3: MOVF 25,W |
00E4: SUBLW 28 |
00E5: BTFSC 03.0 |
00E6: GOTO 0EB |
.................... { |
.................... cidla |= (last_cidla & 0b00100000); |
00E7: MOVF 22,W |
00E8: ANDLW 20 |
00E9: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00100000; |
00EA: GOTO 0EC |
00EB: BSF 24.5 |
.................... } |
.................... a=read_adc(); |
00EC: BSF 1F.2 |
00ED: BTFSC 1F.2 |
00EE: GOTO 0ED |
00EF: MOVF 1E,W |
00F0: MOVWF 25 |
.................... |
.................... if(a<TRESHOLD_MAX) |
00F1: MOVF 25,W |
00F2: SUBLW 3B |
00F3: BTFSS 03.0 |
00F4: GOTO 0FE |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00F5: MOVF 25,W |
00F6: SUBLW 28 |
00F7: BTFSC 03.0 |
00F8: GOTO 0FD |
.................... { |
.................... cidla |=(last_cidla & 0b01000000); |
00F9: MOVF 22,W |
00FA: ANDLW 40 |
00FB: IORWF 24,F |
.................... } |
.................... else cidla |= 0b01000000; |
00FC: GOTO 0FE |
00FD: BSF 24.6 |
.................... } |
.................... |
.................... last_cidla=cidla; |
00FE: MOVF 24,W |
00FF: MOVWF 22 |
.................... |
.................... if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
0100: BSF 03.5 |
0101: BSF 06.0 |
0102: BCF 03.5 |
0103: BTFSC 06.0 |
0104: GOTO 10A |
0105: INCFSZ 23,W |
0106: GOTO 108 |
0107: GOTO 109 |
0108: INCF 23,F |
0109: GOTO 10B |
010A: CLRF 23 |
.................... if (shure>CIHLA) cidla|=0b10000000; |
010B: MOVF 23,W |
010C: SUBLW 32 |
010D: BTFSS 03.0 |
010E: BSF 24.7 |
.................... |
.................... cidla=~cidla; |
010F: COMF 24,F |
.................... spi_write(cidla); |
0110: MOVF 24,W |
0111: MOVWF 13 |
0112: BSF 03.5 |
0113: BTFSC 14.0 |
0114: GOTO 117 |
0115: BCF 03.5 |
0116: GOTO 112 |
.................... } |
0117: BCF 03.5 |
0118: GOTO 04E |
.................... } |
0119: 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/05 bez RTOS -dacela funkcni objizdka/slave/cidla.PJT |
---|
0,0 → 1,44 |
[PROJECT] |
Target=cidla.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\istrobot\3Orbis\cidla\cidla.c |
BuildTool=C-COMPILER |
OptionString=+FM |
AdditionalOptionString= |
BuildRequired=1 |
[cidla.c] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=cidla.c |
[Windows] |
0=0000 cidla.c 0 0 796 451 3 0 |
[Opened Files] |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=C:\Program Files\PICC\drivers\stdlib.h |
4=C:\Program Files\PICC\drivers\stddef.h |
5=C:\Program Files\PICC\drivers\string.h |
6=C:\Program Files\PICC\drivers\ctype.h |
7=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
8= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c (main) |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.SYM |
---|
0,0 → 1,45 |
015-016 CCP_1 |
015 CCP_1_LOW |
016 CCP_1_HIGH |
020 radius |
021 last_radius |
022 last_cidla |
023 shure |
024 main.cidla |
025 main.a |
026 main.n |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
0004 main |
0004 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.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\istrobot\3Orbis\cidla\cidla.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sta |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.c |
---|
0,0 → 1,147 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
#define CIHLA 50 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.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/05 bez RTOS -dacela funkcni objizdka/slave/cidla.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.h |
---|
0,0 → 1,5 |
#include <16F88.h> |
#device adc=8 |
#fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
#use delay(clock=4000000,RESTART_WDT) |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.sta |
---|
0,0 → 1,28 |
ROM used: 282 (7%) |
282 (7%) including unused fragments |
1 Average locations per line |
3 Average locations per statement |
RAM used: 12 (7%) at main() level |
12 (7%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
148 83 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
6 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
866 166 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 278 99 3 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-007FF 278 1766 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/cidla.tre |
---|
0,0 → 1,3 |
ÀÄcidla |
ÀÄmain 0/278 Ram=3 |
ÀÄ??0?? |
/roboti/3Orbis/bak/05 bez RTOS -dacela funkcni objizdka/slave/macro.ini |
---|
--- 06 PD Regulator/master/main.BAK (nonexistent) |
+++ 06 PD Regulator/master/main.BAK (revision 1) |
@@ -0,0 +1,384 @@ |
+#include ".\main.h" |
+#include <math.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 6//10 // 3 stupne zataceni |
+#define BEAR2 10//27 |
+#define BEAR3 40 |
+#define SPEEDMAX 160 // ANSMANN=140; GP=120; maximalni rozumna rychlost |
+#define R17 255 // X nasobek rozumne rychlosti |
+#define DOZNIVANI 10 |
+#define L 1 // cara vlevo |
+#define S 2 // casa mezi sensory |
+#define R 0 // cara vpravo |
+ |
+// servo |
+#define SERVO PIN_A2 |
+ |
+// 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 |
+unsigned int8 line; // 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 rovinka; // pocitadlo na zjisteni rovinky |
+ |
+short int preteceni; // flag preteceni timeru1 |
+ |
+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;} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+/* |
+void diagnostika() |
+{ |
+ if(input(SW1))STOPR;STOPL;While(TRUE); |
+// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
+// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
+} |
+*/ |
+//////////////////////////////////////////////////////////////////////////////// |
+#int_TIMER1 |
+TIMER1_isr() |
+{ |
+ preteceni = true; |
+} |
+//////////////////////////////////////////////////////////////////////////////// |
+#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 |
+} |
+//////////////////////////////////////////////////////////////////////////////// |
+void objizdka() |
+{ |
+ int8 shure=0; |
+ unsigned int16 n; |
+ |
+ BR;BL; |
+ Delay_ms(400); |
+ STOPR;STOPL; |
+ |
+ 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<1500;n++) // vystred se na hranu cihly |
+ { |
+ if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
+ 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(200); |
+ uhel=STRED+BEAR2; // min doprava |
+ FL;FR; |
+ delay_ms(200); |
+ uhel=STRED+BEAR1; // jeste min doprava |
+ FL;FR; |
+ delay_ms(200); |
+ uhel=STRED; // rovne |
+ FL;FR; |
+ delay_ms(100); |
+ While((sensors & 0b01111111)!=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 |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+void main() |
+{ |
+ |
+ unsigned int8 n; |
+ unsigned int8 i,v; |
+ unsigned int8 last_sensors; |
+ unsigned int8 j=0; |
+ |
+ setup_adc_ports(NO_ANALOGS); |
+ 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_INTERNAL|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(INT_TIMER1); |
+ enable_interrupts(GLOBAL); |
+ |
+ output_low(IRTX); // zapni IR vysilac |
+ |
+ delay_ms(1000); |
+ |
+//!!!! |
+speed=SPEEDMAX; |
+ |
+ while(true) |
+ { |
+ |
+ GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor |
+ |
+ delay_us(1500); // cekani na SLAVE, nez pripravi data od cidel |
+ |
+ last_sensors = sensors; |
+ j++; |
+ |
+ output_low(STROBE); // vypni zobrazovani na posuvnem registru |
+ sensors = spi_read(0); // cteni senzoru |
+ sensors=~sensors; |
+ output_high(STROBE); // zobraz data na posuvnem registru |
+ |
+ |
+ |
+ |
+ if(false == preteceni) |
+ { |
+ v = 255 - (get_timer1() >> 8); |
+ v >>= 3; |
+ } |
+ else |
+ { |
+ v=0; |
+ preteceni=false; |
+ } |
+ |
+ |
+ |
+ i=0; // havarijni kod |
+ for (n=0; n<=6; n++) |
+ { |
+ if(bit_test(sensors,n)) i++; |
+ } |
+ if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
+ |
+ |
+ |
+ if(bit_test(sensors,7)) // detekce cihly |
+ { |
+//!!! objizdka(); // objede cihlu |
+ } |
+ |
+ |
+ |
+ if(bit_test(sensors,3)) //...|...// |
+ { |
+ uhel=STRED; |
+ Lmotor=speed; |
+ Rmotor=speed; |
+ line=S; |
+ set_timer1(0); |
+ if (rovinka < 255) rovinka++; |
+// if (speed > SPEEDMAX) speed--; |
+ continue; |
+ } |
+ |
+ if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
+ { |
+ if(sensors != last_sensors) uhel=STRED - BEAR3 - pow(1.1,v); |
+ if(j>=DOZNIVANI) |
+ { |
+ j=0; |
+ } |
+ Lmotor=0; |
+ Rmotor=speed; |
+ line=L; |
+ set_timer1(0); |
+// if (speed > SPEEDMAX) speed--; |
+ continue; |
+ } |
+ |
+ if(bit_test(sensors,6)) //......|// |
+ { |
+ if(sensors != last_sensors) uhel=STRED + BEAR3 + v; |
+ if(j>=DOZNIVANI) |
+ { |
+ j=0; |
+ if(uhel>STRED + BEAR3) uhel--; |
+ } |
+ Rmotor=0; |
+ Lmotor=speed; |
+ line=R; |
+ set_timer1(0); |
+// if (speed > SPEEDMAX) speed--; |
+ continue; |
+ } |
+ |
+ if(bit_test(sensors,1)) //.|.....// |
+ { |
+ if(sensors != last_sensors) uhel=STRED - BEAR2 - v; |
+ if(j>=DOZNIVANI) |
+ { |
+ j=0; |
+ if(uhel<STRED - BEAR2) uhel++; |
+ } |
+ Lmotor=speed-50; |
+ Rmotor=speed; |
+ line=S; |
+ set_timer1(0); |
+// if (speed > SPEEDMAX) speed--; |
+ continue; |
+ } |
+ |
+ if(bit_test(sensors,5)) //.....|.// |
+ { |
+ if(sensors != last_sensors) uhel=STRED + BEAR2 + v; |
+ if(j>=DOZNIVANI) |
+ { |
+ j=0; |
+ if(uhel>STRED + BEAR2) uhel--; |
+ } |
+ Rmotor=speed-50; |
+ Lmotor=speed; |
+ line=S; |
+ set_timer1(0); |
+// if (speed > SPEEDMAX) speed--; |
+ continue; |
+ } |
+ |
+ if (bit_test(sensors,2)) //..|....// |
+ { |
+ if(sensors != last_sensors) uhel=STRED - BEAR1 - v; |
+ if(j>=DOZNIVANI) |
+ { |
+ if(uhel<STRED - BEAR1)uhel++; |
+ j=0; |
+ } |
+ Lmotor=speed; |
+ Rmotor=speed; |
+ line=S; |
+ set_timer1(0); |
+ if (rovinka<255) rovinka++; |
+// if (speed > SPEEDMAX) speed--; |
+ continue; |
+ } |
+ |
+ if (bit_test(sensors,4)) //....|..// |
+ { |
+ if(sensors != last_sensors) uhel=STRED + BEAR1 + v; |
+ if(j>=DOZNIVANI) |
+ { |
+ j=0; |
+ if(uhel>STRED + BEAR1) uhel--; |
+ } |
+ Rmotor=speed; |
+ Lmotor=speed; |
+ line=S; |
+ set_timer1(0); |
+ if (rovinka<255) rovinka++; |
+// if (speed > SPEEDMAX) speed--; |
+ continue; |
+ } |
+ |
+ if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
+ { |
+ if (rovinka>250) |
+ { |
+ BL; BR; |
+ Delay_ms(100); |
+ }; |
+ rovinka=0; |
+ speed=SPEEDMAX; |
+ }; |
+ } |
+} |
/roboti/3Orbis/bak/06 PD Regulator/master/main.HEX |
---|
0,0 → 1,87 |
:1000000000308A0089280000FF00030E8301A10050 |
:100010007F08A0000A08A8008A01A00E0408A20018 |
:100020007708A3007808A4007908A5007A08A6003C |
:100030007B08A700831383128C308400001C2228C5 |
:100040000C183B288C308400801C28288C183D28F4 |
:10005000220884002308F7002408F8002508F90086 |
:100060002608FA002708FB0028088A00210E8300D2 |
:10007000FF0E7F0E09008A113F288A1153282F1482 |
:100080000C108A1128280830BD02031C52283D306C |
:1000900084000310800C00080319522850286400C3 |
:1000A000800B4F2800348316051183120515640058 |
:1000B0000930BC006D30BD004320BC0B5A282C0811 |
:1000C000BB00BB0803196A286400000000000000A0 |
:1000D000BB03612883160511831205118C108A1148 |
:1000E00028283A3084000008031988280230F800D4 |
:1000F000BF30F7006400F70B7A28F80B78289630A9 |
:10010000F700F70B8128000000006400800B7628C0 |
:10011000003484011F308305703083168F001F1256 |
:100120009F121B0880399B0007309C008312B80186 |
:1001300083161F129F121B0880399B001F13831206 |
:100140001F179F1783169F1383121F149412831671 |
:100150000611861406123130831294000030831683 |
:1001600094000108C73908388100B5308312900027 |
:100170007830F800063892008C3083169200723086 |
:100180008F000513831205138316851383128513BD |
:1001900083160510831205108316851083128510AF |
:1001A000B101B001B301B2018030AC00AE018316E1 |
:1001B0008C140C14C03083128B0483160611831226 |
:1001C00006110430B900FA30BA007120B90BE328E7 |
:1001D000A030AD000108801FF028B11FF828F228D8 |
:1001E000B11B0129B108031DF8283002031C0129A5 |
:1001F000831685108312851083160510831205144B |
:1002000009298316051083120510831685108312A1 |
:1002100085100108801F0F29B31F17291129B31B4F |
:100220002029B308031D17293202031C2029831635 |
:100230008513831285138316051383120517282946 |
:1002400083160513831205138316851383128513F2 |
:1002500064000130BA0071200230B900A9018B1B83 |
:10026000A9178B13F730BD004320A91B8B17B90BBF |
:100270002E292A08B700B80A831606108312061022 |
:1002800013089301831614184729831242298312F5 |
:100290001308AA00AA098316061083120614003058 |
:1002A0002F180130003A031D6B290F08FA000E08C1 |
:1002B000F7000F087A02031D55297708B9007A085C |
:1002C000BA003A08FA01FF3CB600B60CB60CB60C00 |
:1002D0001F30B6056D29B6012F10B501B4013408E1 |
:1002E000063C031C81292A08F7003408F80003198A |
:1002F0007D290310F70CF80B79297718B50AB40A91 |
:100300006F293508033C03189629831605138312B9 |
:100310000513831685138312851383160510831224 |
:10032000051083168510831285108529AA1F982928 |
:10033000AA1DAF298030AC00FA012D08B0007A0860 |
:10034000B100FA012D08B2007A08B3000230AB0008 |
:100350008F018E012E0FAD29AE29AE0AEA282A1C84 |
:10036000CD2937082A020319B8293608583CAC00B1 |
:100370003808093C0318C129B8012C08573C031858 |
:10038000AC0AB101B001FA012D08B2007A08B3003D |
:100390000130AB008F018E01EA282A1FEA293708B5 |
:1003A0002A020319D629A8303607AC003808093CC0 |
:1003B0000318DF29B8012C08A83C031CAC03B301C7 |
:1003C000B201FA012D08B0007A08B100AB018F012B |
:1003D0008E01EA28AA1C0C2A37082A020319F329DD |
:1003E0003608763CAC003808093C0318FC29B801F3 |
:1003F0002C08753C0318AC0A32302D02FA01B0000B |
:100400007A08B100FA012D08B2007A08B300023070 |
:10041000AB008F018E01EA28AA1E2E2A37082A0275 |
:100420000319152A8A303607AC003808093C03182E |
:100430001E2AB8012C088A3C031CAC0332302D0262 |
:10044000FA01B2007A08B300FA012D08B0007A0868 |
:10045000B1000230AB008F018E01EA282A1D532A19 |
:1004600037082A020319372A36087A3CAC003808C4 |
:10047000093C0318402A2C08793C0318AC0AB8013F |
:10048000FA012D08B0007A08B100FA012D08B20077 |
:100490007A08B3000230AB008F018E012E0F512A73 |
:1004A000522AAE0AEA282A1E782A37082A02031995 |
:1004B0005C2A86303607AC003808093C0318652AE8 |
:1004C000B8012C08863C031CAC03FA012D08B200CD |
:1004D0007A08B300FA012D08B0007A08B1000230A2 |
:1004E000AB008F018E012E0F762A772AAE0AEA28FA |
:1004F0002B0B7B2A7E2AAB08031D982A2E08FA3C78 |
:100500000318952A8316051083120510831685108B |
:10051000831285148316051383120513831685131E |
:10052000831285176430BA007120AE01A030AD008F |
:04053000EA28630052 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/06 PD Regulator/master/main.LST |
---|
0,0 → 1,1093 |
CCS PCM C Compiler, Version 3.245, 27853 22-IV-06 16:00 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
ROM used: 666 words (16%) |
Largest free fragment is 2048 |
RAM used: 32 (18%) at main() level |
35 (20%) worst case |
Stack: 3 worst case (1 in main + 2 for interrupts) |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 089 |
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.0 |
001F: GOTO 022 |
0020: BTFSC 0C.0 |
0021: GOTO 03B |
0022: MOVLW 8C |
0023: MOVWF 04 |
0024: BTFSS 00.1 |
0025: GOTO 028 |
0026: BTFSC 0C.1 |
0027: GOTO 03D |
0028: MOVF 22,W |
0029: MOVWF 04 |
002A: MOVF 23,W |
002B: MOVWF 77 |
002C: MOVF 24,W |
002D: MOVWF 78 |
002E: MOVF 25,W |
002F: MOVWF 79 |
0030: MOVF 26,W |
0031: MOVWF 7A |
0032: MOVF 27,W |
0033: MOVWF 7B |
0034: MOVF 28,W |
0035: MOVWF 0A |
0036: SWAPF 21,W |
0037: MOVWF 03 |
0038: SWAPF 7F,F |
0039: SWAPF 7F,W |
003A: RETFIE |
003B: BCF 0A.3 |
003C: GOTO 03F |
003D: BCF 0A.3 |
003E: GOTO 053 |
.................... #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) |
* |
0043: MOVLW 08 |
0044: SUBWF 3D,F |
0045: BTFSS 03.0 |
0046: GOTO 052 |
0047: MOVLW 3D |
0048: MOVWF 04 |
0049: BCF 03.0 |
004A: RRF 00,F |
004B: MOVF 00,W |
004C: BTFSC 03.2 |
004D: GOTO 052 |
004E: GOTO 050 |
004F: CLRWDT |
0050: DECFSZ 00,F |
0051: GOTO 04F |
0052: RETLW 00 |
* |
0071: MOVLW 3A |
0072: MOVWF 04 |
0073: MOVF 00,W |
0074: BTFSC 03.2 |
0075: GOTO 088 |
0076: MOVLW 02 |
0077: MOVWF 78 |
0078: MOVLW BF |
0079: MOVWF 77 |
007A: CLRWDT |
007B: DECFSZ 77,F |
007C: GOTO 07A |
007D: DECFSZ 78,F |
007E: GOTO 078 |
007F: MOVLW 96 |
0080: MOVWF 77 |
0081: DECFSZ 77,F |
0082: GOTO 081 |
0083: NOP |
0084: NOP |
0085: CLRWDT |
0086: DECFSZ 00,F |
0087: GOTO 076 |
0088: 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 6//10 // 3 stupne zataceni |
.................... #define BEAR2 10//27 |
.................... #define BEAR3 40 |
.................... #define SPEEDMAX 160 // ANSMANN=140; GP=120; maximalni rozumna rychlost |
.................... #define R17 255 // X nasobek rozumne rychlosti |
.................... #define DOZNIVANI 10 |
.................... #define L 1 // cara vlevo |
.................... #define S 2 // casa mezi sensory |
.................... #define R 0 // cara vpravo |
.................... |
.................... // servo |
.................... #define SERVO PIN_A2 |
.................... |
.................... // 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 |
.................... unsigned int8 line; // 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 rovinka; // pocitadlo na zjisteni rovinky |
.................... |
.................... short int preteceni; // flag preteceni timeru1 |
.................... |
.................... 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;} |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... /* |
.................... void diagnostika() |
.................... { |
.................... if(input(SW1))STOPR;STOPL;While(TRUE); |
.................... // if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
.................... // if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #int_TIMER1 |
.................... TIMER1_isr() |
.................... { |
.................... preteceni = true; |
* |
003F: BSF 2F.0 |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
0040: BCF 0C.0 |
0041: BCF 0A.3 |
0042: GOTO 028 |
.................... #int_TIMER2 |
.................... TIMER2_isr() // ovladani serva |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
* |
0053: BSF 03.5 |
0054: BCF 05.2 |
0055: BCF 03.5 |
0056: BSF 05.2 |
.................... delay_us(1000); |
0057: CLRWDT |
0058: MOVLW 09 |
0059: MOVWF 3C |
005A: MOVLW 6D |
005B: MOVWF 3D |
005C: CALL 043 |
005D: DECFSZ 3C,F |
005E: GOTO 05A |
.................... for(n=uhel; n>0; n--) Delay_us(2); |
005F: MOVF 2C,W |
0060: MOVWF 3B |
0061: MOVF 3B,F |
0062: BTFSC 03.2 |
0063: GOTO 06A |
0064: CLRWDT |
0065: NOP |
0066: NOP |
0067: NOP |
0068: DECF 3B,F |
0069: GOTO 061 |
.................... output_low(SERVO); |
006A: BSF 03.5 |
006B: BCF 05.2 |
006C: BCF 03.5 |
006D: BCF 05.2 |
.................... } |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
006E: BCF 0C.1 |
006F: BCF 0A.3 |
0070: GOTO 028 |
.................... 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 |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void objizdka() |
.................... { |
.................... int8 shure=0; |
.................... unsigned int16 n; |
.................... |
.................... BR;BL; |
.................... Delay_ms(400); |
.................... STOPR;STOPL; |
.................... |
.................... 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<1500;n++) // vystred se na hranu cihly |
.................... { |
.................... if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
.................... 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(200); |
.................... uhel=STRED+BEAR2; // min doprava |
.................... FL;FR; |
.................... delay_ms(200); |
.................... uhel=STRED+BEAR1; // jeste min doprava |
.................... FL;FR; |
.................... delay_ms(200); |
.................... uhel=STRED; // rovne |
.................... FL;FR; |
.................... delay_ms(100); |
.................... While((sensors & 0b01111111)!=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 |
.................... } |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
* |
0089: CLRF 04 |
008A: MOVLW 1F |
008B: ANDWF 03,F |
008C: MOVLW 70 |
008D: BSF 03.5 |
008E: MOVWF 0F |
008F: BCF 1F.4 |
0090: BCF 1F.5 |
0091: MOVF 1B,W |
0092: ANDLW 80 |
0093: MOVWF 1B |
0094: MOVLW 07 |
0095: MOVWF 1C |
.................... |
.................... unsigned int8 n; |
.................... unsigned int8 i,v; |
.................... unsigned int8 last_sensors; |
.................... unsigned int8 j=0; |
0096: BCF 03.5 |
0097: CLRF 38 |
.................... |
.................... setup_adc_ports(NO_ANALOGS); |
0098: BSF 03.5 |
0099: BCF 1F.4 |
009A: BCF 1F.5 |
009B: MOVF 1B,W |
009C: ANDLW 80 |
009D: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
009E: BCF 1F.6 |
009F: BCF 03.5 |
00A0: BSF 1F.6 |
00A1: BSF 1F.7 |
00A2: BSF 03.5 |
00A3: BCF 1F.7 |
00A4: BCF 03.5 |
00A5: BSF 1F.0 |
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16); |
00A6: BCF 14.5 |
00A7: BSF 03.5 |
00A8: BCF 06.2 |
00A9: BSF 06.1 |
00AA: BCF 06.4 |
00AB: MOVLW 31 |
00AC: BCF 03.5 |
00AD: MOVWF 14 |
00AE: MOVLW 00 |
00AF: BSF 03.5 |
00B0: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
00B1: MOVF 01,W |
00B2: ANDLW C7 |
00B3: IORLW 08 |
00B4: MOVWF 01 |
.................... setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); |
00B5: MOVLW B5 |
00B6: BCF 03.5 |
00B7: MOVWF 10 |
.................... setup_timer_2(T2_DIV_BY_16,140,16); |
00B8: MOVLW 78 |
00B9: MOVWF 78 |
00BA: IORLW 06 |
00BB: MOVWF 12 |
00BC: MOVLW 8C |
00BD: BSF 03.5 |
00BE: MOVWF 12 |
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC); |
00BF: MOVLW 72 |
00C0: MOVWF 0F |
.................... |
.................... STOPR; STOPL; // zastav motory |
00C1: BCF 05.6 |
00C2: BCF 03.5 |
00C3: BCF 05.6 |
00C4: BSF 03.5 |
00C5: BCF 05.7 |
00C6: BCF 03.5 |
00C7: BCF 05.7 |
00C8: BSF 03.5 |
00C9: BCF 05.0 |
00CA: BCF 03.5 |
00CB: BCF 05.0 |
00CC: BSF 03.5 |
00CD: BCF 05.1 |
00CE: BCF 03.5 |
00CF: BCF 05.1 |
.................... Lmotor=0;Rmotor=0; |
00D0: CLRF 31 |
00D1: CLRF 30 |
00D2: CLRF 33 |
00D3: CLRF 32 |
.................... |
.................... uhel = STRED; // nastav zadni kolecko na stred |
00D4: MOVLW 80 |
00D5: MOVWF 2C |
.................... rovinka = 0; |
00D6: CLRF 2E |
.................... |
.................... enable_interrupts(INT_TIMER2); |
00D7: BSF 03.5 |
00D8: BSF 0C.1 |
.................... enable_interrupts(INT_TIMER1); |
00D9: BSF 0C.0 |
.................... enable_interrupts(GLOBAL); |
00DA: MOVLW C0 |
00DB: BCF 03.5 |
00DC: IORWF 0B,F |
.................... |
.................... output_low(IRTX); // zapni IR vysilac |
00DD: BSF 03.5 |
00DE: BCF 06.2 |
00DF: BCF 03.5 |
00E0: BCF 06.2 |
.................... |
.................... delay_ms(1000); |
00E1: MOVLW 04 |
00E2: MOVWF 39 |
00E3: MOVLW FA |
00E4: MOVWF 3A |
00E5: CALL 071 |
00E6: DECFSZ 39,F |
00E7: GOTO 0E3 |
.................... |
.................... //!!!! |
.................... speed=SPEEDMAX; |
00E8: MOVLW A0 |
00E9: MOVWF 2D |
.................... |
.................... while(true) |
.................... { |
.................... |
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor |
00EA: MOVF 01,W |
00EB: BTFSS 00.7 |
00EC: GOTO 0F0 |
00ED: BTFSS 31.7 |
00EE: GOTO 0F8 |
00EF: GOTO 0F2 |
00F0: BTFSC 31.7 |
00F1: GOTO 101 |
00F2: MOVF 31,F |
00F3: BTFSS 03.2 |
00F4: GOTO 0F8 |
00F5: SUBWF 30,W |
00F6: BTFSS 03.0 |
00F7: GOTO 101 |
00F8: BSF 03.5 |
00F9: BCF 05.1 |
00FA: BCF 03.5 |
00FB: BCF 05.1 |
00FC: BSF 03.5 |
00FD: BCF 05.0 |
00FE: BCF 03.5 |
00FF: BSF 05.0 |
0100: GOTO 109 |
0101: BSF 03.5 |
0102: BCF 05.0 |
0103: BCF 03.5 |
0104: BCF 05.0 |
0105: BSF 03.5 |
0106: BCF 05.1 |
0107: BCF 03.5 |
0108: BCF 05.1 |
0109: MOVF 01,W |
010A: BTFSS 00.7 |
010B: GOTO 10F |
010C: BTFSS 33.7 |
010D: GOTO 117 |
010E: GOTO 111 |
010F: BTFSC 33.7 |
0110: GOTO 120 |
0111: MOVF 33,F |
0112: BTFSS 03.2 |
0113: GOTO 117 |
0114: SUBWF 32,W |
0115: BTFSS 03.0 |
0116: GOTO 120 |
0117: BSF 03.5 |
0118: BCF 05.7 |
0119: BCF 03.5 |
011A: BCF 05.7 |
011B: BSF 03.5 |
011C: BCF 05.6 |
011D: BCF 03.5 |
011E: BSF 05.6 |
011F: GOTO 128 |
0120: BSF 03.5 |
0121: BCF 05.6 |
0122: BCF 03.5 |
0123: BCF 05.6 |
0124: BSF 03.5 |
0125: BCF 05.7 |
0126: BCF 03.5 |
0127: BCF 05.7 |
.................... |
.................... delay_us(1500); // cekani na SLAVE, nez pripravi data od cidel |
0128: CLRWDT |
0129: MOVLW 01 |
012A: MOVWF 3A |
012B: CALL 071 |
012C: MOVLW 02 |
012D: MOVWF 39 |
012E: CLRF 29 |
012F: BTFSC 0B.7 |
0130: BSF 29.7 |
0131: BCF 0B.7 |
0132: MOVLW F7 |
0133: MOVWF 3D |
0134: CALL 043 |
0135: BTFSC 29.7 |
0136: BSF 0B.7 |
0137: DECFSZ 39,F |
0138: GOTO 12E |
.................... |
.................... last_sensors = sensors; |
0139: MOVF 2A,W |
013A: MOVWF 37 |
.................... j++; |
013B: INCF 38,F |
.................... |
.................... output_low(STROBE); // vypni zobrazovani na posuvnem registru |
013C: BSF 03.5 |
013D: BCF 06.0 |
013E: BCF 03.5 |
013F: BCF 06.0 |
.................... sensors = spi_read(0); // cteni senzoru |
0140: MOVF 13,W |
0141: CLRF 13 |
0142: BSF 03.5 |
0143: BTFSC 14.0 |
0144: GOTO 147 |
0145: BCF 03.5 |
0146: GOTO 142 |
0147: BCF 03.5 |
0148: MOVF 13,W |
0149: MOVWF 2A |
.................... sensors=~sensors; |
014A: COMF 2A,F |
.................... output_high(STROBE); // zobraz data na posuvnem registru |
014B: BSF 03.5 |
014C: BCF 06.0 |
014D: BCF 03.5 |
014E: BSF 06.0 |
.................... |
.................... |
.................... |
.................... |
.................... if(false == preteceni) |
014F: MOVLW 00 |
0150: BTFSC 2F.0 |
0151: MOVLW 01 |
0152: XORLW 00 |
0153: BTFSS 03.2 |
0154: GOTO 16B |
.................... { |
.................... v = 255 - (get_timer1() >> 8); |
0155: MOVF 0F,W |
0156: MOVWF 7A |
0157: MOVF 0E,W |
0158: MOVWF 77 |
0159: MOVF 0F,W |
015A: SUBWF 7A,W |
015B: BTFSS 03.2 |
015C: GOTO 155 |
015D: MOVF 77,W |
015E: MOVWF 39 |
015F: MOVF 7A,W |
0160: MOVWF 3A |
0161: MOVF 3A,W |
0162: CLRF 7A |
0163: SUBLW FF |
0164: MOVWF 36 |
.................... v >>= 3; |
0165: RRF 36,F |
0166: RRF 36,F |
0167: RRF 36,F |
0168: MOVLW 1F |
0169: ANDWF 36,F |
.................... } |
.................... else |
016A: GOTO 16D |
.................... { |
.................... v=0; |
016B: CLRF 36 |
.................... preteceni=false; |
016C: BCF 2F.0 |
.................... } |
.................... |
.................... |
.................... |
.................... i=0; // havarijni kod |
016D: CLRF 35 |
.................... for (n=0; n<=6; n++) |
016E: CLRF 34 |
016F: MOVF 34,W |
0170: SUBLW 06 |
0171: BTFSS 03.0 |
0172: GOTO 181 |
.................... { |
.................... if(bit_test(sensors,n)) i++; |
0173: MOVF 2A,W |
0174: MOVWF 77 |
0175: MOVF 34,W |
0176: MOVWF 78 |
0177: BTFSC 03.2 |
0178: GOTO 17D |
0179: BCF 03.0 |
017A: RRF 77,F |
017B: DECFSZ 78,F |
017C: GOTO 179 |
017D: BTFSC 77.0 |
017E: INCF 35,F |
.................... } |
017F: INCF 34,F |
0180: GOTO 16F |
.................... if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
0181: MOVF 35,W |
0182: SUBLW 03 |
0183: BTFSC 03.0 |
0184: GOTO 196 |
0185: BSF 03.5 |
0186: BCF 05.6 |
0187: BCF 03.5 |
0188: BCF 05.6 |
0189: BSF 03.5 |
018A: BCF 05.7 |
018B: BCF 03.5 |
018C: BCF 05.7 |
018D: BSF 03.5 |
018E: BCF 05.0 |
018F: BCF 03.5 |
0190: BCF 05.0 |
0191: BSF 03.5 |
0192: BCF 05.1 |
0193: BCF 03.5 |
0194: BCF 05.1 |
0195: GOTO 185 |
.................... |
.................... |
.................... |
.................... if(bit_test(sensors,7)) // detekce cihly |
0196: BTFSS 2A.7 |
0197: GOTO 198 |
.................... { |
.................... //!!! objizdka(); // objede cihlu |
.................... } |
.................... |
.................... |
.................... |
.................... if(bit_test(sensors,3)) //...|...// |
0198: BTFSS 2A.3 |
0199: GOTO 1AF |
.................... { |
.................... uhel=STRED; |
019A: MOVLW 80 |
019B: MOVWF 2C |
.................... Lmotor=speed; |
019C: CLRF 7A |
019D: MOVF 2D,W |
019E: MOVWF 30 |
019F: MOVF 7A,W |
01A0: MOVWF 31 |
.................... Rmotor=speed; |
01A1: CLRF 7A |
01A2: MOVF 2D,W |
01A3: MOVWF 32 |
01A4: MOVF 7A,W |
01A5: MOVWF 33 |
.................... line=S; |
01A6: MOVLW 02 |
01A7: MOVWF 2B |
.................... set_timer1(0); |
01A8: CLRF 0F |
01A9: CLRF 0E |
.................... if (rovinka < 255) rovinka++; |
01AA: INCFSZ 2E,W |
01AB: GOTO 1AD |
01AC: GOTO 1AE |
01AD: INCF 2E,F |
.................... // if (speed > SPEEDMAX) speed--; |
.................... continue; |
01AE: GOTO 0EA |
.................... } |
.................... |
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
01AF: BTFSS 2A.0 |
01B0: GOTO 1CD |
.................... { |
.................... if(sensors != last_sensors) uhel=STRED - BEAR3 - v; |
01B1: MOVF 37,W |
01B2: SUBWF 2A,W |
01B3: BTFSC 03.2 |
01B4: GOTO 1B8 |
01B5: MOVF 36,W |
01B6: SUBLW 58 |
01B7: MOVWF 2C |
.................... if(j>=DOZNIVANI) |
01B8: MOVF 38,W |
01B9: SUBLW 09 |
01BA: BTFSC 03.0 |
01BB: GOTO 1C1 |
.................... { |
.................... j=0; |
01BC: CLRF 38 |
.................... if(uhel<STRED - BEAR3) uhel++; |
01BD: MOVF 2C,W |
01BE: SUBLW 57 |
01BF: BTFSC 03.0 |
01C0: INCF 2C,F |
.................... } |
.................... Lmotor=0; |
01C1: CLRF 31 |
01C2: CLRF 30 |
.................... Rmotor=speed; |
01C3: CLRF 7A |
01C4: MOVF 2D,W |
01C5: MOVWF 32 |
01C6: MOVF 7A,W |
01C7: MOVWF 33 |
.................... line=L; |
01C8: MOVLW 01 |
01C9: MOVWF 2B |
.................... set_timer1(0); |
01CA: CLRF 0F |
01CB: CLRF 0E |
.................... // if (speed > SPEEDMAX) speed--; |
.................... continue; |
01CC: GOTO 0EA |
.................... } |
.................... |
.................... if(bit_test(sensors,6)) //......|// |
01CD: BTFSS 2A.6 |
01CE: GOTO 1EA |
.................... { |
.................... if(sensors != last_sensors) uhel=STRED + BEAR3 + v; |
01CF: MOVF 37,W |
01D0: SUBWF 2A,W |
01D1: BTFSC 03.2 |
01D2: GOTO 1D6 |
01D3: MOVLW A8 |
01D4: ADDWF 36,W |
01D5: MOVWF 2C |
.................... if(j>=DOZNIVANI) |
01D6: MOVF 38,W |
01D7: SUBLW 09 |
01D8: BTFSC 03.0 |
01D9: GOTO 1DF |
.................... { |
.................... j=0; |
01DA: CLRF 38 |
.................... if(uhel>STRED + BEAR3) uhel--; |
01DB: MOVF 2C,W |
01DC: SUBLW A8 |
01DD: BTFSS 03.0 |
01DE: DECF 2C,F |
.................... } |
.................... Rmotor=0; |
01DF: CLRF 33 |
01E0: CLRF 32 |
.................... Lmotor=speed; |
01E1: CLRF 7A |
01E2: MOVF 2D,W |
01E3: MOVWF 30 |
01E4: MOVF 7A,W |
01E5: MOVWF 31 |
.................... line=R; |
01E6: CLRF 2B |
.................... set_timer1(0); |
01E7: CLRF 0F |
01E8: CLRF 0E |
.................... // if (speed > SPEEDMAX) speed--; |
.................... continue; |
01E9: GOTO 0EA |
.................... } |
.................... |
.................... if(bit_test(sensors,1)) //.|.....// |
01EA: BTFSS 2A.1 |
01EB: GOTO 20C |
.................... { |
.................... if(sensors != last_sensors) uhel=STRED - BEAR2 - v; |
01EC: MOVF 37,W |
01ED: SUBWF 2A,W |
01EE: BTFSC 03.2 |
01EF: GOTO 1F3 |
01F0: MOVF 36,W |
01F1: SUBLW 76 |
01F2: MOVWF 2C |
.................... if(j>=DOZNIVANI) |
01F3: MOVF 38,W |
01F4: SUBLW 09 |
01F5: BTFSC 03.0 |
01F6: GOTO 1FC |
.................... { |
.................... j=0; |
01F7: CLRF 38 |
.................... if(uhel<STRED - BEAR2) uhel++; |
01F8: MOVF 2C,W |
01F9: SUBLW 75 |
01FA: BTFSC 03.0 |
01FB: INCF 2C,F |
.................... } |
.................... Lmotor=speed-50; |
01FC: MOVLW 32 |
01FD: SUBWF 2D,W |
01FE: CLRF 7A |
01FF: MOVWF 30 |
0200: MOVF 7A,W |
0201: MOVWF 31 |
.................... Rmotor=speed; |
0202: CLRF 7A |
0203: MOVF 2D,W |
0204: MOVWF 32 |
0205: MOVF 7A,W |
0206: MOVWF 33 |
.................... line=S; |
0207: MOVLW 02 |
0208: MOVWF 2B |
.................... set_timer1(0); |
0209: CLRF 0F |
020A: CLRF 0E |
.................... // if (speed > SPEEDMAX) speed--; |
.................... continue; |
020B: GOTO 0EA |
.................... } |
.................... |
.................... if(bit_test(sensors,5)) //.....|.// |
020C: BTFSS 2A.5 |
020D: GOTO 22E |
.................... { |
.................... if(sensors != last_sensors) uhel=STRED + BEAR2 + v; |
020E: MOVF 37,W |
020F: SUBWF 2A,W |
0210: BTFSC 03.2 |
0211: GOTO 215 |
0212: MOVLW 8A |
0213: ADDWF 36,W |
0214: MOVWF 2C |
.................... if(j>=DOZNIVANI) |
0215: MOVF 38,W |
0216: SUBLW 09 |
0217: BTFSC 03.0 |
0218: GOTO 21E |
.................... { |
.................... j=0; |
0219: CLRF 38 |
.................... if(uhel>STRED + BEAR2) uhel--; |
021A: MOVF 2C,W |
021B: SUBLW 8A |
021C: BTFSS 03.0 |
021D: DECF 2C,F |
.................... } |
.................... Rmotor=speed-50; |
021E: MOVLW 32 |
021F: SUBWF 2D,W |
0220: CLRF 7A |
0221: MOVWF 32 |
0222: MOVF 7A,W |
0223: MOVWF 33 |
.................... Lmotor=speed; |
0224: CLRF 7A |
0225: MOVF 2D,W |
0226: MOVWF 30 |
0227: MOVF 7A,W |
0228: MOVWF 31 |
.................... line=S; |
0229: MOVLW 02 |
022A: MOVWF 2B |
.................... set_timer1(0); |
022B: CLRF 0F |
022C: CLRF 0E |
.................... // if (speed > SPEEDMAX) speed--; |
.................... continue; |
022D: GOTO 0EA |
.................... } |
.................... |
.................... if (bit_test(sensors,2)) //..|....// |
022E: BTFSS 2A.2 |
022F: GOTO 253 |
.................... { |
.................... if(sensors != last_sensors) uhel=STRED - BEAR1 - v; |
0230: MOVF 37,W |
0231: SUBWF 2A,W |
0232: BTFSC 03.2 |
0233: GOTO 237 |
0234: MOVF 36,W |
0235: SUBLW 7A |
0236: MOVWF 2C |
.................... if(j>=DOZNIVANI) |
0237: MOVF 38,W |
0238: SUBLW 09 |
0239: BTFSC 03.0 |
023A: GOTO 240 |
.................... { |
.................... if(uhel<STRED - BEAR1)uhel++; |
023B: MOVF 2C,W |
023C: SUBLW 79 |
023D: BTFSC 03.0 |
023E: INCF 2C,F |
.................... j=0; |
023F: CLRF 38 |
.................... } |
.................... Lmotor=speed; |
0240: CLRF 7A |
0241: MOVF 2D,W |
0242: MOVWF 30 |
0243: MOVF 7A,W |
0244: MOVWF 31 |
.................... Rmotor=speed; |
0245: CLRF 7A |
0246: MOVF 2D,W |
0247: MOVWF 32 |
0248: MOVF 7A,W |
0249: MOVWF 33 |
.................... line=S; |
024A: MOVLW 02 |
024B: MOVWF 2B |
.................... set_timer1(0); |
024C: CLRF 0F |
024D: CLRF 0E |
.................... if (rovinka<255) rovinka++; |
024E: INCFSZ 2E,W |
024F: GOTO 251 |
0250: GOTO 252 |
0251: INCF 2E,F |
.................... // if (speed > SPEEDMAX) speed--; |
.................... continue; |
0252: GOTO 0EA |
.................... } |
.................... |
.................... if (bit_test(sensors,4)) //....|..// |
0253: BTFSS 2A.4 |
0254: GOTO 278 |
.................... { |
.................... if(sensors != last_sensors) uhel=STRED + BEAR1 + v; |
0255: MOVF 37,W |
0256: SUBWF 2A,W |
0257: BTFSC 03.2 |
0258: GOTO 25C |
0259: MOVLW 86 |
025A: ADDWF 36,W |
025B: MOVWF 2C |
.................... if(j>=DOZNIVANI) |
025C: MOVF 38,W |
025D: SUBLW 09 |
025E: BTFSC 03.0 |
025F: GOTO 265 |
.................... { |
.................... j=0; |
0260: CLRF 38 |
.................... if(uhel>STRED + BEAR1) uhel--; |
0261: MOVF 2C,W |
0262: SUBLW 86 |
0263: BTFSS 03.0 |
0264: DECF 2C,F |
.................... } |
.................... Rmotor=speed; |
0265: CLRF 7A |
0266: MOVF 2D,W |
0267: MOVWF 32 |
0268: MOVF 7A,W |
0269: MOVWF 33 |
.................... Lmotor=speed; |
026A: CLRF 7A |
026B: MOVF 2D,W |
026C: MOVWF 30 |
026D: MOVF 7A,W |
026E: MOVWF 31 |
.................... line=S; |
026F: MOVLW 02 |
0270: MOVWF 2B |
.................... set_timer1(0); |
0271: CLRF 0F |
0272: CLRF 0E |
.................... if (rovinka<255) rovinka++; |
0273: INCFSZ 2E,W |
0274: GOTO 276 |
0275: GOTO 277 |
0276: INCF 2E,F |
.................... // if (speed > SPEEDMAX) speed--; |
.................... continue; |
0277: GOTO 0EA |
.................... } |
.................... |
.................... if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
0278: DECFSZ 2B,W |
0279: GOTO 27B |
027A: GOTO 27E |
027B: MOVF 2B,F |
027C: BTFSS 03.2 |
027D: GOTO 298 |
.................... { |
.................... if (rovinka>250) |
027E: MOVF 2E,W |
027F: SUBLW FA |
0280: BTFSC 03.0 |
0281: GOTO 295 |
.................... { |
.................... BL; BR; |
0282: BSF 03.5 |
0283: BCF 05.0 |
0284: BCF 03.5 |
0285: BCF 05.0 |
0286: BSF 03.5 |
0287: BCF 05.1 |
0288: BCF 03.5 |
0289: BSF 05.1 |
028A: BSF 03.5 |
028B: BCF 05.6 |
028C: BCF 03.5 |
028D: BCF 05.6 |
028E: BSF 03.5 |
028F: BCF 05.7 |
0290: BCF 03.5 |
0291: BSF 05.7 |
.................... Delay_ms(100); |
0292: MOVLW 64 |
0293: MOVWF 3A |
0294: CALL 071 |
.................... }; |
.................... rovinka=0; |
0295: CLRF 2E |
.................... speed=SPEEDMAX; |
0296: MOVLW A0 |
0297: MOVWF 2D |
.................... }; |
.................... } |
0298: GOTO 0EA |
.................... } |
0299: 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/06 PD Regulator/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\istrobot\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\istrobot\3Orbis\main.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
4= |
5= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
/roboti/3Orbis/bak/06 PD Regulator/master/main.SYM |
---|
0,0 → 1,71 |
015 CCP_1_LOW |
015-016 CCP_1 |
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 rovinka |
02F.0 preteceni |
030-031 Lmotor |
032-033 Rmotor |
034 main.n |
035 main.i |
036 main.v |
037 main.last_sensors |
038 main.j |
039 main.@SCRATCH |
03A @delay_ms1.P1 |
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 |
0071 @delay_ms1 |
0043 @delay_us1 |
003F TIMER1_isr |
0053 TIMER2_isr |
0089 main |
0089 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\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\istrobot\3Orbis\main.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sta |
/roboti/3Orbis/bak/06 PD Regulator/master/main.c |
---|
0,0 → 1,384 |
#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 6//10 // 3 stupne zataceni |
#define BEAR2 10//27 |
#define BEAR3 40 |
#define SPEEDMAX 160 // ANSMANN=140; GP=120; maximalni rozumna rychlost |
#define R17 255 // X nasobek rozumne rychlosti |
#define DOZNIVANI 10 |
#define L 1 // cara vlevo |
#define S 2 // casa mezi sensory |
#define R 0 // cara vpravo |
// servo |
#define SERVO PIN_A2 |
// 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 |
unsigned int8 line; // 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 rovinka; // pocitadlo na zjisteni rovinky |
short int preteceni; // flag preteceni timeru1 |
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;} |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#int_TIMER1 |
TIMER1_isr() |
{ |
preteceni = true; |
} |
//////////////////////////////////////////////////////////////////////////////// |
#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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
int8 shure=0; |
unsigned int16 n; |
BR;BL; |
Delay_ms(400); |
STOPR;STOPL; |
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<1500;n++) // vystred se na hranu cihly |
{ |
if(!input(CIHLA)) {BL; FR;} else {FL; BR;}; |
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(200); |
uhel=STRED+BEAR2; // min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED+BEAR1; // jeste min doprava |
FL;FR; |
delay_ms(200); |
uhel=STRED; // rovne |
FL;FR; |
delay_ms(100); |
While((sensors & 0b01111111)!=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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int8 n; |
unsigned int8 i,v; |
unsigned int8 last_sensors; |
unsigned int8 j=0; |
setup_adc_ports(NO_ANALOGS); |
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_INTERNAL|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(INT_TIMER1); |
enable_interrupts(GLOBAL); |
output_low(IRTX); // zapni IR vysilac |
delay_ms(1000); |
//!!!! |
speed=SPEEDMAX; |
while(true) |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor |
delay_us(1500); // cekani na SLAVE, nez pripravi data od cidel |
last_sensors = sensors; |
j++; |
output_low(STROBE); // vypni zobrazovani na posuvnem registru |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
output_high(STROBE); // zobraz data na posuvnem registru |
if(false == preteceni) |
{ |
v = 255 - (get_timer1() >> 8); |
v >>= 3; |
} |
else |
{ |
v=0; |
preteceni=false; |
} |
i=0; // havarijni kod |
for (n=0; n<=6; n++) |
{ |
if(bit_test(sensors,n)) i++; |
} |
if (i>3) While(true){STOPR; STOPL;}; // zastavi, kdyz je cerno pod vice nez tremi cidly |
if(bit_test(sensors,7)) // detekce cihly |
{ |
//!!! objizdka(); // objede cihlu |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=speed; |
Rmotor=speed; |
line=S; |
set_timer1(0); |
if (rovinka < 255) rovinka++; |
// if (speed > SPEEDMAX) speed--; |
continue; |
} |
if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
{ |
if(sensors != last_sensors) uhel=STRED - BEAR3 - v; |
if(j>=DOZNIVANI) |
{ |
j=0; |
if(uhel<STRED - BEAR3) uhel++; |
} |
Lmotor=0; |
Rmotor=speed; |
line=L; |
set_timer1(0); |
// if (speed > SPEEDMAX) speed--; |
continue; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
if(sensors != last_sensors) uhel=STRED + BEAR3 + v; |
if(j>=DOZNIVANI) |
{ |
j=0; |
if(uhel>STRED + BEAR3) uhel--; |
} |
Rmotor=0; |
Lmotor=speed; |
line=R; |
set_timer1(0); |
// if (speed > SPEEDMAX) speed--; |
continue; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
if(sensors != last_sensors) uhel=STRED - BEAR2 - v; |
if(j>=DOZNIVANI) |
{ |
j=0; |
if(uhel<STRED - BEAR2) uhel++; |
} |
Lmotor=speed-50; |
Rmotor=speed; |
line=S; |
set_timer1(0); |
// if (speed > SPEEDMAX) speed--; |
continue; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
if(sensors != last_sensors) uhel=STRED + BEAR2 + v; |
if(j>=DOZNIVANI) |
{ |
j=0; |
if(uhel>STRED + BEAR2) uhel--; |
} |
Rmotor=speed-50; |
Lmotor=speed; |
line=S; |
set_timer1(0); |
// if (speed > SPEEDMAX) speed--; |
continue; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
if(sensors != last_sensors) uhel=STRED - BEAR1 - v; |
if(j>=DOZNIVANI) |
{ |
if(uhel<STRED - BEAR1)uhel++; |
j=0; |
} |
Lmotor=speed; |
Rmotor=speed; |
line=S; |
set_timer1(0); |
if (rovinka<255) rovinka++; |
// if (speed > SPEEDMAX) speed--; |
continue; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
if(sensors != last_sensors) uhel=STRED + BEAR1 + v; |
if(j>=DOZNIVANI) |
{ |
j=0; |
if(uhel>STRED + BEAR1) uhel--; |
} |
Rmotor=speed; |
Lmotor=speed; |
line=S; |
set_timer1(0); |
if (rovinka<255) rovinka++; |
// if (speed > SPEEDMAX) speed--; |
continue; |
} |
if ((L==line) || (R==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>250) |
{ |
BL; BR; |
Delay_ms(100); |
}; |
rovinka=0; |
speed=SPEEDMAX; |
}; |
} |
} |
/roboti/3Orbis/bak/06 PD Regulator/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/06 PD Regulator/master/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/06 PD Regulator/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/06 PD Regulator/master/main.sta |
---|
0,0 → 1,33 |
ROM used: 666 (16%) |
666 (16%) including unused fragments |
1 Average locations per line |
2 Average locations per statement |
RAM used: 32 (18%) at main() level |
35 (20%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
385 307 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
1366 614 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 24 4 1 @delay_ms1 |
0 16 2 1 @delay_us1 |
0 4 1 0 TIMER1_isr |
0 30 5 2 TIMER2_isr |
0 529 79 7 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-0003E 59 0 |
0003F-007FF 603 1382 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/06 PD Regulator/master/main.tre |
---|
0,0 → 1,10 |
ÀÄmain |
ÃÄmain 0/529 Ram=7 |
³ ÃÄ??0?? |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@delay_us1 0/16 Ram=1 |
³ ÀÄ@delay_ms1 0/24 Ram=1 |
ÃÄTIMER1_isr 0/4 Ram=0 |
ÀÄTIMER2_isr 0/30 Ram=2 |
ÀÄ@delay_us1 0/16 Ram=1 |
/roboti/3Orbis/bak/06 PD Regulator/master/objizdka.c |
---|
0,0 → 1,112 |
void cikcak() |
{ |
short int movement; |
if(uhel>STRED) |
{ |
movement = R; |
uhel=KOLMO1; |
Delay_ms(60); |
} |
if(uhel<STRED) |
{ |
movement = L; |
uhel=KOLMO2; |
Delay_ms(60); |
} |
sem: |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel |
if(!bit_test(sensors,3) == sensors) |
{ |
if(R == movement) |
{ |
FR;BL; |
movement=L; |
While(bit_test(sensors,3) == sensors) |
{ |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
Delay_ms(5); |
} |
STOPL;STOPR; |
GoTo sem; |
} |
if(L == movement) |
{ |
FL;BR; |
movement=R; |
While(bit_test(sensors,3) == sensors) |
{ |
sensors = spi_read(0); |
sensors =~ sensors; |
Delay_ms(5); // cekani na SLAVE nez pripravi data od cidel |
} |
STOPL;STOPR; |
GoTo sem; |
} |
} |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
// zjisti, jestli neni cihla, pouze pokud se jede jakztakz rovne |
BL; BR; |
While(bit_test(sensors,3) == sensors) |
{ |
sensors = spi_read(0); |
sensors =~ sensors; |
Delay_ms(5); |
} |
STOPR; STOPL; |
delay_ms(1000); |
cikcak(); |
delay_ms(1000); |
STOPR; STOPL; |
While(true); |
uhel=STRED-55; |
FR;STOPL; |
Delay_ms(370); // doleva |
uhel=STRED; |
FL;FR; |
Delay_ms(200); // rovne |
uhel=STRED+55; |
STOPR;FL; |
Delay_ms(300); // doprava |
STOPR; STOPL; |
While(true); |
uhel=STRED; |
FR;FL; |
Delay_ms(250); // rovne |
uhel=STRED+80; |
FL;STOPR; |
Delay_ms(300); // doprava |
uhel=STRED; |
FR;FL; |
Delay_ms(100); // rovne |
STOPR; STOPL; |
While(true); |
/* uhel=STRED; |
sensors=0b00001000; |
Delay_ms(1000); |
FL;FR;*/ |
} |
/roboti/3Orbis/bak/07 1.funkcni/master/main.BAK |
---|
0,0 → 1,350 |
#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//27 |
#define BEAR3 45 |
#define SPEEDMAX 140 // ANSMANN=140; GP=120; maximalni rozumna rychlost |
#define R17 255 // X nasobek rozumne rychlosti |
#define DOZNIVANI 10 |
#define L1 1 // cara vlevo |
#define L2 2 // cara vlevo |
#define L3 3 // cara vlevo |
#define S 0 // casa mezi sensory |
#define R1 -1 // cara vpravo |
#define R2 -2 // cara vpravo |
#define R3 -3 // cara vpravo |
// servo |
#define SERVO PIN_A2 |
// 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 rovinka; // pocitadlo na zjisteni rovinky |
short int preteceni; // flag preteceni timeru1 |
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;} |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#int_TIMER1 |
TIMER1_isr() |
{ |
preteceni = true; |
} |
//////////////////////////////////////////////////////////////////////////////// |
#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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
int8 shure=0; |
unsigned int16 n; |
BR;BL; |
Delay_ms(400); |
STOPR;STOPL; |
// 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<1500;n++) // vystred se na hranu cihly |
{ |
if(!input(CIHLA)) |
{ |
// BL; FR; |
GO(L,B,180);GO(R,F,160); // zapni motory PWM podle promenych Lmotor a Rmotor |
} else |
{ |
// FL; BR; |
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(300); |
/* |
uhel=STRED; // rovne |
delay_ms(100); |
FL;FR; |
delay_ms(100); |
*/ |
While((sensors & 0b01111111)!=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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int8 n; |
unsigned int8 i,v; |
unsigned int8 last_sensors; |
setup_adc_ports(NO_ANALOGS); |
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_INTERNAL|T1_DIV_BY_8); |
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(INT_TIMER1); |
enable_interrupts(GLOBAL); |
output_low(IRTX); // zapni IR vysilac |
delay_ms(1000); |
//!!!! |
speed=SPEEDMAX; |
while(true) |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor |
delay_us(1500); // cekani na SLAVE, nez pripravi data od cidel |
output_low(STROBE); // vypni zobrazovani na posuvnem registru |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
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(bit_test(sensors,7)) // detekce cihly |
{ |
objizdka(); // objede cihlu |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=speed; |
Rmotor=speed; |
line=S; |
// set_timer1(0); |
if (rovinka < 255) rovinka++; |
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=speed; |
line=L3; |
// set_timer1(0); |
continue; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
uhel=STRED + BEAR3; |
Rmotor=0; |
Lmotor=speed; |
line=R3; |
// set_timer1(0); |
continue; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED - BEAR2; |
Lmotor=speed-50; |
Rmotor=speed; |
line=L2; |
// set_timer1(0); |
continue; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED + BEAR2; |
Rmotor=speed-50; |
Lmotor=speed; |
line=R2; |
// set_timer1(0); |
continue; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED - BEAR1; |
Lmotor=speed; |
Rmotor=speed; |
line=L1; |
// set_timer1(0); |
if (rovinka<255) rovinka++; |
continue; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED + BEAR1; |
Rmotor=speed; |
Lmotor=speed; |
line=R1; |
// set_timer1(0); |
if (rovinka<255) rovinka++; |
continue; |
} |
if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>50) |
{ |
BL; BR; |
Delay_ms(100); |
if (rovinka>250) delay_ms(50); |
}; |
rovinka=0; |
speed=SPEEDMAX; |
}; |
} |
} |
/roboti/3Orbis/bak/07 1.funkcni/master/main.HEX |
---|
0,0 → 1,123 |
:1000000000308A00122A0000FF00030E8301A100C5 |
:100010007F08A0000A08A8008A01A00E0408A20018 |
:100020007708A3007808A4007908A5007A08A6003C |
:100030007B08A700831383128C308400001C2228C5 |
:100040000C183B288C308400801C28288C183D28F4 |
:10005000220884002308F7002408F8002508F90086 |
:100060002608FA002708FB0028088A00210E8300D2 |
:10007000FF0E7F0E09008A113F288A1153282F1482 |
:100080000C108A1128280830BF02031C52283F3068 |
:1000900084000310800C00080319522850286400C3 |
:1000A000800B4F2800348316051183120515640058 |
:1000B0000930BE006D30BF004320BE0B5A282C080B |
:1000C000BD00BD0803196A2864000000000000009C |
:1000D000BD03612883160511831205118C108A1146 |
:1000E00028283C3084000008031988280230F800D2 |
:1000F000BF30F7006400F70B7A28F80B78289630A9 |
:10010000F700F70B8128000000006400800B7628C0 |
:100110000034B80183160513831205138316851363 |
:100120008312851783160510831205108316851018 |
:10013000831285140230BB00C830BC007120BB0B99 |
:100140009C288316051383120513831685138312C7 |
:1001500085138316051083120510831685108312EC |
:100160008510E130AC006430BC00712083160510AE |
:100170008312051083168510831285148316851348 |
:10018000831285138316051383120517C830BC002C |
:100190007120AA1FDA281308930183161418D22895 |
:1001A0008312CD2883121308AA00AA090430BC00C8 |
:1001B0007120C92883160510831205108316851037 |
:1001C0008312851083160513831205138316851376 |
:1001D00083128513BA01B9013A08033C031C57295D |
:1001E000031DF6283908E73C031C5729831685159B |
:1001F0008312851926290108B43C031C082983169B |
:10020000051083120510831685108312851410299A |
:10021000831605108312051083168510831285102E |
:100220000108A03C031C1D29831685138312851326 |
:1002300083160513831205172529831605138312C8 |
:100240000513831685138312851350290108B43CC6 |
:10025000031C33298316851083128510831605101D |
:10026000831205143B29831605108312051083168B |
:100270008510831285100108A03C031C48298316B1 |
:1002800005138312051383168513831285175029CE |
:1002900083160513831205138316851383128513A2 |
:1002A0000130BC007120B90A0319BA0AEC28831680 |
:1002B0000513831205138316851383128513831682 |
:1002C0000510831205108316851083128510803067 |
:1002D000AC006430BC007120831685138312851333 |
:1002E0008316051383120517831685108312851054 |
:1002F00083160510831205140230BB00FA30BC00CF |
:100300007120BB0B7E2983160510831205108316FE |
:100310008510831285148316051383120513831623 |
:10032000851383128517C830BC0071208316051011 |
:10033000831205108316851083128510831605130A |
:10034000831205138316851383128513AD30AC0019 |
:100350006430BC00712083168510831285108316CB |
:100360000510831205140230BB00C830BC00712098 |
:10037000BB0BB5299930AC0083168510831285100C |
:1003800083160510831205148316851383128513B3 |
:1003900083160513831205176430BC0071208A3060 |
:1003A000AC00831685108312851083160510831206 |
:1003B0000514831685138312851383160513831280 |
:1003C0000517C830BC0071202A087F390319F729A6 |
:1003D0001308930183161418EF298312EA29831254 |
:1003E0001308AA00AA090430BC007120E42983166E |
:1003F0000510831205108316851083128514831649 |
:100400000513831205138316851383128517023093 |
:10041000BB00C830BC007120BB0B092A5330AC00B4 |
:100420008A11172B84011F308305703083168F00CB |
:100430001F129F121B0880399B0007309C008312FB |
:10044000AB0183161F129F121B0880399B001F13DC |
:1004500083121F179F1783169F1383121F14941262 |
:100460008316061186140612313083129400003070 |
:10047000831694000108C739083881003030831290 |
:1004800090007830F800063892008C308316920085 |
:1004900072308F00051383120513831685138312A0 |
:1004A0008513831605108312051083168510831299 |
:1004B0008510B101B001B301B2018030AC00AE01D2 |
:1004C00083168C14C03083128B048316061183129A |
:1004D00006110430B800FA30BC007120B80B6B2A4A |
:1004E0008C30AD000108801F782AB11F802A7A2A3B |
:1004F000B11B892AB108031D802A3002031C892AF6 |
:100500008316851083128510831605108312051437 |
:10051000912A831605108312051083168510831205 |
:1005200085100108801F972AB31F9F2A992AB31BA1 |
:10053000A82AB308031D9F2A3202031CA82A831687 |
:100540008513831285138316051383120517B02AAA |
:1005500083160513831205138316851383128513DF |
:1005600064000130BC0071200230B800A9018B1B6F |
:10057000A9178B13F730BF004320A91B8B17B80BAB |
:10058000B62A8316061083120610130893018316E9 |
:100590001418CC2A8312C72A83121308AA00AA09A6 |
:1005A0008316061083120614B501B4013408063C04 |
:1005B000031CE82A2A08F7003408F8000319E42A83 |
:1005C0000310F70CF80BE02A7718B50AB40AD62AFC |
:1005D0003508033C0318142B8316051083120510ED |
:1005E0008316851083128514831605138312051351 |
:1005F00083168513831285170230B8009630BC002D |
:100600007120B80BFE2A8316051383120513831677 |
:100610008513831285138316051083120510831624 |
:10062000851083128510132BAA1F172B8928AA1D4A |
:100630002B2B8030AC00FA012D08B0007A08B100F5 |
:10064000FA012D08B2007A08B300AB012E0F292B56 |
:100650002A2BAE0A722A2A1C392B5330AC00B10166 |
:10066000B001FA012D08B2007A08B3000330AB00E4 |
:10067000722A2A1F472BAD30AC00B301B201FA0138 |
:100680002D08B0007A08B100FD30AB00722AAA1C18 |
:10069000592B6730AC0032302D02FA01B0007A08D5 |
:1006A000B100FA012D08B2007A08B3000230AB00A5 |
:1006B000722AAA1E6B2B9930AC0032302D02FA013F |
:1006C000B2007A08B300FA012D08B0007A08B10030 |
:1006D000FE30AB00722A2A1D802B7630AC00FA0166 |
:1006E0002D08B0007A08B100FA012D08B2007A088E |
:1006F000B3000130AB002E0F7E2B7F2BAE0A722A87 |
:100700002A1E952B8A30AC00FA012D08B2007A0817 |
:10071000B300FA012D08B0007A08B100FF30AB0039 |
:100720002E0F932B942BAE0A722A2B08033C03192D |
:100730009D2B2B08FD3C031DBE2B2E08323C0318BD |
:10074000BB2B8316051083120510831685108312A8 |
:1007500085148316051383120513831685138312DC |
:1007600085176430BC0071202E08FA3C0318BB2B9F |
:100770003230BC007120AE018C30AD00722A6300B3 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/07 1.funkcni/master/main.LST |
---|
0,0 → 1,1355 |
CCS PCM C Compiler, Version 3.245, 27853 22-IV-06 23:50 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
ROM used: 960 words (23%) |
Largest free fragment is 2048 |
RAM used: 30 (17%) at main() level |
37 (21%) worst case |
Stack: 4 worst case (2 in main + 2 for interrupts) |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 212 |
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.0 |
001F: GOTO 022 |
0020: BTFSC 0C.0 |
0021: GOTO 03B |
0022: MOVLW 8C |
0023: MOVWF 04 |
0024: BTFSS 00.1 |
0025: GOTO 028 |
0026: BTFSC 0C.1 |
0027: GOTO 03D |
0028: MOVF 22,W |
0029: MOVWF 04 |
002A: MOVF 23,W |
002B: MOVWF 77 |
002C: MOVF 24,W |
002D: MOVWF 78 |
002E: MOVF 25,W |
002F: MOVWF 79 |
0030: MOVF 26,W |
0031: MOVWF 7A |
0032: MOVF 27,W |
0033: MOVWF 7B |
0034: MOVF 28,W |
0035: MOVWF 0A |
0036: SWAPF 21,W |
0037: MOVWF 03 |
0038: SWAPF 7F,F |
0039: SWAPF 7F,W |
003A: RETFIE |
003B: BCF 0A.3 |
003C: GOTO 03F |
003D: BCF 0A.3 |
003E: GOTO 053 |
.................... #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) |
* |
0043: MOVLW 08 |
0044: SUBWF 3F,F |
0045: BTFSS 03.0 |
0046: GOTO 052 |
0047: MOVLW 3F |
0048: MOVWF 04 |
0049: BCF 03.0 |
004A: RRF 00,F |
004B: MOVF 00,W |
004C: BTFSC 03.2 |
004D: GOTO 052 |
004E: GOTO 050 |
004F: CLRWDT |
0050: DECFSZ 00,F |
0051: GOTO 04F |
0052: RETLW 00 |
* |
0071: MOVLW 3C |
0072: MOVWF 04 |
0073: MOVF 00,W |
0074: BTFSC 03.2 |
0075: GOTO 088 |
0076: MOVLW 02 |
0077: MOVWF 78 |
0078: MOVLW BF |
0079: MOVWF 77 |
007A: CLRWDT |
007B: DECFSZ 77,F |
007C: GOTO 07A |
007D: DECFSZ 78,F |
007E: GOTO 078 |
007F: MOVLW 96 |
0080: MOVWF 77 |
0081: DECFSZ 77,F |
0082: GOTO 081 |
0083: NOP |
0084: NOP |
0085: CLRWDT |
0086: DECFSZ 00,F |
0087: GOTO 076 |
0088: 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//27 |
.................... #define BEAR3 45 |
.................... #define SPEEDMAX 140 // ANSMANN=140; GP=120; maximalni rozumna rychlost |
.................... #define R17 255 // X nasobek rozumne rychlosti |
.................... #define DOZNIVANI 10 |
.................... #define L1 1 // cara vlevo |
.................... #define L2 2 // cara vlevo |
.................... #define L3 3 // cara vlevo |
.................... #define S 0 // casa mezi sensory |
.................... #define R1 -1 // cara vpravo |
.................... #define R2 -2 // cara vpravo |
.................... #define R3 -3 // cara vpravo |
.................... |
.................... // servo |
.................... #define SERVO PIN_A2 |
.................... |
.................... // 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 |
* |
021F: BCF 03.5 |
0220: 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 rovinka; // pocitadlo na zjisteni rovinky |
.................... |
.................... short int preteceni; // flag preteceni timeru1 |
.................... |
.................... 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;} |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... /* |
.................... void diagnostika() |
.................... { |
.................... if(input(SW1))STOPR;STOPL;While(TRUE); |
.................... // if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
.................... // if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... #int_TIMER1 |
.................... TIMER1_isr() |
.................... { |
.................... preteceni = true; |
* |
003F: BSF 2F.0 |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
0040: BCF 0C.0 |
0041: BCF 0A.3 |
0042: GOTO 028 |
.................... #int_TIMER2 |
.................... TIMER2_isr() // ovladani serva |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
* |
0053: BSF 03.5 |
0054: BCF 05.2 |
0055: BCF 03.5 |
0056: BSF 05.2 |
.................... delay_us(1000); |
0057: CLRWDT |
0058: MOVLW 09 |
0059: MOVWF 3E |
005A: MOVLW 6D |
005B: MOVWF 3F |
005C: CALL 043 |
005D: DECFSZ 3E,F |
005E: GOTO 05A |
.................... for(n=uhel; n>0; n--) Delay_us(2); |
005F: MOVF 2C,W |
0060: MOVWF 3D |
0061: MOVF 3D,F |
0062: BTFSC 03.2 |
0063: GOTO 06A |
0064: CLRWDT |
0065: NOP |
0066: NOP |
0067: NOP |
0068: DECF 3D,F |
0069: GOTO 061 |
.................... output_low(SERVO); |
006A: BSF 03.5 |
006B: BCF 05.2 |
006C: BCF 03.5 |
006D: BCF 05.2 |
.................... } |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
006E: BCF 0C.1 |
006F: BCF 0A.3 |
0070: GOTO 028 |
.................... 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 |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void objizdka() |
.................... { |
.................... int8 shure=0; |
* |
0089: CLRF 38 |
.................... unsigned int16 n; |
.................... |
.................... BR;BL; |
008A: BSF 03.5 |
008B: BCF 05.6 |
008C: BCF 03.5 |
008D: BCF 05.6 |
008E: BSF 03.5 |
008F: BCF 05.7 |
0090: BCF 03.5 |
0091: BSF 05.7 |
0092: BSF 03.5 |
0093: BCF 05.0 |
0094: BCF 03.5 |
0095: BCF 05.0 |
0096: BSF 03.5 |
0097: BCF 05.1 |
0098: BCF 03.5 |
0099: BSF 05.1 |
.................... Delay_ms(400); |
009A: MOVLW 02 |
009B: MOVWF 3B |
009C: MOVLW C8 |
009D: MOVWF 3C |
009E: CALL 071 |
009F: DECFSZ 3B,F |
00A0: GOTO 09C |
.................... STOPR;STOPL; |
00A1: BSF 03.5 |
00A2: BCF 05.6 |
00A3: BCF 03.5 |
00A4: BCF 05.6 |
00A5: BSF 03.5 |
00A6: BCF 05.7 |
00A7: BCF 03.5 |
00A8: BCF 05.7 |
00A9: BSF 03.5 |
00AA: BCF 05.0 |
00AB: BCF 03.5 |
00AC: BCF 05.0 |
00AD: BSF 03.5 |
00AE: BCF 05.1 |
00AF: BCF 03.5 |
00B0: BCF 05.1 |
.................... |
.................... // toceni na miste dokud nezmizi cihla |
.................... //------------------------------------ |
.................... uhel=KOLMO1; // nastav zataceci kolecko kolmo na osu robota |
00B1: MOVLW E1 |
00B2: MOVWF 2C |
.................... Delay_ms(100); |
00B3: MOVLW 64 |
00B4: MOVWF 3C |
00B5: CALL 071 |
.................... BL;FR; |
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: BSF 03.5 |
00BF: BCF 05.7 |
00C0: BCF 03.5 |
00C1: BCF 05.7 |
00C2: BSF 03.5 |
00C3: BCF 05.6 |
00C4: BCF 03.5 |
00C5: BSF 05.6 |
.................... Delay_ms(200); // minimalni toceni, kdyby se zastavilo sikmo k cihle |
00C6: MOVLW C8 |
00C7: MOVWF 3C |
00C8: CALL 071 |
.................... |
.................... While(bit_test(sensors,7)) // toc, dokud neni cihla z primeho senzoru |
.................... { |
00C9: BTFSS 2A.7 |
00CA: GOTO 0DA |
.................... sensors = spi_read(0); // cteni senzoru |
00CB: MOVF 13,W |
00CC: CLRF 13 |
00CD: BSF 03.5 |
00CE: BTFSC 14.0 |
00CF: GOTO 0D2 |
00D0: BCF 03.5 |
00D1: GOTO 0CD |
00D2: BCF 03.5 |
00D3: MOVF 13,W |
00D4: MOVWF 2A |
.................... sensors=~sensors; |
00D5: COMF 2A,F |
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
00D6: MOVLW 04 |
00D7: MOVWF 3C |
00D8: CALL 071 |
.................... } |
00D9: GOTO 0C9 |
.................... STOPL; STOPR; |
00DA: BSF 03.5 |
00DB: BCF 05.0 |
00DC: BCF 03.5 |
00DD: BCF 05.0 |
00DE: BSF 03.5 |
00DF: BCF 05.1 |
00E0: BCF 03.5 |
00E1: BCF 05.1 |
00E2: BSF 03.5 |
00E3: BCF 05.6 |
00E4: BCF 03.5 |
00E5: BCF 05.6 |
00E6: BSF 03.5 |
00E7: BCF 05.7 |
00E8: BCF 03.5 |
00E9: BCF 05.7 |
.................... |
.................... for (n=0;n<1000;n++) // vystred se na hranu cihly |
00EA: CLRF 3A |
00EB: CLRF 39 |
00EC: MOVF 3A,W |
00ED: SUBLW 03 |
00EE: BTFSS 03.0 |
00EF: GOTO 157 |
00F0: BTFSS 03.2 |
00F1: GOTO 0F6 |
00F2: MOVF 39,W |
00F3: SUBLW E7 |
00F4: BTFSS 03.0 |
00F5: GOTO 157 |
.................... { |
.................... if(!input(CIHLA)) |
00F6: BSF 03.5 |
00F7: BSF 05.3 |
00F8: BCF 03.5 |
00F9: BTFSC 05.3 |
00FA: GOTO 126 |
.................... { |
.................... // BL; FR; |
.................... GO(L,B,180);GO(R,F,160); // zapni motory PWM podle promenych Lmotor a Rmotor |
00FB: MOVF 01,W |
00FC: SUBLW B4 |
00FD: BTFSS 03.0 |
00FE: GOTO 108 |
00FF: BSF 03.5 |
0100: BCF 05.0 |
0101: BCF 03.5 |
0102: BCF 05.0 |
0103: BSF 03.5 |
0104: BCF 05.1 |
0105: BCF 03.5 |
0106: BSF 05.1 |
0107: GOTO 110 |
0108: BSF 03.5 |
0109: BCF 05.0 |
010A: BCF 03.5 |
010B: BCF 05.0 |
010C: BSF 03.5 |
010D: BCF 05.1 |
010E: BCF 03.5 |
010F: BCF 05.1 |
0110: MOVF 01,W |
0111: SUBLW A0 |
0112: BTFSS 03.0 |
0113: GOTO 11D |
0114: BSF 03.5 |
0115: BCF 05.7 |
0116: BCF 03.5 |
0117: BCF 05.7 |
0118: BSF 03.5 |
0119: BCF 05.6 |
011A: BCF 03.5 |
011B: BSF 05.6 |
011C: GOTO 125 |
011D: BSF 03.5 |
011E: BCF 05.6 |
011F: BCF 03.5 |
0120: BCF 05.6 |
0121: BSF 03.5 |
0122: BCF 05.7 |
0123: BCF 03.5 |
0124: BCF 05.7 |
.................... } else |
0125: GOTO 150 |
.................... { |
.................... // FL; BR; |
.................... GO(L,F,180);GO(R,B,160); // zapni motory PWM podle promenych Lmotor a Rmotor |
0126: MOVF 01,W |
0127: SUBLW B4 |
0128: BTFSS 03.0 |
0129: GOTO 133 |
012A: BSF 03.5 |
012B: BCF 05.1 |
012C: BCF 03.5 |
012D: BCF 05.1 |
012E: BSF 03.5 |
012F: BCF 05.0 |
0130: BCF 03.5 |
0131: BSF 05.0 |
0132: GOTO 13B |
0133: BSF 03.5 |
0134: BCF 05.0 |
0135: BCF 03.5 |
0136: BCF 05.0 |
0137: BSF 03.5 |
0138: BCF 05.1 |
0139: BCF 03.5 |
013A: BCF 05.1 |
013B: MOVF 01,W |
013C: SUBLW A0 |
013D: BTFSS 03.0 |
013E: GOTO 148 |
013F: BSF 03.5 |
0140: BCF 05.6 |
0141: BCF 03.5 |
0142: BCF 05.6 |
0143: BSF 03.5 |
0144: BCF 05.7 |
0145: BCF 03.5 |
0146: BSF 05.7 |
0147: GOTO 150 |
0148: BSF 03.5 |
0149: BCF 05.6 |
014A: BCF 03.5 |
014B: BCF 05.6 |
014C: BSF 03.5 |
014D: BCF 05.7 |
014E: BCF 03.5 |
014F: BCF 05.7 |
.................... }; |
.................... delay_ms(1); |
0150: MOVLW 01 |
0151: MOVWF 3C |
0152: CALL 071 |
.................... } |
0153: INCF 39,F |
0154: BTFSC 03.2 |
0155: INCF 3A,F |
0156: GOTO 0EC |
.................... STOPR;STOPL; |
0157: BSF 03.5 |
0158: BCF 05.6 |
0159: BCF 03.5 |
015A: BCF 05.6 |
015B: BSF 03.5 |
015C: BCF 05.7 |
015D: BCF 03.5 |
015E: BCF 05.7 |
015F: BSF 03.5 |
0160: BCF 05.0 |
0161: BCF 03.5 |
0162: BCF 05.0 |
0163: BSF 03.5 |
0164: BCF 05.1 |
0165: BCF 03.5 |
0166: BCF 05.1 |
.................... |
.................... uhel=STRED; // dopredu |
0167: MOVLW 80 |
0168: MOVWF 2C |
.................... delay_ms(100); |
0169: MOVLW 64 |
016A: MOVWF 3C |
016B: CALL 071 |
.................... FR; FL; |
016C: BSF 03.5 |
016D: BCF 05.7 |
016E: BCF 03.5 |
016F: BCF 05.7 |
0170: BSF 03.5 |
0171: BCF 05.6 |
0172: BCF 03.5 |
0173: BSF 05.6 |
0174: BSF 03.5 |
0175: BCF 05.1 |
0176: BCF 03.5 |
0177: BCF 05.1 |
0178: BSF 03.5 |
0179: BCF 05.0 |
017A: BCF 03.5 |
017B: BSF 05.0 |
.................... delay_ms(500); |
017C: MOVLW 02 |
017D: MOVWF 3B |
017E: MOVLW FA |
017F: MOVWF 3C |
0180: CALL 071 |
0181: DECFSZ 3B,F |
0182: GOTO 17E |
.................... BL;BR; |
0183: BSF 03.5 |
0184: BCF 05.0 |
0185: BCF 03.5 |
0186: BCF 05.0 |
0187: BSF 03.5 |
0188: BCF 05.1 |
0189: BCF 03.5 |
018A: BSF 05.1 |
018B: BSF 03.5 |
018C: BCF 05.6 |
018D: BCF 03.5 |
018E: BCF 05.6 |
018F: BSF 03.5 |
0190: BCF 05.7 |
0191: BCF 03.5 |
0192: BSF 05.7 |
.................... delay_ms(200); |
0193: MOVLW C8 |
0194: MOVWF 3C |
0195: CALL 071 |
.................... STOPL;STOPR; |
0196: BSF 03.5 |
0197: BCF 05.0 |
0198: BCF 03.5 |
0199: BCF 05.0 |
019A: BSF 03.5 |
019B: BCF 05.1 |
019C: BCF 03.5 |
019D: BCF 05.1 |
019E: BSF 03.5 |
019F: BCF 05.6 |
01A0: BCF 03.5 |
01A1: BCF 05.6 |
01A2: BSF 03.5 |
01A3: BCF 05.7 |
01A4: BCF 03.5 |
01A5: BCF 05.7 |
.................... |
.................... uhel=STRED+BEAR3; // doprava |
01A6: MOVLW AD |
01A7: MOVWF 2C |
.................... delay_ms(100); |
01A8: MOVLW 64 |
01A9: MOVWF 3C |
01AA: CALL 071 |
.................... FL; |
01AB: BSF 03.5 |
01AC: BCF 05.1 |
01AD: BCF 03.5 |
01AE: BCF 05.1 |
01AF: BSF 03.5 |
01B0: BCF 05.0 |
01B1: BCF 03.5 |
01B2: BSF 05.0 |
.................... delay_ms(400); |
01B3: MOVLW 02 |
01B4: MOVWF 3B |
01B5: MOVLW C8 |
01B6: MOVWF 3C |
01B7: CALL 071 |
01B8: DECFSZ 3B,F |
01B9: GOTO 1B5 |
.................... uhel=STRED+BEAR2; // min doprava |
01BA: MOVLW 99 |
01BB: MOVWF 2C |
.................... FL;FR; |
01BC: BSF 03.5 |
01BD: BCF 05.1 |
01BE: BCF 03.5 |
01BF: BCF 05.1 |
01C0: BSF 03.5 |
01C1: BCF 05.0 |
01C2: BCF 03.5 |
01C3: BSF 05.0 |
01C4: BSF 03.5 |
01C5: BCF 05.7 |
01C6: BCF 03.5 |
01C7: BCF 05.7 |
01C8: BSF 03.5 |
01C9: BCF 05.6 |
01CA: BCF 03.5 |
01CB: BSF 05.6 |
.................... delay_ms(100); |
01CC: MOVLW 64 |
01CD: MOVWF 3C |
01CE: CALL 071 |
.................... uhel=STRED+BEAR1; // jeste min doprava |
01CF: MOVLW 8A |
01D0: MOVWF 2C |
.................... FL;FR; |
01D1: BSF 03.5 |
01D2: BCF 05.1 |
01D3: BCF 03.5 |
01D4: BCF 05.1 |
01D5: BSF 03.5 |
01D6: BCF 05.0 |
01D7: BCF 03.5 |
01D8: BSF 05.0 |
01D9: BSF 03.5 |
01DA: BCF 05.7 |
01DB: BCF 03.5 |
01DC: BCF 05.7 |
01DD: BSF 03.5 |
01DE: BCF 05.6 |
01DF: BCF 03.5 |
01E0: BSF 05.6 |
.................... delay_ms(200); |
01E1: MOVLW C8 |
01E2: MOVWF 3C |
01E3: CALL 071 |
.................... /* |
.................... uhel=STRED; // rovne |
.................... delay_ms(100); |
.................... FL;FR; |
.................... delay_ms(100); |
.................... */ |
.................... While((sensors & 0b01111111)!=0) //dokud neni cara |
.................... { |
01E4: MOVF 2A,W |
01E5: ANDLW 7F |
01E6: BTFSC 03.2 |
01E7: GOTO 1F7 |
.................... sensors = spi_read(0); // cteni senzoru |
01E8: MOVF 13,W |
01E9: CLRF 13 |
01EA: BSF 03.5 |
01EB: BTFSC 14.0 |
01EC: GOTO 1EF |
01ED: BCF 03.5 |
01EE: GOTO 1EA |
01EF: BCF 03.5 |
01F0: MOVF 13,W |
01F1: MOVWF 2A |
.................... sensors=~sensors; |
01F2: COMF 2A,F |
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
01F3: MOVLW 04 |
01F4: MOVWF 3C |
01F5: CALL 071 |
.................... } |
01F6: GOTO 1E4 |
.................... BL; BR; |
01F7: BSF 03.5 |
01F8: BCF 05.0 |
01F9: BCF 03.5 |
01FA: BCF 05.0 |
01FB: BSF 03.5 |
01FC: BCF 05.1 |
01FD: BCF 03.5 |
01FE: BSF 05.1 |
01FF: BSF 03.5 |
0200: BCF 05.6 |
0201: BCF 03.5 |
0202: BCF 05.6 |
0203: BSF 03.5 |
0204: BCF 05.7 |
0205: BCF 03.5 |
0206: BSF 05.7 |
.................... delay_ms(400); |
0207: MOVLW 02 |
0208: MOVWF 3B |
0209: MOVLW C8 |
020A: MOVWF 3C |
020B: CALL 071 |
020C: DECFSZ 3B,F |
020D: GOTO 209 |
.................... |
.................... uhel=STRED-BEAR3; // doleva |
020E: MOVLW 53 |
020F: MOVWF 2C |
.................... } |
0210: BCF 0A.3 |
0211: GOTO 317 (RETURN) |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
0212: CLRF 04 |
0213: MOVLW 1F |
0214: ANDWF 03,F |
0215: MOVLW 70 |
0216: BSF 03.5 |
0217: MOVWF 0F |
0218: BCF 1F.4 |
0219: BCF 1F.5 |
021A: MOVF 1B,W |
021B: ANDLW 80 |
021C: MOVWF 1B |
021D: MOVLW 07 |
021E: MOVWF 1C |
.................... |
.................... unsigned int8 n; |
.................... unsigned int8 i,v; |
.................... unsigned int8 last_sensors; |
.................... |
.................... setup_adc_ports(NO_ANALOGS); |
* |
0221: BSF 03.5 |
0222: BCF 1F.4 |
0223: BCF 1F.5 |
0224: MOVF 1B,W |
0225: ANDLW 80 |
0226: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
0227: BCF 1F.6 |
0228: BCF 03.5 |
0229: BSF 1F.6 |
022A: BSF 1F.7 |
022B: BSF 03.5 |
022C: BCF 1F.7 |
022D: BCF 03.5 |
022E: BSF 1F.0 |
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16); |
022F: BCF 14.5 |
0230: BSF 03.5 |
0231: BCF 06.2 |
0232: BSF 06.1 |
0233: BCF 06.4 |
0234: MOVLW 31 |
0235: BCF 03.5 |
0236: MOVWF 14 |
0237: MOVLW 00 |
0238: BSF 03.5 |
0239: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
023A: MOVF 01,W |
023B: ANDLW C7 |
023C: IORLW 08 |
023D: MOVWF 01 |
.................... // setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); |
.................... setup_timer_1(T1_DISABLED|T1_DIV_BY_8); |
023E: MOVLW 30 |
023F: BCF 03.5 |
0240: MOVWF 10 |
.................... setup_timer_2(T2_DIV_BY_16,140,16); |
0241: MOVLW 78 |
0242: MOVWF 78 |
0243: IORLW 06 |
0244: MOVWF 12 |
0245: MOVLW 8C |
0246: BSF 03.5 |
0247: MOVWF 12 |
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC); |
0248: MOVLW 72 |
0249: MOVWF 0F |
.................... |
.................... STOPR; STOPL; // zastav motory |
024A: BCF 05.6 |
024B: BCF 03.5 |
024C: BCF 05.6 |
024D: BSF 03.5 |
024E: BCF 05.7 |
024F: BCF 03.5 |
0250: BCF 05.7 |
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 |
.................... Lmotor=0;Rmotor=0; |
0259: CLRF 31 |
025A: CLRF 30 |
025B: CLRF 33 |
025C: CLRF 32 |
.................... |
.................... uhel = STRED; // nastav zadni kolecko na stred |
025D: MOVLW 80 |
025E: MOVWF 2C |
.................... rovinka = 0; |
025F: CLRF 2E |
.................... |
.................... enable_interrupts(INT_TIMER2); |
0260: BSF 03.5 |
0261: BSF 0C.1 |
.................... // enable_interrupts(INT_TIMER1); |
.................... enable_interrupts(GLOBAL); |
0262: MOVLW C0 |
0263: BCF 03.5 |
0264: IORWF 0B,F |
.................... |
.................... output_low(IRTX); // zapni IR vysilac |
0265: BSF 03.5 |
0266: BCF 06.2 |
0267: BCF 03.5 |
0268: BCF 06.2 |
.................... |
.................... delay_ms(1000); |
0269: MOVLW 04 |
026A: MOVWF 38 |
026B: MOVLW FA |
026C: MOVWF 3C |
026D: CALL 071 |
026E: DECFSZ 38,F |
026F: GOTO 26B |
.................... |
.................... //!!!! |
.................... speed=SPEEDMAX; |
0270: MOVLW 8C |
0271: MOVWF 2D |
.................... |
.................... while(true) |
.................... { |
.................... |
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor |
0272: MOVF 01,W |
0273: BTFSS 00.7 |
0274: GOTO 278 |
0275: BTFSS 31.7 |
0276: GOTO 280 |
0277: GOTO 27A |
0278: BTFSC 31.7 |
0279: GOTO 289 |
027A: MOVF 31,F |
027B: BTFSS 03.2 |
027C: GOTO 280 |
027D: SUBWF 30,W |
027E: BTFSS 03.0 |
027F: GOTO 289 |
0280: BSF 03.5 |
0281: BCF 05.1 |
0282: BCF 03.5 |
0283: BCF 05.1 |
0284: BSF 03.5 |
0285: BCF 05.0 |
0286: BCF 03.5 |
0287: BSF 05.0 |
0288: GOTO 291 |
0289: BSF 03.5 |
028A: BCF 05.0 |
028B: BCF 03.5 |
028C: BCF 05.0 |
028D: BSF 03.5 |
028E: BCF 05.1 |
028F: BCF 03.5 |
0290: BCF 05.1 |
0291: MOVF 01,W |
0292: BTFSS 00.7 |
0293: GOTO 297 |
0294: BTFSS 33.7 |
0295: GOTO 29F |
0296: GOTO 299 |
0297: BTFSC 33.7 |
0298: GOTO 2A8 |
0299: MOVF 33,F |
029A: BTFSS 03.2 |
029B: GOTO 29F |
029C: SUBWF 32,W |
029D: BTFSS 03.0 |
029E: GOTO 2A8 |
029F: BSF 03.5 |
02A0: BCF 05.7 |
02A1: BCF 03.5 |
02A2: BCF 05.7 |
02A3: BSF 03.5 |
02A4: BCF 05.6 |
02A5: BCF 03.5 |
02A6: BSF 05.6 |
02A7: GOTO 2B0 |
02A8: BSF 03.5 |
02A9: BCF 05.6 |
02AA: BCF 03.5 |
02AB: BCF 05.6 |
02AC: BSF 03.5 |
02AD: BCF 05.7 |
02AE: BCF 03.5 |
02AF: BCF 05.7 |
.................... |
.................... delay_us(1500); // cekani na SLAVE, nez pripravi data od cidel |
02B0: CLRWDT |
02B1: MOVLW 01 |
02B2: MOVWF 3C |
02B3: CALL 071 |
02B4: MOVLW 02 |
02B5: MOVWF 38 |
02B6: CLRF 29 |
02B7: BTFSC 0B.7 |
02B8: BSF 29.7 |
02B9: BCF 0B.7 |
02BA: MOVLW F7 |
02BB: MOVWF 3F |
02BC: CALL 043 |
02BD: BTFSC 29.7 |
02BE: BSF 0B.7 |
02BF: DECFSZ 38,F |
02C0: GOTO 2B6 |
.................... |
.................... output_low(STROBE); // vypni zobrazovani na posuvnem registru |
02C1: BSF 03.5 |
02C2: BCF 06.0 |
02C3: BCF 03.5 |
02C4: BCF 06.0 |
.................... sensors = spi_read(0); // cteni senzoru |
02C5: MOVF 13,W |
02C6: CLRF 13 |
02C7: BSF 03.5 |
02C8: BTFSC 14.0 |
02C9: GOTO 2CC |
02CA: BCF 03.5 |
02CB: GOTO 2C7 |
02CC: BCF 03.5 |
02CD: MOVF 13,W |
02CE: MOVWF 2A |
.................... sensors=~sensors; |
02CF: COMF 2A,F |
.................... output_high(STROBE); // zobraz data na posuvnem registru |
02D0: BSF 03.5 |
02D1: BCF 06.0 |
02D2: BCF 03.5 |
02D3: BSF 06.0 |
.................... |
.................... i=0; // havarijni kod |
02D4: CLRF 35 |
.................... for (n=0; n<=6; n++) |
02D5: CLRF 34 |
02D6: MOVF 34,W |
02D7: SUBLW 06 |
02D8: BTFSS 03.0 |
02D9: GOTO 2E8 |
.................... { |
.................... if(bit_test(sensors,n)) i++; |
02DA: MOVF 2A,W |
02DB: MOVWF 77 |
02DC: MOVF 34,W |
02DD: MOVWF 78 |
02DE: BTFSC 03.2 |
02DF: GOTO 2E4 |
02E0: BCF 03.0 |
02E1: RRF 77,F |
02E2: DECFSZ 78,F |
02E3: GOTO 2E0 |
02E4: BTFSC 77.0 |
02E5: INCF 35,F |
.................... } |
02E6: INCF 34,F |
02E7: GOTO 2D6 |
.................... if (i>3) // zastavi, kdyz je cerno pod vice nez tremi cidly |
02E8: MOVF 35,W |
02E9: SUBLW 03 |
02EA: BTFSC 03.0 |
02EB: GOTO 314 |
.................... { |
.................... BL; BR; |
02EC: BSF 03.5 |
02ED: BCF 05.0 |
02EE: BCF 03.5 |
02EF: BCF 05.0 |
02F0: BSF 03.5 |
02F1: BCF 05.1 |
02F2: BCF 03.5 |
02F3: BSF 05.1 |
02F4: BSF 03.5 |
02F5: BCF 05.6 |
02F6: BCF 03.5 |
02F7: BCF 05.6 |
02F8: BSF 03.5 |
02F9: BCF 05.7 |
02FA: BCF 03.5 |
02FB: BSF 05.7 |
.................... delay_ms(300); |
02FC: MOVLW 02 |
02FD: MOVWF 38 |
02FE: MOVLW 96 |
02FF: MOVWF 3C |
0300: CALL 071 |
0301: DECFSZ 38,F |
0302: GOTO 2FE |
.................... STOPR; STOPL; |
0303: BSF 03.5 |
0304: BCF 05.6 |
0305: BCF 03.5 |
0306: BCF 05.6 |
0307: BSF 03.5 |
0308: BCF 05.7 |
0309: BCF 03.5 |
030A: BCF 05.7 |
030B: BSF 03.5 |
030C: BCF 05.0 |
030D: BCF 03.5 |
030E: BCF 05.0 |
030F: BSF 03.5 |
0310: BCF 05.1 |
0311: BCF 03.5 |
0312: BCF 05.1 |
.................... While(true); |
0313: GOTO 313 |
.................... }; |
.................... |
.................... if(bit_test(sensors,7)) // detekce cihly |
0314: BTFSS 2A.7 |
0315: GOTO 317 |
.................... { |
.................... objizdka(); // objede cihlu |
0316: GOTO 089 |
.................... } |
.................... |
.................... |
.................... if(bit_test(sensors,3)) //...|...// |
0317: BTFSS 2A.3 |
0318: GOTO 32B |
.................... { |
.................... uhel=STRED; |
0319: MOVLW 80 |
031A: MOVWF 2C |
.................... Lmotor=speed; |
031B: CLRF 7A |
031C: MOVF 2D,W |
031D: MOVWF 30 |
031E: MOVF 7A,W |
031F: MOVWF 31 |
.................... Rmotor=speed; |
0320: CLRF 7A |
0321: MOVF 2D,W |
0322: MOVWF 32 |
0323: MOVF 7A,W |
0324: MOVWF 33 |
.................... line=S; |
0325: CLRF 2B |
.................... // set_timer1(0); |
.................... if (rovinka < 255) rovinka++; |
0326: INCFSZ 2E,W |
0327: GOTO 329 |
0328: GOTO 32A |
0329: INCF 2E,F |
.................... continue; |
032A: GOTO 272 |
.................... } |
.................... |
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
032B: BTFSS 2A.0 |
032C: GOTO 339 |
.................... { |
.................... uhel=STRED - BEAR3; |
032D: MOVLW 53 |
032E: MOVWF 2C |
.................... Lmotor=0; |
032F: CLRF 31 |
0330: CLRF 30 |
.................... Rmotor=speed; |
0331: CLRF 7A |
0332: MOVF 2D,W |
0333: MOVWF 32 |
0334: MOVF 7A,W |
0335: MOVWF 33 |
.................... line=L3; |
0336: MOVLW 03 |
0337: MOVWF 2B |
.................... // set_timer1(0); |
.................... continue; |
0338: GOTO 272 |
.................... } |
.................... |
.................... if(bit_test(sensors,6)) //......|// |
0339: BTFSS 2A.6 |
033A: GOTO 347 |
.................... { |
.................... uhel=STRED + BEAR3; |
033B: MOVLW AD |
033C: MOVWF 2C |
.................... Rmotor=0; |
033D: CLRF 33 |
033E: CLRF 32 |
.................... Lmotor=speed; |
033F: CLRF 7A |
0340: MOVF 2D,W |
0341: MOVWF 30 |
0342: MOVF 7A,W |
0343: MOVWF 31 |
.................... line=R3; |
0344: MOVLW FD |
0345: MOVWF 2B |
.................... // set_timer1(0); |
.................... continue; |
0346: GOTO 272 |
.................... } |
.................... |
.................... if(bit_test(sensors,1)) //.|.....// |
0347: BTFSS 2A.1 |
0348: GOTO 359 |
.................... { |
.................... uhel=STRED - BEAR2; |
0349: MOVLW 67 |
034A: MOVWF 2C |
.................... Lmotor=speed-50; |
034B: MOVLW 32 |
034C: SUBWF 2D,W |
034D: CLRF 7A |
034E: MOVWF 30 |
034F: MOVF 7A,W |
0350: MOVWF 31 |
.................... Rmotor=speed; |
0351: CLRF 7A |
0352: MOVF 2D,W |
0353: MOVWF 32 |
0354: MOVF 7A,W |
0355: MOVWF 33 |
.................... line=L2; |
0356: MOVLW 02 |
0357: MOVWF 2B |
.................... // set_timer1(0); |
.................... continue; |
0358: GOTO 272 |
.................... } |
.................... |
.................... if(bit_test(sensors,5)) //.....|.// |
0359: BTFSS 2A.5 |
035A: GOTO 36B |
.................... { |
.................... uhel=STRED + BEAR2; |
035B: MOVLW 99 |
035C: MOVWF 2C |
.................... Rmotor=speed-50; |
035D: MOVLW 32 |
035E: SUBWF 2D,W |
035F: CLRF 7A |
0360: MOVWF 32 |
0361: MOVF 7A,W |
0362: MOVWF 33 |
.................... Lmotor=speed; |
0363: CLRF 7A |
0364: MOVF 2D,W |
0365: MOVWF 30 |
0366: MOVF 7A,W |
0367: MOVWF 31 |
.................... line=R2; |
0368: MOVLW FE |
0369: MOVWF 2B |
.................... // set_timer1(0); |
.................... continue; |
036A: GOTO 272 |
.................... } |
.................... |
.................... if (bit_test(sensors,2)) //..|....// |
036B: BTFSS 2A.2 |
036C: GOTO 380 |
.................... { |
.................... uhel=STRED - BEAR1; |
036D: MOVLW 76 |
036E: MOVWF 2C |
.................... Lmotor=speed; |
036F: CLRF 7A |
0370: MOVF 2D,W |
0371: MOVWF 30 |
0372: MOVF 7A,W |
0373: MOVWF 31 |
.................... Rmotor=speed; |
0374: CLRF 7A |
0375: MOVF 2D,W |
0376: MOVWF 32 |
0377: MOVF 7A,W |
0378: MOVWF 33 |
.................... line=L1; |
0379: MOVLW 01 |
037A: MOVWF 2B |
.................... // set_timer1(0); |
.................... if (rovinka<255) rovinka++; |
037B: INCFSZ 2E,W |
037C: GOTO 37E |
037D: GOTO 37F |
037E: INCF 2E,F |
.................... continue; |
037F: GOTO 272 |
.................... } |
.................... |
.................... if (bit_test(sensors,4)) //....|..// |
0380: BTFSS 2A.4 |
0381: GOTO 395 |
.................... { |
.................... uhel=STRED + BEAR1; |
0382: MOVLW 8A |
0383: MOVWF 2C |
.................... Rmotor=speed; |
0384: CLRF 7A |
0385: MOVF 2D,W |
0386: MOVWF 32 |
0387: MOVF 7A,W |
0388: MOVWF 33 |
.................... Lmotor=speed; |
0389: CLRF 7A |
038A: MOVF 2D,W |
038B: MOVWF 30 |
038C: MOVF 7A,W |
038D: MOVWF 31 |
.................... line=R1; |
038E: MOVLW FF |
038F: MOVWF 2B |
.................... // set_timer1(0); |
.................... if (rovinka<255) rovinka++; |
0390: INCFSZ 2E,W |
0391: GOTO 393 |
0392: GOTO 394 |
0393: INCF 2E,F |
.................... continue; |
0394: GOTO 272 |
.................... } |
.................... |
.................... |
.................... if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate |
0395: MOVF 2B,W |
0396: SUBLW 03 |
0397: BTFSC 03.2 |
0398: GOTO 39D |
0399: MOVF 2B,W |
039A: SUBLW FD |
039B: BTFSS 03.2 |
039C: GOTO 3BE |
.................... { |
.................... if (rovinka>50) |
039D: MOVF 2E,W |
039E: SUBLW 32 |
039F: BTFSC 03.0 |
03A0: GOTO 3BB |
.................... { |
.................... BL; BR; |
03A1: BSF 03.5 |
03A2: BCF 05.0 |
03A3: BCF 03.5 |
03A4: BCF 05.0 |
03A5: BSF 03.5 |
03A6: BCF 05.1 |
03A7: BCF 03.5 |
03A8: BSF 05.1 |
03A9: BSF 03.5 |
03AA: BCF 05.6 |
03AB: BCF 03.5 |
03AC: BCF 05.6 |
03AD: BSF 03.5 |
03AE: BCF 05.7 |
03AF: BCF 03.5 |
03B0: BSF 05.7 |
.................... Delay_ms(100); |
03B1: MOVLW 64 |
03B2: MOVWF 3C |
03B3: CALL 071 |
.................... if (rovinka>250) delay_ms(50); |
03B4: MOVF 2E,W |
03B5: SUBLW FA |
03B6: BTFSC 03.0 |
03B7: GOTO 3BB |
03B8: MOVLW 32 |
03B9: MOVWF 3C |
03BA: CALL 071 |
.................... }; |
.................... rovinka=0; |
03BB: CLRF 2E |
.................... speed=SPEEDMAX; |
03BC: MOVLW 8C |
03BD: MOVWF 2D |
.................... }; |
.................... } |
03BE: GOTO 272 |
.................... } |
03BF: 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/07 1.funkcni/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\istrobot\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\istrobot\3Orbis\main.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
4= |
5= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
/roboti/3Orbis/bak/07 1.funkcni/master/main.SYM |
---|
0,0 → 1,73 |
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 rovinka |
02F.0 preteceni |
030-031 Lmotor |
032-033 Rmotor |
034 main.n |
035 main.i |
036 main.v |
037 main.last_sensors |
038 objizdka.shure |
038 main.@SCRATCH |
039-03A objizdka.n |
03B objizdka.@SCRATCH |
03C @delay_ms1.P1 |
03D TIMER2_isr.n |
03E TIMER2_isr.@SCRATCH |
03F @delay_us1.P1 |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
0071 @delay_ms1 |
0043 @delay_us1 |
003F TIMER1_isr |
0053 TIMER2_isr |
0089 objizdka |
0212 main |
0212 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\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\istrobot\3Orbis\main.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sta |
/roboti/3Orbis/bak/07 1.funkcni/master/main.c |
---|
0,0 → 1,350 |
#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//27 |
#define BEAR3 45 |
#define SPEEDMAX 140 // ANSMANN=140; GP=120; maximalni rozumna rychlost |
#define R17 255 // X nasobek rozumne rychlosti |
#define DOZNIVANI 10 |
#define L1 1 // cara vlevo |
#define L2 2 // cara vlevo |
#define L3 3 // cara vlevo |
#define S 0 // casa mezi sensory |
#define R1 -1 // cara vpravo |
#define R2 -2 // cara vpravo |
#define R3 -3 // cara vpravo |
// servo |
#define SERVO PIN_A2 |
// 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 rovinka; // pocitadlo na zjisteni rovinky |
short int preteceni; // flag preteceni timeru1 |
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;} |
//////////////////////////////////////////////////////////////////////////////// |
/* |
void diagnostika() |
{ |
if(input(SW1))STOPR;STOPL;While(TRUE); |
// if(LSENSOR==true) output_high(LED2); else output_low(LED2); |
// if(RSENSOR==true) output_high(LED1); else output_low(LED1); |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
#int_TIMER1 |
TIMER1_isr() |
{ |
preteceni = true; |
} |
//////////////////////////////////////////////////////////////////////////////// |
#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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
int8 shure=0; |
unsigned int16 n; |
BR;BL; |
Delay_ms(400); |
STOPR;STOPL; |
// 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)) |
{ |
// BL; FR; |
GO(L,B,180);GO(R,F,160); // zapni motory PWM podle promenych Lmotor a Rmotor |
} else |
{ |
// FL; BR; |
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); |
/* |
uhel=STRED; // rovne |
delay_ms(100); |
FL;FR; |
delay_ms(100); |
*/ |
While((sensors & 0b01111111)!=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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int8 n; |
unsigned int8 i,v; |
unsigned int8 last_sensors; |
setup_adc_ports(NO_ANALOGS); |
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_INTERNAL|T1_DIV_BY_8); |
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(INT_TIMER1); |
enable_interrupts(GLOBAL); |
output_low(IRTX); // zapni IR vysilac |
delay_ms(1000); |
//!!!! |
speed=SPEEDMAX; |
while(true) |
{ |
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor |
delay_us(1500); // cekani na SLAVE, nez pripravi data od cidel |
output_low(STROBE); // vypni zobrazovani na posuvnem registru |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
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(bit_test(sensors,7)) // detekce cihly |
{ |
objizdka(); // objede cihlu |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
Lmotor=speed; |
Rmotor=speed; |
line=S; |
// set_timer1(0); |
if (rovinka < 255) rovinka++; |
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=speed; |
line=L3; |
// set_timer1(0); |
continue; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
uhel=STRED + BEAR3; |
Rmotor=0; |
Lmotor=speed; |
line=R3; |
// set_timer1(0); |
continue; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED - BEAR2; |
Lmotor=speed-50; |
Rmotor=speed; |
line=L2; |
// set_timer1(0); |
continue; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED + BEAR2; |
Rmotor=speed-50; |
Lmotor=speed; |
line=R2; |
// set_timer1(0); |
continue; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED - BEAR1; |
Lmotor=speed; |
Rmotor=speed; |
line=L1; |
// set_timer1(0); |
if (rovinka<255) rovinka++; |
continue; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED + BEAR1; |
Rmotor=speed; |
Lmotor=speed; |
line=R1; |
// set_timer1(0); |
if (rovinka<255) rovinka++; |
continue; |
} |
if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>50) |
{ |
BL; BR; |
Delay_ms(100); |
if (rovinka>250) delay_ms(50); |
}; |
rovinka=0; |
speed=SPEEDMAX; |
}; |
} |
} |
/roboti/3Orbis/bak/07 1.funkcni/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/07 1.funkcni/master/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/07 1.funkcni/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/07 1.funkcni/master/main.sta |
---|
0,0 → 1,34 |
ROM used: 960 (23%) |
960 (23%) including unused fragments |
1 Average locations per line |
3 Average locations per statement |
RAM used: 30 (17%) at main() level |
37 (21%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
351 281 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
1298 562 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 24 2 1 @delay_ms1 |
0 16 2 1 @delay_us1 |
0 4 0 0 TIMER1_isr |
0 30 3 2 TIMER2_isr |
0 393 41 4 objizdka |
0 430 45 5 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-0003E 59 0 |
0003F-007FF 897 1088 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/07 1.funkcni/master/main.tre |
---|
0,0 → 1,27 |
ÀÄmain |
ÃÄmain 0/430 Ram=5 |
³ ÃÄ??0?? |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄ@delay_us1 0/16 Ram=1 |
³ ÃÄ@delay_ms1 0/24 Ram=1 |
³ ÃÄobjizdka 0/393 Ram=4 |
³ ³ ÃÄ@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 |
³ ³ ÃÄ@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 |
ÃÄTIMER1_isr 0/4 Ram=0 |
ÀÄTIMER2_isr 0/30 Ram=2 |
ÀÄ@delay_us1 0/16 Ram=1 |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.BAK |
---|
0,0 → 1,147 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
#define CIHLA 50 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.HEX |
---|
0,0 → 1,39 |
:1000000000308A000428000084011F30830560301E |
:1000100083168F0086108312861483161F129F1278 |
:100020001B0880399B0007309C001F129F121B0881 |
:1000300080397F389B001F1383121F179F17831669 |
:100040009F1383121F14941283160611861406162A |
:100050003530831294004030831694000108C7396C |
:1000600008388100831290010030F80092000030BF |
:100070008316920007309C00050864000230F700E8 |
:10008000F70B4028000000001C0883120D13831694 |
:100090009D0108308312A100A200A3010030F800E6 |
:1000A0001F08C73978049F00A40164000230F700DC |
:1000B000F70B5828000000001F151F195D281E08A7 |
:1000C000A5000830F8001F08C73978049F002508EC |
:1000D0003B3C031C74282508283C0318732822087D |
:1000E0000139A404742824141F151F1975281E082B |
:1000F000A5001030F8001F08C73978049F002508B4 |
:100100003B3C031C8C282508283C03188B2822081C |
:100110000239A4048C28A4141F151F198D281E0849 |
:10012000A5001830F8001F08C73978049F0025087B |
:100130003B3C031CA4282508283C0318A3282208BC |
:100140000439A404A42824151F151F19A5281E0866 |
:10015000A5002030F8001F08C73978049F00250843 |
:100160003B3C031CBC282508283C0318BB2822085C |
:100170000839A404BC28A4151F151F19BD281E0882 |
:10018000A5002830F8001F08C73978049F0025080B |
:100190003B3C031CD4282508283C0318D3282208FC |
:1001A0001039A404D42824161F151F19D5281E0899 |
:1001B000A5003030F8001F08C73978049F002508D3 |
:1001C0003B3C031CEC282508283C0318EB2822089C |
:1001D0002039A404EC28A4161F151F19ED281E08A9 |
:1001E000A50025083B3C031CFE282508283C0318D5 |
:1001F000FD2822084039A404FE2824172408A20060 |
:1002000083160614831206180A29230F08290929C0 |
:10021000A30A0B29A30123080A3C031CA417A40961 |
:1002200024089300831614181729831212298312A5 |
:040230004E286300F1 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.LST |
---|
0,0 → 1,454 |
CCS PCM C Compiler, Version 3.245, 27853 22-IV-06 23:09 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
ROM used: 282 words (7%) |
Largest free fragment is 2048 |
RAM used: 12 (7%) at main() level |
12 (7%) worst case |
Stack: 0 locations |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 004 |
0003: NOP |
.................... #include ".\cidla.h" |
.................... #include <16F88.h> |
.................... //////// Standard Header file for the PIC16F88 device //////////////// |
.................... #device PIC16F88 |
.................... #list |
.................... |
.................... #device adc=8 |
.................... #fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
.................... #use delay(clock=4000000,RESTART_WDT) |
.................... |
.................... |
.................... //#include <stdlib.h> |
.................... |
.................... #use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
.................... |
.................... #define IRRX PIN_B0 |
.................... |
.................... #define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
.................... #define TRESHOLD_MIN 40 |
.................... #define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
.................... |
.................... unsigned int8 radius; // co cidla vidi |
.................... unsigned int8 last_radius; // rozsah |
.................... unsigned int8 last_cidla; // co cidla videla minule |
.................... unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
.................... |
.................... //tuning |
.................... /*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
.................... |
.................... //Vystup PWM je na PIN_B3 |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
.................... { |
.................... unsigned int8 i,n; |
.................... for(n=0;n<=3;n++) |
.................... { |
.................... for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
.................... for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
.................... } |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
0004: CLRF 04 |
0005: MOVLW 1F |
0006: ANDWF 03,F |
0007: MOVLW 60 |
0008: BSF 03.5 |
0009: MOVWF 0F |
000A: BCF 06.1 |
000B: BCF 03.5 |
000C: BSF 06.1 |
000D: BSF 03.5 |
000E: BCF 1F.4 |
000F: BCF 1F.5 |
0010: MOVF 1B,W |
0011: ANDLW 80 |
0012: MOVWF 1B |
0013: MOVLW 07 |
0014: MOVWF 1C |
.................... int8 cidla; |
.................... unsigned int8 a; |
.................... unsigned int8 n; |
.................... |
.................... setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
0015: BCF 1F.4 |
0016: BCF 1F.5 |
0017: MOVF 1B,W |
0018: ANDLW 80 |
0019: IORLW 7F |
001A: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
001B: BCF 1F.6 |
001C: BCF 03.5 |
001D: BSF 1F.6 |
001E: BSF 1F.7 |
001F: BSF 03.5 |
0020: BCF 1F.7 |
0021: BCF 03.5 |
0022: BSF 1F.0 |
.................... setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
0023: BCF 14.5 |
0024: BSF 03.5 |
0025: BCF 06.2 |
0026: BSF 06.1 |
0027: BSF 06.4 |
0028: MOVLW 35 |
0029: BCF 03.5 |
002A: MOVWF 14 |
002B: MOVLW 40 |
002C: BSF 03.5 |
002D: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
002E: MOVF 01,W |
002F: ANDLW C7 |
0030: IORLW 08 |
0031: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
0032: BCF 03.5 |
0033: CLRF 10 |
.................... setup_timer_2(T2_DISABLED,0,1); |
0034: MOVLW 00 |
0035: MOVWF 78 |
0036: MOVWF 12 |
0037: MOVLW 00 |
0038: BSF 03.5 |
0039: MOVWF 12 |
.................... setup_comparator(NC_NC_NC_NC); |
003A: MOVLW 07 |
003B: MOVWF 1C |
003C: MOVF 05,W |
003D: CLRWDT |
003E: MOVLW 02 |
003F: MOVWF 77 |
0040: DECFSZ 77,F |
0041: GOTO 040 |
0042: NOP |
0043: NOP |
0044: MOVF 1C,W |
0045: BCF 03.5 |
0046: BCF 0D.6 |
.................... setup_vref(FALSE); |
0047: BSF 03.5 |
0048: CLRF 1D |
.................... |
.................... last_radius=0b00001000; // minimalni rozsah snimani od stredu |
0049: MOVLW 08 |
004A: BCF 03.5 |
004B: MOVWF 21 |
.................... last_cidla=0b00001000; |
004C: MOVWF 22 |
.................... |
.................... shure=0; |
004D: CLRF 23 |
.................... |
.................... while(true) |
.................... { |
.................... set_adc_channel(0); |
004E: MOVLW 00 |
004F: MOVWF 78 |
0050: MOVF 1F,W |
0051: ANDLW C7 |
0052: IORWF 78,W |
0053: MOVWF 1F |
.................... cidla=0; |
0054: CLRF 24 |
.................... Delay_us(10); |
0055: CLRWDT |
0056: MOVLW 02 |
0057: MOVWF 77 |
0058: DECFSZ 77,F |
0059: GOTO 058 |
005A: NOP |
005B: NOP |
.................... a=read_adc(); |
005C: BSF 1F.2 |
005D: BTFSC 1F.2 |
005E: GOTO 05D |
005F: MOVF 1E,W |
0060: MOVWF 25 |
.................... |
.................... set_adc_channel(1); |
0061: MOVLW 08 |
0062: MOVWF 78 |
0063: MOVF 1F,W |
0064: ANDLW C7 |
0065: IORWF 78,W |
0066: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) //hystereze cidel |
0067: MOVF 25,W |
0068: SUBLW 3B |
0069: BTFSS 03.0 |
006A: GOTO 074 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
006B: MOVF 25,W |
006C: SUBLW 28 |
006D: BTFSC 03.0 |
006E: GOTO 073 |
.................... { |
.................... cidla |= (last_cidla & 0b00000001); |
006F: MOVF 22,W |
0070: ANDLW 01 |
0071: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000001; |
0072: GOTO 074 |
0073: BSF 24.0 |
.................... } |
.................... |
.................... a=read_adc(); |
0074: BSF 1F.2 |
0075: BTFSC 1F.2 |
0076: GOTO 075 |
0077: MOVF 1E,W |
0078: MOVWF 25 |
.................... |
.................... set_adc_channel(2); |
0079: MOVLW 10 |
007A: MOVWF 78 |
007B: MOVF 1F,W |
007C: ANDLW C7 |
007D: IORWF 78,W |
007E: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
007F: MOVF 25,W |
0080: SUBLW 3B |
0081: BTFSS 03.0 |
0082: GOTO 08C |
.................... { |
.................... if(a>TRESHOLD_MIN) |
0083: MOVF 25,W |
0084: SUBLW 28 |
0085: BTFSC 03.0 |
0086: GOTO 08B |
.................... { |
.................... cidla |= (last_cidla & 0b00000010); |
0087: MOVF 22,W |
0088: ANDLW 02 |
0089: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000010; |
008A: GOTO 08C |
008B: BSF 24.1 |
.................... } |
.................... |
.................... a=read_adc(); |
008C: BSF 1F.2 |
008D: BTFSC 1F.2 |
008E: GOTO 08D |
008F: MOVF 1E,W |
0090: MOVWF 25 |
.................... |
.................... set_adc_channel(3); |
0091: MOVLW 18 |
0092: MOVWF 78 |
0093: MOVF 1F,W |
0094: ANDLW C7 |
0095: IORWF 78,W |
0096: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
0097: MOVF 25,W |
0098: SUBLW 3B |
0099: BTFSS 03.0 |
009A: GOTO 0A4 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
009B: MOVF 25,W |
009C: SUBLW 28 |
009D: BTFSC 03.0 |
009E: GOTO 0A3 |
.................... { |
.................... cidla |= (last_cidla & 0b00000100); |
009F: MOVF 22,W |
00A0: ANDLW 04 |
00A1: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000100; |
00A2: GOTO 0A4 |
00A3: BSF 24.2 |
.................... } |
.................... |
.................... a=read_adc(); |
00A4: BSF 1F.2 |
00A5: BTFSC 1F.2 |
00A6: GOTO 0A5 |
00A7: MOVF 1E,W |
00A8: MOVWF 25 |
.................... |
.................... set_adc_channel(4); |
00A9: MOVLW 20 |
00AA: MOVWF 78 |
00AB: MOVF 1F,W |
00AC: ANDLW C7 |
00AD: IORWF 78,W |
00AE: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
00AF: MOVF 25,W |
00B0: SUBLW 3B |
00B1: BTFSS 03.0 |
00B2: GOTO 0BC |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00B3: MOVF 25,W |
00B4: SUBLW 28 |
00B5: BTFSC 03.0 |
00B6: GOTO 0BB |
.................... { |
.................... cidla |= (last_cidla & 0b00001000); |
00B7: MOVF 22,W |
00B8: ANDLW 08 |
00B9: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00001000; |
00BA: GOTO 0BC |
00BB: BSF 24.3 |
.................... } |
.................... a=read_adc(); |
00BC: BSF 1F.2 |
00BD: BTFSC 1F.2 |
00BE: GOTO 0BD |
00BF: MOVF 1E,W |
00C0: MOVWF 25 |
.................... |
.................... set_adc_channel(5); |
00C1: MOVLW 28 |
00C2: MOVWF 78 |
00C3: MOVF 1F,W |
00C4: ANDLW C7 |
00C5: IORWF 78,W |
00C6: MOVWF 1F |
.................... |
.................... if(a<TRESHOLD_MAX) |
00C7: MOVF 25,W |
00C8: SUBLW 3B |
00C9: BTFSS 03.0 |
00CA: GOTO 0D4 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00CB: MOVF 25,W |
00CC: SUBLW 28 |
00CD: BTFSC 03.0 |
00CE: GOTO 0D3 |
.................... { |
.................... cidla |= (last_cidla & 0b00010000); |
00CF: MOVF 22,W |
00D0: ANDLW 10 |
00D1: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00010000; |
00D2: GOTO 0D4 |
00D3: BSF 24.4 |
.................... } |
.................... a=read_adc(); |
00D4: BSF 1F.2 |
00D5: BTFSC 1F.2 |
00D6: GOTO 0D5 |
00D7: MOVF 1E,W |
00D8: MOVWF 25 |
.................... |
.................... set_adc_channel(6); |
00D9: MOVLW 30 |
00DA: MOVWF 78 |
00DB: MOVF 1F,W |
00DC: ANDLW C7 |
00DD: IORWF 78,W |
00DE: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
00DF: MOVF 25,W |
00E0: SUBLW 3B |
00E1: BTFSS 03.0 |
00E2: GOTO 0EC |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00E3: MOVF 25,W |
00E4: SUBLW 28 |
00E5: BTFSC 03.0 |
00E6: GOTO 0EB |
.................... { |
.................... cidla |= (last_cidla & 0b00100000); |
00E7: MOVF 22,W |
00E8: ANDLW 20 |
00E9: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00100000; |
00EA: GOTO 0EC |
00EB: BSF 24.5 |
.................... } |
.................... a=read_adc(); |
00EC: BSF 1F.2 |
00ED: BTFSC 1F.2 |
00EE: GOTO 0ED |
00EF: MOVF 1E,W |
00F0: MOVWF 25 |
.................... |
.................... if(a<TRESHOLD_MAX) |
00F1: MOVF 25,W |
00F2: SUBLW 3B |
00F3: BTFSS 03.0 |
00F4: GOTO 0FE |
.................... { |
.................... if(a>TRESHOLD_MIN) |
00F5: MOVF 25,W |
00F6: SUBLW 28 |
00F7: BTFSC 03.0 |
00F8: GOTO 0FD |
.................... { |
.................... cidla |=(last_cidla & 0b01000000); |
00F9: MOVF 22,W |
00FA: ANDLW 40 |
00FB: IORWF 24,F |
.................... } |
.................... else cidla |= 0b01000000; |
00FC: GOTO 0FE |
00FD: BSF 24.6 |
.................... } |
.................... |
.................... last_cidla=cidla; |
00FE: MOVF 24,W |
00FF: MOVWF 22 |
.................... |
.................... if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
0100: BSF 03.5 |
0101: BSF 06.0 |
0102: BCF 03.5 |
0103: BTFSC 06.0 |
0104: GOTO 10A |
0105: INCFSZ 23,W |
0106: GOTO 108 |
0107: GOTO 109 |
0108: INCF 23,F |
0109: GOTO 10B |
010A: CLRF 23 |
.................... if (shure>CIHLA) cidla|=0b10000000; |
010B: MOVF 23,W |
010C: SUBLW 0A |
010D: BTFSS 03.0 |
010E: BSF 24.7 |
.................... |
.................... cidla=~cidla; |
010F: COMF 24,F |
.................... spi_write(cidla); |
0110: MOVF 24,W |
0111: MOVWF 13 |
0112: BSF 03.5 |
0113: BTFSC 14.0 |
0114: GOTO 117 |
0115: BCF 03.5 |
0116: GOTO 112 |
.................... } |
0117: BCF 03.5 |
0118: GOTO 04E |
.................... } |
0119: 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/07 1.funkcni/slave/cidla.PJT |
---|
0,0 → 1,44 |
[PROJECT] |
Target=cidla.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\istrobot\3Orbis\cidla\cidla.c |
BuildTool=C-COMPILER |
OptionString=+FM |
AdditionalOptionString= |
BuildRequired=1 |
[cidla.c] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=cidla.c |
[Windows] |
0=0000 cidla.c 0 0 796 451 3 0 |
[Opened Files] |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=C:\Program Files\PICC\drivers\stdlib.h |
4=C:\Program Files\PICC\drivers\stddef.h |
5=C:\Program Files\PICC\drivers\string.h |
6=C:\Program Files\PICC\drivers\ctype.h |
7=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
8= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c (main) |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.SYM |
---|
0,0 → 1,45 |
015-016 CCP_1 |
015 CCP_1_LOW |
016 CCP_1_HIGH |
020 radius |
021 last_radius |
022 last_cidla |
023 shure |
024 main.cidla |
025 main.a |
026 main.n |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
0004 main |
0004 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.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\istrobot\3Orbis\cidla\cidla.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sta |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.c |
---|
0,0 → 1,147 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=110,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
#define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.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/07 1.funkcni/slave/cidla.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.h |
---|
0,0 → 1,5 |
#include <16F88.h> |
#device adc=8 |
#fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
#use delay(clock=4000000,RESTART_WDT) |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.sta |
---|
0,0 → 1,28 |
ROM used: 282 (7%) |
282 (7%) including unused fragments |
1 Average locations per line |
3 Average locations per statement |
RAM used: 12 (7%) at main() level |
12 (7%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
148 83 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
6 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
866 166 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 278 99 3 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-007FF 278 1766 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/07 1.funkcni/slave/cidla.tre |
---|
0,0 → 1,3 |
ÀÄcidla |
ÀÄmain 0/278 Ram=3 |
ÀÄ??0?? |
/roboti/3Orbis/bak/07 1.funkcni/slave/macro.ini |
---|
--- 08 2.funkcni/master/main.BAK (nonexistent) |
+++ 08 2.funkcni/master/main.BAK (revision 1) |
@@ -0,0 +1,342 @@ |
+#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//27 |
+#define BEAR3 45 |
+#define R 100 // Rozumna rychlost |
+#define R17 255 // X nasobek rozumne rychlosti |
+#define DOZNIVANI 10 |
+#define L1 1 // cara vlevo |
+#define L2 2 // cara vlevo |
+#define L3 3 // cara vlevo |
+#define S 0 // casa 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 5 // AN5 |
+#define CERNA 2 // AN2 |
+#define ZELENA 4 // AN4 |
+#define MODRA 6 // AN6 |
+ |
+// 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 |
+ |
+short int preteceni; // flag preteceni timeru1 |
+ |
+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_TIMER1 |
+TIMER1_isr() |
+{ |
+ preteceni = true; |
+} |
+//////////////////////////////////////////////////////////////////////////////// |
+#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 |
+} |
+//////////////////////////////////////////////////////////////////////////////// |
+void objizdka() |
+{ |
+ int8 shure=0; |
+ unsigned int16 n; |
+ |
+ BR;BL; |
+ Delay_ms(400); |
+ STOPR;STOPL; |
+ |
+// 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 & 0b01111111)!=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 |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+void main() |
+{ |
+ |
+ unsigned int8 n; |
+ unsigned int8 i,v; |
+ unsigned int8 last_sensors; |
+ |
+ 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(1500); // 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 |
+ 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 |
+ |
+ output_low(STROBE); // vypni zobrazovani na posuvnem registru |
+ sensors = spi_read(0); // cteni senzoru |
+ sensors=~sensors; |
+ 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(bit_test(sensors,7)) // detekce cihly |
+ { |
+ objizdka(); // objede cihlu |
+ } |
+ |
+ |
+ if(bit_test(sensors,3)) //...|...// |
+ { |
+ uhel=STRED; |
+ if (rovinka<50) |
+ { |
+ Lmotor=R17; |
+ Rmotor=R17; |
+ } |
+ else |
+ { |
+ Lmotor=speed; |
+ Rmotor=speed; |
+ }; |
+ line=S; |
+ if (rovinka < 255) rovinka++; |
+ 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; |
+ continue; |
+ } |
+ |
+ if(bit_test(sensors,6)) //......|// |
+ { |
+ uhel=STRED + BEAR3; |
+ Rmotor=0; |
+ Lmotor=turn; |
+ line=R3; |
+ continue; |
+ } |
+ |
+ if(bit_test(sensors,1)) //.|.....// |
+ { |
+ uhel=STRED - BEAR2; |
+ Lmotor=speed-50; |
+ Rmotor=speed; |
+ line=L2; |
+ continue; |
+ } |
+ |
+ if(bit_test(sensors,5)) //.....|.// |
+ { |
+ uhel=STRED + BEAR2; |
+ Rmotor=speed-50; |
+ Lmotor=speed; |
+ line=R2; |
+ continue; |
+ } |
+ |
+ if (bit_test(sensors,2)) //..|....// |
+ { |
+ uhel=STRED - BEAR1; |
+ Lmotor=speed; |
+ Rmotor=speed; |
+ line=L1; |
+ if (rovinka<255) rovinka++; |
+ continue; |
+ } |
+ |
+ if (bit_test(sensors,4)) //....|..// |
+ { |
+ uhel=STRED + BEAR1; |
+ Rmotor=speed; |
+ Lmotor=speed; |
+ line=R1; |
+ if (rovinka<255) rovinka++; |
+ continue; |
+ } |
+ |
+ |
+ if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate |
+ { |
+ if (rovinka>50) |
+ { |
+ BL; BR; |
+ Delay_ms(100); |
+ if (rovinka>250) delay_ms(50); |
+ }; |
+ rovinka=0; |
+ }; |
+ } |
+} |
/roboti/3Orbis/bak/08 2.funkcni/master/main.HEX |
---|
0,0 → 1,130 |
:1000000000308A00122A0000FF00030E8301A100C5 |
:100010007F08A0000A08A8008A01A00E0408A20018 |
:100020007708A3007808A4007908A5007A08A6003C |
:100030007B08A700831383128C308400001C2228C5 |
:100040000C183B288C308400801C28288C183D28F4 |
:10005000220884002308F7002408F8002508F90086 |
:100060002608FA002708FB0028088A00210E8300D2 |
:10007000FF0E7F0E09008A113F288A115328301481 |
:100080000C108A1128280830C002031C5228403066 |
:1000900084000310800C00080319522850286400C3 |
:1000A000800B4F2800348316861283128616640054 |
:1000B0000930BF006D30C0004320BF0B5A282C0808 |
:1000C000BE00BE0803196A2864000000000000009A |
:1000D000BE03612883168612831286128C108A1141 |
:1000E00028283D3084000008031988280230F800D1 |
:1000F000BF30F7006400F70B7A28F80B78289630A9 |
:10010000F700F70B8128000000006400800B7628C0 |
:100110000034B90183160513831205138316851362 |
:100120008312851783160510831205108316851018 |
:10013000831285140230BC00C830BD007120BC0B96 |
:100140009C288316051383120513831685138312C7 |
:1001500085138316051083120510831685108312EC |
:100160008510E130AC006430BD00712083160510AD |
:100170008312051083168510831285148316851348 |
:10018000831285138316051383120517C830BD002B |
:100190007120AA1FDA281308930183161418D22895 |
:1001A0008312CD2883121308AA00AA090430BD00C7 |
:1001B0007120C92883160510831205108316851037 |
:1001C0008312851083160513831205138316851376 |
:1001D00083128513BB01BA013B08033C031C57295A |
:1001E000031DF6283A08E73C031C5729831685159A |
:1001F0008312851926290108B43C031C082983169B |
:10020000051083120510831685108312851410299A |
:10021000831605108312051083168510831285102E |
:100220000108A03C031C1D29831685138312851326 |
:1002300083160513831205172529831605138312C8 |
:100240000513831685138312851350290108B43CC6 |
:10025000031C33298316851083128510831605101D |
:10026000831205143B29831605108312051083168B |
:100270008510831285100108A03C031C48298316B1 |
:1002800005138312051383168513831285175029CE |
:1002900083160513831205138316851383128513A2 |
:1002A0000130BD007120BA0A0319BB0AEC2883167D |
:1002B0000513831205138316851383128513831682 |
:1002C0000510831205108316851083128510803067 |
:1002D000AC006430BD007120831685138312851332 |
:1002E0008316051383120517831685108312851054 |
:1002F00083160510831205140230BC00FA30BD00CD |
:100300007120BC0B7E2983160510831205108316FD |
:100310008510831285148316051383120513831623 |
:10032000851383128517C830BD0071208316051010 |
:10033000831205108316851083128510831605130A |
:10034000831205138316851383128513AD30AC0019 |
:100350006430BD00712083168510831285108316CA |
:100360000510831205140230BC00C830BD00712096 |
:10037000BC0BB5299930AC0083168510831285100B |
:1003800083160510831205148316851383128513B3 |
:1003900083160513831205176430BD0071208A305F |
:1003A000AC00831685108312851083160510831206 |
:1003B0000514831685138312851383160513831280 |
:1003C0000517C830BD0071202A087F390319F729A5 |
:1003D0001308930183161418EF298312EA29831254 |
:1003E0001308AA00AA090430BD007120E42983166D |
:1003F0000510831205108316851083128514831649 |
:100400000513831205138316851383128517023093 |
:10041000BC00C830BD007120BC0B092A5330AC00B1 |
:100420008A11432B84011F308305703083168F009F |
:100430001F129F121B0880399B0007309C008312FB |
:10044000AB0183161F129F121B08803974389B0062 |
:100450001F1383121F179F1783169F1383121F14D6 |
:1004600094128316061186140612313083129400FA |
:100470000030831694000108C739083881003030F5 |
:10048000831290007830F800063892008C30831682 |
:10049000920072308F0005138312051383168513A3 |
:1004A0008312851383160510831205108316851099 |
:1004B00083128510B201B101B401B3018030AC00E8 |
:1004C000AF0183168C14C03083128B04831606117F |
:1004D000831206110630B900FA30BD007120B90B45 |
:1004E0006C2A2830F8001F08C73978049F000130B3 |
:1004F000BD0071201F151F197B2A1E08F700F70C7D |
:10050000F70C3F30F7057708643EAD003030F80057 |
:100510001F08C73978049F000130BD0071202030CA |
:100520002D02B9001F151F19932A1E08F700F70C9A |
:10053000F70C3F30F70577083907AE000108801F38 |
:10054000A42AB21FAC2AA62AB21BB52AB208031DE0 |
:10055000AC2A3102031CB52A83168510831285103C |
:100560008316051083120514BD2A83160510831205 |
:10057000051083168510831285100108801FC32A79 |
:10058000B41FCB2AC52AB41BD42AB408031DCB2A16 |
:100590003302031CD42A8316851383128513831612 |
:1005A000051383120517DC2A83160513831205131E |
:1005B000831685138312851364000130BD007120FA |
:1005C0000930B900A9018B1BA9178B136D30C0002E |
:1005D0004320A91B8B17B90BE22A8316061083123E |
:1005E00006101308930183161418F82A8312F32AAD |
:1005F00083121308AA00AA09831606108312061490 |
:10060000B601B5013508063C031C142B2A08F70077 |
:100610003508F8000319102B0310F70CF80B0C2BFE |
:100620007718B60AB50A022B3608033C0318402B8C |
:100630008316051083120510831685108312851406 |
:1006400083160513831205138316851383128517EA |
:100650000230B9009630BD007120B90B2A2B8316E9 |
:1006600005138312051383168513831285138316CE |
:1006700005108312051083168510831285103F2BF9 |
:10068000AA1F432B8928AA1D612B8030AC002F089C |
:10069000313C031C512BB201FF30B100B401B30057 |
:1006A0005B2BFA012D08B1007A08B200FA012D087F |
:1006B000B3007A08B400AB012F0F5F2B602BAF0A99 |
:1006C0009E2A2A1C6F2B5330AC00B201B101FA01F3 |
:1006D0002E08B3007A08B4000330AB009E2A2A1F0C |
:1006E0007D2BAD30AC00B401B301FA012E08B1008E |
:1006F0007A08B200FD30AB009E2AAA1C8F2B67300F |
:10070000AC0032302D02FA01B1007A08B200FA01D1 |
:100710002D08B3007A08B4000230AB009E2AAA1E4E |
:10072000A12B9930AC0032302D02FA01B3007A08C7 |
:10073000B400FA012D08B1007A08B200FE30AB0017 |
:100740009E2A2A1DB62B7630AC00FA012D08B10086 |
:100750007A08B200FA012D08B3007A08B40001301B |
:10076000AB002F0FB42BB52BAF0A9E2A2A1ECB2B22 |
:100770008A30AC00FA012D08B3007A08B400FA01FF |
:100780002D08B1007A08B200FF30AB002F0FC92B43 |
:10079000CA2BAF0A9E2A2B08033C0319D32B2B0824 |
:1007A000FD3C031DF22B2F08323C0318F12B83165E |
:1007B0000510831205108316851083128514831685 |
:1007C000051383120513831685138312851764306E |
:1007D000BD0071202F08FA3C0318F12B3230BD0008 |
:0807E0007120AF019E2A6300A5 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/08 2.funkcni/master/main.LST |
---|
0,0 → 1,1399 |
CCS PCM C Compiler, Version 3.245, 27853 23-IV-06 20:13 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
ROM used: 1012 words (25%) |
Largest free fragment is 2048 |
RAM used: 32 (18%) at main() level |
38 (22%) worst case |
Stack: 4 worst case (2 in main + 2 for interrupts) |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 212 |
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.0 |
001F: GOTO 022 |
0020: BTFSC 0C.0 |
0021: GOTO 03B |
0022: MOVLW 8C |
0023: MOVWF 04 |
0024: BTFSS 00.1 |
0025: GOTO 028 |
0026: BTFSC 0C.1 |
0027: GOTO 03D |
0028: MOVF 22,W |
0029: MOVWF 04 |
002A: MOVF 23,W |
002B: MOVWF 77 |
002C: MOVF 24,W |
002D: MOVWF 78 |
002E: MOVF 25,W |
002F: MOVWF 79 |
0030: MOVF 26,W |
0031: MOVWF 7A |
0032: MOVF 27,W |
0033: MOVWF 7B |
0034: MOVF 28,W |
0035: MOVWF 0A |
0036: SWAPF 21,W |
0037: MOVWF 03 |
0038: SWAPF 7F,F |
0039: SWAPF 7F,W |
003A: RETFIE |
003B: BCF 0A.3 |
003C: GOTO 03F |
003D: BCF 0A.3 |
003E: GOTO 053 |
.................... #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) |
* |
0043: MOVLW 08 |
0044: SUBWF 40,F |
0045: BTFSS 03.0 |
0046: GOTO 052 |
0047: MOVLW 40 |
0048: MOVWF 04 |
0049: BCF 03.0 |
004A: RRF 00,F |
004B: MOVF 00,W |
004C: BTFSC 03.2 |
004D: GOTO 052 |
004E: GOTO 050 |
004F: CLRWDT |
0050: DECFSZ 00,F |
0051: GOTO 04F |
0052: RETLW 00 |
* |
0071: MOVLW 3D |
0072: MOVWF 04 |
0073: MOVF 00,W |
0074: BTFSC 03.2 |
0075: GOTO 088 |
0076: MOVLW 02 |
0077: MOVWF 78 |
0078: MOVLW BF |
0079: MOVWF 77 |
007A: CLRWDT |
007B: DECFSZ 77,F |
007C: GOTO 07A |
007D: DECFSZ 78,F |
007E: GOTO 078 |
007F: MOVLW 96 |
0080: MOVWF 77 |
0081: DECFSZ 77,F |
0082: GOTO 081 |
0083: NOP |
0084: NOP |
0085: CLRWDT |
0086: DECFSZ 00,F |
0087: GOTO 076 |
0088: 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//27 |
.................... #define BEAR3 45 |
.................... #define R 100 // Rozumna rychlost |
.................... #define R17 255 // X nasobek rozumne rychlosti |
.................... #define DOZNIVANI 10 |
.................... #define L1 1 // cara vlevo |
.................... #define L2 2 // cara vlevo |
.................... #define L3 3 // cara vlevo |
.................... #define S 0 // casa 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 5 // AN5 |
.................... #define CERNA 2 // AN2 |
.................... #define ZELENA 4 // AN4 |
.................... #define MODRA 6 // AN6 |
.................... |
.................... // 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 |
* |
021F: BCF 03.5 |
0220: 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 |
.................... |
.................... short int preteceni; // flag preteceni timeru1 |
.................... |
.................... 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_TIMER1 |
.................... TIMER1_isr() |
.................... { |
.................... preteceni = true; |
* |
003F: BSF 30.0 |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
0040: BCF 0C.0 |
0041: BCF 0A.3 |
0042: GOTO 028 |
.................... #int_TIMER2 |
.................... TIMER2_isr() // ovladani serva |
.................... { |
.................... unsigned int8 n; |
.................... |
.................... output_high(SERVO); |
* |
0053: BSF 03.5 |
0054: BCF 06.5 |
0055: BCF 03.5 |
0056: BSF 06.5 |
.................... delay_us(1000); |
0057: CLRWDT |
0058: MOVLW 09 |
0059: MOVWF 3F |
005A: MOVLW 6D |
005B: MOVWF 40 |
005C: CALL 043 |
005D: DECFSZ 3F,F |
005E: GOTO 05A |
.................... for(n=uhel; n>0; n--) Delay_us(2); |
005F: MOVF 2C,W |
0060: MOVWF 3E |
0061: MOVF 3E,F |
0062: BTFSC 03.2 |
0063: GOTO 06A |
0064: CLRWDT |
0065: NOP |
0066: NOP |
0067: NOP |
0068: DECF 3E,F |
0069: GOTO 061 |
.................... output_low(SERVO); |
006A: BSF 03.5 |
006B: BCF 06.5 |
006C: BCF 03.5 |
006D: BCF 06.5 |
.................... } |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
006E: BCF 0C.1 |
006F: BCF 0A.3 |
0070: GOTO 028 |
.................... 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 |
.................... } |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void objizdka() |
.................... { |
.................... int8 shure=0; |
* |
0089: CLRF 39 |
.................... unsigned int16 n; |
.................... |
.................... BR;BL; |
008A: BSF 03.5 |
008B: BCF 05.6 |
008C: BCF 03.5 |
008D: BCF 05.6 |
008E: BSF 03.5 |
008F: BCF 05.7 |
0090: BCF 03.5 |
0091: BSF 05.7 |
0092: BSF 03.5 |
0093: BCF 05.0 |
0094: BCF 03.5 |
0095: BCF 05.0 |
0096: BSF 03.5 |
0097: BCF 05.1 |
0098: BCF 03.5 |
0099: BSF 05.1 |
.................... Delay_ms(400); |
009A: MOVLW 02 |
009B: MOVWF 3C |
009C: MOVLW C8 |
009D: MOVWF 3D |
009E: CALL 071 |
009F: DECFSZ 3C,F |
00A0: GOTO 09C |
.................... STOPR;STOPL; |
00A1: BSF 03.5 |
00A2: BCF 05.6 |
00A3: BCF 03.5 |
00A4: BCF 05.6 |
00A5: BSF 03.5 |
00A6: BCF 05.7 |
00A7: BCF 03.5 |
00A8: BCF 05.7 |
00A9: BSF 03.5 |
00AA: BCF 05.0 |
00AB: BCF 03.5 |
00AC: BCF 05.0 |
00AD: BSF 03.5 |
00AE: BCF 05.1 |
00AF: BCF 03.5 |
00B0: BCF 05.1 |
.................... |
.................... // toceni na miste dokud nezmizi cihla |
.................... //------------------------------------ |
.................... uhel=KOLMO1; // nastav zataceci kolecko kolmo na osu robota |
00B1: MOVLW E1 |
00B2: MOVWF 2C |
.................... Delay_ms(100); |
00B3: MOVLW 64 |
00B4: MOVWF 3D |
00B5: CALL 071 |
.................... BL;FR; |
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: BSF 03.5 |
00BF: BCF 05.7 |
00C0: BCF 03.5 |
00C1: BCF 05.7 |
00C2: BSF 03.5 |
00C3: BCF 05.6 |
00C4: BCF 03.5 |
00C5: BSF 05.6 |
.................... Delay_ms(200); // minimalni toceni, kdyby se zastavilo sikmo k cihle |
00C6: MOVLW C8 |
00C7: MOVWF 3D |
00C8: CALL 071 |
.................... |
.................... While(bit_test(sensors,7)) // toc, dokud neni cihla z primeho senzoru |
.................... { |
00C9: BTFSS 2A.7 |
00CA: GOTO 0DA |
.................... sensors = spi_read(0); // cteni senzoru |
00CB: MOVF 13,W |
00CC: CLRF 13 |
00CD: BSF 03.5 |
00CE: BTFSC 14.0 |
00CF: GOTO 0D2 |
00D0: BCF 03.5 |
00D1: GOTO 0CD |
00D2: BCF 03.5 |
00D3: MOVF 13,W |
00D4: MOVWF 2A |
.................... sensors=~sensors; |
00D5: COMF 2A,F |
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
00D6: MOVLW 04 |
00D7: MOVWF 3D |
00D8: CALL 071 |
.................... } |
00D9: GOTO 0C9 |
.................... STOPL; STOPR; |
00DA: BSF 03.5 |
00DB: BCF 05.0 |
00DC: BCF 03.5 |
00DD: BCF 05.0 |
00DE: BSF 03.5 |
00DF: BCF 05.1 |
00E0: BCF 03.5 |
00E1: BCF 05.1 |
00E2: BSF 03.5 |
00E3: BCF 05.6 |
00E4: BCF 03.5 |
00E5: BCF 05.6 |
00E6: BSF 03.5 |
00E7: BCF 05.7 |
00E8: BCF 03.5 |
00E9: BCF 05.7 |
.................... |
.................... for (n=0;n<1000;n++) // vystred se na hranu cihly |
00EA: CLRF 3B |
00EB: CLRF 3A |
00EC: MOVF 3B,W |
00ED: SUBLW 03 |
00EE: BTFSS 03.0 |
00EF: GOTO 157 |
00F0: BTFSS 03.2 |
00F1: GOTO 0F6 |
00F2: MOVF 3A,W |
00F3: SUBLW E7 |
00F4: BTFSS 03.0 |
00F5: GOTO 157 |
.................... { |
.................... if(!input(CIHLA)) |
00F6: BSF 03.5 |
00F7: BSF 05.3 |
00F8: BCF 03.5 |
00F9: BTFSC 05.3 |
00FA: GOTO 126 |
.................... { |
.................... GO(L,B,180);GO(R,F,160); // zapni motory PWM podle promenych Lmotor a Rmotor |
00FB: MOVF 01,W |
00FC: SUBLW B4 |
00FD: BTFSS 03.0 |
00FE: GOTO 108 |
00FF: BSF 03.5 |
0100: BCF 05.0 |
0101: BCF 03.5 |
0102: BCF 05.0 |
0103: BSF 03.5 |
0104: BCF 05.1 |
0105: BCF 03.5 |
0106: BSF 05.1 |
0107: GOTO 110 |
0108: BSF 03.5 |
0109: BCF 05.0 |
010A: BCF 03.5 |
010B: BCF 05.0 |
010C: BSF 03.5 |
010D: BCF 05.1 |
010E: BCF 03.5 |
010F: BCF 05.1 |
0110: MOVF 01,W |
0111: SUBLW A0 |
0112: BTFSS 03.0 |
0113: GOTO 11D |
0114: BSF 03.5 |
0115: BCF 05.7 |
0116: BCF 03.5 |
0117: BCF 05.7 |
0118: BSF 03.5 |
0119: BCF 05.6 |
011A: BCF 03.5 |
011B: BSF 05.6 |
011C: GOTO 125 |
011D: BSF 03.5 |
011E: BCF 05.6 |
011F: BCF 03.5 |
0120: BCF 05.6 |
0121: BSF 03.5 |
0122: BCF 05.7 |
0123: BCF 03.5 |
0124: BCF 05.7 |
.................... } else |
0125: GOTO 150 |
.................... { |
.................... GO(L,F,180);GO(R,B,160); // zapni motory PWM podle promenych Lmotor a Rmotor |
0126: MOVF 01,W |
0127: SUBLW B4 |
0128: BTFSS 03.0 |
0129: GOTO 133 |
012A: BSF 03.5 |
012B: BCF 05.1 |
012C: BCF 03.5 |
012D: BCF 05.1 |
012E: BSF 03.5 |
012F: BCF 05.0 |
0130: BCF 03.5 |
0131: BSF 05.0 |
0132: GOTO 13B |
0133: BSF 03.5 |
0134: BCF 05.0 |
0135: BCF 03.5 |
0136: BCF 05.0 |
0137: BSF 03.5 |
0138: BCF 05.1 |
0139: BCF 03.5 |
013A: BCF 05.1 |
013B: MOVF 01,W |
013C: SUBLW A0 |
013D: BTFSS 03.0 |
013E: GOTO 148 |
013F: BSF 03.5 |
0140: BCF 05.6 |
0141: BCF 03.5 |
0142: BCF 05.6 |
0143: BSF 03.5 |
0144: BCF 05.7 |
0145: BCF 03.5 |
0146: BSF 05.7 |
0147: GOTO 150 |
0148: BSF 03.5 |
0149: BCF 05.6 |
014A: BCF 03.5 |
014B: BCF 05.6 |
014C: BSF 03.5 |
014D: BCF 05.7 |
014E: BCF 03.5 |
014F: BCF 05.7 |
.................... }; |
.................... delay_ms(1); |
0150: MOVLW 01 |
0151: MOVWF 3D |
0152: CALL 071 |
.................... } |
0153: INCF 3A,F |
0154: BTFSC 03.2 |
0155: INCF 3B,F |
0156: GOTO 0EC |
.................... STOPR;STOPL; |
0157: BSF 03.5 |
0158: BCF 05.6 |
0159: BCF 03.5 |
015A: BCF 05.6 |
015B: BSF 03.5 |
015C: BCF 05.7 |
015D: BCF 03.5 |
015E: BCF 05.7 |
015F: BSF 03.5 |
0160: BCF 05.0 |
0161: BCF 03.5 |
0162: BCF 05.0 |
0163: BSF 03.5 |
0164: BCF 05.1 |
0165: BCF 03.5 |
0166: BCF 05.1 |
.................... |
.................... uhel=STRED; // dopredu |
0167: MOVLW 80 |
0168: MOVWF 2C |
.................... delay_ms(100); |
0169: MOVLW 64 |
016A: MOVWF 3D |
016B: CALL 071 |
.................... FR; FL; |
016C: BSF 03.5 |
016D: BCF 05.7 |
016E: BCF 03.5 |
016F: BCF 05.7 |
0170: BSF 03.5 |
0171: BCF 05.6 |
0172: BCF 03.5 |
0173: BSF 05.6 |
0174: BSF 03.5 |
0175: BCF 05.1 |
0176: BCF 03.5 |
0177: BCF 05.1 |
0178: BSF 03.5 |
0179: BCF 05.0 |
017A: BCF 03.5 |
017B: BSF 05.0 |
.................... delay_ms(500); |
017C: MOVLW 02 |
017D: MOVWF 3C |
017E: MOVLW FA |
017F: MOVWF 3D |
0180: CALL 071 |
0181: DECFSZ 3C,F |
0182: GOTO 17E |
.................... BL;BR; |
0183: BSF 03.5 |
0184: BCF 05.0 |
0185: BCF 03.5 |
0186: BCF 05.0 |
0187: BSF 03.5 |
0188: BCF 05.1 |
0189: BCF 03.5 |
018A: BSF 05.1 |
018B: BSF 03.5 |
018C: BCF 05.6 |
018D: BCF 03.5 |
018E: BCF 05.6 |
018F: BSF 03.5 |
0190: BCF 05.7 |
0191: BCF 03.5 |
0192: BSF 05.7 |
.................... delay_ms(200); |
0193: MOVLW C8 |
0194: MOVWF 3D |
0195: CALL 071 |
.................... STOPL;STOPR; |
0196: BSF 03.5 |
0197: BCF 05.0 |
0198: BCF 03.5 |
0199: BCF 05.0 |
019A: BSF 03.5 |
019B: BCF 05.1 |
019C: BCF 03.5 |
019D: BCF 05.1 |
019E: BSF 03.5 |
019F: BCF 05.6 |
01A0: BCF 03.5 |
01A1: BCF 05.6 |
01A2: BSF 03.5 |
01A3: BCF 05.7 |
01A4: BCF 03.5 |
01A5: BCF 05.7 |
.................... |
.................... uhel=STRED+BEAR3; // doprava |
01A6: MOVLW AD |
01A7: MOVWF 2C |
.................... delay_ms(100); |
01A8: MOVLW 64 |
01A9: MOVWF 3D |
01AA: CALL 071 |
.................... FL; |
01AB: BSF 03.5 |
01AC: BCF 05.1 |
01AD: BCF 03.5 |
01AE: BCF 05.1 |
01AF: BSF 03.5 |
01B0: BCF 05.0 |
01B1: BCF 03.5 |
01B2: BSF 05.0 |
.................... delay_ms(400); |
01B3: MOVLW 02 |
01B4: MOVWF 3C |
01B5: MOVLW C8 |
01B6: MOVWF 3D |
01B7: CALL 071 |
01B8: DECFSZ 3C,F |
01B9: GOTO 1B5 |
.................... uhel=STRED+BEAR2; // min doprava |
01BA: MOVLW 99 |
01BB: MOVWF 2C |
.................... FL;FR; |
01BC: BSF 03.5 |
01BD: BCF 05.1 |
01BE: BCF 03.5 |
01BF: BCF 05.1 |
01C0: BSF 03.5 |
01C1: BCF 05.0 |
01C2: BCF 03.5 |
01C3: BSF 05.0 |
01C4: BSF 03.5 |
01C5: BCF 05.7 |
01C6: BCF 03.5 |
01C7: BCF 05.7 |
01C8: BSF 03.5 |
01C9: BCF 05.6 |
01CA: BCF 03.5 |
01CB: BSF 05.6 |
.................... delay_ms(100); |
01CC: MOVLW 64 |
01CD: MOVWF 3D |
01CE: CALL 071 |
.................... uhel=STRED+BEAR1; // jeste min doprava |
01CF: MOVLW 8A |
01D0: MOVWF 2C |
.................... FL;FR; |
01D1: BSF 03.5 |
01D2: BCF 05.1 |
01D3: BCF 03.5 |
01D4: BCF 05.1 |
01D5: BSF 03.5 |
01D6: BCF 05.0 |
01D7: BCF 03.5 |
01D8: BSF 05.0 |
01D9: BSF 03.5 |
01DA: BCF 05.7 |
01DB: BCF 03.5 |
01DC: BCF 05.7 |
01DD: BSF 03.5 |
01DE: BCF 05.6 |
01DF: BCF 03.5 |
01E0: BSF 05.6 |
.................... delay_ms(200); |
01E1: MOVLW C8 |
01E2: MOVWF 3D |
01E3: CALL 071 |
.................... While((sensors & 0b01111111)!=0) //dokud neni cara |
.................... { |
01E4: MOVF 2A,W |
01E5: ANDLW 7F |
01E6: BTFSC 03.2 |
01E7: GOTO 1F7 |
.................... sensors = spi_read(0); // cteni senzoru |
01E8: MOVF 13,W |
01E9: CLRF 13 |
01EA: BSF 03.5 |
01EB: BTFSC 14.0 |
01EC: GOTO 1EF |
01ED: BCF 03.5 |
01EE: GOTO 1EA |
01EF: BCF 03.5 |
01F0: MOVF 13,W |
01F1: MOVWF 2A |
.................... sensors=~sensors; |
01F2: COMF 2A,F |
.................... Delay_ms(4); // cekani na SLAVE nez pripravi data od cidel |
01F3: MOVLW 04 |
01F4: MOVWF 3D |
01F5: CALL 071 |
.................... } |
01F6: GOTO 1E4 |
.................... BL; BR; |
01F7: BSF 03.5 |
01F8: BCF 05.0 |
01F9: BCF 03.5 |
01FA: BCF 05.0 |
01FB: BSF 03.5 |
01FC: BCF 05.1 |
01FD: BCF 03.5 |
01FE: BSF 05.1 |
01FF: BSF 03.5 |
0200: BCF 05.6 |
0201: BCF 03.5 |
0202: BCF 05.6 |
0203: BSF 03.5 |
0204: BCF 05.7 |
0205: BCF 03.5 |
0206: BSF 05.7 |
.................... delay_ms(400); |
0207: MOVLW 02 |
0208: MOVWF 3C |
0209: MOVLW C8 |
020A: MOVWF 3D |
020B: CALL 071 |
020C: DECFSZ 3C,F |
020D: GOTO 209 |
.................... |
.................... uhel=STRED-BEAR3; // doleva |
020E: MOVLW 53 |
020F: MOVWF 2C |
.................... } |
0210: BCF 0A.3 |
0211: GOTO 343 (RETURN) |
.................... |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
0212: CLRF 04 |
0213: MOVLW 1F |
0214: ANDWF 03,F |
0215: MOVLW 70 |
0216: BSF 03.5 |
0217: MOVWF 0F |
0218: BCF 1F.4 |
0219: BCF 1F.5 |
021A: MOVF 1B,W |
021B: ANDLW 80 |
021C: MOVWF 1B |
021D: MOVLW 07 |
021E: MOVWF 1C |
.................... |
.................... unsigned int8 n; |
.................... unsigned int8 i,v; |
.................... unsigned int8 last_sensors; |
.................... |
.................... setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka |
* |
0221: BSF 03.5 |
0222: BCF 1F.4 |
0223: BCF 1F.5 |
0224: MOVF 1B,W |
0225: ANDLW 80 |
0226: IORLW 74 |
0227: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
0228: BCF 1F.6 |
0229: BCF 03.5 |
022A: BSF 1F.6 |
022B: BSF 1F.7 |
022C: BSF 03.5 |
022D: BCF 1F.7 |
022E: BCF 03.5 |
022F: BSF 1F.0 |
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16); |
0230: BCF 14.5 |
0231: BSF 03.5 |
0232: BCF 06.2 |
0233: BSF 06.1 |
0234: BCF 06.4 |
0235: MOVLW 31 |
0236: BCF 03.5 |
0237: MOVWF 14 |
0238: MOVLW 00 |
0239: BSF 03.5 |
023A: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
023B: MOVF 01,W |
023C: ANDLW C7 |
023D: IORLW 08 |
023E: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED|T1_DIV_BY_8); |
023F: MOVLW 30 |
0240: BCF 03.5 |
0241: MOVWF 10 |
.................... setup_timer_2(T2_DIV_BY_16,140,16); |
0242: MOVLW 78 |
0243: MOVWF 78 |
0244: IORLW 06 |
0245: MOVWF 12 |
0246: MOVLW 8C |
0247: BSF 03.5 |
0248: MOVWF 12 |
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC); |
0249: MOVLW 72 |
024A: MOVWF 0F |
.................... |
.................... STOPR; STOPL; // zastav motory |
024B: BCF 05.6 |
024C: BCF 03.5 |
024D: BCF 05.6 |
024E: BSF 03.5 |
024F: BCF 05.7 |
0250: BCF 03.5 |
0251: BCF 05.7 |
0252: BSF 03.5 |
0253: BCF 05.0 |
0254: BCF 03.5 |
0255: BCF 05.0 |
0256: BSF 03.5 |
0257: BCF 05.1 |
0258: BCF 03.5 |
0259: BCF 05.1 |
.................... Lmotor=0;Rmotor=0; |
025A: CLRF 32 |
025B: CLRF 31 |
025C: CLRF 34 |
025D: CLRF 33 |
.................... |
.................... uhel = STRED; // nastav zadni kolecko na stred |
025E: MOVLW 80 |
025F: MOVWF 2C |
.................... rovinka = 0; |
0260: CLRF 2F |
.................... |
.................... enable_interrupts(INT_TIMER2); |
0261: BSF 03.5 |
0262: BSF 0C.1 |
.................... enable_interrupts(GLOBAL); |
0263: MOVLW C0 |
0264: BCF 03.5 |
0265: IORWF 0B,F |
.................... |
.................... output_low(IRTX); // zapni IR vysilac |
0266: BSF 03.5 |
0267: BCF 06.2 |
0268: BCF 03.5 |
0269: BCF 06.2 |
.................... |
.................... delay_ms(1500); // musime pockat na diagnostiku slave CPU |
026A: MOVLW 06 |
026B: MOVWF 39 |
026C: MOVLW FA |
026D: MOVWF 3D |
026E: CALL 071 |
026F: DECFSZ 39,F |
0270: GOTO 26C |
.................... |
.................... //nastaveni rychlosti |
.................... set_adc_channel(CERVENA); |
0271: MOVLW 28 |
0272: MOVWF 78 |
0273: MOVF 1F,W |
0274: ANDLW C7 |
0275: IORWF 78,W |
0276: MOVWF 1F |
.................... Delay_ms(1); |
0277: MOVLW 01 |
0278: MOVWF 3D |
0279: CALL 071 |
.................... speed=R+(read_adc()>>2); // rychlost rovne +63; kroutitko dava 0-63 |
027A: BSF 1F.2 |
027B: BTFSC 1F.2 |
027C: GOTO 27B |
027D: MOVF 1E,W |
027E: MOVWF 77 |
027F: RRF 77,F |
0280: RRF 77,F |
0281: MOVLW 3F |
0282: ANDWF 77,F |
0283: MOVF 77,W |
0284: ADDLW 64 |
0285: MOVWF 2D |
.................... set_adc_channel(MODRA); |
0286: MOVLW 30 |
0287: MOVWF 78 |
0288: MOVF 1F,W |
0289: ANDLW C7 |
028A: IORWF 78,W |
028B: MOVWF 1F |
.................... Delay_ms(1); |
028C: MOVLW 01 |
028D: MOVWF 3D |
028E: CALL 071 |
.................... turn=speed-32+(read_adc()>>2); // rychlost toceni +-32; kroutitko dava 0-63 |
028F: MOVLW 20 |
0290: SUBWF 2D,W |
0291: MOVWF 39 |
0292: BSF 1F.2 |
0293: BTFSC 1F.2 |
0294: GOTO 293 |
0295: MOVF 1E,W |
0296: MOVWF 77 |
0297: RRF 77,F |
0298: RRF 77,F |
0299: MOVLW 3F |
029A: ANDWF 77,F |
029B: MOVF 77,W |
029C: ADDWF 39,W |
029D: MOVWF 2E |
.................... while(true) |
.................... { |
.................... |
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor |
029E: MOVF 01,W |
029F: BTFSS 00.7 |
02A0: GOTO 2A4 |
02A1: BTFSS 32.7 |
02A2: GOTO 2AC |
02A3: GOTO 2A6 |
02A4: BTFSC 32.7 |
02A5: GOTO 2B5 |
02A6: MOVF 32,F |
02A7: BTFSS 03.2 |
02A8: GOTO 2AC |
02A9: SUBWF 31,W |
02AA: BTFSS 03.0 |
02AB: GOTO 2B5 |
02AC: BSF 03.5 |
02AD: BCF 05.1 |
02AE: BCF 03.5 |
02AF: BCF 05.1 |
02B0: BSF 03.5 |
02B1: BCF 05.0 |
02B2: BCF 03.5 |
02B3: BSF 05.0 |
02B4: GOTO 2BD |
02B5: BSF 03.5 |
02B6: BCF 05.0 |
02B7: BCF 03.5 |
02B8: BCF 05.0 |
02B9: BSF 03.5 |
02BA: BCF 05.1 |
02BB: BCF 03.5 |
02BC: BCF 05.1 |
02BD: MOVF 01,W |
02BE: BTFSS 00.7 |
02BF: GOTO 2C3 |
02C0: BTFSS 34.7 |
02C1: GOTO 2CB |
02C2: GOTO 2C5 |
02C3: BTFSC 34.7 |
02C4: GOTO 2D4 |
02C5: MOVF 34,F |
02C6: BTFSS 03.2 |
02C7: GOTO 2CB |
02C8: SUBWF 33,W |
02C9: BTFSS 03.0 |
02CA: GOTO 2D4 |
02CB: BSF 03.5 |
02CC: BCF 05.7 |
02CD: BCF 03.5 |
02CE: BCF 05.7 |
02CF: BSF 03.5 |
02D0: BCF 05.6 |
02D1: BCF 03.5 |
02D2: BSF 05.6 |
02D3: GOTO 2DC |
02D4: BSF 03.5 |
02D5: BCF 05.6 |
02D6: BCF 03.5 |
02D7: BCF 05.6 |
02D8: BSF 03.5 |
02D9: BCF 05.7 |
02DA: BCF 03.5 |
02DB: BCF 05.7 |
.................... |
.................... delay_us(2000); // cekani na SLAVE, nez pripravi data od cidel |
02DC: CLRWDT |
02DD: MOVLW 01 |
02DE: MOVWF 3D |
02DF: CALL 071 |
02E0: MOVLW 09 |
02E1: MOVWF 39 |
02E2: CLRF 29 |
02E3: BTFSC 0B.7 |
02E4: BSF 29.7 |
02E5: BCF 0B.7 |
02E6: MOVLW 6D |
02E7: MOVWF 40 |
02E8: CALL 043 |
02E9: BTFSC 29.7 |
02EA: BSF 0B.7 |
02EB: DECFSZ 39,F |
02EC: GOTO 2E2 |
.................... |
.................... output_low(STROBE); // vypni zobrazovani na posuvnem registru |
02ED: BSF 03.5 |
02EE: BCF 06.0 |
02EF: BCF 03.5 |
02F0: BCF 06.0 |
.................... sensors = spi_read(0); // cteni senzoru |
02F1: MOVF 13,W |
02F2: CLRF 13 |
02F3: BSF 03.5 |
02F4: BTFSC 14.0 |
02F5: GOTO 2F8 |
02F6: BCF 03.5 |
02F7: GOTO 2F3 |
02F8: BCF 03.5 |
02F9: MOVF 13,W |
02FA: MOVWF 2A |
.................... sensors=~sensors; |
02FB: COMF 2A,F |
.................... output_high(STROBE); // zobraz data na posuvnem registru |
02FC: BSF 03.5 |
02FD: BCF 06.0 |
02FE: BCF 03.5 |
02FF: BSF 06.0 |
.................... |
.................... i=0; // havarijni kod |
0300: CLRF 36 |
.................... for (n=0; n<=6; n++) |
0301: CLRF 35 |
0302: MOVF 35,W |
0303: SUBLW 06 |
0304: BTFSS 03.0 |
0305: GOTO 314 |
.................... { |
.................... if(bit_test(sensors,n)) i++; |
0306: MOVF 2A,W |
0307: MOVWF 77 |
0308: MOVF 35,W |
0309: MOVWF 78 |
030A: BTFSC 03.2 |
030B: GOTO 310 |
030C: BCF 03.0 |
030D: RRF 77,F |
030E: DECFSZ 78,F |
030F: GOTO 30C |
0310: BTFSC 77.0 |
0311: INCF 36,F |
.................... } |
0312: INCF 35,F |
0313: GOTO 302 |
.................... if (i>3) // zastavi, kdyz je cerno pod vice nez tremi cidly |
0314: MOVF 36,W |
0315: SUBLW 03 |
0316: BTFSC 03.0 |
0317: GOTO 340 |
.................... { |
.................... BL; BR; |
0318: BSF 03.5 |
0319: BCF 05.0 |
031A: BCF 03.5 |
031B: BCF 05.0 |
031C: BSF 03.5 |
031D: BCF 05.1 |
031E: BCF 03.5 |
031F: BSF 05.1 |
0320: BSF 03.5 |
0321: BCF 05.6 |
0322: BCF 03.5 |
0323: BCF 05.6 |
0324: BSF 03.5 |
0325: BCF 05.7 |
0326: BCF 03.5 |
0327: BSF 05.7 |
.................... delay_ms(300); |
0328: MOVLW 02 |
0329: MOVWF 39 |
032A: MOVLW 96 |
032B: MOVWF 3D |
032C: CALL 071 |
032D: DECFSZ 39,F |
032E: GOTO 32A |
.................... STOPR; STOPL; |
032F: BSF 03.5 |
0330: BCF 05.6 |
0331: BCF 03.5 |
0332: BCF 05.6 |
0333: BSF 03.5 |
0334: BCF 05.7 |
0335: BCF 03.5 |
0336: BCF 05.7 |
0337: BSF 03.5 |
0338: BCF 05.0 |
0339: BCF 03.5 |
033A: BCF 05.0 |
033B: BSF 03.5 |
033C: BCF 05.1 |
033D: BCF 03.5 |
033E: BCF 05.1 |
.................... While(true); |
033F: GOTO 33F |
.................... }; |
.................... |
.................... if(bit_test(sensors,7)) // detekce cihly |
0340: BTFSS 2A.7 |
0341: GOTO 343 |
.................... { |
.................... objizdka(); // objede cihlu |
0342: GOTO 089 |
.................... } |
.................... |
.................... |
.................... if(bit_test(sensors,3)) //...|...// |
0343: BTFSS 2A.3 |
0344: GOTO 361 |
.................... { |
.................... uhel=STRED; |
0345: MOVLW 80 |
0346: MOVWF 2C |
.................... if (rovinka<50) |
0347: MOVF 2F,W |
0348: SUBLW 31 |
0349: BTFSS 03.0 |
034A: GOTO 351 |
.................... { |
.................... Lmotor=R17; |
034B: CLRF 32 |
034C: MOVLW FF |
034D: MOVWF 31 |
.................... Rmotor=R17; |
034E: CLRF 34 |
034F: MOVWF 33 |
.................... } |
.................... else |
0350: GOTO 35B |
.................... { |
.................... Lmotor=speed; |
0351: CLRF 7A |
0352: MOVF 2D,W |
0353: MOVWF 31 |
0354: MOVF 7A,W |
0355: MOVWF 32 |
.................... Rmotor=speed; |
0356: CLRF 7A |
0357: MOVF 2D,W |
0358: MOVWF 33 |
0359: MOVF 7A,W |
035A: MOVWF 34 |
.................... }; |
.................... line=S; |
035B: CLRF 2B |
.................... if (rovinka < 255) rovinka++; |
035C: INCFSZ 2F,W |
035D: GOTO 35F |
035E: GOTO 360 |
035F: INCF 2F,F |
.................... continue; |
0360: GOTO 29E |
.................... } |
.................... |
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu |
0361: BTFSS 2A.0 |
0362: GOTO 36F |
.................... { |
.................... uhel=STRED - BEAR3; |
0363: MOVLW 53 |
0364: MOVWF 2C |
.................... Lmotor=0; |
0365: CLRF 32 |
0366: CLRF 31 |
.................... Rmotor=turn; |
0367: CLRF 7A |
0368: MOVF 2E,W |
0369: MOVWF 33 |
036A: MOVF 7A,W |
036B: MOVWF 34 |
.................... line=L3; |
036C: MOVLW 03 |
036D: MOVWF 2B |
.................... continue; |
036E: GOTO 29E |
.................... } |
.................... |
.................... if(bit_test(sensors,6)) //......|// |
036F: BTFSS 2A.6 |
0370: GOTO 37D |
.................... { |
.................... uhel=STRED + BEAR3; |
0371: MOVLW AD |
0372: MOVWF 2C |
.................... Rmotor=0; |
0373: CLRF 34 |
0374: CLRF 33 |
.................... Lmotor=turn; |
0375: CLRF 7A |
0376: MOVF 2E,W |
0377: MOVWF 31 |
0378: MOVF 7A,W |
0379: MOVWF 32 |
.................... line=R3; |
037A: MOVLW FD |
037B: MOVWF 2B |
.................... continue; |
037C: GOTO 29E |
.................... } |
.................... |
.................... if(bit_test(sensors,1)) //.|.....// |
037D: BTFSS 2A.1 |
037E: GOTO 38F |
.................... { |
.................... uhel=STRED - BEAR2; |
037F: MOVLW 67 |
0380: MOVWF 2C |
.................... Lmotor=speed-50; |
0381: MOVLW 32 |
0382: SUBWF 2D,W |
0383: CLRF 7A |
0384: MOVWF 31 |
0385: MOVF 7A,W |
0386: MOVWF 32 |
.................... Rmotor=speed; |
0387: CLRF 7A |
0388: MOVF 2D,W |
0389: MOVWF 33 |
038A: MOVF 7A,W |
038B: MOVWF 34 |
.................... line=L2; |
038C: MOVLW 02 |
038D: MOVWF 2B |
.................... continue; |
038E: GOTO 29E |
.................... } |
.................... |
.................... if(bit_test(sensors,5)) //.....|.// |
038F: BTFSS 2A.5 |
0390: GOTO 3A1 |
.................... { |
.................... uhel=STRED + BEAR2; |
0391: MOVLW 99 |
0392: MOVWF 2C |
.................... Rmotor=speed-50; |
0393: MOVLW 32 |
0394: SUBWF 2D,W |
0395: CLRF 7A |
0396: MOVWF 33 |
0397: MOVF 7A,W |
0398: MOVWF 34 |
.................... Lmotor=speed; |
0399: CLRF 7A |
039A: MOVF 2D,W |
039B: MOVWF 31 |
039C: MOVF 7A,W |
039D: MOVWF 32 |
.................... line=R2; |
039E: MOVLW FE |
039F: MOVWF 2B |
.................... continue; |
03A0: GOTO 29E |
.................... } |
.................... |
.................... if (bit_test(sensors,2)) //..|....// |
03A1: BTFSS 2A.2 |
03A2: GOTO 3B6 |
.................... { |
.................... uhel=STRED - BEAR1; |
03A3: MOVLW 76 |
03A4: MOVWF 2C |
.................... Lmotor=speed; |
03A5: CLRF 7A |
03A6: MOVF 2D,W |
03A7: MOVWF 31 |
03A8: MOVF 7A,W |
03A9: MOVWF 32 |
.................... Rmotor=speed; |
03AA: CLRF 7A |
03AB: MOVF 2D,W |
03AC: MOVWF 33 |
03AD: MOVF 7A,W |
03AE: MOVWF 34 |
.................... line=L1; |
03AF: MOVLW 01 |
03B0: MOVWF 2B |
.................... if (rovinka<255) rovinka++; |
03B1: INCFSZ 2F,W |
03B2: GOTO 3B4 |
03B3: GOTO 3B5 |
03B4: INCF 2F,F |
.................... continue; |
03B5: GOTO 29E |
.................... } |
.................... |
.................... if (bit_test(sensors,4)) //....|..// |
03B6: BTFSS 2A.4 |
03B7: GOTO 3CB |
.................... { |
.................... uhel=STRED + BEAR1; |
03B8: MOVLW 8A |
03B9: MOVWF 2C |
.................... Rmotor=speed; |
03BA: CLRF 7A |
03BB: MOVF 2D,W |
03BC: MOVWF 33 |
03BD: MOVF 7A,W |
03BE: MOVWF 34 |
.................... Lmotor=speed; |
03BF: CLRF 7A |
03C0: MOVF 2D,W |
03C1: MOVWF 31 |
03C2: MOVF 7A,W |
03C3: MOVWF 32 |
.................... line=R1; |
03C4: MOVLW FF |
03C5: MOVWF 2B |
.................... if (rovinka<255) rovinka++; |
03C6: INCFSZ 2F,W |
03C7: GOTO 3C9 |
03C8: GOTO 3CA |
03C9: INCF 2F,F |
.................... continue; |
03CA: GOTO 29E |
.................... } |
.................... |
.................... |
.................... if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate |
03CB: MOVF 2B,W |
03CC: SUBLW 03 |
03CD: BTFSC 03.2 |
03CE: GOTO 3D3 |
03CF: MOVF 2B,W |
03D0: SUBLW FD |
03D1: BTFSS 03.2 |
03D2: GOTO 3F2 |
.................... { |
.................... if (rovinka>50) |
03D3: MOVF 2F,W |
03D4: SUBLW 32 |
03D5: BTFSC 03.0 |
03D6: GOTO 3F1 |
.................... { |
.................... BL; BR; |
03D7: BSF 03.5 |
03D8: BCF 05.0 |
03D9: BCF 03.5 |
03DA: BCF 05.0 |
03DB: BSF 03.5 |
03DC: BCF 05.1 |
03DD: BCF 03.5 |
03DE: BSF 05.1 |
03DF: BSF 03.5 |
03E0: BCF 05.6 |
03E1: BCF 03.5 |
03E2: BCF 05.6 |
03E3: BSF 03.5 |
03E4: BCF 05.7 |
03E5: BCF 03.5 |
03E6: BSF 05.7 |
.................... Delay_ms(100); |
03E7: MOVLW 64 |
03E8: MOVWF 3D |
03E9: CALL 071 |
.................... if (rovinka>250) delay_ms(50); |
03EA: MOVF 2F,W |
03EB: SUBLW FA |
03EC: BTFSC 03.0 |
03ED: GOTO 3F1 |
03EE: MOVLW 32 |
03EF: MOVWF 3D |
03F0: CALL 071 |
.................... }; |
.................... rovinka=0; |
03F1: CLRF 2F |
.................... }; |
.................... } |
03F2: GOTO 29E |
.................... } |
03F3: 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/08 2.funkcni/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\istrobot\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\istrobot\3Orbis\main.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
4= |
5= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c (main) |
/roboti/3Orbis/bak/08 2.funkcni/master/main.SYM |
---|
0,0 → 1,75 |
015 CCP_1_LOW |
015-016 CCP_1 |
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.0 preteceni |
031-032 Lmotor |
033-034 Rmotor |
035 main.n |
036 main.i |
037 main.v |
038 main.last_sensors |
039 objizdka.shure |
039 main.@SCRATCH |
03A-03B objizdka.n |
03A main.@SCRATCH |
03C objizdka.@SCRATCH |
03D @delay_ms1.P1 |
03E TIMER2_isr.n |
03F TIMER2_isr.@SCRATCH |
040 @delay_us1.P1 |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
0071 @delay_ms1 |
0043 @delay_us1 |
003F TIMER1_isr |
0053 TIMER2_isr |
0089 objizdka |
0212 main |
0212 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\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\istrobot\3Orbis\main.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.sta |
/roboti/3Orbis/bak/08 2.funkcni/master/main.c |
---|
0,0 → 1,342 |
#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//27 |
#define BEAR3 45 |
#define R 100 // Rozumna rychlost |
#define R17 255 // X nasobek rozumne rychlosti |
#define DOZNIVANI 10 |
#define L1 1 // cara vlevo |
#define L2 2 // cara vlevo |
#define L3 3 // cara vlevo |
#define S 0 // casa 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 5 // AN5 |
#define CERNA 2 // AN2 |
#define ZELENA 4 // AN4 |
#define MODRA 6 // AN6 |
// 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 |
short int preteceni; // flag preteceni timeru1 |
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_TIMER1 |
TIMER1_isr() |
{ |
preteceni = true; |
} |
//////////////////////////////////////////////////////////////////////////////// |
#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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void objizdka() |
{ |
int8 shure=0; |
unsigned int16 n; |
BR;BL; |
Delay_ms(400); |
STOPR;STOPL; |
// 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 & 0b01111111)!=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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
unsigned int8 n; |
unsigned int8 i,v; |
unsigned int8 last_sensors; |
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(1500); // 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 |
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 |
output_low(STROBE); // vypni zobrazovani na posuvnem registru |
sensors = spi_read(0); // cteni senzoru |
sensors=~sensors; |
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(bit_test(sensors,7)) // detekce cihly |
{ |
objizdka(); // objede cihlu |
} |
if(bit_test(sensors,3)) //...|...// |
{ |
uhel=STRED; |
if (rovinka<50) |
{ |
Lmotor=R17; |
Rmotor=R17; |
} |
else |
{ |
Lmotor=speed; |
Rmotor=speed; |
}; |
line=S; |
if (rovinka < 255) rovinka++; |
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; |
continue; |
} |
if(bit_test(sensors,6)) //......|// |
{ |
uhel=STRED + BEAR3; |
Rmotor=0; |
Lmotor=turn; |
line=R3; |
continue; |
} |
if(bit_test(sensors,1)) //.|.....// |
{ |
uhel=STRED - BEAR2; |
Lmotor=speed-50; |
Rmotor=speed; |
line=L2; |
continue; |
} |
if(bit_test(sensors,5)) //.....|.// |
{ |
uhel=STRED + BEAR2; |
Rmotor=speed-50; |
Lmotor=speed; |
line=R2; |
continue; |
} |
if (bit_test(sensors,2)) //..|....// |
{ |
uhel=STRED - BEAR1; |
Lmotor=speed; |
Rmotor=speed; |
line=L1; |
if (rovinka<255) rovinka++; |
continue; |
} |
if (bit_test(sensors,4)) //....|..// |
{ |
uhel=STRED + BEAR1; |
Rmotor=speed; |
Lmotor=speed; |
line=R1; |
if (rovinka<255) rovinka++; |
continue; |
} |
if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate |
{ |
if (rovinka>50) |
{ |
BL; BR; |
Delay_ms(100); |
if (rovinka>250) delay_ms(50); |
}; |
rovinka=0; |
}; |
} |
} |
/roboti/3Orbis/bak/08 2.funkcni/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/08 2.funkcni/master/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/08 2.funkcni/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/08 2.funkcni/master/main.sta |
---|
0,0 → 1,34 |
ROM used: 1012 (25%) |
1012 (25%) including unused fragments |
2 Average locations per line |
3 Average locations per statement |
RAM used: 32 (18%) at main() level |
38 (22%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
343 291 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.c |
19 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\main.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
1282 582 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 24 2 1 @delay_ms1 |
0 16 2 1 @delay_us1 |
0 4 0 0 TIMER1_isr |
0 30 3 2 TIMER2_isr |
0 393 39 4 objizdka |
0 482 48 6 main |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-0003E 59 0 |
0003F-007FF 949 1036 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/08 2.funkcni/master/main.tre |
---|
0,0 → 1,29 |
ÀÄmain |
ÃÄmain 0/482 Ram=6 |
³ ÃÄ??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 |
³ ÃÄobjizdka 0/393 Ram=4 |
³ ³ ÃÄ@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 |
³ ³ ÃÄ@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 |
ÃÄTIMER1_isr 0/4 Ram=0 |
ÀÄTIMER2_isr 0/30 Ram=2 |
ÀÄ@delay_us1 0/16 Ram=1 |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.BAK |
---|
0,0 → 1,159 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=9600,parity=N,xmit=PIN_B3,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 60 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 40 |
#define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
// diagnostika |
printf("\n\r"); |
Delay_ms(100); |
printf("***\n\r"); |
Delay_ms(100); |
for (n=0; n<=6; n++) |
{ |
set_adc_channel(n); |
Delay_ms(100); |
a=read_adc(); |
printf("sensor %u - %u\n\r",n,a); |
} |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.HEX |
---|
0,0 → 1,71 |
:1000000000308A00B12800000A108A100A11820705 |
:100010000A340D3400340A108A100A1182072A3477 |
:100020002A342A340A340D3400340A108A100A1192 |
:100030008207733465346E3473346F347234203411 |
:100040002534753420342D342034253475340A3465 |
:100050000D34003483168611831286110830F8009F |
:10006000000000000000F8174428F813AA0C031839 |
:100070008615031C8611781744287813F80B362848 |
:1000800000000000000086151C308400840B462808 |
:10009000000000006400F81B3528781B3D28003460 |
:1000A000273084000008031966280130F800BF30AB |
:1000B000F7006400F70B5928F80B57284A30F7006F |
:1000C000F70B602800006400800B552800342B08D3 |
:1000D000F8012A0203186F282A08F7007B28F70185 |
:1000E0000830AC00AA0DF70D2B0877020318F700B3 |
:1000F000F80DAC0B7228003478082808AA00643088 |
:10010000AB0067207708A80078083030031D8F28DF |
:10011000A91C9628A9199628291A20309228A911D5 |
:1001200029122914F8077808AA002A202808AA000A |
:100130000A30AB0067207708A80078083030031D2C |
:10014000A728A919AB28291CAB28291A2030F807A1 |
:100150007808AA002A203030A8072808AA002A20F8 |
:10016000003484011F308305603083168F008611B0 |
:100170008312861583161F129F121B0880399B005D |
:1001800007309C001F129F121B0880397F389B008C |
:100190001F1383121F179F1783169F1383121F1499 |
:1001A00094128316061186140616353083129400B5 |
:1001B0004030831694000108C73908388100831243 |
:1001C00090010030F8009200003083169200073052 |
:1001D0009C00050864000230F700F70BED280000D2 |
:1001E00000001C0883120D1383169D010830831232 |
:1001F000A100A200A7012708042000380319042940 |
:10020000A70AAA002A20FB286430A7005020A701D3 |
:1002100027080B20003803191129A70AAA002A2051 |
:1002200008296430A7005020A6012608063C031CBC |
:100230005129260DF700F70DF70DF830F7051F08C7 |
:10024000C73977049F006430A70050201F151F197D |
:1002500027291E08A500A70127081520A70AF700CF |
:10026000AA002A2007302702031D2C292608A800EF |
:100270001B30A9007C202030AA002A202D30AA00A3 |
:100280002A202030AA002A202508A8001B30A90017 |
:100290007C200A30AA002A200D30AA002A20A60AB3 |
:1002A0001529A3010030F8001F08C73978049F0002 |
:1002B000A40164000230F700F70B5C290000000085 |
:1002C0001F151F1961291E08A5000830F8001F0816 |
:1002D000C73978049F002508453C031C7829250868 |
:1002E000323C0318772922080139A4047829241400 |
:1002F0001F151F1979291E08A5001030F8001F08C6 |
:10030000C73978049F002508453C031C902925081F |
:10031000323C03188F2922080239A4049029A4141E |
:100320001F151F1991291E08A5001830F8001F0875 |
:10033000C73978049F002508453C031CA8292508D7 |
:10034000323C0318A72922080439A404A82924153B |
:100350001F151F19A9291E08A5002030F8001F0825 |
:10036000C73978049F002508453C031CC02925088F |
:10037000323C0318BF2922080839A404C029A41557 |
:100380001F151F19C1291E08A5002830F8001F08D5 |
:10039000C73978049F002508453C031CD829250847 |
:1003A000323C0318D72922081039A404D82924166E |
:1003B0001F151F19D9291E08A5003030F8001F0885 |
:1003C000C73978049F002508453C031CF0292508FF |
:1003D000323C0318EF2922082039A404F029A4167E |
:1003E0001F151F19F1291E08A5002508453C031CEF |
:1003F000022A2508323C0318012A22084039A404A5 |
:10040000022A24172408A200831606148312061851 |
:100410000E2A230F0C2A0D2AA30A0F2AA301230850 |
:100420000A3C031CA417A40924089300831614187B |
:0C0430001B2A8312162A83125229630033 |
:04400E00383FFC3FFC |
:00000001FF |
;PIC16F88 |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.LST |
---|
0,0 → 1,617 |
CCS PCM C Compiler, Version 3.245, 27853 23-IV-06 01:20 |
Filename: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
ROM used: 542 words (13%) |
Largest free fragment is 2048 |
RAM used: 13 (7%) at main() level |
18 (10%) worst case |
Stack: 2 locations |
* |
0000: MOVLW 00 |
0001: MOVWF 0A |
0002: GOTO 0B1 |
0003: NOP |
.................... #include ".\cidla.h" |
.................... #include <16F88.h> |
.................... //////// Standard Header file for the PIC16F88 device //////////////// |
.................... #device PIC16F88 |
.................... #list |
.................... |
.................... #device adc=8 |
.................... #fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
.................... #use delay(clock=4000000,RESTART_WDT) |
* |
0050: MOVLW 27 |
0051: MOVWF 04 |
0052: MOVF 00,W |
0053: BTFSC 03.2 |
0054: GOTO 066 |
0055: MOVLW 01 |
0056: MOVWF 78 |
0057: MOVLW BF |
0058: MOVWF 77 |
0059: CLRWDT |
005A: DECFSZ 77,F |
005B: GOTO 059 |
005C: DECFSZ 78,F |
005D: GOTO 057 |
005E: MOVLW 4A |
005F: MOVWF 77 |
0060: DECFSZ 77,F |
0061: GOTO 060 |
0062: NOP |
0063: CLRWDT |
0064: DECFSZ 00,F |
0065: GOTO 055 |
0066: RETLW 00 |
.................... |
.................... |
.................... //#include <stdlib.h> |
.................... |
.................... #use rs232(baud=9600,parity=N,xmit=PIN_B3,bits=8,restart_wdt) |
* |
002A: BSF 03.5 |
002B: BCF 06.3 |
002C: BCF 03.5 |
002D: BCF 06.3 |
002E: MOVLW 08 |
002F: MOVWF 78 |
0030: NOP |
0031: NOP |
0032: NOP |
0033: BSF 78.7 |
0034: GOTO 044 |
0035: BCF 78.7 |
0036: RRF 2A,F |
0037: BTFSC 03.0 |
0038: BSF 06.3 |
0039: BTFSS 03.0 |
003A: BCF 06.3 |
003B: BSF 78.6 |
003C: GOTO 044 |
003D: BCF 78.6 |
003E: DECFSZ 78,F |
003F: GOTO 036 |
0040: NOP |
0041: NOP |
0042: NOP |
0043: BSF 06.3 |
0044: MOVLW 1C |
0045: MOVWF 04 |
0046: DECFSZ 04,F |
0047: GOTO 046 |
0048: NOP |
0049: NOP |
004A: CLRWDT |
004B: BTFSC 78.7 |
004C: GOTO 035 |
004D: BTFSC 78.6 |
004E: GOTO 03D |
004F: RETLW 00 |
.................... |
.................... #define IRRX PIN_B0 |
.................... |
.................... #define TRESHOLD_MAX 70 // rozhodovaci uroven pro cidla cerna/bila |
.................... #define TRESHOLD_MIN 50 |
.................... #define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
.................... |
.................... unsigned int8 radius; // co cidla vidi |
.................... unsigned int8 last_radius; // rozsah |
.................... unsigned int8 last_cidla; // co cidla videla minule |
.................... unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
.................... |
.................... //tuning |
.................... /*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
.................... |
.................... //Vystup PWM je na PIN_B3 |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
.................... { |
.................... unsigned int8 i,n; |
.................... for(n=0;n<=3;n++) |
.................... { |
.................... for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
.................... for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
.................... } |
.................... } |
.................... */ |
.................... //////////////////////////////////////////////////////////////////////////////// |
.................... void main() |
.................... { |
* |
00B1: CLRF 04 |
00B2: MOVLW 1F |
00B3: ANDWF 03,F |
00B4: MOVLW 60 |
00B5: BSF 03.5 |
00B6: MOVWF 0F |
00B7: BCF 06.3 |
00B8: BCF 03.5 |
00B9: BSF 06.3 |
00BA: BSF 03.5 |
00BB: BCF 1F.4 |
00BC: BCF 1F.5 |
00BD: MOVF 1B,W |
00BE: ANDLW 80 |
00BF: MOVWF 1B |
00C0: MOVLW 07 |
00C1: MOVWF 1C |
.................... int8 cidla; |
.................... unsigned int8 a; |
.................... unsigned int8 n; |
.................... |
.................... setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
00C2: BCF 1F.4 |
00C3: BCF 1F.5 |
00C4: MOVF 1B,W |
00C5: ANDLW 80 |
00C6: IORLW 7F |
00C7: MOVWF 1B |
.................... setup_adc(ADC_CLOCK_INTERNAL); |
00C8: BCF 1F.6 |
00C9: BCF 03.5 |
00CA: BSF 1F.6 |
00CB: BSF 1F.7 |
00CC: BSF 03.5 |
00CD: BCF 1F.7 |
00CE: BCF 03.5 |
00CF: BSF 1F.0 |
.................... setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
00D0: BCF 14.5 |
00D1: BSF 03.5 |
00D2: BCF 06.2 |
00D3: BSF 06.1 |
00D4: BSF 06.4 |
00D5: MOVLW 35 |
00D6: BCF 03.5 |
00D7: MOVWF 14 |
00D8: MOVLW 40 |
00D9: BSF 03.5 |
00DA: MOVWF 14 |
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
00DB: MOVF 01,W |
00DC: ANDLW C7 |
00DD: IORLW 08 |
00DE: MOVWF 01 |
.................... setup_timer_1(T1_DISABLED); |
00DF: BCF 03.5 |
00E0: CLRF 10 |
.................... setup_timer_2(T2_DISABLED,0,1); |
00E1: MOVLW 00 |
00E2: MOVWF 78 |
00E3: MOVWF 12 |
00E4: MOVLW 00 |
00E5: BSF 03.5 |
00E6: MOVWF 12 |
.................... setup_comparator(NC_NC_NC_NC); |
00E7: MOVLW 07 |
00E8: MOVWF 1C |
00E9: MOVF 05,W |
00EA: CLRWDT |
00EB: MOVLW 02 |
00EC: MOVWF 77 |
00ED: DECFSZ 77,F |
00EE: GOTO 0ED |
00EF: NOP |
00F0: NOP |
00F1: MOVF 1C,W |
00F2: BCF 03.5 |
00F3: BCF 0D.6 |
.................... setup_vref(FALSE); |
00F4: BSF 03.5 |
00F5: CLRF 1D |
.................... |
.................... last_radius=0b00001000; // minimalni rozsah snimani od stredu |
00F6: MOVLW 08 |
00F7: BCF 03.5 |
00F8: MOVWF 21 |
.................... last_cidla=0b00001000; |
00F9: MOVWF 22 |
.................... |
.................... // diagnostika |
.................... printf("\n\r"); |
00FA: CLRF 27 |
00FB: MOVF 27,W |
00FC: CALL 004 |
00FD: IORLW 00 |
00FE: BTFSC 03.2 |
00FF: GOTO 104 |
0100: INCF 27,F |
0101: MOVWF 2A |
0102: CALL 02A |
0103: GOTO 0FB |
.................... Delay_ms(100); |
0104: MOVLW 64 |
0105: MOVWF 27 |
0106: CALL 050 |
.................... printf("***\n\r"); |
0107: CLRF 27 |
0108: MOVF 27,W |
0109: CALL 00B |
010A: IORLW 00 |
010B: BTFSC 03.2 |
010C: GOTO 111 |
010D: INCF 27,F |
010E: MOVWF 2A |
010F: CALL 02A |
0110: GOTO 108 |
.................... Delay_ms(100); |
0111: MOVLW 64 |
0112: MOVWF 27 |
0113: CALL 050 |
.................... for (n=0; n<=6; n++) |
0114: CLRF 26 |
0115: MOVF 26,W |
0116: SUBLW 06 |
0117: BTFSS 03.0 |
0118: GOTO 151 |
.................... { |
.................... set_adc_channel(n); |
0119: RLF 26,W |
011A: MOVWF 77 |
011B: RLF 77,F |
011C: RLF 77,F |
011D: MOVLW F8 |
011E: ANDWF 77,F |
011F: MOVF 1F,W |
0120: ANDLW C7 |
0121: IORWF 77,W |
0122: MOVWF 1F |
.................... Delay_ms(100); |
0123: MOVLW 64 |
0124: MOVWF 27 |
0125: CALL 050 |
.................... a=read_adc(); |
0126: BSF 1F.2 |
0127: BTFSC 1F.2 |
0128: GOTO 127 |
0129: MOVF 1E,W |
012A: MOVWF 25 |
.................... printf("sensor %u - %u\n\r",n,a); |
012B: CLRF 27 |
012C: MOVF 27,W |
012D: CALL 015 |
012E: INCF 27,F |
012F: MOVWF 77 |
0130: MOVWF 2A |
0131: CALL 02A |
0132: MOVLW 07 |
0133: SUBWF 27,W |
0134: BTFSS 03.2 |
0135: GOTO 12C |
0136: MOVF 26,W |
0137: MOVWF 28 |
0138: MOVLW 1B |
0139: MOVWF 29 |
013A: CALL 07C |
013B: MOVLW 20 |
013C: MOVWF 2A |
013D: CALL 02A |
013E: MOVLW 2D |
013F: MOVWF 2A |
0140: CALL 02A |
0141: MOVLW 20 |
0142: MOVWF 2A |
0143: CALL 02A |
0144: MOVF 25,W |
0145: MOVWF 28 |
0146: MOVLW 1B |
0147: MOVWF 29 |
0148: CALL 07C |
0149: MOVLW 0A |
014A: MOVWF 2A |
014B: CALL 02A |
014C: MOVLW 0D |
014D: MOVWF 2A |
014E: CALL 02A |
.................... } |
014F: INCF 26,F |
0150: GOTO 115 |
.................... |
.................... shure=0; |
0151: CLRF 23 |
.................... while(true) |
.................... { |
.................... set_adc_channel(0); |
0152: MOVLW 00 |
0153: MOVWF 78 |
0154: MOVF 1F,W |
0155: ANDLW C7 |
0156: IORWF 78,W |
0157: MOVWF 1F |
.................... cidla=0; |
0158: CLRF 24 |
.................... Delay_us(10); |
0159: CLRWDT |
015A: MOVLW 02 |
015B: MOVWF 77 |
015C: DECFSZ 77,F |
015D: GOTO 15C |
015E: NOP |
015F: NOP |
.................... a=read_adc(); |
0160: BSF 1F.2 |
0161: BTFSC 1F.2 |
0162: GOTO 161 |
0163: MOVF 1E,W |
0164: MOVWF 25 |
.................... |
.................... set_adc_channel(1); |
0165: MOVLW 08 |
0166: MOVWF 78 |
0167: MOVF 1F,W |
0168: ANDLW C7 |
0169: IORWF 78,W |
016A: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) //hystereze cidel |
016B: MOVF 25,W |
016C: SUBLW 45 |
016D: BTFSS 03.0 |
016E: GOTO 178 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
016F: MOVF 25,W |
0170: SUBLW 32 |
0171: BTFSC 03.0 |
0172: GOTO 177 |
.................... { |
.................... cidla |= (last_cidla & 0b00000001); |
0173: MOVF 22,W |
0174: ANDLW 01 |
0175: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000001; |
0176: GOTO 178 |
0177: BSF 24.0 |
.................... } |
.................... |
.................... a=read_adc(); |
0178: BSF 1F.2 |
0179: BTFSC 1F.2 |
017A: GOTO 179 |
017B: MOVF 1E,W |
017C: MOVWF 25 |
.................... |
.................... set_adc_channel(2); |
017D: MOVLW 10 |
017E: MOVWF 78 |
017F: MOVF 1F,W |
0180: ANDLW C7 |
0181: IORWF 78,W |
0182: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
0183: MOVF 25,W |
0184: SUBLW 45 |
0185: BTFSS 03.0 |
0186: GOTO 190 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
0187: MOVF 25,W |
0188: SUBLW 32 |
0189: BTFSC 03.0 |
018A: GOTO 18F |
.................... { |
.................... cidla |= (last_cidla & 0b00000010); |
018B: MOVF 22,W |
018C: ANDLW 02 |
018D: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000010; |
018E: GOTO 190 |
018F: BSF 24.1 |
.................... } |
.................... |
.................... a=read_adc(); |
0190: BSF 1F.2 |
0191: BTFSC 1F.2 |
0192: GOTO 191 |
0193: MOVF 1E,W |
0194: MOVWF 25 |
.................... |
.................... set_adc_channel(3); |
0195: MOVLW 18 |
0196: MOVWF 78 |
0197: MOVF 1F,W |
0198: ANDLW C7 |
0199: IORWF 78,W |
019A: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
019B: MOVF 25,W |
019C: SUBLW 45 |
019D: BTFSS 03.0 |
019E: GOTO 1A8 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
019F: MOVF 25,W |
01A0: SUBLW 32 |
01A1: BTFSC 03.0 |
01A2: GOTO 1A7 |
.................... { |
.................... cidla |= (last_cidla & 0b00000100); |
01A3: MOVF 22,W |
01A4: ANDLW 04 |
01A5: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00000100; |
01A6: GOTO 1A8 |
01A7: BSF 24.2 |
.................... } |
.................... |
.................... a=read_adc(); |
01A8: BSF 1F.2 |
01A9: BTFSC 1F.2 |
01AA: GOTO 1A9 |
01AB: MOVF 1E,W |
01AC: MOVWF 25 |
.................... |
.................... set_adc_channel(4); |
01AD: MOVLW 20 |
01AE: MOVWF 78 |
01AF: MOVF 1F,W |
01B0: ANDLW C7 |
01B1: IORWF 78,W |
01B2: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
01B3: MOVF 25,W |
01B4: SUBLW 45 |
01B5: BTFSS 03.0 |
01B6: GOTO 1C0 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
01B7: MOVF 25,W |
01B8: SUBLW 32 |
01B9: BTFSC 03.0 |
01BA: GOTO 1BF |
.................... { |
.................... cidla |= (last_cidla & 0b00001000); |
01BB: MOVF 22,W |
01BC: ANDLW 08 |
01BD: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00001000; |
01BE: GOTO 1C0 |
01BF: BSF 24.3 |
.................... } |
.................... a=read_adc(); |
01C0: BSF 1F.2 |
01C1: BTFSC 1F.2 |
01C2: GOTO 1C1 |
01C3: MOVF 1E,W |
01C4: MOVWF 25 |
.................... |
.................... set_adc_channel(5); |
01C5: MOVLW 28 |
01C6: MOVWF 78 |
01C7: MOVF 1F,W |
01C8: ANDLW C7 |
01C9: IORWF 78,W |
01CA: MOVWF 1F |
.................... |
.................... if(a<TRESHOLD_MAX) |
01CB: MOVF 25,W |
01CC: SUBLW 45 |
01CD: BTFSS 03.0 |
01CE: GOTO 1D8 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
01CF: MOVF 25,W |
01D0: SUBLW 32 |
01D1: BTFSC 03.0 |
01D2: GOTO 1D7 |
.................... { |
.................... cidla |= (last_cidla & 0b00010000); |
01D3: MOVF 22,W |
01D4: ANDLW 10 |
01D5: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00010000; |
01D6: GOTO 1D8 |
01D7: BSF 24.4 |
.................... } |
.................... a=read_adc(); |
01D8: BSF 1F.2 |
01D9: BTFSC 1F.2 |
01DA: GOTO 1D9 |
01DB: MOVF 1E,W |
01DC: MOVWF 25 |
.................... |
.................... set_adc_channel(6); |
01DD: MOVLW 30 |
01DE: MOVWF 78 |
01DF: MOVF 1F,W |
01E0: ANDLW C7 |
01E1: IORWF 78,W |
01E2: MOVWF 1F |
.................... if(a<TRESHOLD_MAX) |
01E3: MOVF 25,W |
01E4: SUBLW 45 |
01E5: BTFSS 03.0 |
01E6: GOTO 1F0 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
01E7: MOVF 25,W |
01E8: SUBLW 32 |
01E9: BTFSC 03.0 |
01EA: GOTO 1EF |
.................... { |
.................... cidla |= (last_cidla & 0b00100000); |
01EB: MOVF 22,W |
01EC: ANDLW 20 |
01ED: IORWF 24,F |
.................... } |
.................... else cidla |= 0b00100000; |
01EE: GOTO 1F0 |
01EF: BSF 24.5 |
.................... } |
.................... a=read_adc(); |
01F0: BSF 1F.2 |
01F1: BTFSC 1F.2 |
01F2: GOTO 1F1 |
01F3: MOVF 1E,W |
01F4: MOVWF 25 |
.................... |
.................... if(a<TRESHOLD_MAX) |
01F5: MOVF 25,W |
01F6: SUBLW 45 |
01F7: BTFSS 03.0 |
01F8: GOTO 202 |
.................... { |
.................... if(a>TRESHOLD_MIN) |
01F9: MOVF 25,W |
01FA: SUBLW 32 |
01FB: BTFSC 03.0 |
01FC: GOTO 201 |
.................... { |
.................... cidla |=(last_cidla & 0b01000000); |
01FD: MOVF 22,W |
01FE: ANDLW 40 |
01FF: IORWF 24,F |
.................... } |
.................... else cidla |= 0b01000000; |
0200: GOTO 202 |
0201: BSF 24.6 |
.................... } |
.................... |
.................... last_cidla=cidla; |
0202: MOVF 24,W |
0203: MOVWF 22 |
.................... |
.................... if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
0204: BSF 03.5 |
0205: BSF 06.0 |
0206: BCF 03.5 |
0207: BTFSC 06.0 |
0208: GOTO 20E |
0209: INCFSZ 23,W |
020A: GOTO 20C |
020B: GOTO 20D |
020C: INCF 23,F |
020D: GOTO 20F |
020E: CLRF 23 |
.................... if (shure>CIHLA) cidla|=0b10000000; |
020F: MOVF 23,W |
0210: SUBLW 0A |
0211: BTFSS 03.0 |
0212: BSF 24.7 |
.................... |
.................... cidla=~cidla; |
0213: COMF 24,F |
.................... spi_write(cidla); |
0214: MOVF 24,W |
0215: MOVWF 13 |
0216: BSF 03.5 |
0217: BTFSC 14.0 |
0218: GOTO 21B |
0219: BCF 03.5 |
021A: GOTO 216 |
.................... } |
021B: BCF 03.5 |
021C: GOTO 152 |
.................... } |
021D: 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/08 2.funkcni/slave/cidla.PJT |
---|
0,0 → 1,44 |
[PROJECT] |
Target=cidla.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\istrobot\3Orbis\cidla\cidla.c |
BuildTool=C-COMPILER |
OptionString=+FM |
AdditionalOptionString= |
BuildRequired=1 |
[cidla.c] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=cidla.c |
[Windows] |
0=0000 cidla.c 0 0 796 451 3 0 |
[Opened Files] |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
2=C:\Program Files\PICC\devices\16F88.h |
3=C:\Program Files\PICC\drivers\stdlib.h |
4=C:\Program Files\PICC\drivers\stddef.h |
5=C:\Program Files\PICC\drivers\string.h |
6=C:\Program Files\PICC\drivers\ctype.h |
7=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
8= |
[Units] |
Count=1 |
1=D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c (main) |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.SYM |
---|
0,0 → 1,60 |
015 CCP_1_LOW |
015-016 CCP_1 |
016 CCP_1_HIGH |
020 radius |
021 last_radius |
022 last_cidla |
023 shure |
024 main.cidla |
025 main.a |
026 main.n |
027 @delay_ms1.P1 |
027 main.@SCRATCH |
028 @PRINTF_U_9600_51_41.P1 |
029 @PRINTF_U_9600_51_41.P1 |
02A @PUTCHAR_1_.P1 |
02A @DIV88.P2 |
02B @DIV88.P1 |
02C @DIV88.@SCRATCH |
077 @SCRATCH |
078 @SCRATCH |
078 _RETURN_ |
079 @SCRATCH |
07A @SCRATCH |
07B @SCRATCH |
09C.6 C1OUT |
09C.7 C2OUT |
0050 @delay_ms1 |
002A @PUTCHAR_1_ |
00B1 main |
0004 @const10061 |
000B @const10066 |
0015 @const10079 |
0067 @DIV88 |
007C @PRINTF_U_9600_51_41 |
00B1 @cinit |
Project Files: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
C:\Program Files\PICC\devices\16F88.h |
Units: |
D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.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\istrobot\3Orbis\cidla\cidla.err |
INHX8: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.hex |
Symbols: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sym |
List: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.lst |
Debug/COFF: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.cof |
Call Tree: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.tre |
Statistics: D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.sta |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.c |
---|
0,0 → 1,159 |
#include ".\cidla.h" |
//#include <stdlib.h> |
#use rs232(baud=9600,parity=N,xmit=PIN_B3,bits=8,restart_wdt) |
#define IRRX PIN_B0 |
#define TRESHOLD_MAX 70 // rozhodovaci uroven pro cidla cerna/bila |
#define TRESHOLD_MIN 50 |
#define CIHLA 10 // doba, po kterou musi byt detekovana cihla |
unsigned int8 radius; // co cidla vidi |
unsigned int8 last_radius; // rozsah |
unsigned int8 last_cidla; // co cidla videla minule |
unsigned int8 shure; // citac doby, po kterou musi byt detekovana cihla |
//tuning |
/*#define PULZACE 3 // urcuje rychlost pulzovani pomoci PWM |
//Vystup PWM je na PIN_B3 |
//////////////////////////////////////////////////////////////////////////////// |
void pulzovani() // postupne rozsvecuje a zhasina podsvetleni |
{ |
unsigned int8 i,n; |
for(n=0;n<=3;n++) |
{ |
for(i=0;i<255;i++) {set_pwm1_duty(i); Delay_ms(PULZACE);} // rozsvecovani |
for(i=255;i>0;i--) {set_pwm1_duty(i); Delay_ms(PULZACE);} // zhasinani |
} |
} |
*/ |
//////////////////////////////////////////////////////////////////////////////// |
void main() |
{ |
int8 cidla; |
unsigned int8 a; |
unsigned int8 n; |
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD); |
setup_adc(ADC_CLOCK_INTERNAL); |
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED); |
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); |
setup_timer_1(T1_DISABLED); |
setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
last_radius=0b00001000; // minimalni rozsah snimani od stredu |
last_cidla=0b00001000; |
// diagnostika |
printf("\n\r"); |
Delay_ms(100); |
printf("***\n\r"); |
Delay_ms(100); |
for (n=0; n<=6; n++) |
{ |
set_adc_channel(n); |
Delay_ms(100); |
a=read_adc(); |
printf("sensor %u - %u\n\r",n,a); |
} |
shure=0; |
while(true) |
{ |
set_adc_channel(0); |
cidla=0; |
Delay_us(10); |
a=read_adc(); |
set_adc_channel(1); |
if(a<TRESHOLD_MAX) //hystereze cidel |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000001); |
} |
else cidla |= 0b00000001; |
} |
a=read_adc(); |
set_adc_channel(2); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000010); |
} |
else cidla |= 0b00000010; |
} |
a=read_adc(); |
set_adc_channel(3); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00000100); |
} |
else cidla |= 0b00000100; |
} |
a=read_adc(); |
set_adc_channel(4); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00001000); |
} |
else cidla |= 0b00001000; |
} |
a=read_adc(); |
set_adc_channel(5); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00010000); |
} |
else cidla |= 0b00010000; |
} |
a=read_adc(); |
set_adc_channel(6); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |= (last_cidla & 0b00100000); |
} |
else cidla |= 0b00100000; |
} |
a=read_adc(); |
if(a<TRESHOLD_MAX) |
{ |
if(a>TRESHOLD_MIN) |
{ |
cidla |=(last_cidla & 0b01000000); |
} |
else cidla |= 0b01000000; |
} |
last_cidla=cidla; |
if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;}; |
if (shure>CIHLA) cidla|=0b10000000; |
cidla=~cidla; |
spi_write(cidla); |
} |
} |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.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/08 2.funkcni/slave/cidla.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.h |
---|
0,0 → 1,5 |
#include <16F88.h> |
#device adc=8 |
#fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO |
#use delay(clock=4000000,RESTART_WDT) |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.sta |
---|
0,0 → 1,35 |
ROM used: 542 (13%) |
542 (13%) including unused fragments |
1 Average locations per line |
6 Average locations per statement |
RAM used: 13 (7%) at main() level |
18 (10%) worst case |
Lines Stmts % Files |
----- ----- --- ----- |
160 93 100 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.c |
6 0 0 D:\KAKLIK\programy\PIC_C\roboti\istrobot\3Orbis\cidla\cidla.h |
279 0 0 C:\Program Files\PICC\devices\16F88.h |
----- ----- |
890 186 Total |
Page ROM % RAM Functions: |
---- --- --- --- ---------- |
0 23 4 1 @delay_ms1 |
0 38 7 1 @PUTCHAR_1_ |
0 365 67 4 main |
0 7 1 0 @const10061 |
0 10 2 0 @const10066 |
0 21 4 0 @const10079 |
0 21 4 3 @DIV88 |
0 53 10 2 @PRINTF_U_9600_51_41 |
Segment Used Free |
--------- ---- ---- |
00000-00003 4 0 |
00004-007FF 538 1506 |
00800-00FFF 0 2048 |
/roboti/3Orbis/bak/08 2.funkcni/slave/cidla.tre |
---|
0,0 → 1,29 |
ÀÄcidla |
ÀÄmain 0/365 Ram=4 |
ÃÄ??0?? |
ÃÄ@const10061 0/7 Ram=0 |
ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÃÄ@delay_ms1 0/23 Ram=1 |
ÃÄ@const10066 0/10 Ram=0 |
ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÃÄ@delay_ms1 0/23 Ram=1 |
ÃÄ@delay_ms1 0/23 Ram=1 |
ÃÄ@const10079 0/21 Ram=0 |
ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÃÄ@PRINTF_U_9600_51_41 0/53 Ram=2 |
³ ÃÄ@DIV88 0/21 Ram=3 |
³ ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
³ ÃÄ@DIV88 0/21 Ram=3 |
³ ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
³ ÀÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÃÄ@PRINTF_U_9600_51_41 0/53 Ram=2 |
³ ÃÄ@DIV88 0/21 Ram=3 |
³ ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
³ ÃÄ@DIV88 0/21 Ram=3 |
³ ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
³ ÀÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÃÄ@PUTCHAR_1_ 0/38 Ram=1 |
ÀÄ@PUTCHAR_1_ 0/38 Ram=1 |
/roboti/3Orbis/bak/08 2.funkcni/slave/macro.ini |
---|
--- 09 ruzove rukavice/master/main.BAK (nonexistent) |
+++ 09 ruzove rukavice/master/main.BAK (revision 1) |
@@ -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 |
} |
//////////////////////////////////////////////////////////////////////////////// |
/roboti/3Orbis/bak/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 |
} |
//////////////////////////////////////////////////////////////////////////////// |