Problem with comparison.
/Designs/Measuring_instruments/AWS01B/SW/PIC16F887/i2c_wind_sensor/main.hex |
---|
0,0 → 1,120 |
:0800000002308A00C62A00004C |
:10002000FF00030E8301A1000A08A0008A01040852 |
:10003000A2007708A3007808A4007908A5007A0830 |
:10004000A600831383120B1E27288B184E288C3092 |
:100050008400001C2D280C1851288C308400801C32 |
:1000600033288C1854288C308400801D39288C1932 |
:1000700057288B1E3D280B195A2822088400230874 |
:10008000F7002408F8002508F9002608FA002008DF |
:100090008A00210E8300FF0E7F0E09008A110A12CA |
:1000A000FC288A110A12C4288A110A12F8288A1117 |
:1000B0000A126A288A110A12BD28130844089300FC |
:1000C00014168C11831614186328F8018312141A5D |
:1000D000F80A08008316941A75288312B70183164C |
:1000E000141D75288312B717831683123708B70AB1 |
:1000F000C20042087F3C031C9D2814138C1D7E28DF |
:1001000013081416C100420B93284108B00041089F |
:10011000023C031D93283308A8003408A9003508C1 |
:10012000AA003608AB004208023C031D9D28283077 |
:10013000300784008313410880004208803C031D7F |
:10014000B9283008083C031CAE282830300784004A |
:1001500083130008C300C4005D20B92808303002B2 |
:10016000000784008313541883170008C300C400D9 |
:100170005D208C118A110A123D28B10A0319B20AB6 |
:100180000B118A110A123D283208C2003108C10041 |
:10019000C401FF30C3001030C500F701FA01C20CE2 |
:1001A000C10C031CD9284308F7070318FA0A4408AE |
:1001B000FA07FA0CF70CF90CF80CC50BCF287908E4 |
:1001C000C2007808C10001084107B3004208B4002A |
:1001D0000318B40AB201B10181018F018E018316A7 |
:1001E00009100130831289060C108A110A123D2869 |
:1001F0008C108A110A123D28B50A0319B60A8B1011 |
:100200008A110A123D280D050D052310CD32F43256 |
:100210006F396F36EF33E931EB30A039F430EE341B |
:10022000E332A0127310A82129103218B119A03B93 |
:10023000F73BAE36EC306217633DA0060A0030177C |
:100240003100A424641DA036E1346E176310B21C83 |
:10025000311B2019B018B316301AAD183410B11B69 |
:100260003A1A321DB0195A10EB306B36E9352012AC |
:1002700000012310F6327210F037F230E43420001F |
:100280006334E531EB068A060A00E3377537741DDF |
:10029000A0125810252CA0125810252C0D058027CF |
:1002A000831603178C170C14000000000318802914 |
:1002B00083120C087F390313B90003170D080313C9 |
:1002C000BA0003170F080313BB0039080C1E662978 |
:1002D00099003A0803178D0003133B0803178F009A |
:1002E00083168C170C140000000083120313B80B44 |
:1002F0007A297D29831603178029A02983160317DD |
:1003000083120C0D0E0D7F390313B90003170D086E |
:100310000313BA0003170F080313BB0039080C1EA0 |
:100320008F2999003A0803178D0003133B08031720 |
:100330008F008D0A03198F0A03100313B80B50297D |
:100340000800831603178C170C140000000083129A |
:100350000C087F390319E7290313B80003170D08A8 |
:100360000313B90003170F080313BA0038080C1E53 |
:10037000B7299900390803178D0003133A080317AA |
:100380008F0083168C170C140000000083120C0DD4 |
:100390000E0D7F390319E7290313B80003170D0861 |
:1003A0000313B90003170F080313BA0038080C1E13 |
:1003B000D7299900390803178D0003133A0803174A |
:1003C0008F008D0A03198F0A0313A1290317031342 |
:1003D0000800033003178D0001308F0003101D301B |
:1003E0000313B80050211F3003178D0001308F0018 |
:1003F0000313A121123003178D0001308F00031465 |
:1004000018300313B80050210D300C1E052A990036 |
:100410000A300C1E092A990020300C1E0D2A990062 |
:10042000213003178D0001308F000313A1212030EC |
:100430000C1E182A99000D300C1E1C2A99000A3037 |
:100440000C1E202A9900393003178D0001308F00CF |
:100450000313A121403003178D0001308F000313D7 |
:10046000A1218A110A12352BB91B472A0F30F70038 |
:10047000380EF7050A3077020318412A3030F707A3 |
:10048000432A3908F70777080C1E442A99000F30D1 |
:10049000B8050A30380203184F2A3030512AB913F0 |
:1004A0003908B80738080C1E532A99000800C00103 |
:1004B0000408BF004010831B4014390EF038BB0005 |
:1004C000BB07E23EBC00323EBE0039080F39BC0714 |
:1004D000BC07BE07E93EBD00BD07BD07380E0F399A |
:1004E000BD07BE07BD0DBE0DBE09BE0D38080F39D4 |
:1004F000BE07BB0D0730BA000A30BE07BD03031CA0 |
:100500007D2ABD07BC03031C812ABC07BB03031C57 |
:10051000852ABB07BA03031C892A3A308400831357 |
:1005200007303F053F1384073E30040203193F178D |
:100530000008F700031DA42A3F1BA42A3F1AAC2A77 |
:10054000BF19A42A2030A72ABF153F123030F70761 |
:1005500077080C1EA92A9900840A3F1F942A0800D4 |
:1005600039308400831300080319C32A0630F800C9 |
:10057000F701F70BB92AF80BB82A7B30F700F70B15 |
:10058000BF2A800BB62A8A110A128A2B8401831390 |
:100590001F3083058316031787150830031399004E |
:1005A00002309A00A6309800903083129800A71568 |
:1005B00027088316870083122716270883168700CB |
:1005C000A2309300363083129400B001B401B3011D |
:1005D000B601B501831603170908C0398900031352 |
:1005E0001F129F12003003178800831287018801B1 |
:1005F0008901FF300313A7000330B70083160317E8 |
:100600000908C039890003131F129F120030031715 |
:100610008800831203131F1083160108C739283876 |
:1006200081000F3083129000031787018801890130 |
:100630008316031397012030F800053883129200C7 |
:10064000FA30831692008C158C140C1483128B16BE |
:100650000B16C0308B0481018F018E01B201B101F4 |
:10066000AA01AB01AC01AD01E929453003178D00AA |
:1006700001308F00031007300313B8005021280801 |
:10068000B8003730B900342220300C1E452B9900B9 |
:100690002908B8003730B900342220300C1E4E2B08 |
:1006A00099002A08B8003730B900342220300C1ED7 |
:1006B000572B99002B08B8003730B90034220D3081 |
:1006C0000C1E602B99000A300C1E642B9900103010 |
:1006D00084003408B9003308B800572220300C1EBB |
:1006E0006F2B9900103084003608B9003508B80027 |
:1006F000572220300C1E7A2B99000A300C1E7E2BBC |
:1007000099000D300C1E822B99000430B800FA308D |
:0C071000B900B02AB80B872B352B630012 |
:0639C0008A010028080046 |
:1000080000000000000000000000000000000000E8 |
:080018000000000000000000E0 |
:04400E00F22CFF3F52 |
:00000001FF |
;PIC16F887 |
;CRC=A3FD CREATED="04-II-14 16:06" |
/Designs/Measuring_instruments/AWS01B/SW/PIC16F887/i2c_wind_sensor/main.c |
---|
0,0 → 1,157 |
#define VERSION "0.1" |
#define ID "$Id: main.c 2916 2013-04-14 17:42:03Z kaklik $" |
#include "main.h" |
#use i2c(SLAVE,Fast,sda=PIN_C4,scl=PIN_C3,force_hw,address=0xA2) // Motor 2 |
const int8 buf_len=8; |
int8 buffer[buf_len]; // I2C buffer |
int8 address=0; |
#include "..\common\dbloader.h" |
unsigned int16 timer0_overflow_count; |
unsigned int16 anemo=0; |
unsigned int16 rain=0; |
//we are using the rtctimer.c library, in which a counter is incremented |
//every time the timer2 interrupt occurs (timer2 overflow). the time math |
//needs to know what rate the timer2 interrupt occurs. this definition |
//must match the rate the timer2 is configured for. |
#define CLOCKS_PER_SECOND 1000 |
#INT_SSP |
void ssp_interupt () |
{ |
BYTE incoming, state; |
state = i2c_isr_state(); |
if(state < 0x80) //Master is sending data |
{ |
incoming = i2c_read(); |
if(state == 1) //First received byte is address |
{ |
address = incoming; |
if (incoming == 2) |
{ |
buffer[0]=make8(anemo,0); |
buffer[1]=make8(anemo,1); |
buffer[2]=make8(rain,0); |
buffer[3]=make8(rain,1); |
} |
} |
if(state == 2) //Second received byte is data |
buffer[address] = incoming; |
} |
if(state == 0x80) //Master is requesting data |
{ |
if(address <= buf_len) i2c_write(buffer[address]); |
else i2c_write(ID[address - buf_len]); |
} |
} |
#int_TIMER0 //osetruje preteceni citace od anemometru (RA4) |
void TIMER0_isr(void) |
{ |
timer0_overflow_count++; |
} |
#int_TIMER1 |
void TIMER1_isr(void) |
{ |
// 32.768 kHz krystal pro timer1 oscilátor |
anemo = ((timer0_overflow_count * 0xFF) + get_timer0()); // pocet pulzu za 1s |
timer0_overflow_count=0; //nulovani |
set_timer0(0); |
set_timer1(0); |
output_toggle(PIN_E0); |
} |
#int_TIMER2 |
void TIMER2_isr(void) |
{ |
} |
#INT_EXT |
void EXT_isr() //interrup from rain sensor clip. |
{ |
rain++; |
// if (input(PIN_B0)) ext_int_edge( H_TO_L ); osetreni pro pripad, ze by bylo treba cist obe hrany impulzu |
// if (!input(PIN_B0)) ext_int_edge( L_TO_H ); |
} |
void welcome(void) // uvodni zprava |
{ |
printf("\r\n\r\n# Meteorologicka stanice %s (C) 2013 www.mlab.cz \r\n",VERSION); |
printf("\r\n %s \r\n",ID);// Welcome message |
printf("# ver poradi "); |
printf("check\r\n\r\n"); |
} |
void main() |
{ |
setup_adc_ports(NO_ANALOGS|VSS_VDD); |
// setup_adc(ADC_CLOCK_DIV_2); |
setup_adc(ADC_OFF); |
// setup_spi(SPI_SS_DISABLED); //must not be set if I2C are in use! |
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1); |
// setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_144MS); |
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT); |
// setup_timer_2(T2_DISABLED,0,1); |
setup_comparator(NC_NC_NC_NC); |
setup_vref(FALSE); |
// setup_oscillator(OSC_8MHZ|OSC_INTRC); |
/* Setup timer 2 |
* On a 4 Mhz clock, this will trigger a timer2 interrupt every 1.0 ms |
* For time.h to work properly, Timer2 must overflow every millisecond |
* OverflowTime = 4 * (1/OscFrequency) * Prescale * Period * Postscale |
* For 4 Mhz: .001 seconds = 4 * (1/4000000 seconds) * 4 * 250 * 1 |
*/ |
#if getenv("CLOCK")==4000000) |
setup_timer_2(T2_DIV_BY_1,250,4); |
#elif getenv("CLOCK")==20000000) |
setup_timer_2(T2_DIV_BY_4,250,5); |
#else |
#error Configure TIMER2 so it interrupts at a rate defined by CLOCKS_PER_SECOND |
#endif |
enable_interrupts(INT_SSP); |
enable_interrupts(INT_TIMER2); |
enable_interrupts(INT_TIMER1); |
enable_interrupts(INT_TIMER0); |
enable_interrupts(INT_EXT); |
enable_interrupts(GLOBAL); |
set_timer0(0); |
set_timer1(0); |
timer0_overflow_count=0; |
buffer[2]=0; |
buffer[3]=0; |
buffer[4]=0; |
buffer[5]=0; |
welcome(); |
while(true) |
{ |
printf("count: %X %X %X %X\r\n", buffer[0],buffer[1],buffer[2],buffer[3]); |
printf("%Lu %Lu \n\r", anemo, rain); |
delay_ms(1000); |
} |
} |
/Designs/Measuring_instruments/AWS01B/SW/PIC16F887/i2c_wind_sensor/main.h |
---|
0,0 → 1,22 |
#include <16F887.h> |
#device adc=8 |
//#FUSES WDT // Watch Dog Timer |
#FUSES NOWDT //No Watch Dog Timer |
#FUSES HS //external crystal oscillator |
#FUSES NOPUT //No Power Up Timer |
#FUSES MCLR //Master Clear pin enabled |
#FUSES NOPROTECT //Code not protected from reading |
#FUSES NOCPD //No EE protection |
#FUSES NOBROWNOUT //No brownout reset |
#FUSES IESO //Internal External Switch Over mode enabled |
#FUSES FCMEN //Fail-safe clock monitor enabled |
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O |
#FUSES NODEBUG //No Debug mode for ICD |
#FUSES NOWRT //Program memory not write protected |
#FUSES BORV40 //Brownout reset at 4.0V |
#use delay(clock=20000000) |
//set RS232 |
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) |
/Designs/Measuring_instruments/AWS01B/SW/PIC16F887/i2c_wind_sensor/README.cs.txt |
---|
0,0 → 1,8 |
I2C snimac vycitajici rychlost větru a srážky. |
===== Měření srážek ===== |
V MCU je čítač použitý pro počítání překlopení člunku ve srážkoměru. Je ošetřeno jeho přetečení tak, aby mohl čítat z hlediska srážek až do velkých čísel. Tento čítač se nenuluje, ale nechává se přetéct. K němu paralelně běží uptimo hodiny v MCU. A MCU se chová jako I²C SLAVE a hodnotu čítače tak lze vyčíst přes I2C. |
MCU pak ve zbytku výpočetního času kontroluje hodnotu čítače a do dalšího registu zapisuje čas jeho poslední změny. (podobne jako dmesg, ale zaokrouhleno na cele sekundy) |
Uptime bude zaznamenavan do registru, ktere je mozne precist pres I2C. Tento registr může být použit jako zdroj korekce v případě komplikací s nastavením aktuálního času. |
/Designs/Measuring_instruments/AWS01B/SW/PIC16F887/i2c_wind_sensor/main.pjt |
---|
0,0 → 1,40 |
[PROJECT] |
Target=motor.HEX |
Development_Mode= |
Processor=0x688F |
ToolSuite=CCS |
[Directories] |
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\Dr |
Library= |
LinkerScript= |
[Target Data] |
FileList=C:\dokumenty\svn\Kaklik\roboti\Robotour\SW\motor\motor.c |
BuildTool=C-COMPILER |
OptionString=+FM |
AdditionalOptionString= |
BuildRequired=1 |
[motor.c] |
Type=4 |
Path= |
FileList= |
BuildTool= |
OptionString= |
AdditionalOptionString= |
[mru-list] |
1=motor.c |
[Windows] |
0=0000 motor.c 0 0 796 451 3 0 |
[Opened Files] |
1=D:\svn\svnrobozor\roboti\Robotour\SW\motor\motor.c |
2=C:\Program Files\PICC\devices\16F88.h |
3= |
4= |
[Units] |
Count=1 |
1=C:\dokumenty\svn\Kaklik\roboti\Robotour\SW\motor\motor.c (main) |