Ok,
Time to stick my neck out and say I think (I think) I've finished the TX / RX programs. I haven't connected them to the sensor / LDR to test for operation but I'd be very interested as to whether you can see any gaping errors in the code, here goes, TX first:
DaveCode:'**************************************************************** '* Name : rfPIC_TX.BAS * '* Author : B. Reynolds 90% LEDave 10%...Ok 5% * '* Notice : Copyright (c) 2007 Reynolds Electronics * '* : All Rights Reserved * '* Date : 10/09/2007 * '* Version : 1.0 * '* Notes : 2-BIT Encoder for remote control with the * '* : rfPIC12F675 on Microchip rfPIC demo board * '**************************************************************** @ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_OFF DEFINE OSC 4 DEFINE NO_CLRWDT 1 DEFINE OSCCAL_1K 1 SYMBOL D_OUT = GPIO.2 ' RF serial data output SYMBOL E_OUT = GPIO.5 ' RF transmitter enable output VISITS VAR word ' Holds total daily bird visits DAT_OUT VAR BYTE ' Holds 8-bit data byte DAT_OUT2 VAR BYTE ' Holds 8-bit test byte LOOPS VAR BYTE ' Loop var CHK_SUM VAR BYTE ' Holds calculated checksum of outbound data COUNTER VAR BYTE ' Holds WDT count values BAUD VAR WORD ' Holds baud rate ' Constants PreAmble CON $A5 ' 10100101 preamble Synch CON "~" ' 01111110 synch byte N4800 CON 188 ' 4800 bps N2400 CON 16780 ' 2400 bps GUARD CON 5 ' 5mS guard time pause ' hardware init GPIO = 0 ' Everything off on boot ' GPIO.2=data out, GPIO.5=RF enable, GPIO.3,4 = Bird_visit_count / It's dark..maybe TRISIO = %00011011 ' ANSEL = 0 ' Disable A/D INTCON = %00001000 ' Enable port change wakeup from sleep WPU = %00010000 ' pull-up on for GPIO.4 (external pull-up already on GPIO.3) IOC = %00011000 ' Wakeup on change enabled for GPIO.3,4 VRCON = 0 ' Disable internal Vref CMCON = 7 ' Disable comparators OPTION_REG = %00001111 'Watch_Dog_Timer ON with a 128 prescaler D_OUT = 0 ' Idles low for inverted serial output E_OUT = 0 ' Enable for RF transmitter=0 (transmiter off) BAUD = N2400 ' Set baud rate here Main: ' Read port to clear missmatch, if with no buttons pressed, then ' clear int-on-change flag & snooze until wake up on change. This ' conserves battery power on the demo board with 3V coin cell. IF GPIO.3= 1 AND GPIO.4= 1 THEN ' Nothing has happened so SLEEP E_OUT=0 ' Disable transmitter INTCON.0 = 0 ' No Bird detected or it's still light so clear int on change flag @ SLEEP ' and start snoozin..zzzzzzzzzzz indefinatly @ NOP ' Do nothing for 1st instruction on wake-up ELSE IF GPIO.3=0 THEN GOSUB COUNTS 'Bird detected at box - GOTO LABEL COUNTS IF GPIO.4=0 THEN GOSUB DARK 'It's got dark? or just cloudy - GOTO LABEL DARK ENDIF GOTO MAIN 'Back to sleep / continue counting COUNTS: VISITS = VISITS +1 'Bird at box so increment counter INTCON.0 = 0 ' Clear int on change flag RETURN ' Then back to sleep.... DARK: INTCON.0 = 0 ' Clear int on change flag E_OUT=0 ' Disable transmitter ' It could be night time...It might only be a cloud though... ' so back to sleep / wake / sleep for half an hour..zwzwzw COUNTER=0 ' clear before entry WHILE COUNTER < 781 'Loop for 30 mins @ SLEEP COUNTER=COUNTER+1 IF GPIO.3= 0 THEN COUNTS 'Bird at box so continue counting WEND if GPIO.4= 0 then ENCODE ' It really ia dark so carry on and transmit VISITS IF GPIO.4= 1 THEN RETURN ' It's not dark after all so carry_on_sleeping_counting Encode: E_OUT=1 ' Turn transmitter on pauseus 25 ' Let transmitter settle DAT_OUT = %10101001 INTCON.0 = 0 ' Clear int on change flag ' Build checksum of 2 data bytes CHK_SUM = (DAT_OUT * 2) Transmit: LET VISITS = VISITS / 2 'Just VISITS to not from the box SEROUT2 D_OUT,BAUD,[PreAmble,Synch,DAT_OUT,DAT_OUT,CHK_SUM,VISITS.highbyte,VISITS.lowbyte] PAUSE GUARD ' 5mS guard time gives decoder time to respond,calculate,change,etc. GOTO Main END




Bookmarks