Subversion Repositories svnkaklik

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1 → Rev 2

/roboti/istrobot/3Orbis/vystava/cidla/cidla.BAK
0,0 → 1,169
#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
#define SW2 PIN_A7
 
 
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;
unsigned short int negace;
 
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
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);
 
Delay_ms(500);
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED);
 
// 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;
if(input(SW2)) negace = true;
else negace = false;
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;
 
if (negace == true) cidla=~cidla;
else
{
if(!bit_test(cidla,7)) bit_set(cidla,7);
else bit_clear(cidla,7);
}
spi_write(cidla);
}
}
/roboti/istrobot/3Orbis/vystava/cidla/cidla.HEX
0,0 → 1,72
:1000000000308A00B12800000A108A100A11820705
:100010000A340D3400340A108A100A1182072A3477
:100020002A342A340A340D3400340A108A100A1192
:100030008207733465346E3473346F347234203411
:100040002534753420342D342034253475340A3465
:100050000D34003428308400000803194028013092
:10006000F800BF30F7006400F70B3328F80B312895
:100070004A30F700F70B3A2800006400800B2F2865
:10008000003483168611831286110830F8000000B0
:1000900000000000F8175B28F813AA0C0318861557
:1000A000031C861178175B287813F80B4D28000085
:1000B0000000000086151C308400840B5D280000C1
:1000C00000006400F81B4C28781B542800342B08CF
:1000D000F8012A0203186F282A08F7007B28F70185
:1000E0000830AC00AA0DF70D2B0877020318F700B3
:1000F000F80DAC0B7228003478082808AA00643088
:10010000AB0067207708A80078083030031D8F28DF
:10011000A91C9628A9199628291A20309228A911D5
:1001200029122914F8077808AA0041202808AA00F3
:100130000A30AB0067207708A80078083030031D2C
:10014000A728A919AB28291CAB28291A2030F807A1
:100150007808AA0041203030A8072808AA004120CA
:10016000003484011F308305603083168F008611B0
:100170008312861583161F129F121B0880399B005D
:1001800007309C001F129F121B0880397F389B008C
:100190001F1383121F179F1783169F1383121F1499
:1001A00083160108C7390838810083129001003096
:1001B000F800920000308316920007309C0005087A
:1001C00064000230F700F70BE328000000001C0871
:1001D00083120D1383169D0102308312A700FA309B
:1001E000A8002A20A70BEF28941283160611861464
:1001F0000616353083129400403083169400831223
:10020000A70127080420003803190A29A70AAA0011
:10021000412001296430A8002A20A70127080B20CB
:10022000003803191729A70AAA0041200E296430B3
:10023000A8002A20A5012508063C031C5729250DE6
:10024000F700F70DF70DF830F7051F08C7397704E9
:100250009F006430A8002A201F151F192D291E0891
:10026000A400A70127081520A70AF700AA0041202B
:1002700007302702031D32292508A8001B30A900DA
:100280007C202030AA0041202D30AA0041202030BF
:10029000AA0041202408A8001B30A9007C200A30B5
:1002A000AA0041200D30AA004120A50A1B29A20165
:1002B0000030F8001F08C73978049F00A3016400CC
:1002C0000230F700F70B6229000000001F151F190C
:1002D00067291E08A4000830F8001F08C7397804F1
:1002E0009F002408453C031C7E292408323C031847
:1002F0007D2921080139A3047E2923141F151F1904
:100300007F291E08A4001030F8001F08C7397804A0
:100310009F002408453C031C96292408323C0318FE
:10032000952921080239A3049629A3141F151F1922
:1003300097291E08A4001830F8001F08C739780450
:100340009F002408453C031CAE292408323C0318B6
:10035000AD2921080439A304AE2923151F151F193F
:10036000AF291E08A4002030F8001F08C739780400
:100370009F002408453C031CC6292408323C03186E
:10038000C52921080839A304C629A3151F151F195B
:10039000C7291E08A4002830F8001F08C7397804B0
:1003A0009F002408453C031CDE292408323C031826
:1003B000DD2921081039A304DE2923161F151F1972
:1003C000DF291E08A4003030F8001F08C739780460
:1003D0009F002408453C031CF6292408323C0318DE
:1003E000F52921082039A304F629A3161F151F1982
:1003F000F7291E08A4002408453C031C082A2408E9
:10040000323C0318072A21084039A304082A23177D
:100410002308A1008316061483120618142A220F3B
:10042000122A132AA20A152AA20122080A3C031C36
:10043000A317A3092308930083161418212A8312F3
:080440001C2A831258296300F5
:04400E00383FFC3FFC
:00000001FF
;PIC16F88
/roboti/istrobot/3Orbis/vystava/cidla/cidla.LST
0,0 → 1,634
CCS PCM C Compiler, Version 3.245, 27853 13-V-06 00:33
 
Filename: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.lst
 
