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