Subversion Repositories svnkaklik

Compare Revisions

Problem with comparison.

Ignore whitespace Rev HEAD → Rev 1

/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
}
 
////////////////////////////////////////////////////////////////////////////////