ROM used: 548 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)
*
002A: MOVLW 28
002B: MOVWF 04
002C: MOVF 00,W
002D: BTFSC 03.2
002E: GOTO 040
002F: MOVLW 01
0030: MOVWF 78
0031: MOVLW BF
0032: MOVWF 77
0033: CLRWDT
0034: DECFSZ 77,F
0035: GOTO 033
0036: DECFSZ 78,F
0037: GOTO 031
0038: MOVLW 4A
0039: MOVWF 77
003A: DECFSZ 77,F
003B: GOTO 03A
003C: NOP
003D: CLRWDT
003E: DECFSZ 00,F
003F: GOTO 02F
0040: RETLW 00
....................
....................
.................... //#include <stdlib.h>
....................
.................... #use rs232(baud=9600,parity=N,xmit=PIN_B3,bits=8,restart_wdt)
0041: BSF 03.5
0042: BCF 06.3
0043: BCF 03.5
0044: BCF 06.3
0045: MOVLW 08
0046: MOVWF 78
0047: NOP
0048: NOP
0049: NOP
004A: BSF 78.7
004B: GOTO 05B
004C: BCF 78.7
004D: RRF 2A,F
004E: BTFSC 03.0
004F: BSF 06.3
0050: BTFSS 03.0
0051: BCF 06.3
0052: BSF 78.6
0053: GOTO 05B
0054: BCF 78.6
0055: DECFSZ 78,F
0056: GOTO 04D
0057: NOP
0058: NOP
0059: NOP
005A: BSF 06.3
005B: MOVLW 1C
005C: MOVWF 04
005D: DECFSZ 04,F
005E: GOTO 05D
005F: NOP
0060: NOP
0061: CLRWDT
0062: BTFSC 78.7
0063: GOTO 04C
0064: BTFSC 78.6
0065: GOTO 054
0066: 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
.................... #define SW2 PIN_A7
....................
....................
.................... 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;
.................... unsigned short int negace;
....................
.................... 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_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
00D0: BSF 03.5
00D1: MOVF 01,W
00D2: ANDLW C7
00D3: IORLW 08
00D4: MOVWF 01
.................... setup_timer_1(T1_DISABLED);
00D5: BCF 03.5
00D6: CLRF 10
.................... setup_timer_2(T2_DISABLED,0,1);
00D7: MOVLW 00
00D8: MOVWF 78
00D9: MOVWF 12
00DA: MOVLW 00
00DB: BSF 03.5
00DC: MOVWF 12
.................... setup_comparator(NC_NC_NC_NC);
00DD: MOVLW 07
00DE: MOVWF 1C
00DF: MOVF 05,W
00E0: CLRWDT
00E1: MOVLW 02
00E2: MOVWF 77
00E3: DECFSZ 77,F
00E4: GOTO 0E3
00E5: NOP
00E6: NOP
00E7: MOVF 1C,W
00E8: BCF 03.5
00E9: BCF 0D.6
.................... setup_vref(FALSE);
00EA: BSF 03.5
00EB: CLRF 1D
....................
.................... Delay_ms(500);
00EC: MOVLW 02
00ED: BCF 03.5
00EE: MOVWF 27
00EF: MOVLW FA
00F0: MOVWF 28
00F1: CALL 02A
00F2: DECFSZ 27,F
00F3: GOTO 0EF
.................... setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED);
00F4: BCF 14.5
00F5: BSF 03.5
00F6: BCF 06.2
00F7: BSF 06.1
00F8: BSF 06.4
00F9: MOVLW 35
00FA: BCF 03.5
00FB: MOVWF 14
00FC: MOVLW 40
00FD: BSF 03.5
00FE: MOVWF 14
....................
.................... // diagnostika
.................... printf("\n\r");
00FF: BCF 03.5
0100: CLRF 27
0101: MOVF 27,W
0102: CALL 004
0103: IORLW 00
0104: BTFSC 03.2
0105: GOTO 10A
0106: INCF 27,F
0107: MOVWF 2A
0108: CALL 041
0109: GOTO 101
.................... Delay_ms(100);
010A: MOVLW 64
010B: MOVWF 28
010C: CALL 02A
.................... printf("***\n\r");
010D: CLRF 27
010E: MOVF 27,W
010F: CALL 00B
0110: IORLW 00
0111: BTFSC 03.2
0112: GOTO 117
0113: INCF 27,F
0114: MOVWF 2A
0115: CALL 041
0116: GOTO 10E
.................... Delay_ms(100);
0117: MOVLW 64
0118: MOVWF 28
0119: CALL 02A
....................
.................... for (n=0; n<=6; n++)
011A: CLRF 25
011B: MOVF 25,W
011C: SUBLW 06
011D: BTFSS 03.0
011E: GOTO 157
.................... {
.................... set_adc_channel(n);
011F: RLF 25,W
0120: MOVWF 77
0121: RLF 77,F
0122: RLF 77,F
0123: MOVLW F8
0124: ANDWF 77,F
0125: MOVF 1F,W
0126: ANDLW C7
0127: IORWF 77,W
0128: MOVWF 1F
.................... Delay_ms(100);
0129: MOVLW 64
012A: MOVWF 28
012B: CALL 02A
.................... a=read_adc();
012C: BSF 1F.2
012D: BTFSC 1F.2
012E: GOTO 12D
012F: MOVF 1E,W
0130: MOVWF 24
.................... printf("sensor %u - %u\n\r",n,a);
0131: CLRF 27
0132: MOVF 27,W
0133: CALL 015
0134: INCF 27,F
0135: MOVWF 77
0136: MOVWF 2A
0137: CALL 041
0138: MOVLW 07
0139: SUBWF 27,W
013A: BTFSS 03.2
013B: GOTO 132
013C: MOVF 25,W
013D: MOVWF 28
013E: MOVLW 1B
013F: MOVWF 29
0140: CALL 07C
0141: MOVLW 20
0142: MOVWF 2A
0143: CALL 041
0144: MOVLW 2D
0145: MOVWF 2A
0146: CALL 041
0147: MOVLW 20
0148: MOVWF 2A
0149: CALL 041
014A: MOVF 24,W
014B: MOVWF 28
014C: MOVLW 1B
014D: MOVWF 29
014E: CALL 07C
014F: MOVLW 0A
0150: MOVWF 2A
0151: CALL 041
0152: MOVLW 0D
0153: MOVWF 2A
0154: CALL 041
.................... }
0155: INCF 25,F
0156: GOTO 11B
....................
.................... shure=0;
0157: CLRF 22
.................... // if(input(SW2)) negace = true;
.................... // else negace = false;
.................... while(true)
.................... {
.................... set_adc_channel(0);
0158: MOVLW 00
0159: MOVWF 78
015A: MOVF 1F,W
015B: ANDLW C7
015C: IORWF 78,W
015D: MOVWF 1F
.................... cidla=0;
015E: CLRF 23
.................... Delay_us(10);
015F: CLRWDT
0160: MOVLW 02
0161: MOVWF 77
0162: DECFSZ 77,F
0163: GOTO 162
0164: NOP
0165: NOP
.................... a=read_adc();
0166: BSF 1F.2
0167: BTFSC 1F.2
0168: GOTO 167
0169: MOVF 1E,W
016A: MOVWF 24
....................
.................... set_adc_channel(1);
016B: MOVLW 08
016C: MOVWF 78
016D: MOVF 1F,W
016E: ANDLW C7
016F: IORWF 78,W
0170: MOVWF 1F
.................... if(a<TRESHOLD_MAX) //hystereze cidel
0171: MOVF 24,W
0172: SUBLW 45
0173: BTFSS 03.0
0174: GOTO 17E
.................... {
.................... if(a>TRESHOLD_MIN)
0175: MOVF 24,W
0176: SUBLW 32
0177: BTFSC 03.0
0178: GOTO 17D
.................... {
.................... cidla |= (last_cidla & 0b00000001);
0179: MOVF 21,W
017A: ANDLW 01
017B: IORWF 23,F
.................... }
.................... else cidla |= 0b00000001;
017C: GOTO 17E
017D: BSF 23.0
.................... }
....................
.................... a=read_adc();
017E: BSF 1F.2
017F: BTFSC 1F.2
0180: GOTO 17F
0181: MOVF 1E,W
0182: MOVWF 24
....................
.................... set_adc_channel(2);
0183: MOVLW 10
0184: MOVWF 78
0185: MOVF 1F,W
0186: ANDLW C7
0187: IORWF 78,W
0188: MOVWF 1F
.................... if(a<TRESHOLD_MAX)
0189: MOVF 24,W
018A: SUBLW 45
018B: BTFSS 03.0
018C: GOTO 196
.................... {
.................... if(a>TRESHOLD_MIN)
018D: MOVF 24,W
018E: SUBLW 32
018F: BTFSC 03.0
0190: GOTO 195
.................... {
.................... cidla |= (last_cidla & 0b00000010);
0191: MOVF 21,W
0192: ANDLW 02
0193: IORWF 23,F
.................... }
.................... else cidla |= 0b00000010;
0194: GOTO 196
0195: BSF 23.1
.................... }
....................
.................... a=read_adc();
0196: BSF 1F.2
0197: BTFSC 1F.2
0198: GOTO 197
0199: MOVF 1E,W
019A: MOVWF 24
....................
.................... set_adc_channel(3);
019B: MOVLW 18
019C: MOVWF 78
019D: MOVF 1F,W
019E: ANDLW C7
019F: IORWF 78,W
01A0: MOVWF 1F
.................... if(a<TRESHOLD_MAX)
01A1: MOVF 24,W
01A2: SUBLW 45
01A3: BTFSS 03.0
01A4: GOTO 1AE
.................... {
.................... if(a>TRESHOLD_MIN)
01A5: MOVF 24,W
01A6: SUBLW 32
01A7: BTFSC 03.0
01A8: GOTO 1AD
.................... {
.................... cidla |= (last_cidla & 0b00000100);
01A9: MOVF 21,W
01AA: ANDLW 04
01AB: IORWF 23,F
.................... }
.................... else cidla |= 0b00000100;
01AC: GOTO 1AE
01AD: BSF 23.2
.................... }
....................
.................... a=read_adc();
01AE: BSF 1F.2
01AF: BTFSC 1F.2
01B0: GOTO 1AF
01B1: MOVF 1E,W
01B2: MOVWF 24
....................
.................... set_adc_channel(4);
01B3: MOVLW 20
01B4: MOVWF 78
01B5: MOVF 1F,W
01B6: ANDLW C7
01B7: IORWF 78,W
01B8: MOVWF 1F
.................... if(a<TRESHOLD_MAX)
01B9: MOVF 24,W
01BA: SUBLW 45
01BB: BTFSS 03.0
01BC: GOTO 1C6
.................... {
.................... if(a>TRESHOLD_MIN)
01BD: MOVF 24,W
01BE: SUBLW 32
01BF: BTFSC 03.0
01C0: GOTO 1C5
.................... {
.................... cidla |= (last_cidla & 0b00001000);
01C1: MOVF 21,W
01C2: ANDLW 08
01C3: IORWF 23,F
.................... }
.................... else cidla |= 0b00001000;
01C4: GOTO 1C6
01C5: BSF 23.3
.................... }
.................... a=read_adc();
01C6: BSF 1F.2
01C7: BTFSC 1F.2
01C8: GOTO 1C7
01C9: MOVF 1E,W
01CA: MOVWF 24
....................
.................... set_adc_channel(5);
01CB: MOVLW 28
01CC: MOVWF 78
01CD: MOVF 1F,W
01CE: ANDLW C7
01CF: IORWF 78,W
01D0: MOVWF 1F
....................
.................... if(a<TRESHOLD_MAX)
01D1: MOVF 24,W
01D2: SUBLW 45
01D3: BTFSS 03.0
01D4: GOTO 1DE
.................... {
.................... if(a>TRESHOLD_MIN)
01D5: MOVF 24,W
01D6: SUBLW 32
01D7: BTFSC 03.0
01D8: GOTO 1DD
.................... {
.................... cidla |= (last_cidla & 0b00010000);
01D9: MOVF 21,W
01DA: ANDLW 10
01DB: IORWF 23,F
.................... }
.................... else cidla |= 0b00010000;
01DC: GOTO 1DE
01DD: BSF 23.4
.................... }
.................... a=read_adc();
01DE: BSF 1F.2
01DF: BTFSC 1F.2
01E0: GOTO 1DF
01E1: MOVF 1E,W
01E2: MOVWF 24
....................
.................... set_adc_channel(6);
01E3: MOVLW 30
01E4: MOVWF 78
01E5: MOVF 1F,W
01E6: ANDLW C7
01E7: IORWF 78,W
01E8: MOVWF 1F
.................... if(a<TRESHOLD_MAX)
01E9: MOVF 24,W
01EA: SUBLW 45
01EB: BTFSS 03.0
01EC: GOTO 1F6
.................... {
.................... if(a>TRESHOLD_MIN)
01ED: MOVF 24,W
01EE: SUBLW 32
01EF: BTFSC 03.0
01F0: GOTO 1F5
.................... {
.................... cidla |= (last_cidla & 0b00100000);
01F1: MOVF 21,W
01F2: ANDLW 20
01F3: IORWF 23,F
.................... }
.................... else cidla |= 0b00100000;
01F4: GOTO 1F6
01F5: BSF 23.5
.................... }
.................... a=read_adc();
01F6: BSF 1F.2
01F7: BTFSC 1F.2
01F8: GOTO 1F7
01F9: MOVF 1E,W
01FA: MOVWF 24
....................
.................... if(a<TRESHOLD_MAX)
01FB: MOVF 24,W
01FC: SUBLW 45
01FD: BTFSS 03.0
01FE: GOTO 208
.................... {
.................... if(a>TRESHOLD_MIN)
01FF: MOVF 24,W
0200: SUBLW 32
0201: BTFSC 03.0
0202: GOTO 207
.................... {
.................... cidla |=(last_cidla & 0b01000000);
0203: MOVF 21,W
0204: ANDLW 40
0205: IORWF 23,F
.................... }
.................... else cidla |= 0b01000000;
0206: GOTO 208
0207: BSF 23.6
.................... }
....................
.................... last_cidla=cidla;
0208: MOVF 23,W
0209: MOVWF 21
....................
.................... if (!input(IRRX)) {if (shure<255) shure++;} else {shure=0;};
020A: BSF 03.5
020B: BSF 06.0
020C: BCF 03.5
020D: BTFSC 06.0
020E: GOTO 214
020F: INCFSZ 22,W
0210: GOTO 212
0211: GOTO 213
0212: INCF 22,F
0213: GOTO 215
0214: CLRF 22
.................... if (shure>CIHLA) cidla|=0b10000000;
0215: MOVF 22,W
0216: SUBLW 0A
0217: BTFSS 03.0
0218: BSF 23.7
....................
.................... /* if (negace == true) cidla=~cidla;
.................... else
.................... {
.................... if(!bit_test(cidla,7)) bit_set(cidla,7);
.................... else bit_clear(cidla,7);
.................... }*/
....................
.................... cidla=~cidla;
0219: COMF 23,F
....................
.................... spi_write(cidla);
021A: MOVF 23,W
021B: MOVWF 13
021C: BSF 03.5
021D: BTFSC 14.0
021E: GOTO 221
021F: BCF 03.5
0220: GOTO 21C
.................... }
0221: BCF 03.5
0222: GOTO 158
.................... }
0223: 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/vystava/cidla/cidla.PJT
0,0 → 1,44
[PROJECT]
Target=cidla.HEX
Development_Mode=
Processor=0x688F
ToolSuite=CCS
 
