/roboti/istrobot/3Orbis/bak/08 2.funkcni/master/main.BAK |
---|
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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/3Orbis/bak/08 2.funkcni/master/main.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/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/istrobot/3Orbis/bak/08 2.funkcni/slave/cidla.err |
---|
0,0 → 1,2 |
No Errors |
0 Errors, 0 Warnings. |
/roboti/istrobot/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/istrobot/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/istrobot/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/istrobot/3Orbis/bak/08 2.funkcni/slave/macro.ini |
---|