PDA

View Full Version : Trying to stay on wifi network



Hylan
- 29th October 2015, 22:35
I have a board set up which is attached to an Microchip wifi module MRF24WGOMA. The project is for this to receive a signal.

On some networks, if it sits too long, the access point kicks it off the network and you have to cycle the power to get it to get back on the network.

I figured the easy answer would be to set up an hserout command and just spit something out to the network.

However, it appears that if I send it to a made up IP address or even a good one but with nothing to catch it. The network must be replying with an error that then locks up my program.

Any ideas on what I could hserout to the network just to keep the unit alive and online?

HenrikOlsson
- 30th October 2015, 06:07
Hi,
I don't know anything about the MRF24 module but is it and/or you/your router using DHCP? If so it might be the leasetime for the IP-adress running out.

/Henrik.

Hylan
- 30th October 2015, 16:34
Henrik,

It is using DHCP but the lease time is a couple days, so it's maintaining the same IP when it reconnects. The AP just drops it when it sits quiet for a while.

I ran a test and set up a regular loop running with a counter and periodically spitting the hserout and it worked fine.

The code I'm having an issue with is using Darrell Taylors interrupt setup. I don't think the interrupt is running as I can't get the light to flash.

Please see the two code samples below.


'************************************************* ***************
'* Name : Heartbeat No Interrupt.PBP *
'* : All Rights Reserved *
'* Date : 10-29-15 *
'* Version : 1.0 *
'************************************************* ***************
#config
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _OSC_XT_1H
__CONFIG _CONFIG2L, _BOR_ON_2L & _BORV_27_2L & _PWRT_ON_2L
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG _CONFIG3H, _CCP2MUX_OFF_3H
__CONFIG _CONFIG4L, _LVP_OFF_4L
#endconfig

CLEAR

DEFINE ADC_BITS 10 ' 10 Bit Resolution
DEFINE ADC_CLOCK 3 ' Internal RC A/D Oscillator
DEFINE ADC_SAMPLEUS 50 ' Delay before A/D Conversion
DEFINE OSC 4 ' 4 MHz Internal Oscillator
DEFINE HSER_RCSTA 90h ' Serial Input Enabled
DEFINE HSER_TXSTA 24h ' Serial Output Enabled (High Speed)
DEFINE HSER_BAUD 9600 ' Serial Baud Rate (9600 BPS)

D CON 10 ' Divide by D (10 for 4MHz, 2 for 20MHz)

LED1 VAR PortG.0 ' Test LED
LED2 VAR PortG.4 ' Piezo Output

Awake var byte ' variable for counting to keep unit alive on network
Awake1 var byte ' variable for counting to keep unit alive on network
ID1 var byte
Buffer1 var byte
Buffer2 var byte

PortA = %00100000 ' PortA All Off
PortB = %00000000 ' PortB All Off
PortC = %00000000 ' PortC All Off
PortD = %00000000 ' PortD All Off
PortE = %00000000 ' PortE All Off
PortF = %00000000 ' PortF All Off
PortG = %00000000 ' PortG All Off
TRISA = %00011111 ' Inputs = 1, Outputs = 0
TRISB = %11111111 ' Inputs = 1, Outputs = 0
TRISC = %10000010 ' Inputs = 1, Outputs = 0
TRISD = %11111111 ' Inputs = 1, Outputs = 0
TRISE = %11111111 ' Inputs = 1, Outputs = 0
TRISF = %11111111 ' Inputs = 1, Outputs = 0
TRISG = %00000000 ' Inputs = 1, Outputs = 0 RG(7-5) NA
ADCON0 = %00000001 ' A/D Enabled, Channel 0 (AN0)
ADCON1 = %00001110 ' AN0 Analog Input (Rest Digital I/O)
ADCON2.7 = 1 ' Right Justify 10 Bit Word
CMCON = %00000111 ' Both Comparators Disabled
INTCON2.7 = 0 ' Turn ON PortB Pull-Ups
T1CON = %00110100 ' 1:8 Prescale
'************************************************* ***************

Awake = 0

Buffer2 = %11111111 'wifi heartbeat
'************************************************* **********************

Main:

hserin 200,TimeOut,[dec2 ID1, skip 1, bin8 Buffer1]
TimeOut:
'************************************************* **********************
ID1 = ID1 + 1
if ID1 = 99 then ID1 = 0

Awake = Awake + 1
if Awake > 50 then 'sends out
Awake = 0 ' reset count
toggle LED1
gosub Heartbeat
endif

goto Main

Heartbeat: 'periodically send out current status to keep wifi alive
Toggle LED2 ' toggle on Beep to see frequency
Hserout ["y"]
HSEROUT [dec2 ID1, " "] ' Decimal 2 Characters, Space
HSEROUT [bin8 Buffer2] ' Binary 8 Characters, Space
Hserout ["z"]
return




'************************************************* ***************
'* Name : Heartbeat Interrupt.PBP *
'* : All Rights Reserved *
'* Date : 10-29-15 *
'* Version : 1.0 *
'************************************************* ***************