[Directories]
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\dr
Library=
LinkerScript=
 
[Target Data]
FileList=D:\KAKLIK\roboti\istrobot\3Orbis\vystava\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\roboti\istrobot\3Orbis\vystava\cidla\cidla.c
2=D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.h
3=C:\Program Files\PICC\devices\16F88.h
4=
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\roboti\istrobot\3Orbis\vystava\cidla\cidla.c (main)
/roboti/istrobot/3Orbis/vystava/cidla/cidla.SYM
0,0 → 1,60
015 CCP_1_LOW
015-016 CCP_1
016 CCP_1_HIGH
020 last_radius
021 last_cidla
022 shure
023 main.cidla
024 main.a
025 main.n
026.0 main.negace
027 main.@SCRATCH
028 @delay_ms1.P1
028 @PRINTF_U_9600_51_41.P2
029 @PRINTF_U_9600_51_41.P1
02A @DIV88.P1
02A @PUTCHAR_1_.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
 
002A @delay_ms1
0041 @PUTCHAR_1_
00B1 main
0004 @const10062
000B @const10067
0015 @const10080
0067 @DIV88
007C @PRINTF_U_9600_51_41
00B1 @cinit
 
Project Files:
D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.c
D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.h
C:\Program Files\PICC\devices\16F88.h
 
Units:
D:\KAKLIK\roboti\istrobot\3Orbis\vystava\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\roboti\istrobot\3Orbis\vystava\cidla\cidla.err
INHX8: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.hex
Symbols: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.sym
List: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.lst
Debug/COFF: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.cof
Call Tree: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.tre
Statistics: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.sta
/roboti/istrobot/3Orbis/vystava/cidla/cidla.c
0,0 → 1,171
#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
#define SW2 PIN_A7
 
 
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;
unsigned short int negace;
 
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|sAN4|sAN5|sAN6|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
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);
 
Delay_ms(500);
setup_spi(SPI_SLAVE|SPI_H_TO_L|SPI_SS_DISABLED);
 
// 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;
// if(input(SW2)) negace = true;
// else negace = false;
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;
 
/* if (negace == true) cidla=~cidla;
else
{
if(!bit_test(cidla,7)) bit_set(cidla,7);
else bit_clear(cidla,7);
}*/
cidla=~cidla;
spi_write(cidla);
}
}
/roboti/istrobot/3Orbis/vystava/cidla/cidla.cof
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/vystava/cidla/cidla.err
0,0 → 1,2
No Errors
0 Errors, 0 Warnings.
/roboti/istrobot/3Orbis/vystava/cidla/cidla.h
0,0 → 1,5
#include <16F88.h>
#device adc=8
#fuses NOWDT,INTRC_IO, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO
#use delay(clock=4000000,RESTART_WDT)
 
/roboti/istrobot/3Orbis/vystava/cidla/cidla.sta
0,0 → 1,35
 
