I'm having a problem getting the rfpic transmitter to Tx when I want it to. I've set up an ON INTERRUPT with DISABLE - RESUME - ENABLE and have the INTCON & IOC set at:
What happens is, when buttons GPIO3/4 are pressed (and released)the RFEN led after a 5sec delay briefly flashes but no data is sent. If GPIO.3/4 are pressed and held down after 10 secs the RFEN led lights up the five seconds later (button still held down) data is Tx'd, the button is then released and five seconds later the RFEN led goes out.Code:INTCON = %00001000 & IOC = %00011000
What I'd like is for the buttons GPIO.3/4 to be pressed, ON INTERRUPT runs then five seconds later after the delay loop the data is Tx'd. Does anyone have any idea on what's going wrong?
DaveCode:@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_OFF DEFINE OSC 4 DEFINE OSCCAL_1K 1 DEFINE NO_CLRWDT 1 SYMBOL D_OUT = GPIO.2 ' RF serial data output SYMBOL E_OUT = GPIO.5 ' RF transmitter enable output ON INTERRUPT GOTO Delay DAT_OUT VAR BYTE ' Holds 8-bit data byte CHK_SUM VAR BYTE ' Holds calculated checksum of outbound data VISITS VAR WORD ' Loop variable (300 for test) I VAR word ' Delay Loop Count value 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 = 0 ' Pull-ups on 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 Inputs detected or it's still light so clear int on change flag @ SLEEP ' and start snoozin..zzzzzzzzzzz indefinatly / Waiting for IOC @ NOP 'ON INTERRUPT starts / returns here with Button_press: goes to LABEL - "DELAY": ENDIF Encode: E_OUT=1 ' Turn transmitter on pauseus 25 ' Let transmitter settle DAT_OUT = %10101001 'Build checksum of 2 data bytes CHK_SUM = (DAT_OUT * 2) Transmit: 'LET VISITS = VISITS / 2 'Just VISITS too not from the box LET VISITS = 300 'Test data number 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 disable Delay: FOR I = 1 TO 5 PAUSe 1000 nEXT I INTCON.0 = 0 resume : enable goto Main




Bookmarks