#config
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _OSC_XT_1H
__CONFIG _CONFIG2L, _BOR_ON_2L & _BORV_27_2L & _PWRT_ON_2L
__CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
__CONFIG _CONFIG3H, _CCP2MUX_OFF_3H
__CONFIG _CONFIG4L, _LVP_OFF_4L
#endconfig

INCLUDE "DT_INTS-18.bas" ; Base Interrupt System
INCLUDE "ReEnterPBP-18.bas" ; Include if using PBP interrupts
INCLUDE "MODEDEFS.BAS" ' Include Shiftin/out modes
'INCLUDE "Elapsed_INT-18.bas" ; Elapsed Timer Routines

'GOSUB ResetTime ; Reset Time to 0d-00:00:00.00
'GOSUB StartTimer ; Start the Elapsed Timer

CLEAR

DEFINE ADC_BITS 10 ' 10 Bit Resolution
DEFINE ADC_CLOCK 3 ' Internal RC A/D Oscillator
DEFINE ADC_SAMPLEUS 50 ' Delay before A/D Conversion
DEFINE OSC 4 ' 4 MHz Internal Oscillator
DEFINE LOADER_USED 1 '
DEFINE HSER_RCSTA 90h ' Serial Input Enabled
DEFINE HSER_TXSTA 24h ' Serial Output Enabled (High Speed)
DEFINE HSER_BAUD 9600 ' Serial Baud Rate (9600 BPS)
DEFINE HSER_CLOERR 1 ' automatic clear overrun error

D CON 10 ' Divide by D (10 for 4MHz, 2 for 20MHz)
'

'************************************************* *****************************
Awake var byte ' variable for counting to keep unit alive on network
Awake1 var byte ' variable for counting to keep unit alive on network
LED1 VAR PortG.0 ' Test LED
LED2 VAR PortG.4 ' Piezo Output
InBuffer1 VAR BYTE ' Input Buffer 1
InBuffer2 VAR BYTE ' Input Buffer 2
Buffer1 VAR BYTE ' Output Buffer 1
Buffer2 VAR BYTE ' Output Buffer 2
ID1 var byte
ID2 var byte
ID3 var byte
'************************************************* **********************
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler RX_INT, _serialin, PBP, no
endm
INT_CREATE ; Creates the interrupt processor
ENDASM

T0CON = %10010010 ; T0 = 16-bit, Prescaler 8
@ INT_ENABLE RX_INT ; enable external (INT) interrupts
'************************************************* **********************
PortA = %00100000 ' PortA All Off (Rx Enabled/RF Switch = Receive)
PortB = %00000000 ' PortB All Off
PortC = %00000000 ' PortC All Off
PortD = %00000000 ' PortD All Off
PortE = %00000000 ' PortE All Off
PortF = %00000000 ' PortF All Off
PortG = %00000000 ' PortG All Off
TRISA = %00011111 ' Inputs = 1, Outputs = 0
TRISB = %11111111 ' Inputs = 1, Outputs = 0
TRISC = %10000010 ' Inputs = 1, Outputs = 0
TRISD = %11111111 ' Inputs = 1, Outputs = 0
TRISE = %11111111 ' Inputs = 1, Outputs = 0
TRISF = %11111111 ' Inputs = 1, Outputs = 0
TRISG = %00000000 ' Inputs = 1, Outputs = 0
ADCON0 = %00000001 ' A/D Enabled, Channel 0 (AN0)
ADCON1 = %00001111 ' AN0 Analog Input (Rest Digital I/O)
ADCON2.7 = 1 ' Right Justify 10 Bit Word
CMCON = %00000111 ' Both Comparators Disabled
INTCON2.7 = 0 ' Turn ON PortB Pull-Ups
T1CON = %00110100 ' 1:8 Prescale, T1OSCEN Off (524.288mS)
'************************************************* *****************************
Awake = 0
Buffer2 = %11111111 'wifi heartbeat
'************************************************* **********************
Main:

ID1 = ID1 + 1
if ID1 = 99 then ID1 = 0

Awake = Awake + 1
if Awake > 50 then 'sends out
Awake = 0 ' reset count
toggle LED1
'INTCON.6 = 0 'Interrupt 0=OFF, 1=ON
gosub Heartbeat
'INTCON.6 = 1 'Interrupt 0=OFF, 1=ON
endif

goto Main

Heartbeat: 'periodically send out current status to keep wifi alive
Toggle LED2 ' toggle on Beep to see frequency
Hserout ["y"]
HSEROUT [dec2 ID1, " "] ' Decimal 2 Characters, Space
HSEROUT [bin8 Buffer2] ' Binary 8 Characters, Space
Hserout ["z"]
return

serialin:
hserin [dec2 ID1, skip 1, bin8 Buffer1]
'hserin 2,NoSignal,[dec2 ID1, skip 1, bin8 Buffer1]

@ INT_RETURN
'NoSignal:
'@ INT_RETURN


Thanks,
Hylan