ROM used: 548 (13%)
548 (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
----- ----- --- -----
172 92 100 D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.c
6 0 0 D:\KAKLIK\roboti\istrobot\3Orbis\vystava\cidla\cidla.h
279 0 0 C:\Program Files\PICC\devices\16F88.h
----- -----
914 184 Total
 
Page ROM % RAM Functions:
---- --- --- --- ----------
0 23 4 1 @delay_ms1
0 38 7 1 @PUTCHAR_1_
0 371 68 5 main
0 7 1 0 @const10062
0 10 2 0 @const10067
0 21 4 0 @const10080
0 21 4 3 @DIV88
0 53 10 2 @PRINTF_U_9600_51_41
 
Segment Used Free
--------- ---- ----
00000-00003 4 0
00004-007FF 544 1500
00800-00FFF 0 2048
 
/roboti/istrobot/3Orbis/vystava/cidla/cidla.tre
0,0 → 1,30
ÀÄcidla
ÀÄmain 0/371 Ram=5
ÃÄ??0??
ÃÄ@delay_ms1 0/23 Ram=1
ÃÄ@const10062 0/7 Ram=0
ÃÄ@PUTCHAR_1_ 0/38 Ram=1
ÃÄ@delay_ms1 0/23 Ram=1
ÃÄ@const10067 0/10 Ram=0
ÃÄ@PUTCHAR_1_ 0/38 Ram=1
ÃÄ@delay_ms1 0/23 Ram=1
ÃÄ@delay_ms1 0/23 Ram=1
ÃÄ@const10080 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/vystava/cidla/macro.ini
/roboti/istrobot/3Orbis/vystava/main.BAK
0,0 → 1,222
#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 // 3 stupne zataceni
#define BEAR2 25
#define BEAR3 45
#define R 100 // Rozumna rychlost
#define R17 200 // X nasobek rozumne rychlosti
#define PRED_CIHLOU 100 // rychlost pri dalkove detekci cihly
#define L2 2 // cara vlevo
#define L3 3 // cara vlevo
#define S 0 // cara mezi sensory
#define R2 -2 // cara vpravo
#define R3 -3 // cara vpravo
 
// servo
#define SERVO PIN_B5
 
// kroutitka
#define CERVENA 4 // AN4
#define MODRA 2 // AN2
 
// IR
#define IRTX PIN_B2
#define CIHLA PIN_A3
 
//motory
#define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred
#define FL output_low(PIN_A1); output_high(PIN_A0)
#define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad
#define BL output_low(PIN_A0); output_high(PIN_A1)
#define STOPR output_low(PIN_A6);output_low(PIN_A7)
#define STOPL output_low(PIN_A0);output_low(PIN_A1)
 
//HID
#define LED1 PIN_B1 //oranzova
#define LED2 PIN_B2 //zluta
 
#define STROBE PIN_B0
 
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
signed int8 line = S; // na ktere strane byla detekovana cara
unsigned int8 uhel; // urcuje aktualni uhel zataceni
unsigned int8 speed; // maximalni povolena rychlost
unsigned int8 turn; // rychlost toceni
unsigned int8 rovinka; // pocitadlo na zjisteni rovinky
 
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem
signed int16 Rmotor; // a pravem motoru
 
// makro pro PWM pro motory
#define GO(motor, direction, power) if(get_timer0()<=power) \
{direction##motor;} else {stop##motor;}
////////////////////////////////////////////////////////////////////////////////
#int_TIMER2
TIMER2_isr() // ovladani serva
{
unsigned int8 n;
 
output_high(SERVO);
delay_us(1000);
for(n=uhel; n>0; n--) Delay_us(2);
output_low(SERVO);
}
 
////////////////////////////////////////////////////////////////////////////////
void main()
{
 
unsigned int8 n;
unsigned int8 i,j;
unsigned int8 last_sensors;
unsigned int8 RozumnaRychlost;
 
setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED|T1_DIV_BY_8);
setup_timer_2(T2_DIV_BY_16,140,16);
setup_oscillator(OSC_8MHZ|OSC_INTRC);
 
STOPR; STOPL; // zastav motory
Lmotor=0;Rmotor=0;
 
uhel = STRED; // nastav zadni kolecko na stred
rovinka = 0;
 
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
 
output_low(IRTX); // zapni IR vysilac
 
delay_ms(2000); // musime pockat na diagnostiku slave CPU
 
//nastaveni rychlosti
set_adc_channel(CERVENA);
 
Delay_ms(1);
RozumnaRychlost=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
 
last_sensors=sensors;
 
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors; // neguj prijata data
output_high(STROBE); // zobraz data na posuvnem registru
 
i=0; // havarijni kod
for (n=0; n<=6; n++)
{
if(bit_test(sensors,n)) i++;
}
if (i>4) // 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
{
BR;BL;
Delay_ms(100);
STOPR;STOPL;
Delay_ms(1000);
}
 
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-70;
Rmotor=speed;
line=L2;
continue;
}
 
if(bit_test(sensors,5)) //.....|.//
{
uhel=STRED + BEAR2;
Rmotor=speed-70;
Lmotor=speed;
line=R2;
continue;
}
 
if (bit_test(sensors,2)) //..|....//
{
uhel=STRED - BEAR1;
Lmotor=speed-20;
Rmotor=speed;
line=L2;
if (rovinka<255) rovinka++;
continue;
}
 
if (bit_test(sensors,4)) //....|..//
{
uhel=STRED + BEAR1;
Rmotor=speed-20;
Lmotor=speed;
line=L2;
if (rovinka<255) rovinka++;
continue;
}
 
if(bit_test(sensors,3)) //...|...//
{
uhel=STRED;
Lmotor=speed;
Rmotor=speed;
line=S;
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 || speed > 170) delay_ms(50);
};
rovinka=0;
};
}
}
/roboti/istrobot/3Orbis/vystava/main.HEX
0,0 → 1,84
:1000000000308A007D280000FF00030E8301A1005C
:100010007F08A0000A08A8008A01A00E0408A20018
:100020007708A3007808A4007908A5007A08A6003C
:100030007B08A700831383128C308400801C222845
:100040008C183528220884002308F7002408F800BB
:100050002508F9002608FA002708FB0028088A006E
:10006000210E8300FF0E7F0E09008A1147280830F9
:10007000BD02031C46283D3084000310800C00089C
:100080000319462844286400800B43280034831653
:1000900086128312861664000930BC006D30BD00E4
:1000A0003720BC0B4E282C08BB00BB0803195E2868
:1000B0006400000000000000BB0355288316861270
:1000C000831286128C108A1122283A30840000088C
:1000D00003197C280230F800BF30F7006400F70BEA
:1000E0006E28F80B6C289630F700F70B7528000087
:1000F00000006400800B6A28003484011F308305EF
:10010000703083168F001F129F121B0880399B00CE
:1001100007309C008312AB0183161F129F121B082D
:10012000803974389B001F1383121F179F17831683
:100130009F1383121F14941283160611861406123D
:100140003130831294000030831694000108C739BF
:10015000083881003030831290007830F80006387B
:1001600092008C308316920072308F000513831238
:1001700005138316851383128513831605108312C6
:1001800005108316851083128510B101B001B301EB
:10019000B2018030AC00AF0183168C14C0308312E2
:1001A0008B0483160611831206110830B900FA3049
:1001B000BA006520B90BD7282030F8001F08C739CE
:1001C00078049F000130BA0065201F151F19E6282A
:1001D0001E08F700F70CF70C3F30F7057708643E70
:1001E000AD001030F8001F08C73978049F000130B7
:1001F000BA00652020302D02B9001F151F19FE28F6
:100200001E08F700F70CF70C3F30F70577083907A1
:10021000AE000108801F0F29B11F17291129B11B3A
:100220002029B108031D17293002031C2029831639
:100230008510831285108316051083120514282952
:1002400083160510831205108316851083128510FE
:100250000108801F2E29B31F36293029B31B3F29DF
:10026000B308031D36293202031C3F298316851368
:1002700083128513831605138312051747298316E6
:1002800005138312051383168513831285136400E7
:100290000130BA0065200930B900A9018B1BA917EC
:1002A0008B136D30BD003720A91B8B17B90B4D295F
:1002B0002A08B7008316061083120610130893014C
:1002C0008316141865298312602983121308AA0063
:1002D000AA098316061083120614B501B401340866
:1002E000063C031C81292A08F7003408F80003198A
:1002F0007D290310F70CF80B79297718B50AB40A91
:100300006F293508043C0318AD29831605108312A4
:100310000510831685108312851483160513831226
:10032000051383168513831285170230B9009630A2
:10033000BA006520B90B972983160513831205139C
:1003400083168513831285138316051083120510F7
:100350008316851083128510AC29AA1FD92983160C
:1003600005138312051383168513831285178316CD
:1003700005108312051083168510831285146430CE
:10038000BA0065208316051383120513831685139F
:1003900083128513831605108312051083168510AA
:1003A000831285100430B900FA30BA006520B90B09
:1003B000D4292A1CE7295330AC00B101B001FA015D
:1003C0002E08B2007A08B3000330AB0009292A1FB7
:1003D000F529AD30AC00B301B201FA012E08B0002E
:1003E0007A08B100FD30AB000929AA1C072A673042
:1003F000AC0046302D02FA01B0007A08B100FA01D3
:100400002D08B2007A08B3000230AB000929AA1EF9
:10041000192A9930AC0046302D02FA01B2007A0850
:10042000B300FA012D08B0007A08B100FE30AB002D
:1004300009292A1D2F2A7630AC0014302D02FA012A
:10044000B0007A08B100FA012D08B2007A08B300B2
:100450000230AB002F0F2D2A2E2AAF0A09292A1E9F
:10046000452A8A30AC0014302D02FA01B2007A0815
:10047000B300FA012D08B0007A08B1000230AB00D9
:100480002F0F432A442AAF0A0929AA1D592A80306E
:10049000AC00FA012D08B0007A08B100FA012D086D
:1004A000B2007A08B300AB012F0F572A582AAF0ABF
:1004B00009292B08033C0319612A2B08FD3C031D65
:1004C000842A2F08323C0318832A831605108312CE
:1004D0000510831685108312851483160513831265
:1004E000051383168513831285174630BA006520DD
:1004F0002F08FA3C031C802A2D08AA3C0318832AE3
:0C0500003230BA006520AF010929630009
:04400E00383FFC3FFC
:00000001FF
;PIC16F88
/roboti/istrobot/3Orbis/vystava/main.LST
0,0 → 1,911
CCS PCM C Compiler, Version 3.245, 27853 12-V-06 23:56
 
Filename: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.lst
 
ROM used: 646 words (16%)
Largest free fragment is 2048
RAM used: 32 (18%) at main() level
35 (20%) worst case
Stack: 3 worst case (1 in main + 2 for interrupts)
 
