Subversion Repositories svnkaklik

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1 → Rev 2

/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