*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 07D
0003: NOP
0004: MOVWF 7F
0005: SWAPF 03,W
0006: CLRF 03
0007: MOVWF 21
0008: MOVF 7F,W
0009: MOVWF 20
000A: MOVF 0A,W
000B: MOVWF 28
000C: CLRF 0A
000D: SWAPF 20,F
000E: MOVF 04,W
000F: MOVWF 22
0010: MOVF 77,W
0011: MOVWF 23
0012: MOVF 78,W
0013: MOVWF 24
0014: MOVF 79,W
0015: MOVWF 25
0016: MOVF 7A,W
0017: MOVWF 26
0018: MOVF 7B,W
0019: MOVWF 27
001A: BCF 03.7
001B: BCF 03.5
001C: MOVLW 8C
001D: MOVWF 04
001E: BTFSS 00.1
001F: GOTO 022
0020: BTFSC 0C.1
0021: GOTO 035
0022: MOVF 22,W
0023: MOVWF 04
0024: MOVF 23,W
0025: MOVWF 77
0026: MOVF 24,W
0027: MOVWF 78
0028: MOVF 25,W
0029: MOVWF 79
002A: MOVF 26,W
002B: MOVWF 7A
002C: MOVF 27,W
002D: MOVWF 7B
002E: MOVF 28,W
002F: MOVWF 0A
0030: SWAPF 21,W
0031: MOVWF 03
0032: SWAPF 7F,F
0033: SWAPF 7F,W
0034: RETFIE
0035: BCF 0A.3
0036: GOTO 047
.................... #include ".\main.h"
.................... #include <16F88.h>
.................... //////// Standard Header file for the PIC16F88 device ////////////////
.................... #device PIC16F88
.................... #list
....................
.................... #device adc=8
....................
.................... #FUSES NOWDT //No Watch Dog Timer
.................... #FUSES INTRC_IO
.................... #FUSES NOPUT //No Power Up Timer
.................... #FUSES MCLR //Master Clear pin enabled
.................... #FUSES NOBROWNOUT //Reset when brownout detected
.................... #FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
.................... #FUSES NOCPD //No EE protection
.................... #FUSES NOWRT //Program memory not write protected
.................... #FUSES NODEBUG //No Debug mode for ICD
.................... #FUSES NOPROTECT //Code not protected from reading
.................... #FUSES NOFCMEN //Fail-safe clock monitor enabled
.................... #FUSES NOIESO //Internal External Switch Over mode enabled
....................
.................... #use delay(clock=8000000,RESTART_WDT)
0037: MOVLW 08
0038: SUBWF 3D,F
0039: BTFSS 03.0
003A: GOTO 046
003B: MOVLW 3D
003C: MOVWF 04
003D: BCF 03.0
003E: RRF 00,F
003F: MOVF 00,W
0040: BTFSC 03.2
0041: GOTO 046
0042: GOTO 044
0043: CLRWDT
0044: DECFSZ 00,F
0045: GOTO 043
0046: RETLW 00
*
0065: MOVLW 3A
0066: MOVWF 04
0067: MOVF 00,W
0068: BTFSC 03.2
0069: GOTO 07C
006A: MOVLW 02
006B: MOVWF 78
006C: MOVLW BF
006D: MOVWF 77
006E: CLRWDT
006F: DECFSZ 77,F
0070: GOTO 06E
0071: DECFSZ 78,F
0072: GOTO 06C
0073: MOVLW 96
0074: MOVWF 77
0075: DECFSZ 77,F
0076: GOTO 075
0077: NOP
0078: NOP
0079: CLRWDT
007A: DECFSZ 00,F
007B: GOTO 06A
007C: RETLW 00
....................
....................
....................
.................... #define KOLMO1 225 // predni kolecko sroubem dopredu
.................... #define KOLMO2 30 // predni kolecko je hlavou sroubu dozadu
.................... #define STRED 128 // sredni poloha zataceciho kolecka
.................... #define BEAR1 10 // 3 stupne zataceni
.................... #define BEAR2 25
.................... #define BEAR3 45
.................... #define R 100 // Rozumna rychlost
.................... #define R17 200 // X nasobek rozumne rychlosti
.................... #define PRED_CIHLOU 100 // rychlost pri dalkove detekci cihly
.................... #define L2 2 // cara vlevo
.................... #define L3 3 // cara vlevo
.................... #define S 0 // cara mezi sensory
.................... #define R2 -2 // cara vpravo
.................... #define R3 -3 // cara vpravo
....................
.................... // servo
.................... #define SERVO PIN_B5
....................
.................... // kroutitka
.................... #define CERVENA 4 // AN4
.................... #define MODRA 2 // AN2
....................
.................... // IR
.................... #define IRTX PIN_B2
.................... #define CIHLA PIN_A3
....................
.................... //motory
.................... #define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred
.................... #define FL output_low(PIN_A1); output_high(PIN_A0)
.................... #define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad
.................... #define BL output_low(PIN_A0); output_high(PIN_A1)
.................... #define STOPR output_low(PIN_A6);output_low(PIN_A7)
.................... #define STOPL output_low(PIN_A0);output_low(PIN_A1)
....................
.................... //HID
.................... #define LED1 PIN_B1 //oranzova
.................... #define LED2 PIN_B2 //zluta
....................
.................... #define STROBE PIN_B0
....................
.................... unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
.................... signed int8 line = S; // na ktere strane byla detekovana cara
*
008A: BCF 03.5
008B: CLRF 2B
.................... unsigned int8 uhel; // urcuje aktualni uhel zataceni
.................... unsigned int8 speed; // maximalni povolena rychlost
.................... unsigned int8 turn; // rychlost toceni
.................... unsigned int8 rovinka; // pocitadlo na zjisteni rovinky
....................
.................... signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem
.................... signed int16 Rmotor; // a pravem motoru
....................
.................... // makro pro PWM pro motory
.................... #define GO(motor, direction, power) if(get_timer0()<=power) \
.................... {direction##motor;} else {stop##motor;}
.................... ////////////////////////////////////////////////////////////////////////////////
.................... #int_TIMER2
.................... TIMER2_isr() // ovladani serva
.................... {
.................... unsigned int8 n;
....................
.................... output_high(SERVO);
*
0047: BSF 03.5
0048: BCF 06.5
0049: BCF 03.5
004A: BSF 06.5
.................... delay_us(1000);
004B: CLRWDT
004C: MOVLW 09
004D: MOVWF 3C
004E: MOVLW 6D
004F: MOVWF 3D
0050: CALL 037
0051: DECFSZ 3C,F
0052: GOTO 04E
.................... for(n=uhel; n>0; n--) Delay_us(2);
0053: MOVF 2C,W
0054: MOVWF 3B
0055: MOVF 3B,F
0056: BTFSC 03.2
0057: GOTO 05E
0058: CLRWDT
0059: NOP
005A: NOP
005B: NOP
005C: DECF 3B,F
005D: GOTO 055
.................... output_low(SERVO);
005E: BSF 03.5
005F: BCF 06.5
0060: BCF 03.5
0061: BCF 06.5
.................... }
....................
.................... ////////////////////////////////////////////////////////////////////////////////
0062: BCF 0C.1
0063: BCF 0A.3
0064: GOTO 022
.................... void main()
.................... {
*
007D: CLRF 04
007E: MOVLW 1F
007F: ANDWF 03,F
0080: MOVLW 70
0081: BSF 03.5
0082: MOVWF 0F
0083: BCF 1F.4
0084: BCF 1F.5
0085: MOVF 1B,W
0086: ANDLW 80
0087: MOVWF 1B
0088: MOVLW 07
0089: MOVWF 1C
....................
.................... unsigned int8 n;
.................... unsigned int8 i,j;
.................... unsigned int8 last_sensors;
.................... unsigned int8 RozumnaRychlost;
....................
.................... setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka
*
008C: BSF 03.5
008D: BCF 1F.4
008E: BCF 1F.5
008F: MOVF 1B,W
0090: ANDLW 80
0091: IORLW 74
0092: MOVWF 1B
.................... setup_adc(ADC_CLOCK_INTERNAL);
0093: BCF 1F.6
0094: BCF 03.5
0095: BSF 1F.6
0096: BSF 1F.7
0097: BSF 03.5
0098: BCF 1F.7
0099: BCF 03.5
009A: BSF 1F.0
.................... setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);
009B: BCF 14.5
009C: BSF 03.5
009D: BCF 06.2
009E: BSF 06.1
009F: BCF 06.4
00A0: MOVLW 31
00A1: BCF 03.5
00A2: MOVWF 14
00A3: MOVLW 00
00A4: BSF 03.5
00A5: MOVWF 14
.................... setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
00A6: MOVF 01,W
00A7: ANDLW C7
00A8: IORLW 08
00A9: MOVWF 01
.................... setup_timer_1(T1_DISABLED|T1_DIV_BY_8);
00AA: MOVLW 30
00AB: BCF 03.5
00AC: MOVWF 10
.................... setup_timer_2(T2_DIV_BY_16,140,16);
00AD: MOVLW 78
00AE: MOVWF 78
00AF: IORLW 06
00B0: MOVWF 12
00B1: MOVLW 8C
00B2: BSF 03.5
00B3: MOVWF 12
.................... setup_oscillator(OSC_8MHZ|OSC_INTRC);
00B4: MOVLW 72
00B5: MOVWF 0F
....................
.................... STOPR; STOPL; // zastav motory
00B6: BCF 05.6
00B7: BCF 03.5
00B8: BCF 05.6
00B9: BSF 03.5
00BA: BCF 05.7
00BB: BCF 03.5
00BC: BCF 05.7
00BD: BSF 03.5
00BE: BCF 05.0
00BF: BCF 03.5
00C0: BCF 05.0
00C1: BSF 03.5
00C2: BCF 05.1
00C3: BCF 03.5
00C4: BCF 05.1
.................... Lmotor=0;Rmotor=0;
00C5: CLRF 31
00C6: CLRF 30
00C7: CLRF 33
00C8: CLRF 32
....................
.................... uhel = STRED; // nastav zadni kolecko na stred
00C9: MOVLW 80
00CA: MOVWF 2C
.................... rovinka = 0;
00CB: CLRF 2F
....................
.................... enable_interrupts(INT_TIMER2);
00CC: BSF 03.5
00CD: BSF 0C.1
.................... enable_interrupts(GLOBAL);
00CE: MOVLW C0
00CF: BCF 03.5
00D0: IORWF 0B,F
....................
.................... output_low(IRTX); // zapni IR vysilac
00D1: BSF 03.5
00D2: BCF 06.2
00D3: BCF 03.5
00D4: BCF 06.2
....................
.................... delay_ms(2000); // musime pockat na diagnostiku slave CPU
00D5: MOVLW 08
00D6: MOVWF 39
00D7: MOVLW FA
00D8: MOVWF 3A
00D9: CALL 065
00DA: DECFSZ 39,F
00DB: GOTO 0D7
....................
.................... //nastaveni rychlosti
.................... set_adc_channel(CERVENA);
00DC: MOVLW 20
00DD: MOVWF 78
00DE: MOVF 1F,W
00DF: ANDLW C7
00E0: IORWF 78,W
00E1: MOVWF 1F
....................
.................... Delay_ms(1);
00E2: MOVLW 01
00E3: MOVWF 3A
00E4: CALL 065
.................... speed=R+(read_adc()>>2); // rychlost rovne +63; kroutitko dava 0-63
00E5: BSF 1F.2
00E6: BTFSC 1F.2
00E7: GOTO 0E6
00E8: MOVF 1E,W
00E9: MOVWF 77
00EA: RRF 77,F
00EB: RRF 77,F
00EC: MOVLW 3F
00ED: ANDWF 77,F
00EE: MOVF 77,W
00EF: ADDLW 64
00F0: MOVWF 2D
.................... set_adc_channel(MODRA);
00F1: MOVLW 10
00F2: MOVWF 78
00F3: MOVF 1F,W
00F4: ANDLW C7
00F5: IORWF 78,W
00F6: MOVWF 1F
.................... Delay_ms(1);
00F7: MOVLW 01
00F8: MOVWF 3A
00F9: CALL 065
.................... turn=speed-32+(read_adc()>>2); // rychlost toceni +-32; kroutitko dava 0-63
00FA: MOVLW 20
00FB: SUBWF 2D,W
00FC: MOVWF 39
00FD: BSF 1F.2
00FE: BTFSC 1F.2
00FF: GOTO 0FE
0100: MOVF 1E,W
0101: MOVWF 77
0102: RRF 77,F
0103: RRF 77,F
0104: MOVLW 3F
0105: ANDWF 77,F
0106: MOVF 77,W
0107: ADDWF 39,W
0108: MOVWF 2E
....................
....................
.................... while(true)
.................... {
....................
.................... GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor
0109: MOVF 01,W
010A: BTFSS 00.7
010B: GOTO 10F
010C: BTFSS 31.7
010D: GOTO 117
010E: GOTO 111
010F: BTFSC 31.7
0110: GOTO 120
0111: MOVF 31,F
0112: BTFSS 03.2
0113: GOTO 117
0114: SUBWF 30,W
0115: BTFSS 03.0
0116: GOTO 120
0117: BSF 03.5
0118: BCF 05.1
0119: BCF 03.5
011A: BCF 05.1
011B: BSF 03.5
011C: BCF 05.0
011D: BCF 03.5
011E: BSF 05.0
011F: GOTO 128
0120: BSF 03.5
0121: BCF 05.0
0122: BCF 03.5
0123: BCF 05.0
0124: BSF 03.5
0125: BCF 05.1
0126: BCF 03.5
0127: BCF 05.1
0128: MOVF 01,W
0129: BTFSS 00.7
012A: GOTO 12E
012B: BTFSS 33.7
012C: GOTO 136
012D: GOTO 130
012E: BTFSC 33.7
012F: GOTO 13F
0130: MOVF 33,F
0131: BTFSS 03.2
0132: GOTO 136
0133: SUBWF 32,W
0134: BTFSS 03.0
0135: GOTO 13F
0136: BSF 03.5
0137: BCF 05.7
0138: BCF 03.5
0139: BCF 05.7
013A: BSF 03.5
013B: BCF 05.6
013C: BCF 03.5
013D: BSF 05.6
013E: GOTO 147
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: BCF 05.7
....................
.................... delay_us(2000); // cekani na SLAVE, nez pripravi data od cidel
0147: CLRWDT
0148: MOVLW 01
0149: MOVWF 3A
014A: CALL 065
014B: MOVLW 09
014C: MOVWF 39
014D: CLRF 29
014E: BTFSC 0B.7
014F: BSF 29.7
0150: BCF 0B.7
0151: MOVLW 6D
0152: MOVWF 3D
0153: CALL 037
0154: BTFSC 29.7
0155: BSF 0B.7
0156: DECFSZ 39,F
0157: GOTO 14D
....................
.................... last_sensors=sensors;
0158: MOVF 2A,W
0159: MOVWF 37
....................
.................... output_low(STROBE); // vypni zobrazovani na posuvnem registru
015A: BSF 03.5
015B: BCF 06.0
015C: BCF 03.5
015D: BCF 06.0
.................... sensors = spi_read(0); // cteni senzoru
015E: MOVF 13,W
015F: CLRF 13
0160: BSF 03.5
0161: BTFSC 14.0
0162: GOTO 165
0163: BCF 03.5
0164: GOTO 160
0165: BCF 03.5
0166: MOVF 13,W
0167: MOVWF 2A
.................... sensors=~sensors; // neguj prijata data
0168: COMF 2A,F
.................... output_high(STROBE); // zobraz data na posuvnem registru
0169: BSF 03.5
016A: BCF 06.0
016B: BCF 03.5
016C: BSF 06.0
....................
.................... i=0; // havarijni kod
016D: CLRF 35
.................... for (n=0; n<=6; n++)
016E: CLRF 34
016F: MOVF 34,W
0170: SUBLW 06
0171: BTFSS 03.0
0172: GOTO 181
.................... {
.................... if(bit_test(sensors,n)) i++;
0173: MOVF 2A,W
0174: MOVWF 77
0175: MOVF 34,W
0176: MOVWF 78
0177: BTFSC 03.2
0178: GOTO 17D
0179: BCF 03.0
017A: RRF 77,F
017B: DECFSZ 78,F
017C: GOTO 179
017D: BTFSC 77.0
017E: INCF 35,F
.................... }
017F: INCF 34,F
0180: GOTO 16F
.................... if (i>4) // zastavi, kdyz je cerno pod vice nez tremi cidly
0181: MOVF 35,W
0182: SUBLW 04
0183: BTFSC 03.0
0184: GOTO 1AD
.................... {
.................... BL; BR;
0185: BSF 03.5
0186: BCF 05.0
0187: BCF 03.5
0188: BCF 05.0
0189: BSF 03.5
018A: BCF 05.1
018B: BCF 03.5
018C: BSF 05.1
018D: BSF 03.5
018E: BCF 05.6
018F: BCF 03.5
0190: BCF 05.6
0191: BSF 03.5
0192: BCF 05.7
0193: BCF 03.5
0194: BSF 05.7
.................... delay_ms(300);
0195: MOVLW 02
0196: MOVWF 39
0197: MOVLW 96
0198: MOVWF 3A
0199: CALL 065
019A: DECFSZ 39,F
019B: GOTO 197
.................... STOPR; STOPL;
019C: BSF 03.5
019D: BCF 05.6
019E: BCF 03.5
019F: BCF 05.6
01A0: BSF 03.5
01A1: BCF 05.7
01A2: BCF 03.5
01A3: BCF 05.7
01A4: BSF 03.5
01A5: BCF 05.0
01A6: BCF 03.5
01A7: BCF 05.0
01A8: BSF 03.5
01A9: BCF 05.1
01AA: BCF 03.5
01AB: BCF 05.1
.................... While(true);
01AC: GOTO 1AC
.................... };
....................
.................... if (bit_test(sensors,7)) // detekce cihly
01AD: BTFSS 2A.7
01AE: GOTO 1D9
.................... {
.................... BR;BL;
01AF: BSF 03.5
01B0: BCF 05.6
01B1: BCF 03.5
01B2: BCF 05.6
01B3: BSF 03.5
01B4: BCF 05.7
01B5: BCF 03.5
01B6: BSF 05.7
01B7: BSF 03.5
01B8: BCF 05.0
01B9: BCF 03.5
01BA: BCF 05.0
01BB: BSF 03.5
01BC: BCF 05.1
01BD: BCF 03.5
01BE: BSF 05.1
.................... Delay_ms(100);
01BF: MOVLW 64
01C0: MOVWF 3A
01C1: CALL 065
.................... STOPR;STOPL;
01C2: BSF 03.5
01C3: BCF 05.6
01C4: BCF 03.5
01C5: BCF 05.6
01C6: BSF 03.5
01C7: BCF 05.7
01C8: BCF 03.5
01C9: BCF 05.7
01CA: BSF 03.5
01CB: BCF 05.0
01CC: BCF 03.5
01CD: BCF 05.0
01CE: BSF 03.5
01CF: BCF 05.1
01D0: BCF 03.5
01D1: BCF 05.1
.................... Delay_ms(1000);
01D2: MOVLW 04
01D3: MOVWF 39
01D4: MOVLW FA
01D5: MOVWF 3A
01D6: CALL 065
01D7: DECFSZ 39,F
01D8: GOTO 1D4
.................... }
....................
.................... if(bit_test(sensors,0)) //|......// // z duvodu zkraceni doby reakce se cidla nevyhodnocuji poporade ale od krajnich k prostrednimu
01D9: BTFSS 2A.0
01DA: GOTO 1E7
.................... {
.................... uhel=STRED - BEAR3;
01DB: MOVLW 53
01DC: MOVWF 2C
.................... Lmotor=0;
01DD: CLRF 31
01DE: CLRF 30
.................... Rmotor=turn;
01DF: CLRF 7A
01E0: MOVF 2E,W
01E1: MOVWF 32
01E2: MOVF 7A,W
01E3: MOVWF 33
.................... line=L3;
01E4: MOVLW 03
01E5: MOVWF 2B
.................... continue;
01E6: GOTO 109
.................... }
....................
.................... if(bit_test(sensors,6)) //......|//
01E7: BTFSS 2A.6
01E8: GOTO 1F5
.................... {
.................... uhel=STRED + BEAR3;
01E9: MOVLW AD
01EA: MOVWF 2C
.................... Rmotor=0;
01EB: CLRF 33
01EC: CLRF 32
.................... Lmotor=turn;
01ED: CLRF 7A
01EE: MOVF 2E,W
01EF: MOVWF 30
01F0: MOVF 7A,W
01F1: MOVWF 31
.................... line=R3;
01F2: MOVLW FD
01F3: MOVWF 2B
.................... continue;
01F4: GOTO 109
.................... }
....................
.................... if(bit_test(sensors,1)) //.|.....//
01F5: BTFSS 2A.1
01F6: GOTO 207
.................... {
.................... uhel=STRED - BEAR2;
01F7: MOVLW 67
01F8: MOVWF 2C
.................... Lmotor=speed-70;
01F9: MOVLW 46
01FA: SUBWF 2D,W
01FB: CLRF 7A
01FC: MOVWF 30
01FD: MOVF 7A,W
01FE: MOVWF 31
.................... Rmotor=speed;
01FF: CLRF 7A
0200: MOVF 2D,W
0201: MOVWF 32
0202: MOVF 7A,W
0203: MOVWF 33
.................... line=L2;
0204: MOVLW 02
0205: MOVWF 2B
.................... continue;
0206: GOTO 109
.................... }
....................
.................... if(bit_test(sensors,5)) //.....|.//
0207: BTFSS 2A.5
0208: GOTO 219
.................... {
.................... uhel=STRED + BEAR2;
0209: MOVLW 99
020A: MOVWF 2C
.................... Rmotor=speed-70;
020B: MOVLW 46
020C: SUBWF 2D,W
020D: CLRF 7A
020E: MOVWF 32
020F: MOVF 7A,W
0210: MOVWF 33
.................... Lmotor=speed;
0211: CLRF 7A
0212: MOVF 2D,W
0213: MOVWF 30
0214: MOVF 7A,W
0215: MOVWF 31
.................... line=R2;
0216: MOVLW FE
0217: MOVWF 2B
.................... continue;
0218: GOTO 109
.................... }
....................
.................... if (bit_test(sensors,2)) //..|....//
0219: BTFSS 2A.2
021A: GOTO 22F
.................... {
.................... uhel=STRED - BEAR1;
021B: MOVLW 76
021C: MOVWF 2C
.................... Lmotor=speed-20;
021D: MOVLW 14
021E: SUBWF 2D,W
021F: CLRF 7A
0220: MOVWF 30
0221: MOVF 7A,W
0222: MOVWF 31
.................... Rmotor=speed;
0223: CLRF 7A
0224: MOVF 2D,W
0225: MOVWF 32
0226: MOVF 7A,W
0227: MOVWF 33
.................... line=L2;
0228: MOVLW 02
0229: MOVWF 2B
.................... if (rovinka<255) rovinka++;
022A: INCFSZ 2F,W
022B: GOTO 22D
022C: GOTO 22E
022D: INCF 2F,F
.................... continue;
022E: GOTO 109
.................... }
....................
.................... if (bit_test(sensors,4)) //....|..//
022F: BTFSS 2A.4
0230: GOTO 245
.................... {
.................... uhel=STRED + BEAR1;
0231: MOVLW 8A
0232: MOVWF 2C
.................... Rmotor=speed-20;
0233: MOVLW 14
0234: SUBWF 2D,W
0235: CLRF 7A
0236: MOVWF 32
0237: MOVF 7A,W
0238: MOVWF 33
.................... Lmotor=speed;
0239: CLRF 7A
023A: MOVF 2D,W
023B: MOVWF 30
023C: MOVF 7A,W
023D: MOVWF 31
.................... line=L2;
023E: MOVLW 02
023F: MOVWF 2B
.................... if (rovinka<255) rovinka++;
0240: INCFSZ 2F,W
0241: GOTO 243
0242: GOTO 244
0243: INCF 2F,F
.................... continue;
0244: GOTO 109
.................... }
....................
.................... if(bit_test(sensors,3)) //...|...//
0245: BTFSS 2A.3
0246: GOTO 259
.................... {
.................... uhel=STRED;
0247: MOVLW 80
0248: MOVWF 2C
.................... Lmotor=speed;
0249: CLRF 7A
024A: MOVF 2D,W
024B: MOVWF 30
024C: MOVF 7A,W
024D: MOVWF 31
.................... Rmotor=speed;
024E: CLRF 7A
024F: MOVF 2D,W
0250: MOVWF 32
0251: MOVF 7A,W
0252: MOVWF 33
.................... line=S;
0253: CLRF 2B
.................... if (rovinka < 255) rovinka++;
0254: INCFSZ 2F,W
0255: GOTO 257
0256: GOTO 258
0257: INCF 2F,F
.................... continue;
0258: GOTO 109
.................... }
....................
....................
....................
.................... if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate
0259: MOVF 2B,W
025A: SUBLW 03
025B: BTFSC 03.2
025C: GOTO 261
025D: MOVF 2B,W
025E: SUBLW FD
025F: BTFSS 03.2
0260: GOTO 284
.................... {
.................... if (rovinka>50)
0261: MOVF 2F,W
0262: SUBLW 32
0263: BTFSC 03.0
0264: GOTO 283
.................... {
.................... BL; BR;
0265: BSF 03.5
0266: BCF 05.0
0267: BCF 03.5
0268: BCF 05.0
0269: BSF 03.5
026A: BCF 05.1
026B: BCF 03.5
026C: BSF 05.1
026D: BSF 03.5
026E: BCF 05.6
026F: BCF 03.5
0270: BCF 05.6
0271: BSF 03.5
0272: BCF 05.7
0273: BCF 03.5
0274: BSF 05.7
.................... Delay_ms(70);
0275: MOVLW 46
0276: MOVWF 3A
0277: CALL 065
.................... if (rovinka > 250 || speed > 170) delay_ms(50);
0278: MOVF 2F,W
0279: SUBLW FA
027A: BTFSS 03.0
027B: GOTO 280
027C: MOVF 2D,W
027D: SUBLW AA
027E: BTFSC 03.0
027F: GOTO 283
0280: MOVLW 32
0281: MOVWF 3A
0282: CALL 065
.................... };
.................... rovinka=0;
0283: CLRF 2F
.................... };
.................... }
0284: GOTO 109
.................... }
0285: 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/vystava/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\roboti\istrobot\3Orbis\vystava\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\roboti\istrobot\3Orbis\vystava\main.c
2=D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.h
3=C:\Program Files\PICC\devices\16F88.h
4=
5=
[Units]
Count=1
1=D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.c (main)
/roboti/istrobot/3Orbis/vystava/main.SYM
0,0 → 1,70
015-016 CCP_1
015 CCP_1_LOW
016 CCP_1_HIGH
020 @INTERRUPT_AREA
021 @INTERRUPT_AREA
022 @INTERRUPT_AREA
023 @INTERRUPT_AREA
024 @INTERRUPT_AREA
025 @INTERRUPT_AREA
026 @INTERRUPT_AREA
027 @INTERRUPT_AREA
028 @INTERRUPT_AREA
029 @INTERRUPT_AREA
02A sensors
02B line
02C uhel
02D speed
02E turn
02F rovinka
030-031 Lmotor
032-033 Rmotor
034 main.n
035 main.i
036 main.j
037 main.last_sensors
038 main.RozumnaRychlost
039 main.@SCRATCH
03A @delay_ms1.P1
03A main.@SCRATCH
03B TIMER2_isr.n
03C TIMER2_isr.@SCRATCH
03D @delay_us1.P1
077 @SCRATCH
078 @SCRATCH
078 _RETURN_
079 @SCRATCH
07A @SCRATCH
07B @SCRATCH
09C.6 C1OUT
09C.7 C2OUT
 
0065 @delay_ms1
0037 @delay_us1
0047 TIMER2_isr
007D main
007D @cinit
 
Project Files:
D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.c
D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.h
C:\Program Files\PICC\devices\16F88.h
 
Units:
D:\KAKLIK\roboti\istrobot\3Orbis\vystava\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\roboti\istrobot\3Orbis\vystava\main.err
INHX8: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.hex
Symbols: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.sym
List: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.lst
Debug/COFF: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.cof
Call Tree: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.tre
Statistics: D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.sta
/roboti/istrobot/3Orbis/vystava/main.c
0,0 → 1,222
#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 // 3 stupne zataceni
#define BEAR2 25
#define BEAR3 45
#define R 100 // Rozumna rychlost
#define R17 200 // X nasobek rozumne rychlosti
#define PRED_CIHLOU 100 // rychlost pri dalkove detekci cihly
#define L2 2 // cara vlevo
#define L3 3 // cara vlevo
#define S 0 // cara mezi sensory
#define R2 -2 // cara vpravo
#define R3 -3 // cara vpravo
 
// servo
#define SERVO PIN_B5
 
// kroutitka
#define CERVENA 4 // AN4
#define MODRA 2 // AN2
 
// IR
#define IRTX PIN_B2
#define CIHLA PIN_A3
 
//motory
#define FR output_low(PIN_A7); output_high(PIN_A6) // Vpred
#define FL output_low(PIN_A1); output_high(PIN_A0)
#define BR output_low(PIN_A6); output_high(PIN_A7) // Vzad
#define BL output_low(PIN_A0); output_high(PIN_A1)
#define STOPR output_low(PIN_A6);output_low(PIN_A7)
#define STOPL output_low(PIN_A0);output_low(PIN_A1)
 
//HID
#define LED1 PIN_B1 //oranzova
#define LED2 PIN_B2 //zluta
 
#define STROBE PIN_B0
 
unsigned int8 sensors; // pomocna promenna pro cteni cidel na caru
signed int8 line = S; // na ktere strane byla detekovana cara
unsigned int8 uhel; // urcuje aktualni uhel zataceni
unsigned int8 speed; // maximalni povolena rychlost
unsigned int8 turn; // rychlost toceni
unsigned int8 rovinka; // pocitadlo na zjisteni rovinky
 
signed int16 Lmotor; // promene, ktere urcuji velikost vykonu na levem
signed int16 Rmotor; // a pravem motoru
 
// makro pro PWM pro motory
#define GO(motor, direction, power) if(get_timer0()<=power) \
{direction##motor;} else {stop##motor;}
////////////////////////////////////////////////////////////////////////////////
#int_TIMER2
TIMER2_isr() // ovladani serva
{
unsigned int8 n;
 
output_high(SERVO);
delay_us(1000);
for(n=uhel; n>0; n--) Delay_us(2);
output_low(SERVO);
}
 
////////////////////////////////////////////////////////////////////////////////
void main()
{
 
unsigned int8 n;
unsigned int8 i,j;
unsigned int8 last_sensors;
unsigned int8 RozumnaRychlost;
 
setup_adc_ports(sAN5|sAN2|sAN4|sAN6|VSS_VDD); // AD pro kroutitka
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED|T1_DIV_BY_8);
setup_timer_2(T2_DIV_BY_16,140,16);
setup_oscillator(OSC_8MHZ|OSC_INTRC);
 
STOPR; STOPL; // zastav motory
Lmotor=0;Rmotor=0;
 
uhel = STRED; // nastav zadni kolecko na stred
rovinka = 0;
 
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
 
output_low(IRTX); // zapni IR vysilac
 
delay_ms(2000); // musime pockat na diagnostiku slave CPU
 
//nastaveni rychlosti
set_adc_channel(CERVENA);
 
Delay_ms(1);
speed=R+(read_adc()>>2); // rychlost rovne +63; kroutitko dava 0-63
set_adc_channel(MODRA);
Delay_ms(1);
turn=speed-32+(read_adc()>>2); // rychlost toceni +-32; kroutitko dava 0-63
 
 
while(true)
{
 
GO(L,F,Lmotor);GO(R,F,Rmotor); // zapni motory PWM podle promenych Lmotor a Rmotor
 
delay_us(2000); // cekani na SLAVE, nez pripravi data od cidel
 
last_sensors=sensors;
 
output_low(STROBE); // vypni zobrazovani na posuvnem registru
sensors = spi_read(0); // cteni senzoru
sensors=~sensors; // neguj prijata data
output_high(STROBE); // zobraz data na posuvnem registru
 
i=0; // havarijni kod
for (n=0; n<=6; n++)
{
if(bit_test(sensors,n)) i++;
}
if (i>4) // 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
{
BR;BL;
Delay_ms(100);
STOPR;STOPL;
Delay_ms(1000);
}
 
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-70;
Rmotor=speed;
line=L2;
continue;
}
 
if(bit_test(sensors,5)) //.....|.//
{
uhel=STRED + BEAR2;
Rmotor=speed-70;
Lmotor=speed;
line=R2;
continue;
}
 
if (bit_test(sensors,2)) //..|....//
{
uhel=STRED - BEAR1;
Lmotor=speed-20;
Rmotor=speed;
line=L2;
if (rovinka<255) rovinka++;
continue;
}
 
if (bit_test(sensors,4)) //....|..//
{
uhel=STRED + BEAR1;
Rmotor=speed-20;
Lmotor=speed;
line=L2;
if (rovinka<255) rovinka++;
continue;
}
 
if(bit_test(sensors,3)) //...|...//
{
uhel=STRED;
Lmotor=speed;
Rmotor=speed;
line=S;
if (rovinka < 255) rovinka++;
continue;
}
 
 
 
if ((L3==line) || (R3==line)) // Brzdeni pri vyjeti z trate
{
if (rovinka>50)
{
BL; BR;
Delay_ms(70);
if (rovinka > 250 || speed > 170) delay_ms(50);
};
rovinka=0;
};
}
}
/roboti/istrobot/3Orbis/vystava/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/vystava/main.err
0,0 → 1,2
No Errors
0 Errors, 0 Warnings.
/roboti/istrobot/3Orbis/vystava/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/vystava/main.sta
0,0 → 1,32
 
ROM used: 646 (16%)
646 (16%) including unused fragments
 
1 Average locations per line
4 Average locations per statement
 
RAM used: 32 (18%) at main() level
35 (20%) worst case
 
Lines Stmts % Files
----- ----- --- -----
223 154 100 D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.c
19 0 0 D:\KAKLIK\roboti\istrobot\3Orbis\vystava\main.h
279 0 0 C:\Program Files\PICC\devices\16F88.h
----- -----
1042 308 Total
 
Page ROM % RAM Functions:
---- --- --- --- ----------
0 24 4 1 @delay_ms1
0 16 2 1 @delay_us1
0 30 5 2 TIMER2_isr
0 521 81 7 main
 
Segment Used Free
--------- ---- ----
00000-00003 4 0
00004-00036 51 0
00037-007FF 591 1402
00800-00FFF 0 2048
 
/roboti/istrobot/3Orbis/vystava/main.tre
0,0 → 1,15
ÀÄmain
ÃÄmain 0/521 Ram=7
³ ÃÄ??0??
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_us1 0/16 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÃÄ@delay_ms1 0/24 Ram=1
³ ÀÄ@delay_ms1 0/24 Ram=1
ÀÄTIMER2_isr 0/30 Ram=2
ÀÄ@delay_us1 0/16 Ram=1